基于FPGA的数字钟设计
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
基于FPGA的多功能数字钟
一、设计题目
基于Xilinx FPGA的多功能数字钟设计
二、设计目的
1.掌握可编程逻辑器件的应用开发技术
——设计输入、编译、仿真和器件编程;
2.熟悉一种EDA软件使用;
3.掌握Verilog设计方法;
4.掌握分模块分层次的设计方法;
5.用Verilog完成一个多功能数字钟设计;
6.学会FPGA的仿真。
三、设计内容
设计实验项目九多功能电子钟
✧功能要求:
利用实验板设计实现一个能显示时分秒的多功能电子钟,具体要求为:
基本功能:
1)准确计时,以数字形式显示时、分、秒,可通过按键选择指示当前显示时间范围模
式;
2)计时时间范围 00:00:00-23:59:59
3)可实现校正时间功能;
4)可通过实现时钟复位功能:00:00:00
扩展功能:
1)定时报:时间自定(不要求改变),闹1分钟(1kHz)---利用实验板LED或外接电路
实现。
2)仿广播电台正点报时:XX:59:[51,53,55,57(500Hz);59(1kHz)] ---利用实验板LED
或外接电路实现。
3)报整点时数:XX:00:[00.5-XX.5](1kHz),自动、手动---利用实验板LED或外接电
路实现。
4)手动输入校时;
5)手动输入定时闹钟;
6)万年历;
7)其他扩展功能;
✧设计步骤与要求:
1)计算并说明采用Basys2实验板时钟50MHz实现系统功能的基本原理。
2)在Xilinx ISE13.1 软件中,利用层次化方法,设计实现模一百计数及显示的电
路系统,设计模块间的连接调用关系,编写并输入所设计的源程序文件。
3)对源程序进行编译及仿真分析(注意合理设置,以便能够在验证逻辑的基础上尽快
得出仿真结果)。
4)输入管脚约束文件,对设计项目进行编译与逻辑综合,生成下载所需.bit类型文
件。
5)在Basys2实验板上下载所生成的.bit文件,观察验证所设计的电路功能。
四、总体设计思路
主体分为分频模块,正常时间模块(包含两个模60计数器和一个模24计数器子模块),闹钟模块(分为一个模60计数器模块,一个模24计数器模块,四个比较器模块),电台报时模块,数码管显示模块(分为模式选择模块,片选信号及扫描程序模块,和译码模块)。将各模块连接好各接线口即得到数字钟顶层模块complete.sch。
五、各模块设计及源代码
1.分频模块
分频模块要将50MHz的时钟信号分成三个分别为1Hz,500Hz,1kHz的三个脉冲信号,设置三个计数器,在三个频率信号分别对应的延时时间进行翻转,就可以得到三个不同的脉冲信号。源代码如下:
//freq.v
module freq(clk,_1Hz,_500Hz,_1kHz);
input clk;
output _1Hz,_500Hz,_1kHz;
reg _1Hz=0,_500Hz=0,_1kHz=0;
reg [24:0] cnt1=0,cnt2=0,cnt3=0;
always @(posedge clk)
begin
if (cnt1<25'd2*******)
//if (cnt1<25'd249)
//做test仿真时让变化更快
cnt1<=cnt1+1;//未达到计数时间计数器加一
else
begin
_1Hz<=~_1Hz;//达到计时时间,信号翻转且计数器归零
cnt1<=0;
end
end
always @(posedge clk)
begin
if (cnt2<25'd49999)
//if(cnt2<25'd49)
cnt2<=cnt2+1;
else
begin
_500Hz<=~_500Hz;
cnt2<=0;
end
end
always @(posedge clk)
begin
if (cnt3<25'd24999)
//if (cnt3<25'd25)
cnt3<=cnt3+1;
else
begin
_1kHz<=~_1kHz;
cnt3<=0;
end
end
endmodule
2.时钟正常显示模块
正常显示模块分为时分秒三个子模块,分别对应一个模24计数器和两个模60计数器。模24计数器和模60计数器设计都BCD码来表示时分秒的值,每个分为高位和低位,均对应一个十进制的数。对模24计数器,每个脉冲信号来临时当低位小于9时加一;等于9时高位加一且低位置零;且高位小于3,低位小于9,超过时高低位均置零;当高位等于2时,低位只能到3,同时复位nCR低电平时高低位均置零。同理可得模60计数器的设计。根据这个思路,得到模24计数器源代码如下:
//counter24.v
module counter24(CntH,CntL,nCR,EN,CP);
input nCR,EN,CP;
output [3:0] CntH,CntL;//分别为高位和低位
reg [3:0] CntH,CntL;