欢迎来到三一办公! | 帮助中心 三一办公31ppt.com(应用文档模板下载平台)
三一办公
全部分类
  • 办公文档>
  • PPT模板>
  • 建筑/施工/环境>
  • 毕业设计>
  • 工程图纸>
  • 教育教学>
  • 素材源码>
  • 生活休闲>
  • 临时分类>
  • ImageVerifierCode 换一换
    首页 三一办公 > 资源分类 > DOC文档下载  

    课程设计(论文)基于verilog的数字时钟设计.doc

    • 资源ID:4150601       资源大小:584.50KB        全文页数:19页
    • 资源格式: DOC        下载积分:8金币
    快捷下载 游客一键下载
    会员登录下载
    三方登录下载: 微信开放平台登录 QQ登录  
    下载资源需要8金币
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    课程设计(论文)基于verilog的数字时钟设计.doc

    课程设计基于Verilog HDL的数字秒表设计系别:物理与电气工程学院专业:微电子学班级:<2>班成员:目录一、前言3二、实验目的.3三、功能设计3四、用Verilog描述电路.44.1时钟调校及计时模块44.2整数分频模块.84.3时钟信号选择模块84.4七段显示设置11 4.4.1 BCD码显示模块11 4.4.2二位七段显示模块12 4.4.3一位七段显示模块124.5顶层模块实现14五、模拟与仿真.15六、逻辑综合.16七、下载到硬件电路16八、总结.18九、心得体会.18十、参考文献.19一、前言随着微电子技术的的飞速发展,大规模可编程器件的密度和性能不断提高,数字系统的设计方法、设计过程也发生了重大改变,传统的设计方法已经逐渐被电子设计自动化EDA(Electronic Design Automation)工具所取代。可编程器件可以通过硬件描述语言(如Verilog HDL)的形式根据实际设计的需要灵活地嵌入规模化的数字单元,大大地缩短了产品的设计周期。以可编程逻辑器件为核心的设计在数字系统设计领域将占据越来越重要的作用,因此,作为硬件设计者掌握EDA设计方法和工具是必须的。二、实验目的(1)通过本次课程设计加深对Verilog语言课程的全面认识、复习和掌握。(2) 掌握定时器、外部中断的设置和编程原理。 (3) 通过此次课程设计能够将软硬件结合起来,对程序进行编辑、调试。使其能够通过电脑下载到芯片,正常工作。(4)实际操作Quartus II软件,复习巩固以前所学知识。三、功能设计数字钟是一个常用的数字系统,其主要功能是计时和显示时间。这里通过一个数字钟表的模块化设计方法,说明自顶向下的模块化设计方法和实现一个项目的设计步骤。这里实现的电子表具有显示和调时的基本功能,可以显示时、分秒和毫秒,并通过按键进行工作模式选择,工作模式有4种,分别是正常计时模式、调时模式、调分模式、调秒模式。构成电子表的基本基本模块有四个,分别是时钟调校及计时模块myclock、整数分频模块int_div、时钟信号选择模块clkgen和七段显示模块disp_dec。四、用Verilog实现电路4.1时钟调校及计时模块时钟调校及计时模块myclock实现的功能是根据当前的工作状态进行时、分、秒的调整或正常的计时。代码端口说明如下:输入信号:RSTn复位信号CLK100Hz时钟信号FLAG1:0工作模式控制信号,模式定义为:00表示正常显示,01表示调时,10表示调分,11表示调秒;UP调校模式时以加1方式调节信号;DN调校模式时以减1方式调节信号。输出信号:H7:0“时”数据(十六进制);M7:0“分”数据(十六进制);S7:0“秒”数据(十六进制);MS7:0“百分秒”数据(十六进制)。该模块的设计思路是,当复位信号RSTn有效时,时、分、秒信号清零,否则工作模式控制信号FLAG的值决定当前的工作状态。当FLAG=2b00时,电子表工作在正常计时状态,对输入的100Hz的时钟信号clk进行计数,修改当前的百分秒(MS)、秒(S)、分(M)和时(H)的计数值;当FLAG信号=2b01时,电子表工作在“时”校正状态,若此时UP信号有效则H加1,若此时DN信号有效则H减1,;当FLAG信号=1b10时,电子表工作在“分”校正状态,若此时UP信号有效则M加1,若此时DN信号有效则M减1;当FLAG=2b11时,电子表工作在“秒”校正状态,其UP和DN的控制过程与“时”、“分”类似代码:module myclock(RSTn,CLK,FLAG,UP,DN,H,M,S,MS);inputRSTn,CLK,UP,DN;output 7:0 H,M,S;output 7:0 MS;input1:0 FLAG;reg 5:0 m_H,m_M,m_S;reg 6:0 m_MS;assign H=m_H;assign M=m_M;assign S=m_S;assign MS=m_MS;always (posedge CLK) if(RSTn) /复位状态beginm_H<=8'd23;m_M<=8'd52;m_S<=8'b0;m_MS<=8'b0;end else if(FLAG=2'b01)/调时状态beginif(UP)beginif(m_H=8'd23)m_H<=8'd0;elsem_H=m_H+1'b1;endelse if(DN)beginif(m_H=8'h00)m_H<=8'd23;elsem_H<=m_H-1'b1;endend else if(FLAG=2'b10) /调分状态beginif(UP)if(m_M=8'd59)m_M<=8'd0;elsem_M<=m_M+1'b1;else if(DN)if(m_M=8'h00)m_M<=8'd59;elsem_M<=m_M-1'b1;end else if(FLAG=2'b11) /调秒状态beginif(UP)if(m_S=8'd59)m_S<=8'b0;elsem_S<=m_S+1'b1;else if(DN)if(m_S=8'h00)m_S<=8'd59;elsem_S<=m_S<=m_S-1'b1;endelse begin /正常计时状态if(m_MS=8'd99)beginm_MS<=8'd0;if(m_S=8'd59)beginm_S<=8'd0;if(m_M=8'd59)beginm_M<=8'd0;if(m_H=8'd23)m_H<=0;elsem_H<=m_H+1'b1;endelsem_M<=m_M+8'd1;endelsem_S<=m_S+1'b1;endelsem_MS<=m_MS+1'b1;endendmodule4.2整数分频模块由于数字系统提供的基准时钟信号频率往往较高,因此需要分频模块产生所需频率的失踪信号,例如上面时钟校正及计时模块所需的100Hz的时钟信号。整数分频模块int_div可以实现对输入时钟clock进行F_DIV分频后输出clk_out。F_DIV分频系数范围为12n(n=F_DIV_WIDTH),若要改变分频系数,改变参数F_DIV或F_DIV_WIDTH到相应范围即可。若分频系数为偶数,则输出时钟占空比为50%;若分频系数为奇数,则输出的时钟占空比取决于输入的时钟占空比和分频系数(当输入为50%时,输出也是50%)。代码:moduleint_div(clock,clk_out); parameter F_DIV=48000000; /分频系数 parameter F_DIV_WIDTH=32; /分频计数器宽度 input clock; /输入时钟 output clk_out; /输出时钟regclk_p_r;regclk_n_r;regF_DIV_WIDTH-1:0 count_p;regF_DIV_WIDTH-1:0 count_n; wire full_div_p; /上升沿计数满标志 wire half_div_p; /上升沿计数半满标志 wire full_div_n; /下降沿计数满标志 wire half_div_n; /下降沿计数半满标志/判断计数标志位置位与否assignfull_div_p=(count_p<F_DIV-1);assignhalf_div_p=(count_p<(F_DIV>>1)-1);assignfull_div_n=(count_n<F_DIV-1);assignhalf_div_n=(count_n<(F_DIV>>1)-1); /时钟输出assignclk_out=(F_DIV=1)?clock:(F_DIV0?(clk_p_r&clk_n_r):clk_p_r); always (posedge clock) /上升沿脉冲计数beginif(full_div_p)begincount_p<=count_p+1'b1;if(half_div_p)clk_p_r<=1'b0;elseclk_p_r<=1'b1;endelsebegincount_p<=0;clk_p_r<=1'b0;endend always (negedge clock) /下降沿脉冲计数beginif(full_div_n)begincount_n<=count_n+1'b1;if(half_div_n)clk_n_r<=1'b0;elseclk_n_r=1'b1;endelsebegincount_n<=0;clk_n_r<=1'b0;endendendmodule4.3时钟信号选择模块时钟信号选择模块clkgen实际上时一个二选一电路,用于提供时钟调校及计时时模块所需的时钟脉冲。当电子表工作在正常计时状态时选择100Hz时钟信号;当电子表工作在调时、调分、调秒是那种设置模式时,如果采用100Hz时钟信号,那么手动一次按键可能引起设置数据的一串跳变,因此为了方便按键时动作对时间的设置,这里采用2Hz的时钟信号。其端口说明如下:flag时钟选择输入信号;clk_100Hz输入100Hz的时钟信号;clk_2Hz输入2Hz的时钟信号;Clkout输出时钟信号。代码:moduleclkgen(flag,clk_100hz,clk_2hz,clkout); input1:0 flag; /若flag=0则clkout=100Hz,否则clkout=2Hzinput clk_100hz,clk_2hz;outputclkout;assignclkout=(flag=2'b00)?clk_100hz:clk_2hz;endmodule4.4七段显示设置为了对时钟时、分、秒和毫秒数据输出显示,需要将时、分、秒和毫秒的二进制转换为十进制数。由于时、分、秒最大到60,毫秒最大到99,所以十进制数选择2位就能满足要求。为了在七段数码管输出时间数据,还需要将显示的十进制数转化为七段段码。以上功能分别由BCD码显示模块和七段译码管模块来实现。4.4.1 BCD码显示模块BCD码显示模块的功能是将8位二进制数转化为2位十进制数后,进行七段段译码显示。为了实现显示功能,在其内部调用了dual_hex2位七段显示模块。其端口说明如下:输入信号:hex2位8421BCD码输入。输出信号:dispout2位8421码对应的七段数码管段码。代码:moduledisp_dec(hex,dispout); input7:0 hex;/八位二进制输入数据 output15:0 dispout; /2位十进制的七段段码显示数据reg7:0 dec;always (hex) begin /8位二进制数转化为2位BCD码dec7:4=hex/4'd10;dec3:0=hex%4'd10;enddual_hex u1(1'b0,dec,dispout); /调用2位共阳极七段显示模块endmodule4.4.2二位七段显示模块二位七段显示模块的功能是将2进制或十六进制数转化为对应的七段段码,内部调用了一位七段译码模块seg_decoder。代码:moduledual_hex(iflag,datain,dispout); input iflag; /共阴或共阳输出选择 input7:0 datain; /2位的十进制或十六进制数据 output15:0 dispout;/2个七段段码数据seg_decoderu1(iflag,datain7:4,dispout15:8);seg_decoderu2(iflag,datain3:0,dispout7:0);endmodule4.4.3 一位七段译码模块一位七段译码模块的功能是将4位二进制数转化为对应的共阴或共阳七段段码。代码:moduleseg_decoder(iflag,iA,oY); input iflag; /共阴或共阳输出选择 input3:0 iA; /4位二进制数据 output reg7:0 oY; /七段段码显示数据always (iflag,iA)begin case(iA)/共阴级七段输出 4'b0000:oY=8'h3f; 4'b0001:oY=8'h06; 4'b0010:oY=8'h5b; 4'b0011:oY=8'h4f; 4'b0100:oY=8'h66; 4'b0101:oY=8'h6d; 4'b0110:oY=8'h7d; 4'b0111:oY=8'h27; 4'b1000:oY=8'h7f; 4'b1001:oY=8'h6f; 4'b1010:oY=8'h77; 4'b1011:oY=8'h7c; 4'b1100:oY=8'h58; 4'b1101:oY=8'h5e; 4'b1110:oY=8'h79; 4'b1111:oY=8'h71;endcaseif(!iflag)oY=oY; /共阳极七段输出endendmodule4.5、顶层模块的实现顶层模块是将各功能模块连接起来,实现电子表的完整功能。其端口信号说明如下:输入信号:iCLK5050MHz时钟信号;RSTn复位信号;FLAG工作模式控制信号,模式定义为:00表示正常显示,01表示调时,10表示调分,11表示调秒;UP调校模式时以加1方式调节信号;DN调校模式时以减1方式调节信号。输出信号:H_dis“小时”数据的七段数码管数据;M_dis“分钟”数据的七段数码管数据;S_dis“秒”数据的七段译码管数据;MS_dis“百分秒”数据的七段译码管数据;Mode工作模式输出;H“时”数据(十六进制);M“分”数据(十六进制);S“秒”数据(十六进制);MS“百分秒”数据(十六进制)。代码:module clock(iCLK_50,RSTn,FLAG,UP,DN,H_dis,M_dis,S_dis,MS_dis,Mode,H,M,S);input iCLK_50;inputRSTn,UP,DN;input 1:0 FLAG;output 1:0 Mode;output 15:0 H_dis,M_dis,S_dis,MS_dis;output 7:0 H,M,S;wire 7:0 MS;wire clk_100hz,clk_2hz;wireclk;assign Mode=FLAG;int_div#(500000,32) nclk100(iCLK_50,clk_100hz);int_div#(50000000,32) nclk2(iCLK_50,clk_2hz);clkgen u0(FLAG,clk_100ha,clk_2hz,clk);myclock u1(RSTn,clk,FLAG,UP,DN,H,M,S,MS);disp_dec Hour(H,H_dis);disp_dec Minute(M,M_dis);disp_dec Second(S,S_dis);disp_dec hour(MS,MS_dis);endmodule五、模拟与仿真在Quartus II中利用仿真波形进行功能或时序仿真的基本步骤如下:(1)创建新的矢量波形文件(*.vwf).(2)添加输入、输出节点。(3)编译输入节点的波形。(4)完成矢量波形文件的创建之后,用户即可以对设计进行功能或时序仿真。(5)仿真启动后,状态窗口会同时自动打开,在状态窗口中显示仿真进度及所用时间。(6)默认情况下,仿真器报告窗口内在仿真过程中会显示仿真波形部分,其中还包括当前仿真器的设置信息和仿真信息等。计时状态仿真波形六、逻辑综合完成项目创建和设计输入后,用Quartus II的编译器(compiler)对设计进行检查和逻辑综合,并生成用于配置可编程逻辑器件的下载文件。Quartus II编译器中的Analysis & Synthesis模块将分析设计文件并建立工程数据库。该模块使用Quartus II内置综合器,综合Verilog HDL设计文件(.v)。(1) 编译器件选项设置。(2) 引脚分配。(3) 编译设计。(4) 查看适配结果。七、下载到硬件电路在设计(工程)编译成功后,便可以对所选的(Altera)目标器件进行编程和配置。Quartus II编译器的Assembler 模块将会对工程的各个组件转换成编程文件,包括编译器对象文件(*.pof)和SRAM对象文件(.sof)。Quartus II编译器(Progrsmmer)可以使用这些编程文件与Altera编程硬件配合,对Quartus II软件所支持的Altera器件进行编程和配置。秒显示分显示八、总结在QuartusII开发环境下,采用自顶向下的设计方法有利于在早期发现结构设计中的错误,避免不必要的重复设计。再结合基于FPGA 的“在系统”可编程实验板,轻轻松松就能实现各种电子产品的设计,现场观察实验测试结果。大大缩短了产品的设计周期和调试周期,提高了设计的可靠性和成功率,充分体现了可编程逻辑器件在数字电路设计中的优越性。九、心得体会两周时间的课程设计,终于达到了数字秒表系统的要求,尽管还不是十分完美,但从心底里说,还是很高兴的。      通过以上步骤就可以完成对数字秒表的过程设计。这次设计,我克服了很多关于设计问题方面的困难,使我对Quartus II软件的使用有了更进一步的了解,同时也积累了一些经验。在这次的课程设计中,我体会最深的就是,理论与实际的差别,往往理论上十分成熟的技术,在真正实现的过程中还是会出现很多问题,要考虑到诸多因素。通过此次设计,我真正的意识到,在以后的学习中,要理论联系实际,把我们所学的理论知识用到实际当中,只有通过实践,才能不断提高,不断进步。参考文献1王金明. Verilog HDL程序实际教程. 北京:人民邮电出版社,2004.2杜建国. Verilog HDL硬件描述语言.北京:国防工业出版社,2004.3王诚,吴继华,等. Altera FPGA/CPLD设计(基础篇). 北京:人民邮电出版社,2005.4夏宇闻. Verilog数字系统设计教程. 北京:航空航天大学出版社,2003.5Stephen Brown,ZvonkoVranesic. 数字逻辑基础与Verilog设计. 北京:机械工业出版社,2008.6杜慧敏,等. 基于Verilog的FPGA设计基础. 西安:电子科技大学出版社,2006.7杜勇. FPGA/VHDL设计入门与进阶. 北京:机械工业出版社,2011.8杨晓惠,等. FPGA系统设计与实例. 北京:人民邮电出版社.9周瑞景,等. 基于Quartus II的数字系统Verilog HDL设计实例讲解. 北京:电子工业出版社,2010.10王金明. 数字系统设计与Verilog HDL设计实例. 北京:电子工业出版社,2009.

    注意事项

    本文(课程设计(论文)基于verilog的数字时钟设计.doc)为本站会员(仙人指路1688)主动上传,三一办公仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一办公(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    备案号:宁ICP备20000045号-2

    经营许可证:宁B2-20210002

    宁公网安备 64010402000987号

    三一办公
    收起
    展开