当前位置:文档之家› 基于FPGA的VerilogHDL数字钟设计-

基于FPGA的VerilogHDL数字钟设计-

基于FPGA的Verilog HDL数字钟设计
专业班级姓名学号
一、实验目的
1.掌握可编程逻辑器件的应用开发技术——设计输入、编译、仿真和器件编程;
2.熟悉一种EDA软件使用;
3.掌握Verilog设计方法;
4.掌握分模块分层次的设计方法;
5.用Verilog完成一个多功能数字钟设计;
6.学会FPGA的仿真。

二、实验要求
✧功能要求:
利用实验板设计实现一个能显示时分秒的多功能电子钟,基本功能:
1)准确计时,以数字形式显示时、分、秒,可通过按键选择当前显示时间围模式;
2)计时时间围 00:00:00-23:59:59
3)可实现校正时间功能;
4)可通过实现时钟复位功能:00:00:00
扩展功能:
5)定时报:时间自定(不要求改变),闹1分钟(1kHz)---利用板上LED或外接电路实
现。

6)仿广播电台正点报时:XX:59:[51,53,55,57(500Hz);59(1kHz)] ---用板上LED或
外接
7)报整点时数:XX:00:[00.5-XX.5](1kHz),自动、手动---用板上LED或外接
8)手动输入校时;
9)手动输入定时闹钟;
10)万年历;
11)其他扩展功能;
✧设计步骤与要求:
1)计算并说明采用Basys2实验板时钟50MHz实现系统功能的基本原理。

2)在Xilinx ISE13.1 软件中,利用层次化方法,设计实现模一百计数及显示的电
路系统,设计模块间的连接调用关系,编写并输入所设计的源程序文件。

3)对源程序进行编译及仿真分析(注意合理设置,以便能够在验证逻辑的基础上尽快
得出仿真结果)。

4)输入管脚约束文件,对设计项目进行编译与逻辑综合,生成下载所需.bit文件。

5)在Basys2实验板上下载所生成的.bit文件,观察验证所设计的电路功能。

三、实验设计
功能说明:实现时钟,时间校时,闹铃定时,秒表计时等功能
1.时钟功能:完成分钟/小时的正确计数并显示;秒的显示用LED灯的闪烁做指示;
时钟利用4位数码管显示时分;
2.闹钟定时:实现定时提醒及定时报时,利用LED灯代替扬声器发出报时声音;
3.时钟校时:当认为时钟不准确时,可以分别对分钟和小时位的值进行调整;
4.秒表功能:利用4个数码管完成秒表显示:可以实现清零、暂停并记录时间等功能。

秒表利用4位数码管计数;
方案说明:本次设计由时钟模块和译码模块组成。

时钟模块中50MHz的系统时钟clk分频产生一个1Hz的使能控制信号enable,并以此产生1s的脉冲second_en以实现每秒计时,控制各个模式下的计数显示。

由模式控制信号选择当前数码管显示哪个状态:
mode=00,时钟常规显示状态,
mode=01,闹铃定时状态,
mode=10,时钟校时状态,
mode=11,秒表计时状态;
时钟:利用count,smin0,smin1,shour0,shour1的计数来实现,具体情况见程序;
校时:当turn=1时,调整分位smin1、smin0;当turn=0时,调整小时位shour1、shour0;闹铃:当turn=1时,调整分位amin1、amin0;当turn=0时,调整小时位ahour1、ahour0;秒表:当pause=0时,开始计时;当pause=1时,暂停。

四、实验代码
时钟模块
UCF文件
testbench
五、仿真
进入ISim仿真波形界面
(1)仿真,运行1ms,将波形结果调整为适合的大小。

(2)这时我们可以分别点开clock模块和display模块查看具体的信号变化是否正确。

我们先看clock模块。

(3)当mode = 00时,实现正常时钟显示功能。

在脉冲second_en到来时,count做计数加1,此时小时位是shour1,shour0,分钟位是smin1,smin0,将这几个相关信号在波形窗口中位置做个调整放到一起来查看。

当count计数到59时,分钟位smin0实现加1变化,由0变为1;此时结果是正确的。

(4)当mode =2’b01时,实现闹铃模块。

当turn=1时,调整分位amin1、amin0;当turn=0时,调整小时位ahour1、ahour0。

将相关信号放在一起查看,由图可知,当turn为低时,调整小时位,ahour0计数加1,计数到9后清零且ahour1加1;当turn为高时,调整分钟位,amin0计数加1,计数到9后清零且ahouu1加1。

结果显然是正确的。

(5)当mode = 2’b10时,实现校时功能。

当turn=1时,调整分位smin1、smin0;当turn=0时,调整小时位shour1、shour0。

将相关信号放在一起查看,由图可知,当turn为低时,调整小时位,shour0计数加1,计数到9后清零且shour1加1;当turn为高时,调整分钟位,smin0计数加1,计数到9后清零且shouu1加1。

结果显然是正确的。

(6)当mode = 2’b11时,实现秒表计时功能。

当pause=0时,开始计时;当pause=1时,暂停。

由图可知,当pause=0时,mmin0计数加1,计数到9后清零且mmin1加1;当pause=1时,此时暂停秒表,mmin0的值保持为2。

结果也是正确的。

(7)查看display模块。

此时是对之前得到的4位数码管的值进行译码并显示。

我们可以随机抓取发生变化的几个结果来看,比如看到625265000ns处的时间点。

如下图所示:当扫描选择信号ctr为“1011”时,此时是显示数码管的第二位即h0,它的值为5,temp为“0101”,所对应的译码值为q=“0100100”,结果是正确的。

相关主题