您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 管理学资料 > 基于Verilog-HDL设计的数字时钟
1深圳大学考试答题纸(以论文、报告等形式考核专用)二○18~二○19学年度第一学期课程编号1602080001课程名称硬件描述语言与逻辑综合主讲教师刘春平评分学号姓名李思豪专业年级电子科学与技术16级1班教师评语:题目:基于VerilogHDL设计的数字时钟摘要:本文利用VerilogHDL语言自顶向下的设计方法设计多功能数字钟,突出了其作为硬件描述语言的良好的可读性、可移植性和易理解等优点,并通过AlteraQuartusⅡ6.0和cyclnoeIIEP2C35F672C6完成综合、仿真。此程序通过下载到FPGA芯片后,可应用于实际的数字钟显示中关键词:VerilogHDL;硬件描述语言;FPGA2目录一、实验任务..............................................................................3实验目的..............................................................................3实验要求..............................................................................3二、设计思路..............................................................................3三、实验结果............................................................................10四、总结与收获........................................................................143一、实验任务实验目的1.深入了解基于quartusii工具的复杂时序逻辑电路的设计。2.理解并熟练利用EDA工具进行综合设计。3.熟练掌握芯片烧录的流程及步骤。4.掌握VerilogHDL语言的语法规范及时序电路描述方法。实验要求设计一个带秒表功能的24小时数字钟,它包括以下几个组成部分:①显示屏,由6个七段数码管组成,用于显示当前时间(时:分,秒)或设置的秒表时间;②复位键复位所有显示和计数③设置键,用于确定新的时间设置,三个消抖按键分别用于时分秒的设置④秒表键,用于切换成秒表功能基本要求(1)计时功能:这是本计时器设计的基本功能,每隔一秒计时一次,并在显示屏上显示当前时间。(2)秒表功能:设置时间,进行倒计时功能(3)设置新的计时器时间:按下设置键后,用户能通过时分秒三个消抖按键对时间进行设置。二、设计思路1、总原理框图:4原理如上图所示,时钟由分频器模块,数码管显示模块,计时器模块三个模块构成,每个模块实现如下的不同功能,最后通过在顶层模块的调用,来实现时钟功能。2.顶层模块:顶层模块调用三个字模块,并且定义输入输出口,代码输入所示: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信号分频。通过计数5的方式,当计数从0开始到13999999时,1HZ信号取反一次,计数又从0开始,如此循环,就可以得到1HZ脉冲信号。对于其他信号也是如此,只是计数值不一样,得到的分频信号不同。模块代码如下:moduledivider_1HZ(clk_1hz,reset,clk);outputclk_1hz;inputreset,clk;regclk_1hz;reg[23:0]count;always@(posedgeclk)beginif(reset)begincount=0;clk_1hz=0;endelsebeginif(count==13499999)begincount=0;clk_1hz=~clk_1hz;endelsecount=count+1;//计数endendendmodule(2)译码显示模块:一、数码管显示:通过传入响应的十进制数,运用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;64'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(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;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)begin7miao2=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)//时钟程序beginmiao1=miao1+1;if(miao1==9)begin8miao1=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)beginmiao1=9;miao2=miao2-1;if(miao2==0)beginmiao2=5;fen1=fen1-1;if(fen1==0)begin9fen1=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;endendendendendendendendendendendmodule103.引脚排布:如下所示:引脚分布图二、实验结果(1)波形仿真在QuartusII中利用仿真波形进行功能或时序仿真的基本步骤如下:(1)创建新的矢量波形文件(*.vwf).(2)添加输入、输出节点。(3)编译输入节点的波形。(4)完成矢量波形文件的创建之后,用户即可以对设计进行功能或时序仿真。(5)仿真启动后,状态窗口会同时自动打开,在状态窗口中显示仿真进度及11所用时间。(6)默认情况下,仿真器报告窗口内在仿真过程中会显示仿真波形部分,其中还包括当前仿真器的设置信息和仿真信息等。下面我们单独对三个子模块分别进行仿真并分析仿真结果:(1)分频器模块仿真结果:分频器仿真图仿真分析:我们取时钟信号的周期是20ns,为了让仿真结果更明显,取每三个时钟周期让秒脉冲clk_1hz翻转一次,而不是1349999翻转一次。并且让reset复位信号在仿真的160ns-300ns有效。结果如图所示,在每
本文标题:基于Verilog-HDL设计的数字时钟
链接地址:https://www.777doc.com/doc-2131071 .html