文档详情

EDA数字时钟设计.doc

发布:2017-09-15约9.65千字共22页下载文档
文本预览下载声明
项目名称:数字时钟设计(必做) 秒表设计(选做) 数字时钟设计 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
显示全部
相似文档