《适用多功能数字钟(EDA技术课程设计).doc》由会员分享,可在线阅读,更多相关《适用多功能数字钟(EDA技术课程设计).doc(27页珍藏版)》请在三一办公上搜索。
1、成绩 课 程 设 计 说 明 书 课程设计名称: EDA技术课程设计 题 目: 适用多功能数字钟 学 生 姓 名: 王 江 海 专 业: 信 息 工 程 学 号: 312007080609114 指 导 教 师: 杨 坤 明 日期:2010年 6月 18日适用多功能数字钟摘 要:Verilog是广泛应用的硬件描述语言,可以用在硬件设计流程的建模、综合和模拟等多个阶段。随着硬件设计规模的不断扩大,应用硬件描述语言进行描述的CPLD结构,成为设计专用集成电路和其他集成电路的主流。通过应用Verilog HDL对适用多功能数字钟的设计,达到对Verilog HDL的理解,同时对CPLD器件进行简要了
2、解。本文的研究内容包括:应用Verilog HDL对适用多功能数字钟进行设计。关键词:适用多功能数字钟;硬件描述语言Abstract: Verilog is the most widely used hardware description language.It can be used to the modeling, synthesis, and simulation stages of the hardware system design flow. With the scale of hardware design continually enlarging, describing t
3、he CPLD with HDL become the mainstream of designing ASIC and other IC.To comprehend Verilog HDL and get some knowledge of CPLD device, we design a block with several functions with Verilog HDL.This thesis is about to discuss the above there aspects: Design Apply to the multifunctional digital clock
4、with Verilog HDL.Keywords:Apply to the multifunctional digital clock; hardware description language目 录1 前言11.1课题的背景和目的11.2 EDA技术的介绍11.3 EDA技术的发展21.4 EDA技术的发展趋势22 总体方案设计42.2方案比较42.3 方案论证52.4方案选择53.单元模块电路简介与设计73.1 晶体振荡电路模块73.2 JTAG下载电路模块73.3 显示电路模块73.4 闹钟驱动电路模块83.5 电源电路模块84.基于VERILOG HDL语言的软件设计115系统仿真
5、及调试206 设计总结23 6.1设计小结.23 6.2设计收获.23 6.3设计改进.237致谢248参考文献25附录一:CPLD中顶层模块连接图26附录二:在QUARTUSII软件中利用硬件描述语言描述电路后,用RTL VIEWERS生成的对应的电路图如下271 前言 随着电子技术的发展,现场可编程们陈列FPGA和复杂可编程逻辑器件CPLD的出现,使得电子系统的设计者利用与器件相应的电子软件CAD,可以设计出自己专用的集成电路ASIC器件。这种可编程ASIC不仅使设产品达到小型化、集成化和和高可靠性。还减小设计成本和设计周期,而且器件据用用户可编程特性。在现现代计算机技术和电子工艺的发展,
6、使得现代数字系统的设计和应用进入了新的阶段。电子设计自动化(EDA)技术在数字设计中起的作用越来越重要,新的工具和新的设计方法不断推出,可编程逻辑器件不断增加新的模块,功能也是越来越强,硬件设计语言也顺应形势,推出新的标准,更加好用,更加便捷。1.1课题的背景和目的二十一世纪是信息化高速发展的世纪,产业的信息化离不开硬件芯片的支持。芯片技术的进步是推动全球信息化的动力。因此在二十一世纪掌握芯片技术是十分有必要的。本次课题是计算机组成原理的课程设计,这次课题旨在通过自己对所需功能芯片的设计与实现来巩固以前所学的计算机硬件基础知识,同时也提高动手实践的能力,还有为将来进行更大规模更复杂的开发积累经
7、验。1.2 EDA技术的介绍EDA是电子设计自动化(Electronic Design Automation)缩写,是90年代初从CAD(计算机辅助设计)、CAM(计算机辅助制造)、CAT(计算机辅助测试)和CAE(计算机辅助工程)的概念发展而来的。EDA技术是以计算机为工具,根据硬件描述语言HDL( Hardware Description language)完成的设计文件,自动地完成逻辑编译、化简、分割、综合及优化、布局布线、仿真以及对于特定目标芯片的适配编译和编程下载等工作。硬件描述语言HDL是相对于一般的计算机软件语言,如:C、PASCAL而言的。HDL语言使用与设计硬件电子系统的计算
8、机语言,它能描述电子系统的逻辑功能、电路结构和连接方式。设计者可利用HDL程序来描述所希望的电路系统,规定器件结构特征和电路的行为方式;然后利用综合器和适配器将此程序编程能控制FPGA和CPLD内部结构,并实现相应逻辑功能的的门级或更底层的结构网表文件或下载文件。目前,就FPGA/CPLD开发来说,比较常用和流行的HDL主要有ABEL-HDL、AHDL和VHDL。 1.3 EDA技术的发展可将EDA技术分为三个阶段:(1)七十年代为CAD阶段,人们开始用计算机辅助进行IC版图编辑、PCB布局布线,取代了手工操作,产生了计算机辅助设计的概念。(2)八十年代为CAE阶段,与CAD相比,除了纯粹的图
9、形绘制功能外,又增加了电路功能设计和结构设计,并且通过电气连接网络表将两者结合在一起,实现了工程设计,这就是计算机辅助工程的概念。CAE的主要功能是:原理图输入,逻辑仿真,电路分析,自动布局布线,PCB后分析。(3)九十年代为ESDA阶段,尽管CAD/CAE技术取得了巨大的成功,但并没有把人从繁重的设计工作中彻底解放出来。在整个设计过程中,自动化和智能化程度还不高,各种EDA软件界面千差万别,学习使用困难,并且互不兼容,直接影响到设计环节间的衔接。基于以上不足,人们开始追求:贯彻整个设计过程的自动化,这就是ESDA即电子系统设计自动化。1.4 EDA技术的发展趋势目前的EDA产业正处在一场大变
10、革的前夕,对更低成本、更低功耗的无止境追求和越来越短的产品上市压力正迫使IC供应商提供采用0.13m或以下的千万门级的系统芯片,而这些系统芯片的高复杂性设计更加依赖于EDA供应商提供全新的设计工具和方法以实现模拟前后端、混合信号和数字电路的完全整合。然而,这些新的需求为当代EDA工具和设计方法带来了不少新的挑战与机会。例如,如何在工艺上防止模拟电路与数字电路之间的干扰;现有的大部份EDA工具最多只能处理百万门级设计规模,随着IC设计向千万门级以上规模发展,现有EDA工具和方法必须进行升级。如何融合各EDA供应商的工具,以便向IC设计界提供更高效能和更方便的RTL-to-GDSII或Conc-e
11、pt-to-GDSII整合设计环境;为保证深亚微米(0.13m或以下)和更低内核工作电压(1.8V或以下)时代的信号完整性和设计时序收敛,必须采用新的设计方法。半导体工艺的每一次跃升都促使EDA工具改变自己,以适应工艺的发展;反过来EDA工具的进步又推动设计技术的发展。可以说EDA工具是IC设计产业的背后推手。系统芯片(SOC)正在迅速地进入主流产品的行列。由此引发的“芯片就等于整机”的现象,将对整个电子产业形成重大的冲击。种种迹象表明,整个电子产业正在酝酿着一场深刻的产业重组,这将为许多新兴的企业提供进入这一行业的最佳。2 总体方案设计2.1设计内容设计一个多功能的数字钟,该数字钟具有下述功
12、能:(1)计时功能:包括时,分,秒。(2)定时与闹钟功能:能在设定的时间发出闹铃音。(3)校时功能:对小时,分钟和秒能手动调整以校准时间。(4)整点报时功能:每逢整点,产生“嘀嘀嘀嘀嘟”,四短一长的报时音。2.2方案比较 方案一:本方案是采用模拟器件来实现具体的电子钟模块的,计时模块是由10进制,6进制,24进制计数器分别级联完成,输出的信号经过七段译码器由数码管显示出时间,再用三个锁存器模块对设定的具体时间锁存,再由比较器对设定时间和实际时间进行比较,判定是否相等来实现闹钟功能。图2.1 系统总体框图方案二:本方案采用的是CPLD芯片及外围电路实现。系统总体构成包括最小系统部分、晶振模块、电
13、源模块、JTAG下载模块、时间显示模块、闹钟报警模块,CPLD不仅完成对脉冲计数,完成时钟功能,还能同时对信号进行译码,能设定闹钟时间,和对设定时间比较闹时。图2.2 系统组成框图该图是CPLD内部原理模块图图2.3 CPLD内部原理框图2.3 方案论证方案一:该系统是利用数字电路中的进制计数器、译码、触发器、锁存器,比较器实现。这种小规模数字电路搭建起来比较复杂。在设计中用到的芯片多,控制复杂,功耗大,在一些小型的设计中还可以,电路稍微复杂,则很难控制其时序,况且输入组数不能很好的扩展。方案二:本方案是使用复杂可编程逻辑器件的CPLD芯片实现。实现起来比较简单,一些功能模块在CPLD里面用V
14、erilog HDL编程实现,比如这次实现的电子钟模块CPLD一块芯片就完成了包括七段译码,进制计数,设定闹时时间模块和比较闹时模块,其实我们还可以在CPLD内再扩展许多功能,设计方便,利于修改,且开发难度不高,很适合对于大规模的系统设计,还可以很容易在QuetusII 中仿真系统工作时序。2.4方案选择上述两个方案最大的区别就是:方案一采用的是数字编码器等芯片,而方案二是用复杂可编程逻辑器件CPLD。由于本设计针对电子钟设计使用,而且要求根据相应的要求进行功能扩展,使用CPLD在此方面更加有优势,而且要维护方便,调试简单,稳定性好,功耗低。基于上述两方案比较,论证,发现方案二更容易实现本次设
15、计的要求,并且方案二的电路较简单,程序容易控制,而且是EDA的热门技术,所以最终选择方案二。3.单元模块电路简介与设计3.1 晶体振荡电路模块MAXEPM570的时钟电路比较简单,在其2脚DCLOCK输入时钟信号即可。本系统采用的50M有源晶振。3.3V电源电压对其供电,其原理图如图3.1所示:图3.1 晶振电路模块3.2 JTAG下载电路模块JTAG下载电路是为MAXEPM570在程序用的,其原理图如图3.2所示:图3.2 JTAG下载电路3.3 显示电路模块 显示电路主要作用是显示延时间和抢答组数。直接用CPLD驱动两个数码管显示,数码管为共阴极管,其电路原理图如下:图3.3 显示电路3.
16、4 闹钟驱动电路模块报警电路用一个三极管驱动一个蜂鸣器产生,当时钟走到设定的闹钟时间后,CPLD的beer管脚会自动的给出高电平,驱动三极管,使蜂鸣器响:图3.4 蜂鸣报警电路3.5 电源电路模块电源电路主要是为系统提供电源,因为CPLD是3.3V,故整个系统用3.3V,用一个LM7805稳压产生一个5V电压,然后通过LM1117降压为系统需要的标准3.3V。外接68V直流电压输入,通过二极管整流,电容C滤波后送入LM7805稳压,一路送入LM1117中降压,一路送入蜂鸣器提供驱动。原理图如下图3.7和3.8所示:图3.5 5V电源电路图3.6 3.3V电源电路7805为三端稳压电路,主要的三
17、端稳压电路属性如表3.1所示表3.1 三端稳压电路参数 型号极性PD(w)Vi(v)Vo(v)Iq(A)封装78050.625/103050.250.055/1T0.92 T0.22078060.625/103060.30.060/1T0.92 T0.22078090.625/103090.450.060/1T0.92 T0.22078120.625/1030120.60.060/1T0.92 T0.22079050.625/103050.250.055/1T0.92 T0.22079060.625/103060.30.060/1T0.92 T0.22079090.625/103090.450
18、.060/1T0.92 T0.22079120.625/1030120.60.060/1T0.92 T0.220LM1117是一个低压差电压调节器系列。其压差在1.2V输出,负载电流为800mA时为1.2V。它与国家半导体的工业标准器件LM317有相同的管脚排列。LM1117有可调电压的版本,通过2个外部电阻可实现1.2513.8V输出电压范围。另外还有5个固定电压输出(1.8V、2.5V、2.85V、3.3V和5V)的型号。 LM1117提供电流限制和热保护。电路包含1个齐纳调节的带隙参考电压以确保输出电压的精度在1%以内。LM1117系列具有LLP、TO.263、SOT.223、TO.22
19、0和TO.252 D.PAK封装。输出端需要一个至少10uF的钽电容来改善瞬态响应和稳定性。提供1.8V、2.5V、2.85V、3.3V、5V和可调电压的型号,节省空间的SOT.223和LLP封装及电流限制和热保护功能,输出电流可达800mA, 线性调整率:0.2% (Max) 负载调整率:0.4% (Max) 温度范围LM1117:0125 LM1117I:.40125。4.基于Verilog HDL语言的软件设计/ 多功能数字钟/*信号定义:clk:标准时钟信号,本例中,其频率为4Hz;clk_1k:产生闹铃音、报时音的时钟信号,本例中其频率为1024Hz;mode:功能控制信号;为0:计
20、时功能;为1:闹钟功能;为2:手动校时功能;turn:接按键,在手动校时功能时,选择是调整小时,还是分钟;若长时间按住该键,还可使秒信号清零,用于精确调时;change:接按键,手动调整时,每按一次,计数器加1;如果长按,则连续快速加1,用于快速调时和定时;hour,min,sec:此三信号分别输出并显示时、分、秒信号,皆采用BCD码计数,分别驱动6个数码管显示时间;alert:输出到扬声器的信号,用于产生闹铃音和报时音;闹铃音为持续20秒的急促的嘀嘀嘀音,若按住change键,则可屏蔽该音;整点报时音为嘀嘀嘀嘀-嘟四短一长音;LD_alert:接发光二极管,指示是否设置了闹钟功能;LD_ho
21、ur:接发光二极管,指示当前调整的是小时信号;LD_min:接发光二极管,指示当前调整的是分钟信号。 */module clock(clk,clk_1k,mode,change,turn,alert,hour,min,sec,secH,secL,minH,minL,hourH,hourL, LD_alert,LD_hour,LD_min);input clk,clk_1k,mode,change,turn; output alert,LD_alert,LD_hour,LD_min;output7:0hour,min,sec,secH,secL,minH,minL,hourH,hourL;reg
22、7:0 hour,min,sec,hour1,min1,sec1,ahour,amin,secH,secL, minH,minL,hourH,hourL;reg1:0 m,fm,num1,num2,num3,num4;reg1: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 (posedg
23、e clk) begin clk_2Hz=clk_2Hz;if(sound=3) begin sound=0;ear=1;end/ear信号用于产生或屏蔽声音else begin sound=sound+1;ear=0;end end always (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,
24、count2,counta,countb四个信号 begin case(m) 2:begin if(fm) begin count1=change;LD_min,LD_hour=2;endelse begin counta=change;LD_min,LD_hour=1;endcount2,countb=0;end 1:begin if(fm) begin count2=change;LD_min,LD_hour=2;end else begin countb=change;LD_min,LD_hour=1;endcount1,counta=2b00;enddefault:count1,cou
25、nt2,counta,countb,LD_min,LD_hour=0;endcase end always (negedge clk)/如果长时间按下change键,则生成num1信号用于连续快速加1if(count2) begin if(loop1=3) num1=1;else begin loop1=loop1+1;num1=0;endendelse begin loop1=0;num1=0;endalways (negedge clk) /产生num2信号if(countb) begin if(loop2=3) num2=1;else begin loop2=loop2+1;num2=0
26、;endendelse begin loop2=0;num2=0;endalways (negedge clk)if(count1) begin if(loop3=3) num3=1;else begin loop3=loop3+1;num3=0;endendelse begin loop3=0;num3=0;endalways (negedge clk)if(counta) begin if(loop4=3) num4=1;else begin loop4=loop4+1;num4=0;endendelse begin loop4=0; num4=0; endassign ct1=(num3
27、&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(!(sec18h59)|turn&(!m)begin sec1=0;if(!(turn&(!m) minclk=1;en
28、d/按住turn按键一段时间,秒信号可清零,该功能用于手动精确调时else begin if(sec13:0=4b1001)begin sec13:0=4b0000;sec17:4=sec17:4+1;endelse sec13:0=sec13:0+1;minclk=0;endassign m_clk=minclk|count1;always (posedge ct1) /分计时和分调整进程 begin if(min1=8h59) begin min1=0;hclk=1;endelse begin if(min13:0=9)begin min13:0=0;min17:4=min17:4+1;e
29、ndelse min13:0=min13:0+1;hclk=0;end endassign h_clk=hclk|counta;always (posedge cta) /小时计时和小时调整进程if(hour1=8h23) hour1=0;elseif(hour13:0=9) begin hour17:4=hour17:4+1;hour13:0=0;endelse hour13:0=hour13:0+1;always (posedge ct2) /闹钟定时功能中的分钟调节进程if(amin=8h59) amin=0;elseif(amin3:0=9)begin amin3:0=0;amin7:
30、4=amin7:4+1;endelse amin3:0=amin3:0+1;always (posedge ctb) /闹钟定时功能中的小时调节进程if(ahour=8h23) ahour=0;elseif(ahour3:0=9)begin ahour3:0=0;ahour7:4=ahour7:4+1;endelse ahour3:0=ahour3:0+1;always /闹铃功能if(min1=amin)&(hour1=ahour)&(amin|ahour)&(!change)/若按住change键不放,可屏蔽闹铃音if(sec18h20) alert1=1;/控制闹铃的时间长短else a
31、lert1=0; else alert1=0;always /时、分、秒的显示控制case(m)3b00:begin hour=hour1;min=min1;sec=sec1;end/计时状态下的时、分、秒显示3b01:begin hour=ahour;min=amin;sec=8hzz;end/定时状态下的时、分、秒显示3b10:begin hour=hour1;min=min1;sec8h54)|(!(min1|sec1) if(sec18h54) alert2=ear&clk_1k;/产生短音else alert2=!ear&clk_1k;/产生长音else alert2=0; enda
32、lways /秒显示的译码 begin case(sec) 8h00: begin secH=8b11111100;secL=8b11111100; end 8h01: begin secH=8b11111100;secL=8b01100000; end 8h02: begin secH=8b11111100;secL=8b11011010; end 8h03: begin secH=8b11111100;secL=8b11110010; end 8h04: begin secH=8b11111100;secL=8b01100110; end 8h05: begin secH= 8b11111
33、100;secL=8b10110110; end 8h06: begin secH=8b11111100;secL=8b00111110; end 8h07: begin secH=8b11111100;secL=8b11100000; end 8h08: begin secH= 8b11111100;secL=8b11111110; end 8h09: begin secH=8b11111100;secL=8b11100110; end 8h10: begin secH=8b01100000;secL=8b11111100; end 8h11: begin secH=8b01100000;s
34、ecL=8b01100000; end 8h12: begin secH= 8b01100000;secL=8b11011010; end 8h13: begin secH=8b01100000;secL=8b11110010; end 8h14: begin secH=8b01100000;secL=8b01100110; end 8h15: begin secH= 8b01100000;secL=8b10110110; end 8h16: begin secH=8b01100000;secL=8b00111110; end 8h17: begin secH=8b01100000;secL=
35、8b11100000; end 8h18: begin secH= 8b01100000;secL=8b11111110; end 8h19: begin secH=8b01100000;secL=8b11100110; end 8h20: begin secH=8b11011010;secL=8b11111100; end 8h21: begin secH=8b11011010;secL=8b01100000; end 8h22: begin secH=8b11011010;secL=8b11011010; end 8h23: begin secH=8b11011010;secL=8b111
36、10010; end 8h24: begin secH=8b11011010;secL=8b01100110; end 8h25: begin secH= 8b11011010;secL=8b10110110; end 8h26: begin secH= 8b11011010;secL=8b00111110; end 8h27: begin secH=8b11011010;secL=8b11100000; end 8h28: begin secH=8b11011010;secL=8b11111110; end 8h29: begin secH=8b11011010;secL=8b1110011
37、0; end 8h30: begin secH=8b11110010;secL=8b11111100; end 8h31: begin secH= 8b11110010;secL=8b01100000; end 8h32: begin secH=8b11110010;secL=8b11011010; end 8h33: begin secH= 8b11110010;secL=8b11110010; end 8h34: begin secH=8b11110010;secL=8b01100110; end 8h35: begin secH=8b11110010;secL=8b10110110; e
38、nd 8h36: begin secH=8b11110010;secL=8b00111110; end 8h37: begin secH= 8b11110010;secL=8b11100000; end 8h38: begin secH= 8b11110010;secL=8b11111110; end 8h39: begin secH=8b11110010;secL=8b11100110; end 8h40: begin secH= 8b01100110;secL=8b11111100; end 8h41: begin secH= 8b01100110;secL=8b01100000; end
39、 8h42: begin secH=8b01100110;secL=8b11011010; end 8h43: begin secH=8b01100110;secL=8b11110010; end 8h44: begin secH=8b01100110;secL=8b01100110; end 8h45: begin secH=8b01100110;secL=8b10110110; end 8h46: begin secH=8b01100110;secL=8b00111110; end 8h47: begin secH= 8b01100110;secL=8b11100000; end 8h48
40、: begin secH= 8b01100110;secL=8b11111110; end 8h49: begin secH=8b01100110;secL=8b11100110; end 8h50: begin secH=8b10110110;secL=8b11111100; end 8h51: begin secH=8b10110110;secL=8b01100000; end 8h52: begin secH= 8b10110110;secL=8b11011010; end 8h53: begin secH= 8b10110110;secL=8b11110010; end 8h54: b
41、egin secH= 8b10110110;secL=8b01100110; end 8h55: begin secH=8b10110110;secL=8b10110110; end 8h56: begin secH= 8b10110110;secL=8b00111110; end 8h57: begin secH=8b10110110;secL=8b11100000; end 8h58: begin secH= 8b10110110;secL=8b11111110; end 8h59: begin secH=8b10110110;secL=8b11100110; end endcase endalways /分显示的译码 begin case(min) 8h00: begin minH=8b11111100;minL=8b11111100; end 8h01: beg