基于Quartus II开发平台,采用verilog硬件描述语言设计一款电子时钟,该时钟可实现一分钟的计时,精确到秒级,并由实验箱中的数码管显示对应的分、秒等信息,要求有复位及使能功能。
1.方案设计
通过数码管显示时间,对于所使用的开发板,我初步构思了两种方式。
一是通过 mode 0,利用译码器来实现数码管的显示;
二是通过 mode 6,使用7位数码管的断码表来实现数码管显示。
2.代码编写
为了优化代码结构,我构建了一个function,使用 case 语句来实现数据显示的选择。其优点是可以通过更改 case 内的赋值条件,便于实现mode 0和mode 6的切换。
主要内容:function的编写
由于之前做过7位数码管显示的实验,所以初次使用的是7位数码管显示。
在always块内使用的是常见的if判断语句进行条件判断(包括使能和复位,以及时间的条件),在这里不进行过多描述,相关内容请查看工程文件。
为避免代码出现逻辑错误,我在代码编写完成,编译无误后,进行了仿真分析,然后依据开发板的引脚描述图进行引脚的配置,最终将程序下载到开发板上。
3.实验结果:
1.仿真分析
可以看到,当EA=0时,时间不在变化,保持原有状态;当EA=1时,时间在原有状态下继续计时,其中num1表示秒的个位,num2表示秒的十位,num3表示分的个位。当RST=0时,不进行复位;当RST=1时,进行复位。
符合实验目的和实验要求。
2.上板效果
Mode 6 模式下的效果:
首先根据引脚对照表进行引脚配置,clk选取的是clk0,使用的是1Mhz
根据引脚对照表,在配置好引脚后,将程序进行烧录
Mode 6 下的展示图片
Mode 0 模式下的效果:
要改成Mode 0 ,首先将function进行修改,然后将用于数码管显示的输出改为4位二进制。(因为mode 0 使用了译码器,只需要4位便可以显示0-9)
然后再次根据引脚对照表进行引脚配置,clk依旧选取的是clk0,使用的是1Mhz
然后发现效果和预期并不理想,显示数据不是从0-9;观察分析后发现,
是IO口配置有误,高位应该配置低位的引脚,更改后达成效果。
Mode 0下的展示图片