EDA数字时钟设计.doc
文本预览下载声明
项目名称:数字时钟设计(必做)
秒表设计(选做)
数字时钟设计
1.1实验要求:
基础部分:用同步时序电路设计实现时、分、秒计数,并在数码管上正确显示。
发挥部分:
(1)可以按键清零;
(2)支持年月日显示功能,用按键进行年月日和时分秒间显示切换;
(3)可对显示内容进行修改,用按键键值代替显示内容,按键键值可自行定义。
1.2实验原理
1.2.1分频电路设计
由于试验箱自带的晶振的频率为50MHz,而需要提供给走时电路的时钟频率为1MHz,故需将50MHz进行分频。设置一个累加器count,每到达一个系统时钟(50MHz)的时钟上升沿count加1当;count加到24 时将clockall取反,即可得到频率为1MHz的时钟信号,其他频率的时钟信号可用同样的方法产生。
always@(posedge clock)
begin
if(count==24)
begin
clockall=~clockall;
count=0;
end
else
count=count+1;
end
1.2.2基本走时电路设计:
设置三个寄存器变量hour , sec , min,每当1MHz的时钟的上升沿到来时count加1,当count加到1百万时,sec加1;当sec要加到60时min加1,同时sec复位为0;当min要加到60时hour加1,同时min复位为0;当hour要加到24时hour,min,sec同时复位为0,同时日期(day)加1(即开始新的一天)。这里我们用来计时的变量是s,m,h是三个中间变量,是用作与其他功能衔接用的。
reg [6:0] sec=7d0,min=7d0,hour=7d0;
reg [6:0] s=7d0,m=7d0,h=7d0;
always@(posedge clockall)
begin
count=count+20d1;
if(count==20d1000000)
begin
count=20d0;
s=s+7d1;
if(s==7d60)
begin
s=7d0;
m=m+7d1;
if(m==7d60)
begin
m=7d0;
h=h+7d1;
if(h==7d24)
begin
h=7d0;
day=day+5d1;
end
end
end
end
end
1.2.3万年历电路设计
和走时电路类似,万年历中设置三个寄存器变量year,month,day.这里要注意的问题主要是由于各个月份的天数有31天、30天,而且二月在平年时28天,而闰年是29天,故要分别设置不同的情况,如下:
case(month)
2:begin
if(year%100?year%400:year%4)
begin
if(day==5d29)
begin
month=month+4d1;
day=5d1;
end
end
else begin
if(day==5d30)
begin
month=month+4d1;
day=5d1;
end
end
end
1,3,5,7,8,10:begin
if(day==5d32)
begin
month=month+4d1;
day=5d1;
end
end
4,6,9:begin
if(day==5d31)
begin
month=month+4d1;
day=5d1;
end
end
12:begin
if(day==5d32)
begin
day=5d1;
month=4d1;
year=year+13d1;
end
end
endcase
1.2.4数码管显示设计
在所给实验箱的LED_KEY模块中共有8个7段数码管,位线和段码线公用FPGA的引脚,编写显示驱动程序时要分别驱动位线和段码线,通过分时选通和所存各自的驱动芯片HC573来实现。现以在第一个数码管显示“1”为例,介绍数码管的实现原理:首先通过片选信号SEG
显示全部