介绍
- 通过按键输入学号,并滚动显示:
电路功能描述:通过Ego1上的按键输入自己的学号(10位11进制数,包括U),并存储在32位的寄存器中;10位10进制数输入完成后,实现类似实验3.1中的滚动显示效果。
除了要求实现上述功能外,还包括如下具体实现上的要求:
- 整个电路具有复位功能;
- 8个数码管中,4个数码管用于输入数据后的循环显示,另外4个用于显示当前正在输入的数据。
- 输入过程可控、实时可视:
- 用按键或者开关控制输入开始和结束,输入开始后用于循环显示的4个数码管停止循环显示,用于显示输入数据的4个数码管开始显示输入数据;输入结束后用于循环显示的4个数码管开始循环显示输入的学号,用于显示输入数据的4个数码管停止显示输入数据。
- 用按键切换当前要输入的数据位,切换结果通过用于显示输入数据的4个数码管展示出来,即用户能够通过显示输入数据的4个数码管看出来当前正在输入的是哪一位10进制数。
- 输入数字的时候进行按键消抖(关于按键防抖的原理,请参考本实验手册的“5.1 实验3.2 相关说明”部分);
- 设计具有开放性,下图仅仅为参考的一种实现效果,不作强求实现一样的效果。
4、实验系统设计
(1)系统输入输出信号定义
module top(
input clk100mhz,//系统时钟
input clr,//清零
input right,//右键
input left,//左键
input up,//上键
input down,//下键
input enter,//确认键
output [3:0] pos1,//输入数码管选择
output [3:0] pos2,//输出数码管选择
output [7:0] seg1,//输入数码管显示
output [7:0] seg2//输出数码管显示
);
(2)系统行为描述
//共有4个模块,对应4个文件:
// clkDiv.v
// GPU.v
// segMsg.v
// top.v
// GPU通过dataBus1和dataBus2与segMsg1和segMsg2连接,用于传输显示的数据
// 传输速度为6hz,而数码管显示的速度为190hz,所以需要一个分频模块
// segMsg1和segMsg2通过pos1和pos2与top连接,用于选择数码管并显示
// top通过clk100mhz与clkDiv连接,用于提供系统时钟,转换为190hz和6hz的时钟
// top通过clr与GPU和segMsg1连接,用于清零
// top通过right、left、up、down、enter与Pushin连接,按键消抖
// 并排除多个按键一起按的情况
// 再将数据right、left、up、down、enter传给GPU
(3)系统级电路结构设计图
5、实现
(1)顶层模块RTL电路结构图及说明
(2)clkDiv RTL电路
(3)Pushin RTL电路结构
(4)segMsg RTL电路结构
(5)GPU RTL电路结构
6、仿真验证
(1)顶层模块测试方案设计说明
//由于直接模拟的话,时间太长,所以将时间缩短
//具体可以看clkDiv.v中的注释
//模拟了多个按键的情况
//模拟了按键消抖
顶层模块仿真结果及说明
模拟了众多情况,包括按键防抖,边界情况,保证了模块的正常使用,具体可以看top_tb.vcd文件
代码
top模块:top.v
// 这是顶层模块
//共有4个模块,对应4个文件:
// clkDiv.v
// GPU.v
// segMsg.v
// top.v
// GPU通过dataBus1和dataBus2与segMsg1和segMsg2连接,用于传输显示的数据
// 传输速度为6hz,而数码管显示的速度为190hz,所以需要一个分频模块
// segMsg1和segMsg2通过pos1和po