多功能数字钟设计(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分别为系统使能(暂停),时钟清零,校时,校分开关。
多功能数字钟
3 需求分析与系统设计说明
3.1 需求分析
现代社会的标志之一就是信息产品的广泛使用, 而且是产品的性能越来越强, 复杂程度 越来越高, 更新步伐越来越快。 支撑信息电子产品高速发展的基础就是微电子制造工艺水平 的提高和电子产品设计开发技术的发展。 前者以微细加工技术为代表, 而后者的代表就是电 子设计自动化(electronic design automatic,EDA)技术。 本设计采用的 verilog 是一种全方位的硬件描述语言,具有极强的描述能力,能支持系 统行为级、寄存器传输级和逻辑门级三个不同层次的设计;支持结构、数据流、行为三种描 述形式的混合描述、覆盖面广、抽象能力强,因此在实际应用中越来越广泛。 ASIC 是专用 的系统集成电路,是一种带有逻辑处理的加速处理器。而 FPGA 是特殊的 ASIC 芯片,与其他 的 ASIC 芯片相比,它具有设计开发周期短、设计制造成本低、开发工具先进、标准产品无 需测试、质量稳定以及可实时在线检测等优点。 钟表的数字化给人们生产生活带来了极大的方便, 而且大大地扩展了钟表原先的报时功 能。诸如定时自动报警、定时启闭电路、定时开关烘箱、通断动力设备,甚至各种定时电气 的自动启用等,所有这些,都是以钟表数字化为基础的。因此,研究数字钟及扩大其应用, 有着非常现实的意义。
顶层时钟模块 (二) (二)顶层时钟模块
设计原理: module top_clock (Hour,Minute,Second,_1Hz,nCR,AdjMinKey,AdjHrKey); input _1Hz,nCR,AdjMinKey,AdjHrKey; output [7:0] Hour,Minute,Second; wire [7:0] Hour,Minute,Second; supply1 Vdd; wire MinCP,HrCP; counter60 UT2(Second,nCR,Vdd,_1Hz); counter60 UT1(Minute,nCR,Vdd,~MinCP); counter24 UT3(Hour[7:4],Hour[3:0],nCR,Vdd,~HrCP); assign MinCP=~AdjMinKey?(Second==8'h59):_1Hz; assign HrCP= ~AdjHrKey?({Minute,Second}== 16'h5959):_1Hz; Endmodule 顶层模块仿真波形如下:
用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 的信号,作为显示器的输入信号。
Verilog HDL文件实例-多功能数字时钟
Verilog HDL文件实例-多功能数字时钟.txt我爸说过的最让我感动的一句话:“孩子,好好学习吧,爸以前玩麻将都玩儿10块的,现在为了供你念书,改玩儿1块的了。
”//【例 11.8】多功能数字钟/* 信号定义: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:接发光二极管,指示当前调整的是分钟信号。
*/module clock(clk,clk_1k,mode,change,turn,alert,hour,min,sec,LD_alert,LD_hour,LD_min);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;- 64 -王金明:《Verilog HDL程序设计教程》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; endcaseend- 65 -程序文本always @(negedge clk)//如果长时间按下“change”键,则生成“num1”信号用于连续快速加1 if(count2) beginif(loop1==3) num1<=1;elsebegin loop1<=loop1+1; num1<=0; endendelse begin loop1<=0; num1<=0; endalways @(negedge clk) //产生num2信号if(countb) beginif(loop2==3) num2<=1;elsebegin loop2<=loop2+1; num2<=0; endendelse begin loop2<=0; num2<=0; endalways @(negedge clk)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;- 66 -王金明:《Verilog HDL程序设计教程》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:4]<=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))- 67 -程序文本//若按住“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;endendmodule。
多功能时钟设计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语言进行的课程设计。
多功能时钟具有计时,调时,数字跑表功能。
代码如下:顶层模块:/*clk50mhz:输入频率为50mhzmadd:调时为分钟加数,高电平有效,秒表时为暂停信号;hadd:调试时为小时加数,高电平有效;rst :清零信号;mode1,mode2:模式开关,选择功能键;cout1……cout6:数码管输出;*/module clock(clk50mhz,madd,hadd,rst,mode1,mode2,cout1,cout2,cout3,cout4,cout5,cout6); input clk50mhz,madd,hadd,rst;input mode1,mode2;output reg [3:0] cout1,cout2,cout3,cout4,cout5,cout6;wire [3:0] a,b,c,d,e,f;wire [3:0]aa,bb,cc,dd,ee,ff;shizhong x2(clk50mhz,hadd,madd,rst,a,b,c,d,e,f);miaobiao x3(clk50mhz,madd,rst,aa,bb,cc,dd,ee,ff);always @(mode1 or mode2)beginif ({mode1,mode2}==2'b00)begin{cout1,cout2,cout3,cout4,cout5,cout6}<={f,e,d,c,b,a};endelse if({mode1,mode2}==2'b10)begin{cout1,cout2,cout3,cout4,cout5,cout6}<={ff,ee,dd,cc,bb,aa};endendendmodule子模块:时钟,调时模块:module shizhong(clk50mhz,hadd,madd,rst,a,b,c,d,e,f);input clk50mhz,rst,hadd,madd;output reg [3:0] a,b,c,d,e,f;reg [25:0]counter_1hz;wire clk1hz;assign clk1hz=counter_1hz[25];always@(posedge clk50mhz)begincounter_1hz<=(counter_1hz==50000000)?0:(counter_1hz+1);endalways@(posedge clk1hz)beginif(rst) begin {a,b,c,d,e,f}<=24'b0; endelse if(madd) begin c<=c+1;if(c==9) begin d<=d+1;c<=0; endif(d==5&&c==9) d<=0;endelse if(hadd) begin e<=e+1;if(e==9) begin f<=f+1;e<=0; endif(f==2&&e==4) begin f<=0;e<=0;endendelse beginif(a==9) begin a<=0;b<=b+1; end else a<=a+1;if(b==5&&a==9) begin c<=c+1;b<=0; endif(c ==9&&b==5&&a==9) begin d<=d+1;c<=0; endif((d==5&&c==9)&&(b==5&&a==9)) begin e<=e+1;d<=0; endif(e==9&&(d==5&&c==9)&&(b==5&&a==9)) begin f<=f+1; e<=0;endif((f==2&&e==3)&&(d==5&&c==9)&&(b==5&&a==9)) begin f<=0;e<=0; end endendendmodule子模块:秒表模块:module miaobiao(clk50mhz,madd,rst,aa,bb,cc,dd,ee,ff);input clk50mhz,madd,rst;output reg [3:0] aa,bb,cc,dd,ee,ff;reg [18:0]counter_100hz;wire clk100hz;assign clk100hz=counter_100hz[18];always@(posedge clk50mhz)begincounter_100hz<=(counter_100hz==500000)?0:(counter_100hz+1);endalways@(posedge clk100hz)beginbeginif(rst) begin {aa,bb,cc,dd,ee,ff}<=24'b0; endelse if(madd)beginif(aa==9) begin aa<=0;bb<=bb+1; end else aa<=aa+1;if(bb==9&&aa==9) begin cc<=cc+1;bb<=0; endif(cc==9&&bb==9&&aa==9) begin dd<=dd+1;cc<=0; endif((dd==5&&cc==9)&&(bb==9&&aa==9)) begin ee<=ee+1;dd<=0; endif(ee==9&&(dd==5&&cc==9)&&(bb==9&&aa==9)) begin ff<=ff+1; ee<=0;endif((ff==5&&ee==9)&&(dd==5&&cc==9)&&(bb==9&&aa==9)) begin ff<=0;ee<=0; end endendendendmodule。
用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的程序设计书。
多功能数字钟设计(Verilog语言编写)
多功能数字钟设计院系:电光学院班级:***学号: ***姓名: ***指导老师:***时间:2010.4.20.摘要:利用QuartusII软件设计一个数字钟,利用模块化的程序设计思想,核心模块均采用Verilog语言编写(译码显示模块采用原理图设计),软件仿真调试编译成功后,再下载到SmartSOPC实验系统中。
经过硬件测试,查找软件设计缺陷,并进一步完善软件,最终设计得到较为满意的多功能数字钟。
关键词:QuartusII; 多功能数字钟; 模块化; Verilog; 可编程;Abstract:Using the QuartusII software design a digital bell with the blocking method.The design takes theory drawing instead of Verilog language.After emluating and debuging successfully,translate and edit the code.Then,download the result to the programmable SmartSOPC system and test it in hardware.Realizing the soul of designing hardware by software.Keywords:QuartusII; digital bell; blocking method; VHDL; programmable; hardware目录设计内容简介 (3)设计要求说明 (3)方案论证(整体电路设计原理) (3)各子模块设计理 (5)分频模块: (5)计数模块: (7)--校准模块程序实现: (8)--秒计数模块程序实现: (9)--分计数模块程序实现: (10)--时计数模块程序实现: (10)整点报时模块: (12)闹钟设定模块: (13)--闹钟调节模块程序实现: (14)--输出信号选择模块程序实现: (14)彩铃模块: (15)译码显示模块: (18)万年历模块: (19)--日计数模块程序设计: (20)--月计数模块程序设计: (23)--年计数模块程序设计: (23)--万年历波形仿真结果: (25)结论: (26)实验感想: (26)附图: (27)设计内容简介设计一个数字计时器,可以完成00:00:00到23:59:59的计时功能,并在控制电路的作用下具有保持、清零、快速校时、快速校分、快速较秒等功能。
数字电路时钟设计verilog语言编写-
数字电路时钟设计verilog语言编写-电子线路设计与测试实验报告一、实验名称多功能数字钟设计二、实验目的1.掌握可编程逻辑器件的应用开发技术——设计输入、编译、仿真和器件编程;2.熟悉一种EDA软件使用;3.掌握Verilog设计方法;4.掌握分模块分层次的设计方法;5.用Verilog完成一个多功能数字钟设计。
三、设计内容及要求1.基本功能具有“秒”、“分”、“时”计时功能,小时按24小时制计时。
具有校时功能,能对“分”和“小时”进行调整。
2.扩展功能仿广播电台正点报时。
在59分51秒、53秒、55秒、57秒发出低音512Hz 信号,在59分59秒时发出一次高音1024Hz信号,音响持续1秒钟,在1024Hz音响结束时刻为整点。
定时控制,其时间为23时58分。
3.选做内容任意时刻闹钟(闹钟时间可设置)。
自动报整点时数。
四.系统框图与说明数字钟框图1.数字钟电路系统由主体电路和扩展电路两大部分所组成。
2.秒计数器计满60后向分计数器进位,分计数器计满60后向小时计数器进位,小时计数器按照“24进制”规律计数。
3.计数器的输出经译码器送显示器。
五.设计步骤1.列写多功能数字钟设计--层次结构图多功能数字钟顶层模块(clock_main.v)小时计数器(counter24.v)分钟计数器(counter60.v)秒钟计数器(counter60.v)6进制计数器(counter6.v)10进制计数器(counter10.v)6进制计数器(counter6.v)10进制计数器(counter10.v)分频模块(fre_divider.v)固定时刻闹钟设定校时模块任意时刻闹钟(setclock.v)整点报时模块(baoshi.v)2.拟定数字钟的组成框图,在Max+Plus II软件中,使用Verilog 语言输入,采用分层次分模块的方法设计电路;3.设计各单元电路并进行仿真;4.对数字钟的整体逻辑电路图,选择器件,分配引脚,进行逻辑综合;5.下载到Cyclone II FPGA实验平台上,实际测试数字钟的逻辑功能。
(完整word版)Verilog数字钟设计实验报告
基于FPGA实现多功能数字钟——电子系071180094王丛屹摘要本文利用Verilog HDL语言自顶向下的设计方法设计多功能数字钟,并通过ISE完成综合、仿真.此程序通过下载到FPGA 芯片后,可应用于实际的数字钟显示中,实现了基本的计时显示和设置,调整时间,闹钟设置的功能.[关键词]FPGA;Verilog HDL;数字钟一、多功能数字钟的设计设计一个多功能数字时钟,具有时分、秒计数显示、闹钟功能。
能够利用按键实现对闹钟时间的设定并在当前显示时间到时后能够进行闹钟提示.能够利用按键实现“较时”、“较分"功能,随时对数码管的显示进行校正和校对.数字中系统主要由系统时钟,三个功能按键(mode,turn ,change ),FPGA ,数码管和蜂鸣器部分组成。
图: 多功能数字钟总体设计模块 以下就各个模块说明其功能1. 分频模块由于FPGA内部提供的时钟信号频率大约为50MHz,在这需要将它转化成1Hz的标准时钟信号供数字钟的计时显示;在此我采用了级联分频法.RTL图如下:代码如下:always @(posedge clk_1)if ( cnt2 〈156/2—1)/////////////////////////////////////100分频,生成10000Hz信号begincnt2 〈= cnt2 + 1;endelsebegincnt2 〈= 0;clk_2 <= ~clk_2;endalways @(posedge clk_2)if ( cnt5 〈10/2-1) /////////////////////////////////////////10分频,生成1kHz标准信号begincnt5〈= cnt5 + 1;endelsebegincnt5〈= 0;clk_1k〈= ~clk_1k;endalways @(posedge clk_2)if ( cnt3 < 100/2—1)//////////////////////////////////////////100分频,生成100Hz信号begin最终输出的是1Hz,100Hz,1kHz的标准时钟信号clk_1Hz ,clk_100Hz,clk_1k。
数字电路时钟设计verilog语言编写
电子线路设计与测试实验报告一、实验名称多功能数字钟设计二、实验目的1.掌握可编程逻辑器件的应用开发技术——设计输入、编译、仿真和器件编程;2.熟悉一种EDA软件使用;3.掌握Verilog设计方法;4.掌握分模块分层次的设计方法;5.用Verilog完成一个多功能数字钟设计。
三、设计内容及要求1.基本功能➢具有“秒”、“分”、“时”计时功能,小时按24小时制计时。
➢具有校时功能,能对“分”和“小时”进行调整。
2.扩展功能➢仿广播电台正点报时。
在59分51秒、53秒、55秒、57秒发出低音512Hz 信号,在59分59秒时发出一次高音1024Hz信号,音响持续1秒钟,在1024Hz音响结束时刻为整点。
➢定时控制,其时间为23时58分。
3.选做内容➢任意时刻闹钟(闹钟时间可设置)。
➢自动报整点时数。
四.系统框图与说明数字钟框图1.数字钟电路系统由主体电路和扩展电路两大部分所组成。
2.秒计数器计满60后向分计数器进位,分计数器计满60后向小时计数器进位,小时计数器按照“24进制”规律计数。
3.计数器的输出经译码器送显示器。
五.设计步骤1.列写多功能数字钟设计--层次结构图多功能数字钟顶层模块(clock_main.v)小时计数器(counter24.v)分钟计数器(counter60.v)秒钟计数器(counter60.v)6进制计数器(counter6.v)10进制计数器(counter10.v)6进制计数器(counter6.v)10进制计数器(counter10.v)分频模块(fre_divider.v)固定时刻闹钟设定校时模块任意时刻闹钟(setclock.v)整点报时模块(baoshi.v)2.拟定数字钟的组成框图,在Max+Plus II软件中,使用Verilog语言输入,采用分层次分模块的方法设计电路;3.设计各单元电路并进行仿真;4.对数字钟的整体逻辑电路图,选择器件,分配引脚,进行逻辑综合;5.下载到Cyclone II FPGA实验平台上,实际测试数字钟的逻辑功能。
数字系统设计与verilog_HDL课程设计--实用多功能数字钟
数字系统设计与verilogHDL课程设计设计题目:实用多功能数字钟专业:电子信息科学与技术摘要本课程设计利用QuartusII软件Verilog VHDL语言的基本运用设计一个多功能数字钟,经分析采用模块化设计方法,分别是顶层模块、alarm、alarm_time、counter_time、clk50mto1、led、switch、bitel、adder、sound_ddd、sound_ddd_du模块,再进行试验设计和软件仿真调试,分别实现时分秒计时、闹钟闹铃、时分秒手动校时、时分秒清零,时间保持和整点报时等多种基本功能。
单个模块调试达到预期目标,再将整体模块进行试验设计和软件仿真调试,已完全达到分块模式设计功能,并达到设计目标要求。
关键字:多功能数字钟、Verilog、模块、调试、仿真、功能目录1.课程设计的目的及任务............................................................. 错误!未定义书签。
1.1 课程设计的目的 (4)1.2 课程设计的任务与要求 (4)2.课程设计思路及其原理 (4)3.QuartusII软件的应用 (5)3.1工程建立及存盘 (5)3.2工程项目的编译 (6)3.3时序仿真 (6)4.分模块设计、调试、仿真与结果分析 (7)4.1 clk50mto1时钟分频模块 (7)4.2 adder加法器模块 (7)4.3 hexcounter16 进制计数器模块 (8)4.4 counter_time 计时模块 (8)4.5 alarm闹铃模块 (9)4.6 sound_ddd嘀嘀嘀闹铃声模块 (9)4.7 sound_ddd_du嘀嘀嘀—嘟声音模块 (10)4.8 alarm_time闹钟时间设定模块 (10)4.9 bitsel将输出解码成时分秒选择模块 (11)4.10 switch去抖模块 (11)4.11 led译码显示模块 (12)4.12 clock顶层模块 (12)5.实验总结 (14)5.1调试中遇到的问题及解决的方法 (14)5.2实验中积累的经验 (14)5.3心得体会 (14)6.参考文献 (15)1.1 课程设计的目的通过课程设计的锻炼,要求学生掌握V erilog HDL语言的一般设计方法,掌握VerilogHDL语言的基本运用,具备初步的独立设计能力,提高综合运用所学的理论知识独立分析和解决问题的能力,基于实践、源于实践,实践出真知,实践检验真理,培养学生的创新精神。
实验三 实用多功能数字钟
实验三实用多功能数字钟一:实验目的:1) 进一步学习更复杂的EDA熟练项目设计,更的掌握VHDL语言设计。
2) 学习动态数码管的VHDL编程。
3) 更加熟练计时显示、进位和校时的编程方法。
二:实验要求:用Verilog设计一个多功能的数字钟。
(1)计时功能:包括时、分、秒的计时;(2)定时与闹钟功能:能在设定的时间发出闹铃声;(3)校时功能:对时分秒能手动调整以校准时间;(4)整点报时功能:每逢整点,产生“嘀嘀嘀滴—嘟”四短一长的报时音。
三:多功能数字钟源代码:(1)clock 模块module clock (clk50M,mode,turn,change,mreset,led_hour1,led_hour0,led_minu1, led_minu0,led_sec1,led_sec0,alert,ld_alert,ld_check,ld_hour,ld_min,ld_sec); input clk50M,mode,turn,change,mreset;output alert,ld_alert,ld_check,ld_hour,ld_min,ld_sec;output [7:0] led_hour1;output [7:0] led_hour0;output [7:0] led_minu1;output [7:0] led_minu0;output [7:0] led_sec1;output [7:0] led_sec0;reg [1:0] modestate;wire nowmode;wire ischecking;assign {nowmode,ischecking}=modestate;always@(negedge mode)begincase(modestate)2'b00: modestate<=2'b10;2'b10: modestate<=2'b01;2'b01: modestate<=2'b00;default:modestate<=2'b00;endcaseendwire reset,clk_1hz;switch #(8) rmjitter (clk50M,mreset,reset);clk50Mto1 gen1hz(clk50M,clk_1hz);wire [2:0] selcode;bitsel seldecoder (nowmode,ischecking,turn,selcode,reset);wire [3:0] clocktime0,clocktime1,clocktime2,clocktime3,clocktime4,clocktime5; wire clockalarmon;wire [2:0] counterselcode;assign counterselcode=(modestate==2'b01)?selcode:3'b000;counter_time clock_time(clk_1hz,counterselcode,~change,clocktime5,clocktime4, clocktime3,clocktime2,clocktime1,clocktime0,clockalarmon,reset);wire [3:0] alarmtime0,alarmtime1,alarmtime2,alarmtime3;wire alarmon;alarm_time alarm_time(clk_1hz,nowmode,selcode[2:1],change,{clocktime5,clocktime4,clocktime3,clocktime2,clocktime1,clocktime0},{alarmtime3,alarmtime2,alarmtime1,alarmtime0},alarmon,reset);wire voiceout;alarm alarmvoice(clk50M,{clockalarmon,alarmon},voiceout,reset);assign {ld_hour,ld_min,ld_sec}=(ischecking||nowmode)?selcode:3'b000;assign alert=voiceout;reg [3:0] showout2,showout3,showout4,showout5;led led5(showout5,1'b1,led_hour1);led led4(showout4,1'b0,led_hour0);led led3(showout3,1'b1,led_minu1);led led2(showout2,1'b0,led_minu0);led led1(clocktime1,1'b1,led_sec1);led led0(clocktime0,1'b1,led_sec0);alwaysbegin if (nowmode)begin showout5=alarmtime3;showout4=alarmtime2;showout3=alarmtime1;showout2=alarmtime0;endelse beginshowout5=clocktime5;showout4=clocktime4;showout3=clocktime3;showout2=clocktime2;endendassign ld_alert=nowmode;assign ld_check=ischecking;Endmodule********************************************************************* ********************************************************************* (2)alarm_time模块module alarm_time(clk_1hz,enable,sel,inc,basetime,alarmouttime,alarm_on,reset); input clk_1hz,enable,inc,reset;input [1:0] sel;input [4*5-1:0] basetime;output reg alarm_on;output [4*4-1:0] alarmouttime;reg [3:0] hour1,hour0,minu1,minu0;always @(posedge inc or posedge reset)begin if(reset){hour1,hour0,minu1,minu0}<=16'h0;else beginif(enable)beginif(sel==2'b10)begin if ({hour1,hour0}==8'h23) {hour1,hour0}<=8'h00;else if (hour0==9)begin hour0<=0;hour1<=hour1+1'b1; endelse hour0<=hour0+1'b1;endelse if (sel==2'b01)begin if ({minu1,minu0}==8'h59) {minu1,minu0}<=8'h00;else if (minu0==4'h9)beginminu0<=4'h0;minu1<=minu1+4'h1;endelse minu0<=minu0+4'h1;endendendendalwaysbeginif(({hour1,hour0,minu1,minu0}==basetime[(4*5-1):4])&&(basetime[3:0]<2)) alarm_on=1'b1;else alarm_on=1'b0;endassign alarmouttime={hour1,hour0,minu1,minu0};Endmodule********************************************************************* ********************************************************************* (3)Alarm模块module alarm(clk50M,alarmon,alarmout,reset);input [1:0] alarmon;input clk50M,reset;output reg alarmout;reg [15:0] counter_1k;wire clk_1k;assign clk_1k=counter_1k[15];always @(posedge clk50M)begin if (counter_1k==50000) counter_1k<=0;else counter_1k<=counter_1k+1'b1;endwire ddd_du_out,ddd_out;sound_ddd_du ddd_du(clk_1k,alarmon[1],ddd_du_out);sound_ddd ddd(clk_1k,alarmon[0],ddd_out);alwaysbegin if (!reset)begin if(alarmon[0]==1'b1)alarmout=ddd_out;else if (alarmon==2'b10) alarmout=ddd_du_out;else alarmout=0;end else alarmout=0;endEndmodule********************************************************************* ********************************************************************* (4)sound_ddd模块module sound_ddd(clk_1k,on,out);parameter soundspace=300;parameter shortstopspace=200;parameter longstopspace=500;input clk_1k,on;output reg out;reg sound;always@(posedge clk_1k)begin sound<=~sound;endreg [10:0] mscount;always@(posedge clk_1k)begin if (mscount==(soundspace*3+shortstopspace*2+longstopspace-1))mscount<=0;else mscount<=mscount+1'b1;endalways@(negedge clk_1k)begin if(on)begin if((mscount>=0)&&(mscount<soundspace)) out<=sound;else if ((mscount>=soundspace)&&(mscount<(soundspace+shortstopspace))) out<=0;else if((mscount>=(soundspace+shortstopspace))&&(mscount<(soundspace+shortstopspace )+soundspace))out<=sound;else if((mscount>=(soundspace+shortstopspace)+soundspace)&&(mscount<(soundspace+s hortstopspace)*2))out<=0;else if((mscount>=(soundspace+shortstopspace)*2)&&(mscount<((soundspace+shortstopsp ace)*2+soundspace)))out<=sound;else out<=0;endelse out<=0;endendmodule********************************************************************* ********************************************************************* (5)sound_ddd_du模块module sound_ddd_du(clk_1k,on,out);parameter soundspace=300;parameter shortstopspace=200;parameter longstopspace=600;input clk_1k,on;output reg out;reg sound_di,sound_du;always@(posedge clk_1k) sound_di<=~sound_di;always@(posedge sound_di) sound_du<=~sound_du;reg[11:0] mscount;always@(posedge clk_1k)begin if(on)begin if(mscount<(soundspace+shortstopspace)*3+longstopspace+10) mscount<=mscount+1'b1;endelse mscount<=0;endalways@(negedge clk_1k)begin if(on)begin if((mscount>=0)&&(mscount<soundspace))out<=sound_di;else if ((mscount>=soundspace)&&(mscount<(soundspace+shortstopspace)))out<=0;else if((mscount>=(soundspace+shortstopspace))&&(mscount<(soundspace+shortstopspace )+soundspace))out<=sound_di;else if((mscount>=(soundspace+shortstopspace)+soundspace)&&(mscount<(soundspace+s hortstopspace)*2))out<=0;else if((mscount>=(soundspace+shortstopspace)*2)&&(mscount<((soundspace+shortstopsp ace)*2+soundspace)))out<=sound_di;else if((mscount>=(soundspace+shortstopspace)*2+soundspace)&&(mscount<(soundspace +shortstopspace)*3))out<=0;else if((mscount>=(soundspace+shortstopspace)*3)&&(mscount<((soundspace+shortstopsp ace)*3+longstopspace)))out<=sound_du;else out<=0;end endendmodule********************************************************************* ********************************************************************* (6)counter_time模块module counter_time(clk_1hz,check,inc,hour1,hour0,minu1,minu0,sec1,sec0, alarmout,reset);input clk_1hz,inc,reset;input [2:0] check;output [3:0] hour1,hour0,minu1,minu0,sec1,sec0;output reg alarmout;reg clk_1hz_md;wire [6:0] carryclk;reg [5:0] incplus;wire [5:0] carry;wire [3:0] adderout0,adderout1,adderout2,adderout3,adderout4,adderout5;wire [3:0] timerout0,timerout1,timerout2,timerout3,timerout4,timerout5; hexcounter counter_sec0(carryclk[0],reset,4'd9,4'b0,timerout0,carry[0]); hexcounter counter_sec1(carryclk[1],reset,4'd5,4'b0,timerout1,carry[1]); hexcounter counter_minu0(carryclk[2],reset,4'd9,4'b0,timerout2,carry[2]);hexcounter counter_minu1(carryclk[3],reset,4'd5,4'b0,timerout3,carry[3]);wire [3:0] hour0max;assign hour0max=(timerout5==4'h2)?(4'h3):(4'h9);hexcounter counter_hour0(carryclk[4],reset,hour0max,4'b0,timerout4,carry[4]); hexcounter counter_hour1(carryclk[5],reset,4'd2,4'b0,timerout5,carry[5]);assign carryclk[0]=clk_1hz_md|incplus[0];assign carryclk[1]=carry[0]|incplus[1];assign carryclk[2]=carry[1]|incplus[2];assign carryclk[3]=carry[2]|incplus[3];assign carryclk[4]=carry[3]|incplus[4];assign carryclk[5]=carry[4]|incplus[5];alwaysbegin case (check)3'b001: begin clk_1hz_md=0;incplus={5'b00000,inc};end3'b010: begin clk_1hz_md=0;incplus={3'b000,inc,2'b00};end3'b100: begin clk_1hz_md=0;incplus={1'b0,inc,4'b0000};enddefault:begin incplus=6'b000000;clk_1hz_md=clk_1hz;endendcase endalwaysbegin if ((timerout3==0)&&(timerout2==0)&&(timerout1<2)) alarmout=1;else alarmout=0;endassign hour1=timerout5; assign hour0=timerout4;assign minu1=timerout3; assign minu0=timerout2;assign sec1=timerout1; assign sec0=timerout0;Endmodule********************************************************************* ********************************************************************* (7)Hexcounter模块(时、分、秒均用此模块)module hexcounter(clk,set,max,setdata,dataout,carryout);input clk,set;input [3:0] max,setdata;output carryout;output[3:0] dataout;reg[3:0] counter;reg carrybit;assign carryout=carrybit;assign dataout=counter;always@(posedge clk or posedge set)begin if (set)begin counter<=setdata;carrybit<=0;endelse begin if((counter==max)||(counter>max))begin counter<=0;carrybit<=1;endelse begin counter<=counter+1'b1;carrybit<=0;endend endendmodule********************************************************************* ********************************************************************* (8)clk50Mto1模块(产生50MHZ的时钟输入)module clk50Mto1(clk50M,clk1hz);input clk50M;output clk1hz;reg [25:0] counter_1hz;assign clk1hz=counter_1hz[25];always @(posedge clk50M)begin if(counter_1hz==50000000) counter_1hz<=0;else counter_1hz<=counter_1hz+1'b1;endEndmodule********************************************************************* ********************************************************************* (9)Led模块(LED显示模块)module led(datain,dotin,ledout);parameter INWIDTH=4;parameter OUTWIDTH=8;input [INWIDTH-1:0] datain;input dotin;output [OUTWIDTH-1:0] ledout;reg [OUTWIDTH-2:0] dataout;wire dotout;assign ledout[OUTWIDTH-1:1]=dataout;assign ledout[0]=dotout;assign dotout=dotin;always begin case (datain)0: dataout<=7'b1000000; 1: dataout<=7'b1111001;2: dataout<=7'b0100100; 3: dataout<=7'b0110000;4: dataout<=7'b0011001; 5: dataout<=7'b0010010;6: dataout<=7'b0000010; 7: dataout<=7'b1111000;8: dataout<=7'b0000000; 9: dataout<=7'b0010000;10: dataout<=7'b0001000; 11: dataout<=7'b0000011;12: dataout<=7'b1000110; 13: dataout<=7'b0100001;14: dataout<=7'b0000110; 15: dataout<=7'b0001110;default :dataout<=7'b1000000;endcaseendendmodule********************************************************************* ********************************************************************* (10)开关模块module switch(clk,keyin,keyout);parameter COUNTWIDTH=8;wire clk_use;input clk,keyin;output reg keyout;reg [COUNTWIDTH-1:0] counter;assign clk_use=counter[COUNTWIDTH-1];always@(posedge clk) counter<=counter+1'b1;always@(posedge clk_use) keyout<=keyin;endmodule********************************************************************* ********************************************************************* (11)Bitsel模块module bitsel(alarmmode,checkmode,sel,selcode,reset);input alarmmode,checkmode,sel,reset;output reg [2:0] selcode;reg [2:0] check_code;reg [1:0] alarm_code;always@(negedge sel or posedge reset)begin if (reset) check_code<=3'b000;else begincase (check_code)3'b000: check_code<=3'b001;3'b001: check_code<=3'b010;3'b010: check_code<=3'b100;3'b100: check_code<=3'b001;default:check_code<=3'b000;endcaseend endalways @(negedge sel or posedge reset)begin if (reset) alarm_code<=2'b00;else begincase(alarm_code)2'b00: alarm_code<=2'b01;2'b01: alarm_code<=2'b10;2'b10: alarm_code<=2'b01;default:alarm_code<=2'b00;endcaseendendalwaysbegin if(alarmmode^checkmode)begin if (checkmode) selcode=check_code;else selcode={alarm_code,1'b0}; endelse selcode=3'b000;endendmodule四:仿真图分和秒计数器模块仿真波形如下:从仿真波形可知,当计数到59时,下一个时钟上升沿到来时就清零了,并且产生进位信号时计数器模块仿真波形如下:定点报时模块仿真波形:六、设计心得与体会通过本次设计我初步了解并掌握了使用Verilog HDL语言来设计实现数字电路,了解Verilog HDL语言与原理图设计的联系及区别,并更加了解了电子系统设计这门课程,也认识到自己的不足。
(完整word版)数字钟verilog(word文档良心出品)
目录1 设计任务及要求 (1)2 总体设计分析 (1)3 各模块设计 (2)3.1 数字钟主体部分 (2)3.1.1小时计数器 (2)3.1.2 分、秒计数器 (3)3.2 分频部分 (4)3.3 秒表模块 (5)3.4 闹钟模块 (5)3.5 时间设置模块 (7)3.6 报时模块 (7)3.7 控制显示模块 (8)3.8 顶层模块 (11)4 总结 (11)4.1 本次作业遇到的问题 (11)4.2 建议和总结 (12)附件 (13)1 设计任务及要求本次大作业的要求为设计一个多功能数字钟,其具体要求如下:1.有基础的实时数字钟显示功能,即时、分、秒的正常显示模式,并且在此基础上增加上,下午显示。
2.手动校准。
按动方式键,将电路置于校时状态,则计时电路可用手动方式校准,每按一下校时键,时计数器加1;按动方式键,将电路置于校分状态,以同样方式手动校分。
3.整点报时,仿中央人民广播电台整点报时信号,从59分50秒起每隔2秒发出一次低音“嘟”信号(信号鸣叫持续时间1S,间隙时间1S)连续5次,到达整点(00分00秒时),发一次高音“哒”信号(信号持续时间1S)。
4.闹时功能,按动方式键,使电路工作于预置状态,此时显示器与时钟脱开,而与预置计数器相连,利用前面手动校时,校分方式进行预置,预置后回到正常模式。
当计时计至预置的时间时,扬声器发出闹铃信号,时间为半分钟,闹铃信号可以用开关“止闹”,按下此开关后,闹铃声立刻中止,正常情况下应将此开关释放,否则无闹时作用。
5.秒表功能。
按start键开始计秒,按stop键停止计秒并保持显示数不变,直到复位信号加入。
2 总体设计分析设计的总体部分按照要求可以分为基本的数字时钟显示、手动校准、整点报时、闹钟功能和秒表功能5大部分。
其总体设计框图如下:图1 总体设计框图其中整点报时跟闹钟部分要求不同频率的声响,所以需要加入分频器模块将输入的1kHZ的分频产生500HZ及1HZ的方波信号,其中1HZ的信号对应1S 的周期,可以用作时钟秒的显示及秒表部分。
多功能数字钟设计(Verilog语言编写)
多功能数字钟设计院系:电光学院班级:***学号: ***姓名: ***指导老师:***时间:2010.4.20.摘要:利用QuartusII软件设计一个数字钟,利用模块化的程序设计思想,核心模块均采用Verilog语言编写(译码显示模块采用原理图设计),软件仿真调试编译成功后,再下载到SmartSOPC实验系统中。
经过硬件测试,查找软件设计缺陷,并进一步完善软件,最终设计得到较为满意的多功能数字钟。
关键词:QuartusII; 多功能数字钟; 模块化; Verilog; 可编程;Abstract:Using the QuartusII software design a digital bell with the blocking method.The design takes theory drawing instead of Verilog language.After emluating and debuging successfully,translate and edit the code.Then,download the result to the programmable SmartSOPC system and test it in hardware.Realizing the soul of designing hardware by software.Keywords:QuartusII; digital bell; blocking method; VHDL; programmable; hardware目录设计内容简介 (3)设计要求说明 (3)方案论证(整体电路设计原理) (3)各子模块设计理 (5)分频模块: (5)计数模块: (7)--校准模块程序实现: (8)--秒计数模块程序实现: (9)--分计数模块程序实现: (10)--时计数模块程序实现: (10)整点报时模块: (12)闹钟设定模块: (13)--闹钟调节模块程序实现: (14)--输出信号选择模块程序实现: (14)彩铃模块: (15)译码显示模块: (18)万年历模块: (19)--日计数模块程序设计: (20)--月计数模块程序设计: (23)--年计数模块程序设计: (23)--万年历波形仿真结果: (25)结论: (26)实验感想: (26)附图: (27)设计内容简介设计一个数字计时器,可以完成00:00:00到23:59:59的计时功能,并在控制电路的作用下具有保持、清零、快速校时、快速校分、快速较秒等功能。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
多功能数字钟设计院系:电光学院班级:***学号: ***姓名: ***指导老师:***时间:2010.4.20.摘要:利用QuartusII软件设计一个数字钟,利用模块化的程序设计思想,核心模块均采用Verilog语言编写(译码显示模块采用原理图设计),软件仿真调试编译成功后,再下载到SmartSOPC实验系统中。
经过硬件测试,查找软件设计缺陷,并进一步完善软件,最终设计得到较为满意的多功能数字钟。
关键词:QuartusII; 多功能数字钟; 模块化; Verilog; 可编程;Abstract:Using the QuartusII software design a digital bell with the blocking method.The design takes theory drawing instead of Verilog language.After emluating and debuging successfully,translate and edit the code.Then,download the result to the programmable SmartSOPC system and test it in hardware.Realizing the soul of designing hardware by software.Keywords:QuartusII; digital bell; blocking method; VHDL; programmable; hardware目录设计内容简介 (3)设计要求说明 (3)方案论证(整体电路设计原理) (3)各子模块设计理 (5)分频模块: (5)计数模块: (7)--校准模块程序实现: (8)--秒计数模块程序实现: (9)--分计数模块程序实现: (10)--时计数模块程序实现: (10)整点报时模块: (12)闹钟设定模块: (13)--闹钟调节模块程序实现: (14)--输出信号选择模块程序实现: (14)彩铃模块: (15)译码显示模块: (18)万年历模块: (19)--日计数模块程序设计: (20)--月计数模块程序设计: (23)--年计数模块程序设计: (23)--万年历波形仿真结果: (25)结论: (26)实验感想: (26)附图: (27)设计内容简介设计一个数字计时器,可以完成00:00:00到23:59:59的计时功能,并在控制电路的作用下具有保持、清零、快速校时、快速校分、快速较秒等功能。
在设计的电路具有上述基本功能的前提下,我又进行了功能扩展:整点报时、闹钟设置、彩铃和万年历功能。
(由于时间限制,万年历功能未经硬件测试,仅通过软件层面简单调试仿真)设计要求说明设计基本要求:1、能进行正常的时、分、秒计时功能;2、分别由六个数码管显示时分秒的计时;3、K1是系统的使能开关(K1=0正常工作,K1=1时钟保持不变);4、K2是系统的清零开关(K2=0正常工作,K2=1时钟的分、秒全清零);5、K3是系统的校分开关(K3=0正常工作,K3=1时可以快速校分);6、K4是系统的校时开关(K4=0正常工作,K4=1时可以快速校时);设计提高部分要求1、使时钟具有整点报时功能(当时钟计到59’53”时开始报时,在59’53”, 59’55”,59’57”时报时频率为512Hz,59’59”时报时频率为1KHz);2、闹表设定功能;方案论证(整体电路的工作原理)本实验在实现实验基本功能的基础上,加入了整点报时、闹钟设置、彩铃和万年历显示调节功能。
整个电路由计数模块、分频模块、校时、校分较秒模块,清零模块、保持模块,整点报时模块,闹钟设定模块、彩铃模块,以及万年历模块构成。
(如下图所示)基本功能:数字计时器基本功能是计时,因此首先需要获得具有精确振荡时间的脉振信号,以此作为计时电路的时序基础,实验中可以使用的振荡频率源为48MHZ,通过分频获得所需脉冲频率(1Hz,,2Hz,4Hz,1KHz,500Hz,6MHz)。
经过Verilog编程可以轻松获得较为精确的分频信号。
在计数模块中,秒位和分位分别通过编程用模60计数器实现,时位通过编程用模24计数器实现。
校时、校分及校秒模块则通过语言选择实现。
清零及保持功能在计数模块中用判断语句可轻松实现。
计数模块总共输出6路信号:秒位的个、十位,分位的个、十位及时位的个、十位。
整点报时:利用计数模块的输出作为报时模块的输入,当检测到59’53”, 59’55”,59实验模块原理图57”时令报时模块的输出为500Hz,59’59”时令报时模块的输出为1Kz.,驱动蜂鸣器产生不同的响声。
闹钟设定模块:这里设计一个闹钟模块,输入为计数模块的输出及一系列调节信号,输出接到译码模块上。
在闹钟模块内部,核心模块是一个选择模块,选择输出的信号是闹钟显示还是正常的计数显示。
为了使闹钟模块与计数模块是相互独立的,因此单独设计模24(闹钟小时)和模60(闹钟分钟)作为选择模块的输入。
设计程序语言的思想是,当检测到与设定闹钟相同的时、分位时就输出一个信号1,并保存当前计数位(加1)当检测到当前信号与保存位相同时输出信号恢复为0。
(这个信号将作为闹铃结束的判断信号)彩铃模块:本程序选用了一段悠扬的梁祝音乐,该模块的输入分别为6MHz和4Hz,通过编程实现输出为符合音律的不同频率。
程序实现的思想并不复杂,只要有乐谱可以实现各种不同的音乐输出。
蜂鸣器何时鸣叫取决于闹钟模块的输出。
译码显示模块:本模块没有采用V erilog语言实现,通过搭建原理图实现。
显示功能是通过数选器、译码器、码转换器和7段显示管实现的。
因为实验中只用一个译码显示单元,6个7段码(用于显示时分秒),所以通过1个24选4MUX和一个3-8译码器配合,显示译码器采用7447,根据计数器的信号进行数码管的动态显示。
万年历模块:通过编程可以轻松实现,原理与上述计数模块,调节模块很是类似。
由于未经硬件测试(时间限制),将在下面的子模块介绍中给出软件层面的实现和编译调试结果。
各子模块设计原理本数字钟设计主要用Verilog语言实现,严格采用了模块化的程序设计思想,自顶向下逐步求精,模块之间高度独立。
(仅译码显示模块采用原理图搭建)下面将分别介绍各主要子模块及其子模块以及算法语言的实现和部分波形仿真编译调试结果。
分频模块:(clkout输出为1Hz,clkout1K输出为1Kz,clkout500输出为500Hz,clkout2输出为2Hz,clkout6M输出为6MHz,clkout4输出为4Hz.)module clkdiv(clk,clkout,clkout1k,clkout500,clkout2,clkout6M,clkout4);input clk;output clkout,clkout1k,clkout500,clkout2,clkout6M,clkout4;reg clkout,clkout1k,clkout500,clkout2,clkout6M,clkout4;reg [31:0]cnt,cnm,cnn,cmm,caa,cbb;always@(posedge clk) //产生1Hz信号beginif(cnt== 32'd2*******)beginclkout<=1'd1;cnt<=cnt+32'd1;endelse if(cnt==32'd4*******)beginclkout<=1'b0;cnt<=32'd0;endelsecnt<=cnt+32'd1;endalways@(posedge clk) //产生1KHz信号beginif(cnm== 32'd24000)beginclkout1k<=1'd1;cnm<=cnm+32'd1;endelse if(cnm==32'd48000)beginclkout1k<=1'b0;cnm<=32'd0;endelsecnm<=cnm+32'd1;endalways@(posedge clk) //产生500Hz信号beginif(cnn== 32'd48000)beginclkout500<=1'd1;cnn<=cnn+32'd1;endelse if(cnn==32'd96000)beginclkout500<=1'b0;cnn<=32'd0;endelsecnn<=cnn+32'd1;endalways@(posedge clk) //产生2Hz信号beginif(cmm== 32'd1*******)beginclkout2<=1'd1;cmm<=cmm+32'd1;endelse if(cmm==32'd2*******)beginclkout2<=1'b0;cmm<=32'd0;endelsecmm<=cmm+32'd1;endalways@(posedge clk) //产生6MHz信号beginif(caa== 32'd4)beginclkout6M<=1'd1;caa<=caa+32'd1;endelse if(caa==32'd8)beginclkout6M<=1'b0;caa<=32'd0;endelsecaa<=caa+32'd1;endalways@(posedge clk) //产生4Hz信号beginif(cbb== 32'd6000000)beginclkout4<=1'd1;cbb<=cbb+32'd1;endelse if(cbb==32'd1*******)beginclkout4<=1'b0;cbb<=32'd0;endelsecbb<=cbb+32'd1;endEndmodule除了6MHz可以通过波形图直接观察,其他分频在程序设计原理上都可以确定是正确的,通过硬件可以作一定的观察(或者对仿真时间设定作相应调整)。
计数模块:计数模块中包含三个校准模块和三个计数模块(分别对应着秒分时)。
(secondclka为秒脉冲输入信号1Hz,secondclkb为输入校准信号用频率2Hz,K5jiaomiao、K3jiaofen、K4jiaoshi分别为校秒、校分、校时输入信号,clkdff为D触发器输入信号(去开关抖动用),reset1K2为清零信号,start0K1为保持信号。