多功能数字钟论文带程序.docx
- 文档编号:26899283
- 上传时间:2023-06-23
- 格式:DOCX
- 页数:23
- 大小:226.86KB
多功能数字钟论文带程序.docx
《多功能数字钟论文带程序.docx》由会员分享,可在线阅读,更多相关《多功能数字钟论文带程序.docx(23页珍藏版)》请在冰豆网上搜索。
多功能数字钟论文带程序
EDA2
多功能数字钟
院系:
学号:
912000720
姓名:
同组人:
指导老师:
时间:
2014年11月
摘要
本实验通过使用QuartusⅡ7.1软件,并结合verilog语言的知识设计多功能数字钟,可以实现正常的时、分、秒的计数功能,分别由六个数码管显示计时,可以利用开关实现系统的计时保持、清零和校分、校时的功能。
同时,该电路系统还可以完成在59'53'',59'55'',59'57''低音报时,59'59''高音报时的基本功能。
在此基础上,该电路还实现了设定闹钟,定时叫醒,和关闭闹钟的功能,在利用QuartusⅡ进行相应的设计、仿真、调试后下载到EP3C25F324C8实验系统上,验证设计的正确性。
关键词
QuartusII,数字钟,VerilogHDL,分层设计
Abstract
ThisexperimentisbasedonQuartusⅡ7.1,withtheknowledgeofVerilogHDLandsystemdesign,todesignamultifunctionaldigitalclock.Thebasicfunctionofthemultifunctionaldigitalclockisa24-hourtimer,andtheexacttimecanbeshowedbysixLEDlights.Alsowecanachievethefunctionsliketimekeeping,clearingandtimeandweekadjustingbyusingtheswitches.Beyondthebasicfunction,Iimprovedthemultifunctionaldigitalclockanditcanbeepinlowfrequencyat59'53'',59'55'',59'57''andinhighfrequencyat59'59''.Basedonthisthebasicdesign,Ialsodesignextrafunctionsofalarm,whosetimecanbeadjustedbyswitch.Itcanalsobeturnedoffbyswitch.AllthesedesigningandsimulatingworkarebasedonQuartusⅡ.Afteralltheworkfinishedoncomputer,IdownloadedthefinalcircuittoEP3C25F324C8experimentsystemtotesttheaccuracyofthedesign.
Keywords
QuartusⅡ,Digitalclock,VerilogHDL,Layereddesigning
一、设计要求……………………………………………………………………...........................3
二、分层设计及其分工……………………………………………………………………...........3
三、多功能数字时钟顶层设计…………………………………………………...........................4
四、各子模块设计原理及程序…………………………………………...................................…5
4.1分频电路…………………………………………………..............................................……5
4.2计数器……………………………………………………………..........................................6
4.3计时电路………………………………………......................................……………………8
4.4整点报时……………………………………..........................................................…………9
4.5LED电路…………………………………………….....................................………………10
4.6定时闹钟……………………………………………………........................................……12
五、程序下载、仿真与调试………………………………………….............................………13
5.1管脚设定…………………………………………….......................................……………13
5.2修改Device&PinsOptions及重新编译………………….....................................………13
5.3程序下载及运行结果………………………………………………………............………14
六、实验中遇到的问题及其应对方案……………………………………….............…………15
七、实验总结与感想………………………………………………….............................………15
八、参考文献…………………………………………………………….............................……15
一、设计要求
1.1设计基本部分要求
①能进行正常的时、分、秒计时功能;
②分别由六个数码管显示时分秒的计时;
③K1是系统的使能开关(K1=0正常工作,K1=1时钟保持不变);
④K2是系统的清零开关(K2=0正常工作,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.1分层设计
为了实现多功能数字钟,我们采用了Verilog语言描述其功能,如图2.1所示,为本实验的层次分析设计结构图。
图2.1多功能数字钟电路的层次模型
①DigitalClock直接或间接的调用了下面所有的函数,规定了整个系统的输入和输出变量,是整个系统的Top-LevelEntity。
②TopFrequency调用了48MHz分为1kHz的OriginalFrequency模块和1kHz分为500Hz,1Hz的实用分频模块,构成了整个电路的频率基础。
③TopClock由3种计数器和一个二选一电路实现,表示时的模24计数器和模12计数器在整个电路中同时保持计时,通过二选一电路选择其中一个,显示在LED电路中。
④Radio是控制整点报时的电路,声调由分频电路的1kHz和500Hz提供。
⑤Alarm是闹钟控制电路,通过比较闹钟时间和计时时间得到需要叫醒的时刻,并且连续响铃1min,但是它的程序与Bell合并,写入了一个程序中。
⑥LED显示电路,通过远大于1Hz的扫描频率,在每1s内扫描多次时、分、秒数值,并闪烁显示在七段译码管上,由于扫描频率很高,人眼是不会分辨出显示时间在闪烁的。
2.2分工情况
整个多功能时钟的设计由郑蕤荻和我(徐洁)共同完成,既有明确的分工以提高效率,也有互相帮助,互相指出错误的合作过程,以下为我们两个人明确分工的情况:
***:
DigitalClock,TopClock,2to1MUX,Comparator,Bell,LED;
**:
TopFrequency,OriginalFrequency,DividedFrequency,AllthecountersandRadio.
三、多功能数字时钟顶层设计
DigitalClock为整个多功能数字钟系统的顶层设计,它直接或间接的调用了所有的子程序,实现了将整个底层程序贯穿联接的功能,规定了多功能数字钟的输入和输出。
输入有:
EP3C25F324C8的自带晶振频率48MHz,清零信号,清零按钮,12/24小时切换按钮,开启闹钟时间设置键,计时时设置键,计时分设置键,闹钟时设置键,闹钟分设置键以及闹钟关闭按键;输出有:
LED管的位码和段码。
DigitalClock,程序中简称DC,verilog语言程序及各句含义如下:
//Digital_Clock
moduleDC(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;//系统的输入时钟信号
inputnCR;//系统总清零信号
outputSG1,SG2,SG3,SG4,SG5,SG6,SG7,SG8;//selectLED
output[7:
0]LED_Hr,LED_Min,LED_Sec;//输出变量,输出8421BCD码给显示器
wire[7:
0]LED_Hr,LED_Min,LED_Sec;//说明变量的类型
wire_1kHzIN,_1Hz,_500Hz;//分频器输出信号
inputAdjMinkey,AdjHrkey;//校正计时器小时、分钟的输入按键
wire[7:
0]Hour,Hour_24,Hour_12,Minute,Second;//计时器的输出信号
inputSetHrkey,SetMinkey;//设定闹钟小时、分钟输入按键
wire[7:
0]Set_Hr,Set_Min;//设定的闹钟时间输出信号
wireALARM_Radio;//仿电台报时信号输出
wireALARM_Clock;//闹钟的信号输出
outputALARM;//仿电台或闹钟的声音信号输出
inputCtrlBell;//控制闹钟的声音是否输出的按键
inputMode1,Mode2;/*控制显示模式切换的按键
Mode1=1时,显示闹钟设定的时间,Mode1=0时,显示计时器的时间
Mode2=1时,显示24小时制,Mode2=0时,显示12小时制*/
output[6:
0]Segout;//7-segmentcodeoutput,segout[6...0]-gfedcba
output[2:
0]Count;
output[3:
0]Seg_in;
Top_Frequency(_48MHz,CP,_1Hz,_500HzOut,nCR);
top_clockU1(Hour,Minute,Second,_1Hz,nCR,AdjMinkey,AdjHrkey,Mode2);//计时主体电路
LED2(CP,LED_Hr[7:
4],LED_Hr[3:
0],LED_Min[7:
4],LED_Min[3:
0],LED_Sec[7:
4],
LED_Sec[3:
0],Segout,Seg_in,Count,SG1,SG2,SG3,SG4,SG5,SG6,SG7,SG8);
RadioU2(ALARM_Radio,Minute,Second,CP,_500Hz);//仿电台整点报时
BellU3(ALARM_Clock,Set_Hr,Set_Min,Hour,Minute,Second,SetHrkey,SetMinkey,CP,_500Hz,_1Hz,CtrlBell);//定时闹钟模块
assignALARM=ALARM_Radio||ALARM_Clock;//扬声器总控制模块
//选择要显示的数码送数模块
_2to1MUXMU2(LED_Hr,Mode1,Set_Hr,Hour);
_2to1MUXMU3(LED_Min,Mode1,Set_Min,Minute);
_2to1MUXMU4(LED_Sec,Mode1,8'h00,Second);
endmodule
四、各子模块设计原理及程序
4.1分频电路
分频模块是为了实现EP3C25F324C8的自带晶振频率48MHz,往1kHz,500Hz以及1Hz的分频,由于48MHz直接分到1kHz后,所有波形都没有办法在QuartusII仿真中直观的看见,为了调试和检验的方便,我们将48MHz分为1kHz称为原始分频,与后面的分频断开。
下面是该电路的verilog程序以及其原理简介:
//Top_Frequency
moduleTop_Frequency(_48MHz,_1kHzIN,_1HzOut,_500HzOut,nCR);
input_48MHz,nCR;
output_1kHzIN,_500HzOut,_1HzOut;
wire_1kHzIN;
wire_1HzOut,_500HzOut;
Original_FrequencyU0(_1kHzIN,_48MHz,nCR);
Divided_FrequencyU1(_1HzOut,_500HzOut,nCR,_1kHzIN);
endmodule
//Original_Frequency
moduleOriginal_Frequency(_1kHzIN,_48MHz,nCR);
input_48MHz,nCR;
output_1kHzIN;
supply1Vdd;
wire[19:
0]Q;
wireEN1,EN2,EN3,EN4;
counter10EU0(Q[3:
0],nCR,Vdd,_48MHz);
counter10EU1(Q[7:
4],nCR,EN1,_48MHz);
counter10EU2(Q[11:
8],nCR,EN2,_48MHz);
counter6EU3(Q[15:
12],nCR,EN3,_48MHz);
counter10EU4(Q[19:
16],nCR,EN4,_48MHz);
assignEN1=(Q[3:
0]==4'h9);
assignEN2=(Q[7:
4]==4'h9)&(Q[3:
0]==4'h9);
assignEN3=(Q[11:
8]==4'h9)&(Q[7:
4]==4'h9)&(Q[3:
0]==4'h9);
assignEN4=(Q[15:
12]==4'h5)&(Q[11:
8]==4'h9)&(Q[7:
4]==4'h9)&(Q[3:
0]==4'h9);
assign_1kHzIN=Q[18];
endmodule
moduleDivided_Frequency(_1HzOut,_500HzOut,nCR,_1kHzIN);
input_1kHzIN,nCR;
output_1HzOut,_500HzOut;
supply1Vdd;//定义Vdd为高电平
wire[11:
0]Q;//计数器的输出信号(中间变量)
wireEN1,EN2;//计数器使能信号(中间变量)
counter10DU0(Q[3:
0],nCR,Vdd,_1kHzIN);//调用十进制计数器模块
counter10DU1(Q[7:
4],nCR,EN1,_1kHzIN);
counter10DU2(Q[11:
8],nCR,EN2,_1kHzIN);
assignEN1=(Q[3:
0]==4'h9);
assignEN2=(Q[7:
4]==4'h9)&(Q[3:
0]==4'h9);
assign_1HzOut=Q[11];
assign_500HzOut=Q[0];
endmodule
4.2计数器
计数器是整个数字钟电路的最基本模块,在分频、时钟等处被多次调用,模60计数器是秒和分的计数器,模12和模24为时的计数器,分频中则多次用到十分频、八分频以及六分频,verilog语言程序及原理简介如下:
//counter24.v
modulecounter24(CounterH,CounterL,nCR,EN,CP);
inputCP,nCR,EN;//timingimpulseCP,zeroclearingsingalnCR,enablesingalEN
output[3:
0]CounterH,CounterL;
reg[3:
0]CounterH,CounterL;/*定义了两个四位Reg型矢量,等效于8个变量(CounterH[0]、CounterH[1]、CounterH[2]、CounterH[3]),
(CounterL[0]、CounterL[1]、CounterL[2]、CounterL[3])*/
always@(posedgeCPornegedgenCR)//时钟上升沿或清零信号跳变为低电平时,条件为真
begin
if(~nCR){CounterH,CounterL}<=8'h00;//nCR=0,异步清零
elseif(~EN){CounterH,CounterL}<={CounterH,CounterL};//对使能信号无效的处理
elseif((CounterH>2)||(CounterL>9)||(CounterH==2)&&(CounterL>=3))
{CounterH,CounterL}<=8'h00;//对小时计时器出错的处理
elseif((CounterH==2)&&(CounterL<3))
beginCounterH<=CounterH;CounterL<=CounterL+1'b1;end//进行20到23计数
elseif(CounterL==9)
beginCounterH<=CounterH+1'b1;CounterL<=4'b0000;end//小时十位进位计数
else
beginCounterH<=CounterH;CounterL<=CounterL+1'b1;end//小时个位计数
end
endmodule
//counter60.v
modulecounter10(Q,nCR,EN,CP);
inputCP,nCR,EN;
output[3:
0]Q;
reg[3:
0]Q;//定义了一个四位Reg型矢量,等效于4个变量(Q[0]、Q[1]、Q[2]、Q[3])
always@(posedgeCPornegedgenCR)//时钟上升沿或清零信号跳变为低电平时,条件为真
begin
if(~nCR)Q<=4'b0000;//nCR=0,计数器被异步清零
elseif(~EN)Q<=Q;//EN=0,使能无效,暂停计数
elseif(Q==4'b1001)Q<=4'b0000;
elseQ<=Q+1'b1;//计数器増1计数
end
endmodule
modulecounter6(Q,nCR,EN,CP);
inputCP,nCR,EN;
output[3:
0]Q;
reg[3:
0]Q;
always@(posedgeCPornegedgenCR)
begin
if(~nCR)Q<=4'b0000;//nCR=0,计数器被异步清零
elseif(~EN)Q<=Q;//EN=0,暂停计数
elseif(Q==4'b0101)Q<=4'b0000;
elseQ<=Q+1'b1;//计数器増1计数
end
endmodule
modulecounter60(Counter,nCR,EN,CP);
inputCP,nCR,EN;
output[7:
0]Counter;//模六十计数器的输出信号
wire[7:
0]Counter;//输出为8421BCD码
wireENP;//计数器十位的使能信号(中间变量)
counter10UC0(Counter[3:
0],nCR,EN,CP);//计数器的个数
counter6UC1(Counter[7:
4],nCR,ENP,CP);//计数器的十位
assignENP=(Counter[3:
0]==4'h9);//产生计数器十位的使能信号
endmodule
//counter12
modulecounter12(CntH,CntL,nCR,EN,CP);
inputCP,nCR,EN;//timingimpulseCP,zeroclearingsingalnCR,enablesingalEN
output[3:
0]CntH,CntL;
reg[3:
0]CntH,CntL;
always@(posedgeCPornegedgenCR)
begin
if(~nCR){CntH,CntL}<=8'h00;
elseif(~EN){CntH,CntL}<={CntH,CntL};
elseif((CntH>1)||(CntL>9)||(CntH==1)&&(CntL>=1))
{CntH,CntL}<=8'h00;
elseif((CntH==1)&&(CntL<1))
beginCntH<=CntH;CntL<=CntL+1'b1;end
elseif(CntL==9)
beginCntH<=CntH+1'b1;CntL<=4'b0000;end
else
beginCntH<=CntH;CntL<=CntL+1'b1;end
end
endmodule
4.3计时电路
计时电路将秒往分的进位,以及分往时的进位写入了程序,再利用分频得出的1Hz频率作为秒的CP信号,使得整个时钟电路得以正常工作。
Verilog程序及其原理简介如下:
//top_clock.v
moduletop_clock(Hour,Minute,Second,_1Hz,nCR,AdjMinkey,AdjHrkey,Mode2);
input_1Hz,nCR,AdjMinkey,AdjHrkey;
output[7:
0]Hour,Minute,Second;
wire[7:
0]Hour,Hour_24,Hour_12,Minute,Second;
supply1Vdd;//定义Vdd为高
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 多功能 数字 论文 程序
![提示](https://static.bdocx.com/images/bang_tan.gif)