基于VerilogHDL设计的数字时钟

上传人:岁月****20 文档编号:62228353 上传时间:2022-03-14 格式:DOCX 页数:14 大小:553.79KB
返回 下载 相关 举报
基于VerilogHDL设计的数字时钟_第1页
第1页 / 共14页
基于VerilogHDL设计的数字时钟_第2页
第2页 / 共14页
基于VerilogHDL设计的数字时钟_第3页
第3页 / 共14页
点击查看更多>>
资源描述
深圳大学考试答题纸(以论文、报告等形式考核专用)课程编号学号二。18二。19学年度第一学期姓名 李思豪专业年级电子科学与技术16级1班1602080001课程名称硬件描述语言与逻辑综合主讲教师刘春平评分教师评语:题目:基于VerilogHDL设计的数字时钟摘要:本文利用VerilogHDL语言自顶向下的设计方法设计多功能数字钟,突出了其作为硬件描述语言的良好的可读性、可移植性与易理解等优点,并通过AlteraQuartusII6、0与cyclnoeIIEP2c35F672C6完成综合、仿真。此程序通过下载到FPGAK片后,可应用于实际的数字钟显示中关键词:VerilogHDL;硬件描述语言;FPGA目录一、实验任务3实验目的3实验要求3二、设计思路3三、实验结果10四、总结与收获14、实验任务实验目的1 .深入了解基于quartusii工具的复杂时序逻辑电路的设计2 .理解并熟练利用EDA工具进行综合设计。3 .熟练掌握芯片烧录的流程及步骤。4 .掌握VerilogHDL语言的语法规范及时序电路描述方法。实验要求设计一个带秒表功能的24小时数字钟,它包括以下几个组成部分:显示屏,由6个七段数码管组成,用于显示当前时间(时:分,秒)或设置的秒表时间;复位键复位所有显示与计数设置键,用于确定新的时间设置,三个消抖按键分别用于时分秒的设置秒表键,用于切换成秒表功能基本要求(1)计时功能:这就是本计时器设计的基本功能,每隔一秒计时一次,并在显示屏上显示当前时间。(2)秒表功能:设置时间,进行倒计时功能(3)设置新的计时器时间:按下设置键后,用户能通过时分秒三个消抖按键对时间进行设置。二、设计思路1、总原理框图:原理如上图所示,时钟由分频器模块,数码管显示模块,计时器模块三个模块构成,每个模块实现如下白不同功能,最后通过在顶层模块的调用,来实现时钟功能。2 .顶层模块:顶层模块调用三个字模块,并且定义输入输出口,代码输入所示:modulemyclock2(daojishi,stop,clk,reset,shi,fen,miao,miaoout1,miaoout2,fenout1,fenout2,shiout1,shiout2);inputclk,reset,stop,shi,fen,miao,daojishi;output6:0miaoout1,miaoout2,fenout1,fenout2,shiout1,shiout2;wire3:0miao1,miao2,fen1,fen2,shi1,shi2;wireclk_1hz;divider_1HZdivider1hz(clk_1hz,reset,clk);countcount1(daojishi,shi,fen,miao,stop,miao1,miao2,fen1,fen2,shi1,shi2,reset,clk_1hz);decode4_7d0(miaoout1,miao1);decode4_7d1(miaoout2,miao2);decode4_7d2(fenout1,fen1);decode4_7d3(fenout2,fen2);decode4_7d4(shiout1,shi1);decode4_7d5(shiout2,shi2);endmodule输入输出端口类型功能表引脚名功能daojishiinput秒表倒计时模式stopinput暂停按键clkinput晶振脉冲resetinput复位按键shiinput小时调节按键feninput分钟调节按键miaoinput秒调节按键miaoout1output秒个位数码管输出miaoout2output秒十位数码管输出fenout1output分个位数码管输出fenout2output分十位数码管输出shiout1output时个位数码管输出shiout2output时十位数码管输出三个子模块的原理与代码:(1)分频模块:分频模块的作用主要就是要获得各种频率的时钟信号。输入信号27MHZ的信号,要想获得1HZ的信号作为秒脉冲计时,则要对27MHz信号分频。通过计数的方式,当计数从0开始到时,1HZ信号取反一次,计数又从0开始,如此循环,就可以得到1HZ脉冲信号。对于其她信号也就是如此,只就是计数值不一样,得到的分频信号不同。模块代码如下:moduledivider_1HZ(clk_1hz,reset,clk);outputclk_1hz;inputreset,clk;regclk_1hz;reg23:0count;always(posedgeclk)beginif(reset)begincount=0;clk_1hz=0;endelsebeginif(count=)begincount=0;clk_1hz=clk_1hz;endelsecount=count+1;/计数endendendmodule(2)译码显示模块:一、数码管显示:通过传入响应的十进制数,运用case语句转换输出相应的7位二进制显示码,送入数码管显示。代码如下:moduledecode4_7(temp,indec);output6:0temp;input3:0indec;reg6:0temp;always(indec)begincase(indec)/用case语句进行译码4d0:temp6:0=7b1000000;4d1:temp6:0=7b1111001;4d2:temp6:0=7b0100100;4d3:temp6:0=7b0110000;4d4:temp6:0=7b0011001;4d5:temp6:0=7b0010010;4d6:temp6:0=7b0000010;4d7:temp6:0=7b1111000;4d8:temp6:0=7b0000000;4d9:temp6:0=7b0010000;default:temp=7bz;endcaseendendmodule(3)、计时器模块:秒计数:在1HZ脉冲下进行秒计时,当计时达到59秒后,在下一个脉冲来临变0,并发出一个脉冲信号,可供下面分钟计数作为输入脉冲信号计时。分钟计数:在输入脉冲下,分钟开始计时,当计时达到59后,在下一个脉冲来临变0,并发出一个脉冲,供小时计数的输入脉冲新号。小时计数:脉冲信号来临时,计数加1,达到23后在下一个脉冲的作用下清零从新计时。如果有复位信号,则时分秒全部清零。计时器模块还包含了设置时间与秒表切换的功能部分代码如下:modulecount(daojishi,shi,fen,miao,stop,miao1,miao2,fen1,fen2,shi1,shi2,reset,clk_1hz);inputreset,clk_1hz,stop,daojishi;inputshi,fen,miao;outputmiao1,miao2,fen1,fen2,shi1,shi2;reg3:0miao1,miao2,fen1,fen2,shi1,shi2;always(posedgeclk_1hz)beginif(reset)beginmiao1=0;miao2=0;fen1=0;fen2=0;shi1=0;shi2=0;endif(stop=1)begin/秒调节if(miao=0)beginmiao1=miao1+1;if(miao1=9)beginmiao1=0;miao2=miao2+1;if(miao2=5)beginmiao2=0;endendendif(fen=0)/分调节beginfen1=fen1+1;基于VerilogHDL设计的数字时钟if(fen1=9)beginfen1=0;fen2=fen2+1;if(fen2=5)beginfen2=0;endendendif(shi=O)时调节beginshi1=shi1+1;if(shi1=9|(shi1=3)&(shi2=2)beginshi1=0;shi2=2)beginshi2=0;endendendendif(!reset)&(stop=0)beginif(daojishi=0)时钟程序beginmiao1=miao1+1;if(miao1=9)beginmiao1=0;miao2=miao2+1;if(miao2=5)beginmiao2=0;fen1=fen1+1;if(fen1=9)beginfen1=0;fen2=fen2+1;if(fen2=5)beginshi1=shi1+1;if(shi1=9)|(shi1=3)&(shi2=2)beginshi1=0;shi2=shi2+1;if(shi2=2)beginshi2=0;endendendendendendendelse倒计时程序beginif(!(shi1=0)&(shi2=0)&(fen1=0)&(fen2=0)&(miao2=0)&(miao1=0)beginmiao1=miao1-1;if(miao1=0)beginmiao1=9;miao2=miao2-1;if(miao2=0)beginmiao2=5;fen1=fen1-1;if(fen1=0)beginfen1=9;fen2=fen2-1;if(fen2=0)beginfen2=5;shi1=shi1-1;if(shi1=0)beginshi1=9;shi2Tn.(ife叫mt 5mj启隐的 我 LEU娟Ut)3HlEL 出Ht) lSVLiTL.0fek3JtJ ”用lF瞬独此 3 ? V L El_假垣此 3L IT LTn. fdtMh) ZLTLEL (deFaJk) 3HLim.如“I 工HLfTTL址工JlU IJ.LipTn. (ifeK*Jli MMLE1.旗餐坨 ULTR (修修曲OutpLl司M_,13O辰叱0K矗ML1回户k项由1nJKKJLTj 国尸0T叫 Nfl LIn aWl引CutpL.t司工址12w 址 naMklirrCv6t可N % 12iMbnniucfaJU SJVLrTniftiQ Wlei酬、加3. MW |L EL *,!) a 央 L/nifdgf,it) 31HLmcMhJ中开&1山山尼J). n5ujILLH rnEjit|* .0 mMQjtL D macuti后 U maa xilLf. JJJ/MS4Q4LItuM名时孙L*14士弘*m:依山七ng邮)中J_U也1X LiTTL,def cd 匕D&J。榭1用N U2*1XIHTTL ffW*i ir明工嚣工Mimi州喇级-2团FlhWI13-Mnvrn.杜方斌$6皿力1旭到图MPJV31rfjfl3-34 1El fete占此XauTTU招aJE3叽M3aTTLl金山L由STd 333 aLm1 事一揄血百Output司N:31BL NO3LX5El;dU5t 川5hautl5|dg 土PTJ_6BL_NJa 兴 l*ttldioul1回。15h.3irtlCkJtfxtPTJJB71QLJM一 一.T-i -由口总止_口小“廿aQu必I5_耳LTL*r一*wt 埠|血叫呻皿BIJWWLEl肿日广防制1回可63或匚1|QvlIXitPlJNUl18U:VLYrn.(aUt:小3U呼川1他抽诩3 gt平口1aLjiS-vurmtaesutHU或欣闻皿常|dtpU叽貂1BLJFATTLWHJlifl JI2 工sh ?dll!Output:a34 310LI4OWTTL 二 nF1U值占.01司NF信MMntlT叫加W5BL阑31Mm附6迎曲U值.0J峙OntptTBLJMO炉MEM叵将情刁噌3Ou*=TN_?T0LJ3HLMTH团312后q47由n阈UoutputBLJW.3L3-ULiTTL(dP3Ut;市UtfG族刈*i-.jL.X;dUxt小,9LUOi:u_./iti&fE加吗IMTTLtJfefadL引脚分布图:、实验结果(1)波形仿真在QuartusII中利用仿真波形进行功能或时序仿真的基本步骤如下:(1)创建新的矢量波形文件(*、vwf)、(2)添加输入、输出节点。(3)编译输入节点的波形。(4)完成矢量波形文件的创建之后,用户即可以对设计进行功能或时序仿真。(5)仿真启动后,状态窗口会同时自动打开,在状态窗口中显示仿真进度及所用时间。(6)默认情况下,仿真器报告窗口内在仿真过程中会显示仿真波形部分,其中还包括当前仿真器的设置信息与仿真信息等。下面我们单独对三个子模块分别进行仿真并分析仿真结果(1)分频器模块仿真结果:仿真分析:我们取时钟信号的周期就是20ns,为了让仿真结果更明显,取每三个时钟周期让秒脉冲clk_1hz翻转一次,而不就是1349999翻转一次。并且让reset复位信号在仿真的160ns-300ns有效。结果如图所示,在每三个时钟信号出现时,秒脉冲都会翻转一次,在reset信号有效时,秒脉冲无输出,仿真结果符合预计要求(2)显示译码模块仿真结果:数码管输出数字8仿真图Hi tndae白I电ip-tep 丽-tEdptCi-m耶trap 5-tFip2-t&pl-tEptf住MftElErTire日ar20Sns-|pairTtEr16.72nsiMtBR-eriTHr)EETflfT0口EMdpb数码管输出数字8仿真图仿真结果分析:indec就是我们要输出的十进制数,temp就是连接7段数码的7位二进制数,已知数码管为共阴极数码管。我们设定indec为8,从图中可以瞧见temp7:0都就是0;所以7个数码管都会被点亮,就就是显示8。我们再设定indec为1,可以预见1在数码管中应该就是亮两个,如第二图所示只有temp1与temp2就是0,所以就就是亮两个灯,显示1。仿真结果符合设计要求。(3)计时器模块仿真结果:计数器计数仿真图SimuiAtiorbWAvrormitinnFi*dE-Tii5nB,5t9 C6n& lEmgi |-940 ps争en50 ntfanT 731心二1 5tllhLD Ba的计数器复位测试仿真图仿真结果:miao1,miao2,fen1,fen2,shi1,shi2分别就是秒分时的个位与十位,时钟脉冲clk_1hz每一个上升沿,miao1就加1,miao1再依次进位给更高的为。如图所示,当miaol计数到9的时候,miao2加1,当miao2计数到5的时候,fen1加1,时钟计数功能实现,仿真符合设计要求。图二就是复位信号reset的测试,当reset为1有效时,累计的时间清零。如图所以,当reset=1时,miao1,miao2,fen1,fen2,shi1,shi次部变0,仿真符合技术要此模块还有设置时间与倒计时的功能,但就是在波形仿真中不够直观,所以不做波形仿真。(2)DE2开发板实现将开发板插入电脑中,烧录进程序,进行各项功能测试,包括计日t功能,时间调节功能,秒表功能复位功能,暂停功能。实验过程记录:(1)烧录程序完成,DE2立刻开始从0秒计数,依次向分钟,小时进位,当时间为23:59:59时,下一秒全部跳0;时钟功能实现。(2)复位功能测试:switch0为复位信号按键,拨下该按键,时间清零,复位功能实现。(3)暂停功能测试:switch1为暂停信号按键,拨下该按键,时间暂停,暂停功能实现。(4)时间设置测试:消抖按钮key0,key1,key2,分别就是秒分时设置键。按下暂停键,计数停止,每按一下key0,秒力口一;每按一下key1,分加一;每按一下key2,小时加一。时间设置完成,回拨暂停键,时钟从设置的时间开始计时。时间设置功能实现。(5)秒表倒计时功能测试:switch2为倒计时信号按键,拨下该键后,时钟开始倒计时,倒计时功能实现。测试完成,所有测试结果符合设计要求,完成verilong时钟设计。四、总结与心得体会在QuartusII开发环境下,采用自顶向下的设计方法有利于在早期发现结构设计中的错误,避免不必要的重复设计。再结合基于FPGA的可编程实验板,轻轻松松就能实现各种电子产品的设计,现场观察实验测试结果。大大缩短了产品的设计周期与调试周期,提高了设计的可靠性与成功率,充分体现了可编程逻辑器件在数字电路设计中的优越性。在经过了四个星期白编写与仿真后,终于完成了设计要求,这次设计,我克服了很多关于设计问题方面的困难,特别就是对verilog语法与规则的不熟悉导致很多困难,最后使我对QuartusII软件的使用有了更进一步的了解,同时也积累了一些经验。很多时候我们想要的功能,写出来的代码,并不就是正确的,需要不断的调试,要理论联系实际,这样才能更快的完成设计任务。
展开阅读全文
相关资源
相关搜索

最新文档


当前位置:首页 > 商业管理 > 营销创新


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!