EDA设计数字钟实验报告.doc_第1页
EDA设计数字钟实验报告.doc_第2页
EDA设计数字钟实验报告.doc_第3页
EDA设计数字钟实验报告.doc_第4页
EDA设计数字钟实验报告.doc_第5页
已阅读5页,还剩18页未读 继续免费阅读

下载本文档

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

文档简介

南京理工大学EDA()实验报告 多功能数字钟姓名:学号:学院:指导教师:时间:2014/11/32014/11/7摘要日益复杂的电子线路使得基于原理图的设计越来越复杂,甚至不切实际。硬件描述语言的诞生,对设计自动化起到了极大的促进和推动作用。Verilog HDL就是在用途最广泛的C语言的基础上发展起来的一种硬件描述语言,实现了从算法级、门级到开关级的多种抽象设计层次的数字系统建模,具有仿真,验证,故障模拟与时序分析等功能。本文利用Verilog HDL语言,采用自顶向下的设计方法设计多功能数字钟,并通过Quartus分块进行了仿真。此程序通过下载到FPGA芯片后,可实现实际的数字钟显示,具有基本的计时显示和设置,时间校正,整点报时,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 automation 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 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.1 遇到的问题与解决方案5.2 尚存在的不足之处5.3 收获与感悟参考文献第一章 数字钟设计要求说明(一) 数字钟可以正常进行基本的时,分,秒计时功能。(二) 分别由六个数码管显示时分秒的计时。(三) 可以对数字钟的小时和分钟进行校正。(四) 具有整点报时功能,在时钟计时到59分53秒时开始报时,在59分53秒,55秒,57秒时报时频率为500Hz, 59分59秒时报时频率为1kHz。(五) 具有闹钟设定功能,具体到小时和分钟,默认模式下闹钟响一分钟。有按键可以控制闹钟是否发出声响。(六) 可以进行12/24小时转换。(七) 具有重置清零功能。第二章 数字钟的设计思路和工作原理本文中的数字钟设计采用自底向上的设计方法,共分为三层。首先设计基础模块,包括模6,10,12,24,60 计数器模块,系统频率48MHz到2kHz和1kHz分频模块,1kHz到500Hz,250Hz,1Hz的分频模块,整点报时模块,闹钟模块,LED显示模块。然后,用一个顶层模块控制模12,24,60计数器模块构成基本的计时模块;再用一个顶层模块控制两个分频模块,实现分频模块的统一。最后用一个总的顶层电路,统一之前的子模块,实现数字钟的Verilog HDL描述。如下图方框图所示。其工作原理是:由系统晶振产生48MHz的稳定的高频脉冲信号,作为数字钟的时间基准,再经过分频器输出标准秒脉冲。模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计数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)*/ always(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 /进行20到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 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) /时钟上升沿或清零信号跳变为低电平时,条件为真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 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=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; /模六十计数器的输出信号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(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; 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) begin 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=7b1000000;4b0001:Segout=7b1111001;4b0010:Segout=7b0100100;4b0011:Segout=7b0110000;4b0100:Segout=7b0011001;4b0101:Segout=7b0010010;4b0110:Segout=7b0000010;4b0111:Segout=7b1111000;4b1000:Segout=7b0000000;4b1001:Segout=7b0010000;4b1010:Segout=7b0001000;4b1011:Segout=7b0000011;4b1100:Segout=7b0100111;4b1101:Segout=7b0100001;4b1110:Segout=7b0000110;4b1111:Segout=7b0001110;default: Segout= 7b0100011;endcaseendmodule为了初步测试LED数码管显示电路的功能,将LED2.v放到之前的top_clock.v的顶层模块下,得到仿真波形如下。可见是符合设计要求的。3.7 数字钟顶层模块组合之前设计的各个模块就可以得到具有数字钟功能的电路。它由7个模块组成,其中5个模块是通过调用下层模块实现,包括分频模块(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,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,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; /仿电台报时信号输出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,segout6.0-gfedcbaoutput2:0Count;output 3:0Seg_in;Top_Frequency U0 (_48MHz,CP,_1Hz,_500HzOut,nCR);top_clock U1 (Hour,Minute,Second,_1Hz,nCR,AdjMinkey,AdjHrkey,Mode2); /计时主体电路LED2 U2 (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 U3 (ALARM_Radio,Minute, Second,CP,_500Hz); /整点报时Bell U4 (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);_2to1MUX MU4(LED_Sec,Mode1,8h00,Second);Endmodule第四章 FPGA实现在仿真得到理想结果并完成器件选择和引脚分配(引脚分配如下图所示)之后,重新运行编译器,Quartus生成.sof等编程数据文件,通过下载电缆下载到预先选择的FPGA芯片中。下载完成后,数字钟开始工作,调节相应控制键可以改变数字钟的工作状态。(不需要观察的输出端未分配引脚,未分配的引脚设置为高阻状态。)下载完成后,数字钟开始工作,调节下表相应的控制键可以改变数字钟的工作状态,

温馨提示

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

评论

0/150

提交评论