用Verilog语言编写的多功能数字钟
用Verilog语言编写的多功能数字钟

《数字电子技术课程设计》报告专业班级:姓名:学号:设计日期:一.设计题目多功能数字钟电路设计二.设计任务及要求多功能数字钟应该具有的功能有:显示时—分—秒、整点报时、小时和分钟可调等基本功能。
整个钟表的工作应该是在1Hz信号的作用下进行,这样每来一个时钟信号,秒增加1秒,当秒从59秒跳转到00秒时,分钟增加1分,同时当分钟从59分跳转到00分时,小时增加1小时,小时的范围为0~23时。
在实验中为了显示的方便,由于分钟和秒钟显示的范围都是从0~59,所以可以用一个3位的二进制码显示十位,用一个四位的二进制码(BCD 码)显示个位,对于小时因为他的范围是从0~23,所以可以用一个2位的二进制码显示十位,用一个4位的二进制码(BCD码)显示个位。
实验中由于七段码管是扫描的方式显示,所以虽然时钟需要的是1Hz 时钟信号,但是扫描需要一个比较高频率的信号,因此为了得到准确的1Hz 信号,必须对输入的系统时钟50Mhz进行分频。
对于整点报时功能,本实验设计的是当进行正点的倒计时5秒时,让LED来闪烁进行整点报时的提示。
调整时间的按键用按键模块的S1和S2,S1调节小时,每按下一次,小时增加一个小时;S2调整分钟,每按下一次,分钟增加一分钟。
另外用S8按键作为系统时钟复位,复位后全部显示00—00—00。
管脚分配如下表:三.基于Verilog HDL语言的电路设计、仿真与综合(一)顶层模块本程序采用结构化设计方法,将其分为彼此独立又有一定联系的三个模块,如图1所示:LocationPIN_R16Option Value VCC S1INPUT Location PIN_P14Option Value VCC S2INPUT Location PIN_J3Option Value VCCCPINPUT Location PIN_M4Location PIN_F3Location PIN_F4Option Value SEL[2..0]OUTPUT Location PIN_L14Option Value LEDOUTPUTLocation PIN_N4Location PIN_G4Location PIN_H4Location PIN_L5Location PIN_L4Location PIN_K4Location PIN_K5Option Value LEDAG[6..0]OUTPUTCP CPoutf enpininst1CPoutS1S2RETHour[5..0]Minute[5..0]Second[5..0]LEDkongzhiqi inst2VCCRETINPUT CPout Hour[5..0]Minute[5..0]Second[5..0]SEL[2..0]LEDAG[6..0]xianshi inst图1:顶层结构框图(二)子模块 1.分频器分频器的作用是对50Mhz 的系统时钟信号进行分频,得到频率为1000hz 的信号,作为显示器的输入信号。
VerilogHDL语言数字时钟

VerilogHDL语言数字时钟EDA与数字系统设计报告实验名称:带有设臵时间功能和闹钟功能的数字钟一、设计内容和要求实验要求使用Verilog HDL进行多功能时钟的设计具体要求如下:1.能将基本的小时、分钟、及秒钟显示在数码管上2.能利用拨码开关进行时间的校正3.具有整点报时和闹钟的功能二、设计原理1.工作原理多功能数字钟系统共包括三个模块,即分频器模块、计数器模块和显示译码模块。
多功能数字钟的功能可以从整体上分为三类,分别是正常计时、时钟校对和闹钟设臵,所以考虑在系统中设臵一个模式控制信号mode。
模式控制信号对应一个按键,每按一次按键相当于工作模式进行一次变换,多次按下则数字钟将在正常计时、时间校对和闹钟设臵三个工作模式下依次循环。
在设计中,时钟校对和闹钟设臵工作模式都需要对时间进行设臵,通常是对小时和分钟进行设臵,所以需要在系统中设臵一个时间设臵信号set,对应一个按键,每按一次相当于在小时设臵和分钟设臵之间进行转换。
时间设臵时,分钟和小时计时单位之间互相独立,不存在进位关系。
同时设臵一个时间调整信号accum,每按一次与accum对应的按键,相当于对需要调整的分钟或小时的数字进行加1操作。
数字钟的计时输出信号时必不可少的,用hour,min和sec信号分别表示需要显示的小时、分钟和秒钟的计时结果,上述计时结果将通过译码显示模块进行译码后,连接到外部的七段数码显示器。
在带有闹钟设臵功能的数字钟中,闹钟输出信号也是必不可少的,到达到闹钟设臵的时间后,要向外部扬声器发送一个闹铃信号,设臵alert。
另外,我们还提供了闹钟铃声信号voice,当voice为0的时候,闹钟处于静音状态下,即使时间达到闹钟设定的时间也不会发声,当voice为1的时候,可以正常闹铃,voice信号对应一个拨码开关。
本设计中的小时、分钟和秒钟的计时结果采用BCD码表示方法。
采用这种表示方法便于对数结果的高位和低位分别进行译码。
用Verilog语言编写的多功能数字钟

这次的闹钟电路设计和多功能数字钟有一些相似的地方,不同在于整体构思和细
节上要求的差异。
构思根据要求采用的是状态机设计方法。从一个状态进入另一个状态最适合这个
设计了。细节上和数字钟也有很大的差异。中间的控制逻辑有时候需要反馈。前
后都是有联系的,并不是独立存在的。
本次设计基本上完成的所以的要求,但是由于时间紧急,一些细节并不是很完美,
分频器的作用是对 50Mhz 的系统时钟信号进行分频,得到频率为 1hz 的信号,
作为时钟的输入信号。
2
2.控制器和计数器 控制器的作用是,调整小时和分钟的值,并能实现清零功能。计数器的
作用是实现分钟和秒钟满 60 进 1,小时则由 23 跳到 00。当到达 59 分 55 秒的时 候,LED 灯会闪烁来进行报时。
end 2:
begin state<=2; s=1;
end 3:
begin s=0; if(k1==0) //时调整
7
begin
if(nz_h_l==3)
begin
nz_h_l=0;
if(nz_h_h==2)nz_h_h=0;
else nz_h_h=nz_h_h+1;
end
else nz_h_l=nz_h_l+1;
end
else if(k3==0) finish=1;
//设置完成
else if(k4==0) spker_en=1; //停止声响
end
8
4: begin s=0; if(k4==0) begin on_off<=!on_off;state=0;end end
endcase end end endmodule 3.显示器 显示器的作用是将时:分的值在数码管上依次显示出来。从分频器输出的 1Khz 的信号作为数码管的扫描信号。SEL 表示 6 个数码管选择位,它的取值表示八个 数码管,从左至右依次是 111~000。seg 表示七段数码管,它的取值决定特定位 数上显示的数字。
基于VerilogHDL语言多功能数字钟设计毕业设计论文

多功能数字钟NJUST多功能数字钟设计基于VerilogHDL语言学院:电子工程与光电技术学院学号:************姓名:指导教师:2014年11月21日星期五摘要:基于FPGA平台,运用Verilog语言编写设计一多功能数字钟,包括基本的时钟,校时校分,整点报时功能。
扩展闹钟,秒表,万年历,键盘输入功能。
Abstract:FPGA-based platform, using Verilog language to design amulti-functional digital clock, including basic function of clock, school hours, school minutes,the whole point timekeeping. And extended function of alarm clock, stopwatch, calendar, keyboard input.关键词:多功能数字钟,可编程逻辑器件,EDA设计,VerilogKeywords:multi-functional digital clock, FPGA, EDA disign, Verilog目录1 设计要求 (2)2 设计方案选择及思路分析 (2)3 各子模块设计原理和分析 (3)3.1 分频模块 (3)3.2 时分秒模块 (5)3.3 时分调整模块 (6)3.4 报时模块 (7)3.5 扫描显示模块 (8)3.6 秒表模块 (9)3.7 闹钟模块 (10)3.8 万年历模块 (12)3.9 键盘扫描模块 (13)4 调试仿真 (15)5 编程下载 (16)6 结论 (17)7 参考文献 (17)8 实验感想 (17)9 源代码 (18)11 设计要求基于FPGA可编程逻辑器件,用quatusII软件设计一个多功能数字钟,其基本要求如下:1.有基础的计时显示功能,即时、分、秒显示在6个七段管上2.K0,K1,K2,K3分别为系统使能(暂停),时钟清零,校时,校分开关。
用Verilog语言编写的多功能数字钟

《数字电子技术课程设计》报告专业班级:姓名:学号:设计日期:一.设计题目多功能数字钟电路设计二.设计任务及要求多功能数字钟应该具有的功能有:显示时—分—秒、整点报时、小时和分钟可调等基本功能。
整个钟表的工作应该是在1Hz信号的作用下进行,这样每来一个时钟信号,秒增加1秒,当秒从59秒跳转到00秒时,分钟增加1分,同时当分钟从59分跳转到00分时,小时增加1小时,小时的范围为0~23时。
在实验中为了显示的方便,由于分钟和秒钟显示的范围都是从0~59,所以可以用一个3位的二进制码显示十位,用一个四位的二进制码(BCD 码)显示个位,对于小时因为他的范围是从0~23,所以可以用一个2位的二进制码显示十位,用一个4位的二进制码(BCD码)显示个位。
实验中由于七段码管是扫描的方式显示,所以虽然时钟需要的是1Hz 时钟信号,但是扫描需要一个比较高频率的信号,因此为了得到准确的1Hz 信号,必须对输入的系统时钟50Mhz进行分频。
对于整点报时功能,本实验设计的是当进行正点的倒计时5秒时,让LED来闪烁进行整点报时的提示。
调整时间的按键用按键模块的S1和S2,S1调节小时,每按下一次,小时增加一个小时;S2调整分钟,每按下一次,分钟增加一分钟。
另外用S8按键作为系统时钟复位,复位后全部显示00—00—00。
管脚分配如下表:三.基于Verilog HDL语言的电路设计、仿真与综合(一)顶层模块本程序采用结构化设计方法,将其分为彼此独立又有一定联系的三个模块,如图1所示:LocationPIN_R16Option Value VCC S1INPUT Location PIN_P14Option Value VCC S2INPUT Location PIN_J3Option Value VCCCPINPUT Location PIN_M4Location PIN_F3Location PIN_F4Option Value SEL[2..0]OUTPUT Location PIN_L14Option Value LEDOUTPUTLocation PIN_N4Location PIN_G4Location PIN_H4Location PIN_L5Location PIN_L4Location PIN_K4Location PIN_K5Option Value LEDAG[6..0]OUTPUTCP CPoutf enpininst1CPoutS1S2RETHour[5..0]Minute[5..0]Second[5..0]LEDkongzhiqi inst2VCCRETINPUT CPout Hour[5..0]Minute[5..0]Second[5..0]SEL[2..0]LEDAG[6..0]xianshi inst图1:顶层结构框图(二)子模块 1.分频器分频器的作用是对50Mhz 的系统时钟信号进行分频,得到频率为1000hz 的信号,作为显示器的输入信号。
基于VerilogHDL设计的多功能数字钟

3' b101: Disp_Temp=4' b1010;
#(60000*HALF_PERIOD) S1_in=1;
3' b110: Disp_Temp=SECH;
end
3' b111: Disp_Temp=SECL;
//产 生 调 节 分 钟 信 号
endcase
initial
end
begin
always@(Disp_Temp) //显示转换
新
图 1 多功能数字钟端口功能图
Clk: 10KHZ 的系统基准时钟输入。作为七段码管 扫描频率。将其 10000 分频可得到 1HZ 的数字钟工作 频率。将其 8 分频和 4 分频分别分时送入扬声器, 使 其产生嘀( 1.25KHZ) 、嗒( 2.5KHZ) 的报时声。
Rst: 系统复位信号, 低电平有效。复位后显示 00- 00- 00。
Abstr act: In this paper, the process of designing multifunctional digital clock by the Verilog HDL top- down design method is pre- sented, which has shown the readability, portability and easily understanding of Verilog HDL as a hard description language. Circuit synthesis and simulation are performed by Altera QuartusⅡ 4.1 and ModelSim SE 6.0. The program can be used in the truly digital clock display by downloading to the FPGA chip. Keywor ds: Ver ilog HDL; har dwar e descr iption language; FPGA
多功能时钟设计verilog

可编程逻辑器件及其应用设计报告姓名:wangkeqin院系:电信学部学号:**********日期:2012-04-09多功能数字钟设计一、设计内容及要求➢用Verilog HDL设计一个多功能数字钟➢基本功能描述:1.时钟功能:包括时、分、秒的显示;2.定时与闹钟功能:能在设定的时间发出闹铃音;3.校时功能:能非常方便地对小时、分钟和秒进行手动调整以校准时间;4.整点报时功能:每逢整点,产生“嘀嘀嘀嘀--嘟”,四短一长的报时音。
二、仿真环境说明用Verilog在Altera公司的Quartus2软件环境下编写RTL代码,并进行综合,行为仿真。
时序仿真采用Mentor公司旗下的ModelsimSE-6.1f软件。
Modelsim 软件是业界最著名的波形仿真软件,仿真效果比Quartus2下编写波形文件仿真效果要好很多,而且仿真相当简单,只不过要编写测试向量(testbench),有点麻烦。
三、系统框图与说明Figure1系统框图1.数字钟电路系统由主体电路和扩展电路两大部分所组成。
2. 秒计数器计到59后,下一秒到来时,秒计时器满60,接着清零后向分计数器进位;同样分计数器计满60后向小时计数器进位;小时计数器按照“24进制”规律计数,每当小时计到23小时时,当分计数和秒计数分别59,59时,即到23小时59分,59秒时候,时分秒全部清零,从新开始计数。
3. 计数器的输出经译码器送显示器,显示器用6个数码管表示,每两个数码管分别表示小时,分钟,秒钟。
每个数码管用BCD码表示。
四、设计步骤(一)列写多功能数字钟设计结构图(二)在QuartusП软件下编写Verilog代码(三)在QuartusП环境下进行综合Figure2综合结果从Fig.2可以看出,该设计采用Altera公司CycloneП系列下的EP2C35F672C8芯片。
从图中可以看出,采用了162个逻辑单元,其中组合逻辑147个,总共的寄存器数为102个。
用verilog-HDL多功能数字钟

用verilog-HDL多功能数字钟Verilog HDL实验报告基于Verilog HDL语言的多功能数字钟设计一、试验目的设计一个有如下功能的数字钟:(1)计时功能:包括时、分、秒。
(2)定时与闹钟功能:能在所设定的时间发出铃音。
(3)校时功能:对小时、分钟和秒钟进行手动校时。
(4)整点报时功能:每到整点能够发出“嘀嘀嘀嘀嘟”四短一长的报时。
二、试验原理ALERT HOUR[7..0]MIN[7..0]SEC[7..0]LD_ALERT LD_HOUR LD_MINCLK CLK_1K MODE TURN CHANGEclockCLK CLK_1K MODE TURN CHANGEALERTHOUR[7..0]MIN[7..0]SEC[7..0]LD_ALERT LD_HOUR LD_MIN多功能数字钟端口示意图数字钟设有五个输入端,分别为时钟输入(CLK )、模式(MODE )、产生声音的时钟信号(CLK_1K )、切换(TURN )和调时(CHANGE )键。
输出共七个,其中HOUR[7..0]、MIN[7..0]和SEC[7..0]采用BCD 计数方式,分别驱动2个数码管。
硬件电路原理图如下:三、试验内容1. 代码/*信号定义:clk: 标准时钟信号,其频率为4Hz;clk_1k:产生闹铃声、报时音的时钟信号,其频率为1024Hz;mode:功能控制信号;为0:计时功能;为1:闹钟功能;为2:手动校时功能;turn:接按键,在手动校时功能时,选择是调整小时还是分钟;若长时间按住改建,还可使秒信号清零,用于精确调时;change: 接按键,手动调整时,每按一次,计数器加1;如果长按,则连续快速加1,用于快速调时和定时;hour,min,sec:此三信号分别输出并显示时、分、秒信号,皆采用BCD码计数,分别驱动6个数码管显示时间;alert:输出到扬声器的信号,用于产生闹铃音和报时音;闹铃音为持续20秒的急促的“嘀嘀嘀”音,若按住“change”键,则可屏蔽该音;整点报时音为“嘀嘀嘀嘀嘟”四短一长音;LD_alert:接发光二极管,指示是否设置了闹钟功能;LD_hour:接发光二极管,指示当前调整的是小时信号;LD_min:接发光二极管,指示当前调整的是分钟信号*/moduleclock(clk,clk_1k,mode,change,turn,alert,hour,min,sec,LD_alert,LD_hour,LD_mi n);input clk,clk_1k,mode,change,turn;output alert,LD_alert,LD_hour,LD_min;output[7:0] hour,min,sec;reg[7:0] hour,min,sec,hour1,min1,sec1,ahour,amin;reg[1:0] m,fm,num1,num2,num3,num4;reg[1:0] loop1,loop2,loop3,loop4,sound;reg LD_hour,LD_min;reg clk_1Hz,clk_2Hz,minclk,hclk;reg alert1,alert2,ear;reg count1,count2,counta,countb;wire ct1,ct2,cta,ctb,m_clk,h_clk;always @(posedge clk)beginclk_2Hz<=~clk_2Hz;if(sound==3) begin sound<=0; ear<=1; end //ear信号用于产生或屏蔽声音else begin sound<=sound+1; ear<=0; endendalways @(posedge clk_2Hz) //由4Hz的输入时钟产生1Hz的时基信号clk_1Hz<=~clk_1Hz;always @(posedge mode) //mode信号控制系统在三种功能间转换begin if(m==2) m<=0; else m<=m+1; endalways @(posedge turn)fm<=~fm;always //产生count1,count2,counta,countb四个信号begincase(m)2:begin if(fm)begin count1<=change; {LD_min,LD_hour}<=2; endelsebegin counta<=change; {LD_min,LD_hour}<=1; end{count2,countb}<=0;end1:begin if(fm)begin count2<=change; {LD_min,LD_hour}<=2; endelsebegin countb<=change; {LD_min,LD_hour}<=1; end{count1,counta}<=2'b00;enddefault:{count1,count2,counta,countb,LD_min,LD_hour}<=0;endcaseendalways @(negedge clk) //如果长时间按下“change”键,则生成“num1”信号用于连续快速加1if(count2) beginif(loop2==3) num2<=1;elsebegin loop2<=loop2+1; num2<=0;endendelse begin loop2<=0; num2<=0; endalways @(negedge clk) //产生num2信号if(count1) beginif(loop3==3) num3<=1;elsebegin loop3<=loop3+1; num3<=0; endendelse begin loop3<=0; num3<=0; endalways @(negedge clk)if(counta) beginif(loop4==3) num4<=1;elsebegin loop4<=loop4+1; num4<=0; endendelse begin loop4<=0; num4<=0; endassign ct1=(num3&clk)|(!num3&m_clk); //ct1用于计时、校时中的分钟计数assign ct2=(num1&clk)|(!num1&count2); //ct2用于在定时状态下调整分钟信号assign cta=(num4&clk)|(!num4&h_clk); //cta用于计时、校时中的小时计数assign ctb=(num2&clk)|(!num2&countb); //ctb用于在定时状态下调整小时信号always @(posedge clk_1Hz) //秒计时和秒调整进程if(!(sec1^8'h59)|turn&(!m))beginsec1<=0;if(!(turn&(!m))) minclk<=1;end//按住“turn”按键一段时间,秒信号可清零,该功能用于手动精确调时else beginif(sec1[3:0]==4'b1001)begin sec1[3:0]<=4'b0000; sec1[7:4]<=sec1[7:4]+1; endelse sec1[3:0]<=sec1[3:0]+1; minclk<=0;endassign m_clk=minclk||count1;always @(posedge ct1) //分计时和分调整进程beginif(min1==8'h59) begin min1<=0; hclk<=1; endelse beginif(min1[3:0]==9)begin min1[3:0]<=0; min1[7:4]<=min1[7:4]+1; endelse min1[3:0]<=min1[3:0]+1; hclk<=0;endendassign h_clk=hclk||counta;always @(posedge cta) //小时计时和小时调整进程if(hour1==8'h23) hour1<=0;else if(hour1[3:0]==9)begin hour1[7:0]<=hour1[7:4]+1; hour1[3:0]<=0; endelse hour1[3:0]<=hour1[3:0]+1;always @(posedge ct2) //闹钟定时功能中的分钟调节进程if(amin==8'h59) amin<=0;else if(amin[3:0]==9)begin amin[3:0]<=0; amin[7:4]<=amin[7:4]+1; endelse amin[3:0]<=amin[3:0]+1;always @(posedge ctb) //闹钟定时功能中的小时调节进程if(ahour==8'h23) ahour<=0;else if(ahour[3:0]==9)begin ahour[3:0]<=0; ahour[7:4]<=ahour[7:4]+1; endelse ahour[3:0]<=ahour[3:0]+1;always //闹铃功能if((min1==amin)&&(hour1==ahour)&&(amin|ahour)&&(!change))//若按住“change”键不放,可屏蔽闹铃音if(sec1<8'h20) alert1<=1; //控制闹铃的时间长短else alert1<=0;else alert1<=0;always //时、分、秒的现实控制case(m)3'b00: begin hour<=hour1; min<=min1; sec<=sec1; end//计时状态下的时、分、秒显示3'b01: begin hour<=ahour; min<=amin; sec<=8'hzz; end//定时状态下的时、分、秒显示3'b10: begin hour<=hour1; min<=min1; sec<=8'hzz; end//校时状态下的时、分、秒显示endcaseassign LD_alert=(ahour|amin)?1:0; //指示是否进行了闹铃定时assign alert=((alert1)?clk_1k&clk:0)|alert2; //产生闹铃音或整点报时音always //产生整点报时信号alert2beginif((min1==8'h59)&&(sec1>8'h54)||(!(min1|sec1)))if(sec1>8'h54) alert2<=ear&clk_1k; //产生短音else alert2<=!ear&clk_1k; //产生长音else alert2<=0;endendmodule2. 仿真图四、小结及体会为了做多功能数字钟,我借了多本关于Verilog HDL的程序设计书。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
《数字电子技术课程设计》报告专业班级:姓名:学号:设计日期:一.设计题目多功能数字钟电路设计二.设计任务及要求多功能数字钟应该具有的功能有:显示时—分—秒、整点报时、小时和分钟可调等基本功能。
整个钟表的工作应该是在1Hz信号的作用下进行,这样每来一个时钟信号,秒增加1秒,当秒从59秒跳转到00秒时,分钟增加1分,同时当分钟从59分跳转到00分时,小时增加1小时,小时的范围为0~23时。
在实验中为了显示的方便,由于分钟和秒钟显示的范围都是从0~59,所以可以用一个3位的二进制码显示十位,用一个四位的二进制码(BCD 码)显示个位,对于小时因为他的范围是从0~23,所以可以用一个2位的二进制码显示十位,用一个4位的二进制码(BCD码)显示个位。
实验中由于七段码管是扫描的方式显示,所以虽然时钟需要的是1Hz 时钟信号,但是扫描需要一个比较高频率的信号,因此为了得到准确的1Hz 信号,必须对输入的系统时钟50Mhz进行分频。
对于整点报时功能,本实验设计的是当进行正点的倒计时5秒时,让LED来闪烁进行整点报时的提示。
调整时间的按键用按键模块的S1和S2,S1调节小时,每按下一次,小时增加一个小时;S2调整分钟,每按下一次,分钟增加一分钟。
另外用S8按键作为系统时钟复位,复位后全部显示00—00—00。
管脚分配如下表:三.基于Verilog HDL语言的电路设计、仿真与综合(一)顶层模块本程序采用结构化设计方法,将其分为彼此独立又有一定联系的三个模块,如图1所示:LocationPIN_R16Option Value VCC S1INPUT Location PIN_P14Option Value VCC S2INPUT Location PIN_J3Option Value VCCCPINPUT Location PIN_M4Location PIN_F3Location PIN_F4Option Value SEL[2..0]OUTPUT Location PIN_L14Option Value LEDOUTPUTLocation PIN_N4Location PIN_G4Location PIN_H4Location PIN_L5Location PIN_L4Location PIN_K4Location PIN_K5Option Value LEDAG[6..0]OUTPUTCP CPoutf enpininst1CPoutS1S2RETHour[5..0]Minute[5..0]Second[5..0]LEDkongzhiqi inst2VCCRETINPUT CPout Hour[5..0]Minute[5..0]Second[5..0]SEL[2..0]LEDAG[6..0]xianshi inst图1:顶层结构框图(二)子模块 1.分频器分频器的作用是对50Mhz 的系统时钟信号进行分频,得到频率为1000hz 的信号,作为显示器的输入信号。
CP CPoutf enpininst1VCCCPINPUTCPoutOUTPUT源程序如下:module fenpin(input CP,output CPout );reg CPout;reg [31:0] Cout; reg CP_En;always @(posedge CP ) //将50MHz 分频为1kHz begin Cout <= (Cout == 32'd50000) ? 32'd0 : (Cout + 32'd1); CP_En <= (Cout == 32'd50000) ? 1'd1 : 1'd0; CPout <= CP_En; end endmodule功能仿真波形如图2所示(以五分频为例):2.控制器和计数器控制器的作用是,调整小时和分钟的值,并能实现清零功能。
计数器的作用是实现分钟和秒钟满60进1,小时则由23跳到00。
当到达59分55秒的时候,LED灯会闪烁来进行报时。
因为控制器和计数器的驱动信号频率均为1Hz,故从分频器输出的信号进入控制器后,要进行二次分频,由1Khz变为1Hz。
源程序如下:module kongzhiqi( CPout,S1,S2,RET,Hour,Minute,Second,LED);input CPout,S1,S2,RET;output [5:0] Hour;output [5:0] Minute;output [5:0] Second;output LED;reg [5:0] Hour;reg [5:0] Minute;reg [5:0] Second;reg R1;reg R2,R8,LED;reg [10:0] Cout;reg Clk_En;always@(posedge CPout)beginif(S1==0)beginR1=1;endif(S2==0)beginR2=1;endif(RET==0)beginR8=1;endCout=(Cout==32'd1000)?32'd0:(Cout + 32'd1); Clk_En=(Cout==32'd1000)?1'd1:1'd0;if(Clk_En)beginif(R1==1)beginif(Hour<24)Hour=Hour+1;if(Hour==24)beginHour=0;endR1=0;endif(R2==1)beginif(Minute<60)Minute=Minute+1;if(Minute==60)beginMinute=0;if(Hour<24)Hour=Hour+1;if(Hour==24)beginHour=0;endendR2=0;endif(Second<60)Second=Second+1;if(Second==60)beginSecond=0;if(Minute<60)Minute=Minute+1;if(Minute==60)beginMinute=0;if(Hour<24)Hour=Hour+1;if(Hour==24)beginHour=0;endendendif((Minute==59)&&(Second>55))//整点倒计时beginif(LED==1)LED=0;elseLED=1;endelseLED=0;if(R8==1)//清零beginHour=0;Minute=0;Second=0;R8=0;endendendendmodule功能仿真波形如图3所示:3.显示器显示器的作用是将时—分—秒的值在数码管上依次显示出来。
从分频器输出的1Khz的信号作为数码管的扫描信号。
SEL 表示三个数码管选择位,它的取值表示八个数码管,从左至右依次是111~000。
LEDGA表示七段数码管,它的取值决定特定位数上显示的数字。
源程序如下:module xianshi( CPout,Hour,Minute,Second,SEL,LEDAG );input CPout;input Hour,Minute,Second;output SEL,LEDAG;reg [2:0] SEL;reg [6:0] Led;reg [3:0] shi1,ge1,shi2,ge2,shi3,ge3;always @(posedge CPout )beginshiwei1=Hour/10;gewei1=Hour%10;shiwei2=Minute/10;gewei2=Minute%10;shiwei3=Second/10;gewei3=Second%10;if(SEL==3'b110) //判断位选SEL的值,并将此位上的值输出到数码管case(shiwei1)4'b0000: Led = 7'b0111_111;4'b0001: Led = 7'b0000_110;4'b0010: Led = 7'b1011_011;4'b0011: Led = 7'b1001_111;4'b0100: Led = 7'b1100_110;4'b0110: Led = 7'b1111_101;4'b0111: Led = 7'b0000_111;4'b1000: Led = 7'b1111_111;4'b1001: Led = 7'b1101_111;default: Led = 7'b0000_000;endcaseif(SEL==3'b101)case(gewei1)4'b0000: Led = 7'b0111_111;4'b0001: Led = 7'b0000_110;4'b0010: Led = 7'b1011_011;4'b0011: Led = 7'b1001_111;4'b0100: Led = 7'b1100_110;4'b0101: Led = 7'b1101_101;4'b0110: Led = 7'b1111_101;4'b0111: Led = 7'b0000_111;4'b1000: Led = 7'b1111_111;4'b1001: Led = 7'b1101_111;default: Led = 7'b0000_000;endcaseif(SEL==3'b100)Led=7'b1000_000;if(SEL==3'b011)case(shiwei2)4'b0000: Led = 7'b0111_111;4'b0001: Led = 7'b0000_110;4'b0010: Led = 7'b1011_011;4'b0011: Led = 7'b1001_111;4'b0100: Led = 7'b1100_110;4'b0101: Led = 7'b1101_101;4'b0110: Led = 7'b1111_101;4'b0111: Led = 7'b0000_111;4'b1000: Led = 7'b1111_111;4'b1001: Led = 7'b1101_111;default: Led = 7'b0000_000;endcaseif(SEL==3'b010)case(gewei2)4'b0000: Led = 7'b0111_111;4'b0001: Led = 7'b0000_110;4'b0010: Led = 7'b1011_011;4'b0011: Led = 7'b1001_111;4'b0100: Led = 7'b1100_110;4'b0110: Led = 7'b1111_101;4'b0111: Led = 7'b0000_111;4'b1000: Led = 7'b1111_111;4'b1001: Led = 7'b1101_111;default: Led = 7'b0000_000;endcaseif(SEL==3'b001)Led=7'b1000_000;if(SEL==3'b000)case(shiwei3)4'b0000: Led = 7'b0111_111;4'b0001: Led = 7'b0000_110;4'b0010: Led = 7'b1011_011;4'b0011: Led = 7'b1001_111;4'b0100: Led = 7'b1100_110;4'b0101: Led = 7'b1101_101;4'b0110: Led = 7'b1111_101;4'b0111: Led = 7'b0000_111;4'b1000: Led = 7'b1111_111;4'b1001: Led = 7'b1101_111;default: Led = 7'b0000_000;endcaseif(SEL==3'b111)case(gewei3)4'b0000: Led = 7'b0111_111;4'b0001: Led = 7'b0000_110;4'b0010: Led = 7'b1011_011;4'b0011: Led = 7'b1001_111;4'b0100: Led = 7'b1100_110;4'b0101: Led = 7'b1101_101;4'b0110: Led = 7'b1111_101;4'b0111: Led = 7'b0000_111;4'b1000: Led = 7'b1111_111;4'b1001: Led = 7'b1101_111;default: Led = 7'b0000_000;endcaseSEL = SEL + 3'd1;endassignLEDAG=Led;endmodule四.总结体会这次课程设计虽然只有短短的四天,但我的收获却很大。