《EDA设计数字钟实验报告(共23页).doc》由会员分享,可在线阅读,更多相关《EDA设计数字钟实验报告(共23页).doc(23页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、精选优质文档-倾情为你奉上南京理工大学EDA()实验报告 多功能数字钟姓名:学号:学院:指导教师:时间:2014/11/32014/11/7摘要日益复杂的电子线路使得基于原理图的设计越来越复杂,甚至不切实际。硬件描述语言的诞生,对设计自动化起到了极大的促进和推动作用。Verilog HDL就是在用途最广泛的C语言的基础上发展起来的一种硬件描述语言,实现了从算法级、门级到开关级的多种抽象设计层次的数字系统建模,具有仿真,验证,故障模拟与时序分析等功能。本文利用Verilog HDL语言,采用自顶向下的设计方法设计多功能数字钟,并通过Quartus分块进行了仿真。此程序通过下载到FPGA芯片后,可
2、实现实际的数字钟显示,具有基本的计时显示和设置,时间校正,整点报时,12h/24h转换,闹钟设置和闹铃控制的功能。关键词: FPGA, Verilog HDL, Quartus, EP3C25F324C8,数字钟 AbstractThe development of electronic circuit has grown to be too complicated to be designed base on schematic diagram. The birth of HDL accelerated the development of electronic design automat
3、ion drastically. Verilog HDL is one of the HDL with multiple and strong functions.In this thesis, a complex digital system is designed in the bottom-up way with Verilog HDL and is simulated by Quartus. The function of a digital clock can be realized by downloading the program to FPGA, which includes
4、 timing, time-setting, hourly chiming, 12/24transforming, bell-setting and bell-controlling.Keywords: FPGA, Verilog HDL, Quartus, EP3C25F324C8,Digital clock目录摘要Abstract第一章 数字钟设计要求说明第二章 数字钟的设计思路和工作原理第三章 模块的Verilog HDL设计与仿真3.1 计数器模块3.2 基本计时顶层模块3.3 分频模块3.4 整点报时模块3.5闹钟模块3.6 LED数码管显示模块3.7 数字钟顶层模块第四章 FPGA
5、实现第五章 总结5.1 遇到的问题与解决方案5.2 尚存在的不足之处5.3 收获与感悟参考文献第一章 数字钟设计要求说明(一) 数字钟可以正常进行基本的时,分,秒计时功能。(二) 分别由六个数码管显示时分秒的计时。(三) 可以对数字钟的小时和分钟进行校正。(四) 具有整点报时功能,在时钟计时到59分53秒时开始报时,在59分53秒,55秒,57秒时报时频率为500Hz, 59分59秒时报时频率为1kHz。(五) 具有闹钟设定功能,具体到小时和分钟,默认模式下闹钟响一分钟。有按键可以控制闹钟是否发出声响。(六) 可以进行12/24小时转换。(七) 具有重置清零功能。第二章 数字钟的设计思路和工作
6、原理本文中的数字钟设计采用自底向上的设计方法,共分为三层。首先设计基础模块,包括模6,10,12,24,60 计数器模块,系统频率48MHz到2kHz和1kHz分频模块,1kHz到500Hz,250Hz,1Hz的分频模块,整点报时模块,闹钟模块,LED显示模块。然后,用一个顶层模块控制模12,24,60计数器模块构成基本的计时模块;再用一个顶层模块控制两个分频模块,实现分频模块的统一。最后用一个总的顶层电路,统一之前的子模块,实现数字钟的Verilog HDL描述。如下图方框图所示。其工作原理是:由系统晶振产生48MHz的稳定的高频脉冲信号,作为数字钟的时间基准,再经过分频器输出标准秒脉冲。模
7、60计数器作为分钟和秒计数器,秒计数器计满60后向分计数器进位,分计数器满60后向小时计数器进位,小时计数器由模24计数器计数。计数器的输出送至LED译码显示电路,即可显示时间。计时出现误差时可以用校正电路对小时和分钟进行计数。整点报时电路和闹钟电路为基本计时电路的功能拓展,只有在基本计时模块正常运行的情况下才能运行。第三章 模块的Verilog HDL设计3.1计数器模块3.1.1 模24小时计数器小时计数器的计数规律为00-01-02-03 10-11-12 22-23-00 ,这样就要求在设计时小时计数器的个位和十位均按照8421BCD码计数。程序如下:/counter24.v (BCD
8、计数023)module 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,CounterL;/*定义了两个四位Reg型矢量,等效于8个变量(CounterH0、CounterH1、CounterH2、CounterH3),(CounterL0、CounterL1、CounterL2、CounterL3)*/ alwa
9、ys(posedge CP or negedge nCR) /时钟上升沿或清零信号跳变为低电平时,条件为真 begin if(nCR) CounterH,CounterL= 8h00; /nCR=0,异步清零else if (EN) CounterH,CounterL2)|(CounterL9)|(CounterH=2)&(CounterL=3) CounterH,CounterL=8h00; /对小时计时器出错的处理 else if (CounterH=2)&(CounterL3) begin CounterH=CounterH; CounterL=CounterL+1b1;end /进行2
10、0到23计数 else if (CounterL=9) begin CounterH=CounterH+1b1; CounterL=4b0000;end /小时十位进位计数 else begin CounterH=CounterH; CounterL=CounterL+1b1;end /小时个位计数 endendmodule3.1.2 模60分钟和秒计数器分和秒计数器的计数规律为00-01- -09-10-11- -58-59-00,可见个位计数器从09计数,十位计数器从05计数。因此可以先分别设计一个十进制计数器和一个六进制计数器模块,然后组合成60进制模块。程序如下:module coun
11、ter10(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) /时钟上升沿或清零信号跳变为低电平时,条件为真beginif(nCR) Q=4b0000; /nCR=0,计数器被异步清零else if (EN) Q=Q; /EN=0,使能无效,暂停计数else if (Q=4b1001) Q=4b0000; else Q=Q+1b1; /计数器増1计数endendmodulemodule counter
12、6(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=4b0000; /nCR=0,计数器被异步清零else if (EN) Q=Q; /EN=0,暂停计数else if (Q=4b0101) Q=4b0000;else Q=Q+1b1; /计数器増1计数end endmodulemodule counter60(Counter,nCR,EN,CP);input CP,nCR,EN;output 7:0 Counter; /模六十计数器的输出信
13、号wire 7:0 Counter; /输出为8421BCD码wire ENP; /计数器十位的使能信号(中间变量)counter10 UC0 (Counter3:0,nCR,EN,CP); /计数器的个数counter6 UC1 (Counter7:4,nCR,ENP,CP); /计数器的十位assign ENP=(Counter3:0=4h9); /产生计数器十位的使能信号endmodule3.1.3 模12小时计数器在12/24小时转换后,小时将需要模12计数器进行计数。思想与模24计数器相同,具体程序如下:/counter12.v (BCD011)module counter12(Cn
14、tH,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; always(posedge CP or negedge nCR) begin if(nCR) CntH,CntL= 8h00; else if (EN) CntH,CntL1)|(CntL9)|(CntH=1)&(CntL=1) CntH,CntL=8h00; else if (CntH=1)&(CntL1) begi
15、n CntH=CntH; CntL=CntL+1b1;end else if (CntL=9) begin CntH=CntH+1b1; CntL=4b0000;end else begin CntH=CntH; CntL7 Segment Code(ag)always(Seg_in) case(Seg_in) /gfedcba4b0000:Segout=7b;4b0001:Segout=7b;4b0010:Segout=7b;4b0011:Segout=7b;4b0100:Segout=7b;4b0101:Segout=7b;4b0110:Segout=7b;4b0111:Segout=7b
16、;4b1000:Segout=7b;4b1001:Segout=7b;4b1010:Segout=7b;4b1011:Segout=7b;4b1100:Segout=7b;4b1101:Segout=7b;4b1110:Segout=7b;4b1111:Segout=7b;default: Segout= 7b;endcaseendmodule为了初步测试LED数码管显示电路的功能,将LED2.v放到之前的top_clock.v的顶层模块下,得到仿真波形如下。可见是符合设计要求的。3.7 数字钟顶层模块组合之前设计的各个模块就可以得到具有数字钟功能的电路。它由7个模块组成,其中5个模块是通过调
17、用下层模块实现,包括分频模块(U0),数字钟基本计时电路(U1),LED显示电路(U2),整点报时电路(U3),定时闹钟电路(U4)。另外2个模块直接在顶层程序中完成,扬声器的总控制模块用连续赋值语句“assign ALARM=ALARM_Radio | ALARM_Clock;”实现,达到将两个需要扬声器的信号组合起来输出的目的。用3个二选一数据选择器实现对显示其模式的切换,当Mode1=1时,显示闹钟设定时间。当Mode1=0时,显示计时器当前时间。具体程序如下:/Digital_Clockmodule DC(LED_Hr,LED_Min,LED_Sec,ALARM,_48MHz,AdjM
18、inkey,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,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; /设定闹钟小时、分钟输入按键wire 7:0 Set_Hr,Set_Min; /设定的闹钟时间输出信号wire ALARM_Radio; /仿电台报时信