基于VerilogHDL设计的数字时钟_第1页
基于VerilogHDL设计的数字时钟_第2页
基于VerilogHDL设计的数字时钟_第3页
基于VerilogHDL设计的数字时钟_第4页
基于VerilogHDL设计的数字时钟_第5页
已阅读5页,还剩18页未读 继续免费阅读

下载本文档

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

文档简介

深圳大学考试答题纸(以论文、汇报等形式考评专用)

二○18~二○19年第一学期课程编号课程名称硬件描述语言与逻辑综合主讲教师刘春平评分学号姓名李思豪专业年级电子科学与技术16级1班教师评语:题目:基于VerilogHDL设计数字时钟摘要:本文利用VerilogHDL语言自顶向下设计方法设计多功效数字钟,突出了其作为硬件描述语言良好可读性、可移植性和易了解等优点,并经过AlteraQuartusⅡ6.0和cyclnoeIIEP2C35F672C6完成综合、仿真。此程序经过下载到FPGA芯片后,可应用于实际数字钟显示中关键词:VerilogHDL;硬件描述语言;FPGA目录一、试验任务 3试验目标 3试验要求 3二、设计思绪 3三、试验结果 10四、总结与收获 14试验任务试验目标深入了解基于quartusii工具复杂时序逻辑电路设计。了解并熟练利用EDA工具进行综合设计。熟练掌握芯片烧录流程及步骤。掌握VerilogHDL语言语法规范及时序电路描述方法。试验要求设计一个带秒表功效24小时数字钟,它包含以下几个组成部分:①显示器,由6个七段数码管组成,用于显示当前时间(时:分,秒)或设置秒表时间;②复位键复位全部显示和计数③设置键,用于确定新时间设置,三个消抖按键分别用于时分秒设置④秒表键,用于切换成秒表功效基本要求(1)计时功效:这是本计时器设计基本功效,每隔一秒计时一次,并在显示器上显示当前时间。(2)秒表功效:设置时间,进行倒计时功效(3)设置新计时器时间:按下设置键后,用户能经过时分秒三个消抖按键对时间进行设置。二、设计思绪1、总原理框图:原理如上图所表示,时钟由分频器模块,数码管显示模块,计时器模块三个模块组成,每个模块实现以下不一样功效,最终经过在顶层模块调用,来实现时钟功效。顶层模块:顶层模块调用三个字模块,而且定义输入输出口,代码输入所表示:modulemyclock2(daojishi,stop,clk,reset,shi,fen,miao,miaoout1,miaoout2,fenout1,fenout2,shiout1,shiout2);inputclk,reset,stop,shi,fen,miao,daojishi;output[6:0]miaoout1,miaoout2,fenout1,fenout2,shiout1,shiout2;wire[3:0]miao1,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开始到13999999时,1HZ信号取反一次,计数又从0开始,如此循环,就能够得到1HZ脉冲信号。对于其余信号也是如此,只是计数值不一样,得到分频信号不一样。模块代码以下:moduledivider_1HZ(clk_1hz,reset,clk);outputclk_1hz;inputreset,clk;regclk_1hz;reg[23:0]count;always@(posedgeclk)begin if(reset) begincount<=0;clk_1hz<=0;endelsebegin if(count==13499999) begin count<=0; clk_1hz<=~clk_1hz; end else count<=count+1;//计数 endendendmodule译码显示模块:一、数码管显示:经过传入响应十进制数,利用case语句转换输出对应7位二进制显示码,送入数码管显示。代码以下:moduledecode4_7(temp,indec);output[6:0]temp;input[3:0]indec;reg[6:0]temp;always@(indec)begincase(indec)//用case语句进行译码4'd0:temp[6:0]=7'b1000000;4'd1:temp[6:0]=7'b1111001;4'd2:temp[6:0]=7'b0100100;4'd3:temp[6:0]=7'b0110000;4'd4:temp[6:0]=7'b0011001;4'd5:temp[6:0]=7'b0010010;4'd6:temp[6:0]=7'b0000010;4'd7:temp[6:0]=7'b1111000;4'd8:temp[6:0]=7'b0000000;4'd9:temp[6:0]=7'b0010000;default:temp=7'bz;endcaseendendmodule、计时器模块:秒计数:在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;reg[3:0]miao1,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;if(fen1==9)beginfen1<=0;fen2<=fen2+1;if(fen2==5)beginfen2<=0;endendendif(shi==0)//时调整beginshi1<=shi1+1;if(shi1==9||((shi1==3)&&(shi2==2)))beginshi1<=0;shi2<=shi2+1;if(shi2>=2)beginshi2<=0;endendendendif((!reset)&&(stop==0)) beginif(daojishi==0)//时钟程序begin miao1<=miao1+1;if(miao1==9)begin miao1<=0;miao2<=miao2+1;if(miao2==5)beginmiao2<=0;fen1<=fen1+1;if(fen1==9)beginfen1<=0;fen2<=fen2+1;if(fen2==5)beginfen2<=0;shi1<=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)begin miao1<=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;shi2<=shi2-1;if(shi2==0)beginshi2<=0;endendendendendendendendendendendmodule引脚排布:以下所表示:引脚分布图二、试验结果波形仿真在QuartusII中利用仿真波形进行功效或时序仿真基本步骤以下:(1)创建新矢量波形文件(*.vwf).(2)添加输入、输出节点。(3)编译输入节点波形。(4)完成矢量波形文件创建之后,用户即能够对设计进行功效或时序仿真。(5)仿真开启后,状态窗口会同时自动打开,在状态窗口中显示仿真进度及所用时间。(6)默认情况下,仿真器汇报窗口内在仿真过程中会显示仿真波形部分,其中还包含当前仿真器设置信息和仿真信息等。下面我们单独对三个子模块分别进行仿真并分析仿真结果:分频器模块仿真结果:分频器仿真图仿真分析:我们取时钟信号周期是20ns,为了让仿真结果更显著,取每三个时钟周期让秒脉冲clk_1hz翻转一次,而不是1349999翻转一次。而且让reset复位信号在仿真160ns-300ns有效。结果如图所表示,在每三个时钟信号出现时,秒脉冲都会翻转一次,在reset信号有效时,秒脉冲无输出,仿真结果符合预计要求。显示译码模块仿真结果:数码管输出数字8仿真图数码管输出数字8仿真图仿真结果分析:indec是我们要输出十进制数,temp是连接7段数码7位二进制数,已知数码管为共阴极数码管。我们设定indec为8,从图中能够看见temp[7:0]都是0;所以7个数码管都会被点亮,就是显示8。我们再设定indec为1,能够预见1在数码管中应该是亮两个,如第二图所表示只有temp[1]和temp[2]是0,所以就是亮两个灯,显示1。仿真结果符合设计要求。计时器模块仿真结果:计数器计数仿真图计数器复位测试仿真图仿真结果:miao1,miao2,fen1,fen2,shi1,shi2分别是秒分时个位和十位,时钟脉冲clk_1hz每一个上升沿,miao1就加1,miao1再依次进

温馨提示

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

评论

0/150

提交评论