多功能数字钟论文带程序_第1页
多功能数字钟论文带程序_第2页
多功能数字钟论文带程序_第3页
多功能数字钟论文带程序_第4页
多功能数字钟论文带程序_第5页
已阅读5页,还剩14页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、 真的是为了下载券没办法了,很多有用的文件都需要下载券,求帮忙,这份程序是真的靠谱。 EDA2多功能数字钟 院系:学号:912000720姓名: 同组人:指导老师:时间:2014 年 11 月 摘要本实验通过使用 Quartus7.1软件,并结合verilog语言的知识设计多功能数字钟,可以实现正常的时、分、秒的计数功能,分别由六个数码管显示计时,可以利用开关实现系统的计时保持、清零和校分、校时的功能。同时,该电路系统还可以完成在 59'53'', 59'55'', 59'57 '' 低音报时, 59'59'

2、;' 高音报时的基本功能。在此基础上,该电路还实现了设定闹钟,定时叫醒,和关闭闹钟的功能,在利用 Quartus进行相应的设计、仿真、调试后下载到EP3C25F324C8实验系统上,验证设计的正确性。关键词QuartusII,数字钟,Verilog HDL,分层设计AbstractThis experiment is based on Quartus 7.1,with the knowledge of Verilog HDL and system design, to design a multifunctional digital clock. The basic function

3、of the multifunctional digital clock is a 24-hour timer, and the exact time can be showed by six LED lights. Also we can achieve the functions like time keeping, clearing and time and week adjusting by using the switches. Beyond the basic function, I improved the multifunctional digital clock and it

4、 can beep in low frequency at 59'53'' , 59'55'' , 59'57 '' and in high frequency at 59'59''. Based on this the basic design, I also design extra functions of alarm, whose time can be adjusted by switch. It can also be turned off by switch. All these de

5、signing and simulating work are based on Quartus. After all the work finished on computer, I downloaded the final circuit to EP3C25F324C8 experiment system to test the accuracy of the design.Key wordsQuartus, Digital clock , Verilog HDL, Layered designing目 录一、设计要求.3二、分层设计及其分工.3三、多功能数字时钟顶层设计.4四、各子模块设

6、计原理及程序.54.1 分频电路.54.2 计数器.64.3 计时电路.84.4 整点报时.94.5 LED电路.104.6 定时闹钟.12五、程序下载、仿真与调试.135.1 管脚设定 .135.2 修改 Device&Pins Options 及重新编译.135.3 程序下载及运行结果.14六、实验中遇到的问题及其应对方案.15七、实验总结与感想.15八、参考文献.151、 设计要求1.1 设计基本部分要求能进行正常的时、分、秒计时功能;分别由六个数码管显示时分秒的计时;K1 是系统的使能开关(K1=0 正常工作,K1=1 时钟保持不变);K2 是系统的清零开关(K2=0 正常工作

7、,K2=1 时钟的分、秒全清零);K3 是系统的校分开关(K3=0 正常工作,K3=1 时可以快速校分);K4 是系统的校时开关(K4=0 正常工作,K4=1 时可以快速校分);使时钟具有整点报时功能(当时钟计到 59'53''时开始报时,在 59'53'', 59'55'',59'57 '' 时报时频率为 500Hz, 59'59'' 时报时频率为 1000Hz);1.2 设计提高部分要求闹表设定功能;万年历功能;自己添加其他功能;2、 分层设计及其分工2.1 分层设计为了

8、实现多功能数字钟,我们采用了Verilog语言描述其功能,如图2.1所示,为本实验的层次分析设计结构图。图2.1 多功能数字钟电路的层次模型Digital Clock直接或间接的调用了下面所有的函数,规定了整个系统的输入和输出变量,是整个系统的Top-Level Entity。Top Frequency调用了48MHz分为1kHz的Original Frequency模块和1kHz分为500Hz,1Hz的实用分频模块,构成了整个电路的频率基础。Top Clock由3种计数器和一个二选一电路实现,表示时的模24计数器和模12计数器在整个电路中同时保持计时,通过二选一电路选择其中一个,显示在LED

9、电路中。Radio是控制整点报时的电路,声调由分频电路的1kHz和500Hz提供。Alarm是闹钟控制电路,通过比较闹钟时间和计时时间得到需要叫醒的时刻,并且连续响铃1min,但是它的程序与Bell合并,写入了一个程序中。LED显示电路,通过远大于1Hz的扫描频率,在每1s内扫描多次时、分、秒数值,并闪烁显示在七段译码管上,由于扫描频率很高,人眼是不会分辨出显示时间在闪烁的。2.2 分工情况整个多功能时钟的设计由郑蕤荻和我(徐洁)共同完成,既有明确的分工以提高效率,也有互相帮助,互相指出错误的合作过程,以下为我们两个人明确分工的情况:*:Digital Clock, Top Clock, 2t

10、o1 MUX, Comparator, Bell, LED;*:Top Frequency, Original Frequency, Divided Frequency, All the counters and Radio.三、多功能数字时钟顶层设计Digital Clock为整个多功能数字钟系统的顶层设计,它直接或间接的调用了所有的子程序,实现了将整个底层程序贯穿联接的功能,规定了多功能数字钟的输入和输出。输入有:EP3C25F324C8的自带晶振频率48MHz,清零信号,清零按钮,12/24小时切换按钮,开启闹钟时间设置键,计时时设置键,计时分设置键,闹钟时设置键,闹钟分设置键以及闹钟关

11、闭按键;输出有:LED管的位码和段码。Digital Clock,程序中简称DC,verilog语言程序及各句含义如下:/Digital_Clockmodule DC(LED_Hr,LED_Min,LED_Sec,ALARM,_48MHz,AdjMinkey,AdjHrkey,SetMinkey, SetHrkey,CtrlBell,Mode1,Mode2,nCR,Segout,Seg_in,Count, SG1,SG2,SG3,SG4,SG5,SG6,SG7,SG8);input _48MHz; /系统的输入时钟信号input nCR; /系统总清零信号output SG1,SG2,SG3,

12、SG4,SG5,SG6,SG7,SG8; /select LEDoutput 7:0 LED_Hr,LED_Min,LED_Sec; /输出变量,输出8421BCD码给显示器wire 7:0 LED_Hr,LED_Min,LED_Sec; /说明变量的类型wire _1kHzIN,_1Hz, _500Hz; /分频器输出信号input AdjMinkey, AdjHrkey; /校正计时器小时、分钟的输入按键wire 7:0 Hour,Hour_24,Hour_12,Minute,Second; /计时器的输出信号input SetHrkey, SetMinkey; /设定闹钟小时、分钟输入按

13、键wire 7:0 Set_Hr,Set_Min; /设定的闹钟时间输出信号wire ALARM_Radio; /仿电台报时信号输出wire ALARM_Clock; /闹钟的信号输出output ALARM; /仿电台或闹钟的声音信号输出input CtrlBell; /控制闹钟的声音是否输出的按键input Mode1,Mode2; /*控制显示模式切换的按键 Mode1=1时,显示闹钟设定的时间,Mode1=0时,显示计时器的时间 Mode2=1时,显示24小时制,Mode2=0时,显示12小时制*/output6:0Segout; / 7-segment code output,seg

14、out6.0-gfedcbaoutput2:0Count;output 3:0Seg_in;Top_Frequency(_48MHz,CP,_1Hz,_500HzOut,nCR);top_clock U1(Hour,Minute,Second,_1Hz,nCR,AdjMinkey,AdjHrkey,Mode2); /计时主体电路LED2(CP,LED_Hr7:4,LED_Hr3:0,LED_Min7:4,LED_Min3:0,LED_Sec7:4, LED_Sec3:0,Segout,Seg_in,Count,SG1,SG2,SG3,SG4,SG5,SG6,SG7,SG8);Radio U2

15、(ALARM_Radio,Minute, Second,CP,_500Hz); /仿电台整点报时Bell U3 (ALARM_Clock, Set_Hr,Set_Min,Hour,Minute,Second,SetHrkey,SetMinkey,CP,_500Hz,_1Hz,CtrlBell);/定时闹钟模块assign ALARM=ALARM_Radio | ALARM_Clock; /扬声器总控制模块/选择要显示的数码送数模块_2to1MUX MU2(LED_Hr,Mode1,Set_Hr,Hour); _2to1MUX MU3(LED_Min,Mode1,Set_Min,Minute);

16、_2to1MUX MU4(LED_Sec,Mode1,8'h00,Second);endmodule4、 各子模块设计原理及程序4.1 分频电路分频模块是为了实现EP3C25F324C8的自带晶振频率48MHz,往1kHz,500Hz以及1Hz的分频,由于48MHz直接分到1kHz后,所有波形都没有办法在QuartusII仿真中直观的看见,为了调试和检验的方便,我们将48MHz分为1kHz称为原始分频,与后面的分频断开。下面是该电路的verilog程序以及其原理简介:/Top_Frequencymodule Top_Frequency(_48MHz,_1kHzIN,_1HzOut,_5

17、00HzOut,nCR);input _48MHz,nCR;output _1kHzIN,_500HzOut,_1HzOut;wire _1kHzIN;wire _1HzOut,_500HzOut;Original_Frequency U0(_1kHzIN,_48MHz,nCR);Divided_Frequency U1(_1HzOut,_500HzOut,nCR,_1kHzIN);endmodule/Original_Frequencymodule Original_Frequency (_1kHzIN,_48MHz,nCR);input _48MHz,nCR;output _1kHzIN;

18、supply1 Vdd;wire 19:0Q;wire EN1,EN2,EN3,EN4;counter10 EU0(Q3:0,nCR,Vdd,_48MHz);counter10 EU1(Q7:4,nCR,EN1,_48MHz);counter10 EU2(Q11:8,nCR,EN2,_48MHz);counter6 EU3(Q15:12,nCR,EN3,_48MHz);counter10 EU4(Q19:16,nCR,EN4,_48MHz);assign EN1=(Q3:0=4'h9);assign EN2=(Q7:4=4'h9)&(Q3:0=4'h9);ass

19、ign EN3=(Q11:8=4'h9)&(Q7:4=4'h9)&(Q3:0=4'h9);assign EN4=(Q15:12=4'h5)&(Q11:8=4'h9)&(Q7:4=4'h9)&(Q3:0=4'h9);assign _1kHzIN=Q18;endmodulemodule Divided_Frequency(_1HzOut,_500HzOut,nCR,_1kHzIN);input _1kHzIN,nCR;output _1HzOut,_500HzOut;supply1 Vdd; /定义Vd

20、d为高电平wire 11:0 Q; /计数器的输出信号(中间变量)wire EN1,EN2; /计数器使能信号(中间变量)counter10 DU0(Q3:0,nCR,Vdd,_1kHzIN); /调用十进制计数器模块counter10 DU1(Q7:4,nCR,EN1,_1kHzIN);counter10 DU2(Q11:8,nCR,EN2,_1kHzIN);assign EN1=(Q3:0=4'h9);assign EN2=(Q7:4=4'h9)&(Q3:0=4'h9);assign _1HzOut=Q11;assign _500HzOut=Q0;endmo

21、dule4.2 计数器计数器是整个数字钟电路的最基本模块,在分频、时钟等处被多次调用,模60计数器是秒和分的计数器,模12和模24为时的计数器,分频中则多次用到十分频、八分频以及六分频,verilog语言程序及原理简介如下:/counter24.vmodule counter24(CounterH,CounterL,nCR,EN,CP); input CP,nCR,EN; /timing impulse CP,zero clearing singal nCR,enable singal EN output 3:0 CounterH,CounterL; reg 3:0 CounterH,Coun

22、terL;/*定义了两个四位Reg型矢量,等效于8个变量(CounterH0、CounterH1、CounterH2、CounterH3),(CounterL0、CounterL1、CounterL2、CounterL3)*/ always(posedge CP or negedge nCR) /时钟上升沿或清零信号跳变为低电平时,条件为真 begin if(nCR) CounterH,CounterL<= 8'h00; /nCR=0,异步清零 else if (EN) CounterH,CounterL<=CounterH,CounterL; /对使能信号无效的处理 el

23、se if (CounterH>2)|(CounterL>9)|(CounterH=2)&&(CounterL>=3) CounterH,CounterL<=8'h00; /对小时计时器出错的处理 else if (CounterH=2)&&(CounterL<3) begin CounterH<=CounterH; CounterL<=CounterL+1'b1;end /进行20到23计数 else if (CounterL=9) begin CounterH<=CounterH+1'b

24、1; CounterL<=4'b0000;end /小时十位进位计数 else begin CounterH<=CounterH; CounterL<=CounterL+1'b1;end /小时个位计数 endendmodule/counter60.vmodule counter10(Q,nCR,EN,CP);input CP,nCR,EN;output 3:0 Q;reg 3:0 Q; /定义了一个四位Reg型矢量,等效于4个变量(Q0、Q1、Q2、Q3)always (posedge CP or negedge nCR) /时钟上升沿或清零信号跳变为低电平

25、时,条件为真beginif(nCR) Q<=4'b0000; /nCR=0,计数器被异步清零else if (EN) Q<=Q; /EN=0,使能无效,暂停计数else if (Q=4'b1001) Q<=4'b0000; else Q<=Q+1'b1; /计数器増1计数endendmodulemodule counter6(Q,nCR,EN,CP);input CP,nCR,EN;output 3:0 Q;reg 3:0 Q;always(posedge CP or negedge nCR)beginif (nCR) Q<=4&#

26、39;b0000; /nCR=0,计数器被异步清零else if (EN) Q<=Q; /EN=0,暂停计数else if (Q=4'b0101) Q<=4'b0000;else Q<=Q+1'b1; /计数器増1计数end endmodulemodule counter60(Counter,nCR,EN,CP);input CP,nCR,EN;output 7:0 Counter; /模六十计数器的输出信号wire 7:0 Counter; /输出为8421BCD码wire ENP; /计数器十位的使能信号(中间变量)counter10 UC0 (C

27、ounter3:0,nCR,EN,CP); /计数器的个数counter6 UC1 (Counter7:4,nCR,ENP,CP); /计数器的十位assign ENP=(Counter3:0=4'h9); /产生计数器十位的使能信号endmodule/counter12module counter12(CntH,CntL,nCR,EN,CP); input CP,nCR,EN; /timing impulse CP,zero clearing singal nCR,enable singal EN output 3:0 CntH,CntL; reg 3:0 CntH,CntL; al

28、ways(posedge CP or negedge nCR) begin if(nCR) CntH,CntL<= 8'h00; else if (EN) CntH,CntL<=CntH,CntL; else if (CntH>1)|(CntL>9)|(CntH=1)&&(CntL>=1) CntH,CntL<=8'h00; else if (CntH=1)&&(CntL<1) begin CntH<=CntH; CntL<=CntL+1'b1;end else if (CntL=9)

29、 begin CntH<=CntH+1'b1; CntL<=4'b0000;end else begin CntH<=CntH; CntL<=CntL+1'b1;end endendmodule4.3 计时电路计时电路将秒往分的进位,以及分往时的进位写入了程序,再利用分频得出的1Hz频率作为秒的CP信号,使得整个时钟电路得以正常工作。Verilog程序及其原理简介如下:/top_clock.vmodule top_clock (Hour,Minute,Second,_1Hz,nCR,AdjMinkey,AdjHrkey,Mode2); input

30、 _1Hz,nCR,AdjMinkey,AdjHrkey; output7:0 Hour,Minute,Second; wire7:0 Hour,Hour_24,Hour_12, Minute, Second; supply1 Vdd; /定义Vdd为高电平 wire MinCP,HrCP; /分别为分钟,小时计数器时钟信号的中间变量 input Mode2; /*控制显模式切换的按键 Mode2=1时,显示24小时制,Mode2=0时,显示12小时制*/Hour:Minute:Second countercounter60 UT1(Second,nCR,Vdd,_1Hz); counter6

31、0 UT2(Minute,nCR,Vdd,MinCP); counter24 UT3(Hour_247:4,Hour_243:0,nCR,Vdd,HrCP); counter12 UT4(Hour_127:4,Hour_123:0,nCR,Vdd,HrCP); _2to1MUX MU1(Hour,Mode2,Hour_24,Hour_12);assign MinCP= AdjMinkey ? _1Hz : (Second=8'h59);/产生分钟计数器时钟信号。AdjMinkey=1,校正分钟;AdjMinkey=0分钟正常计时assign HrCP= AdjHrkey ? _1Hz

32、: (Minute,Second= 16'h5959);/产生小时计数器时钟信号。AdjHrkey=1,小时分钟;AdjHrkey=0小时正常计时endmodule4.4 整点报时整点报时电路的关键就在于一个case语句,在符合条件时,输出特定频率的声音。Verilog程序及其原理简介如下:/Radio.vmodule Radio (ALARM_Radio,Minute,Second,_1kHzIN,_500Hz);input _1kHzIN,_500Hz; /定义输入端口变量input 7:0 Minute,Second; output ALARM_Radio; /定义输出端口变量r

33、eg ALARM_Radio; /说明变量的类型always (Minute or Second) /generate alarm signalif (Minute=8'h59) case (Second)8'h53,8'h55,8'h57:ALARM_Radio=_500Hz;8'h59:ALARM_Radio=_1kHzIN;default :ALARM_Radio=1'b0;endcaseelse ALARM_Radio=1'b0;endmodule4.5 LED电路LED显示电路,通过远大于1Hz的扫描频率,在每1s内扫描多次时、

34、分、秒数值,并闪烁显示在七段译码管上,由于扫描频率很高,人眼是不会分辨出显示时间在闪烁的。其程序及原理简介如下:module LED2(CP,LED_HrH3:0,LED_HrL3:0,LED_MinH3:0,LED_MinL3:0,LED_SecH3:0,LED_SecL3:0,Segout,Seg_in,Count,SG1,SG2,SG3,SG4,SG5,SG6,SG7,SG8);input CP; /1kHz clockinput 3:0 LED_HrH,LED_HrL,LED_MinH,LED_MinL,LED_SecH,LED_SecL;output6:0Segout; / 7-se

35、gment code output,segout6.0-gfedcbaoutput SG1,SG2,SG3,SG4,SG5,SG6,SG7,SG8; /select LEDoutput 3:0Seg_in;output 2:0Count;reg SG1,SG2,SG3,SG4,SG5,SG6,SG7,SG8;reg 6:0Segout;reg 2:0Count; /internal 3-bit counterreg 3:0Seg_in; /4-bit binary code/select LED0LED5 displayalways(posedge CP) /CP=1kHz case(Coun

36、t) 3'b000:begin SG1,SG2,SG3,SG4,SG5,SG6,SG7,SG8=8'b01111111; /LED0 display Seg_in=LED_HrH3:0; Count=Count+1; /Count=1 end 3'b001:begin SG1,SG2,SG3,SG4,SG5,SG6,SG7,SG8=8'b10111111; /LED1 display Seg_in=LED_HrL3:0; Count=Count+1; /Count=2 end 3'b010:begin SG1,SG2,SG3,SG4,SG5,SG6,SG

37、7,SG8=8'b11011111; /LED2 display Seg_in=LED_MinH3:0; Count=Count+1; /Count=3 end 3'b011: begin SG1,SG2,SG3,SG4,SG5,SG6,SG7,SG8=8'b11101111; /LED3 display Seg_in=LED_MinL3:0; Count=Count+1; /Count=4 end 3'b100:begin SG1,SG2,SG3,SG4,SG5,SG6,SG7,SG8=8'b11110111; /LED4 display Seg_in

38、=LED_SecH3:0; Count=Count+1; /Count=5 end 3'b101:begin SG1,SG2,SG3,SG4,SG5,SG6,SG7,SG8=8'b11111011; /LED5 display Seg_in=LED_SecL3:0; Count=Count+1; /Count=6 end 3'b110:begin SG1,SG2,SG3,SG4,SG5,SG6,SG7,SG8=8'b11111111; /LED4 display Seg_in=LED_SecH3:0; Count=Count+1; /Count=7 end 3&

39、#39;b111:begin SG1,SG2,SG3,SG4,SG5,SG6,SG7,SG8=8'b11111111; /LED5 display Seg_in=LED_SecL3:0; Count=Count+1; /Count=0 end endcase/ BCD Code=>7 Segment Code(ag)always(Seg_in) case(Seg_in) /gfedcba4'b0000:Segout=7'b1000000;4'b0001:Segout=7'b1111001;4'b0010:Segout=7'b0100

40、100;4'b0011:Segout=7'b0110000;4'b0100:Segout=7'b0011001;4'b0101:Segout=7'b0010010;4'b0110:Segout=7'b0000010;4'b0111:Segout=7'b1111000;4'b1000:Segout=7'b0000000;4'b1001:Segout=7'b0010000;4'b1010:Segout=7'b0001000;4'b1011:Segout=7'

41、;b0000011;4'b1100:Segout=7'b0100111;4'b1101:Segout=7'b0100001;4'b1110:Segout=7'b0000110;4'b1111:Segout=7'b0001110;default: Segout= 7'b0100011;endcaseendmodule4.6 定时闹钟定时闹钟的关键部分在于比较器,如果闹钟所定的时间与计时的时间相同时,就以奇数秒低,偶数秒高的频率发出闹铃声响,可由按键关闭。Verilog程序及其基本原理如下:module Bell (ALARM

42、_Clock,Set_Hr,Set_Min,Hour,Minute,Second,SetHrkey,SetMinkey,_1kHzIN,_500Hz,_1Hz,CtrlBell);output ALARM_Clock;output 7:0Set_Hr,Set_Min; /设定的闹铃时间wire7:0Set_Hr,Set_Min;wire ALARM_Clock; /闹铃输出信号 input _1kHzIN,_500Hz,_1Hz; /定义输入端口变量input SetHrkey,SetMinkey; /设定闹钟小时、分钟的输入键input CtrlBell; /控制闹钟的时间是否输出的按键in

43、put 7:0Hour,Minute,Second; /定义内部节点信号supply1 Vdd; /定义Vdd为高电平wire HrH_EQU,HrL_EQU,MinH_EQU,MinL_EQU;/比较器的内部信号wire Time_EQU; /相等比较电路的输出/闹钟设定模块(Set Hour &Minute counter)/60进制分钟比较器:用于闹钟设定分钟counter60 SU1(Set_Min,Vdd,SetMinkey,_1Hz); /24进制小时计数器:用于闹钟设定小时counter24 SU2(Set_Hr7:4,Set_Hr3:0,Vdd,SetHrkey,_1H

44、z);/比较闹钟的设定时间和计数器的当前时间是否相等_4bitcomparator SU4(HrH_EQU,Set_Hr7:4,Hour7:4);_4bitcomparator SU5(HrL_EQU,Set_Hr3:0,Hour3:0);_4bitcomparator SU6(MinH_EQU,Set_Min7:4,Minute7:4);_4bitcomparator SU7(MinL_EQU,Set_Min3:0,Minute3:0);/闹钟声音控制信号assign Time_EQU= (HrH_EQU && HrL_EQU && MinH_EQU &

45、;& MinL_EQU);assign ALARM_Clock=CtrlBell ? (Time_EQU && (Second0=1'b1)&&_500Hz)|(Second0= 1'b0)&&_1kHzIN):1'b0;endmodule /_4bitcomparator.vmodule _4bitcomparator (EQU,A,B);/4-bit comparator input3:0 A,B; output EQU=(A=B);endmodule5、 程序下载、仿真与调试编译好的程序经过管脚设定后即可下载到 FPGA 芯片进行调试。5.1 管脚设定具体的管脚设定如下:5.2 修改 Device&Pins Options 及重新编译管脚分配保存好后,选择 Assignments 选项中的 De

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论