欢迎来到冰豆网! | 帮助中心 分享价值,成长自我!
冰豆网
全部分类
  • IT计算机>
  • 经管营销>
  • 医药卫生>
  • 自然科学>
  • 农林牧渔>
  • 人文社科>
  • 工程科技>
  • PPT模板>
  • 求职职场>
  • 解决方案>
  • 总结汇报>
  • 党团工作>
  • ImageVerifierCode 换一换
    首页 冰豆网 > 资源分类 > DOCX文档下载
    分享到微信 分享到微博 分享到QQ空间

    FPGA数字钟之欧阳育创编.docx

    • 资源ID:10854814       资源大小:39.18KB        全文页数:24页
    • 资源格式: DOCX        下载积分:10金币
    快捷下载 游客一键下载
    账号登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录 QQ登录
    二维码
    微信扫一扫登录
    下载资源需要10金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

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

    FPGA数字钟之欧阳育创编.docx

    1、FPGA数字钟之欧阳育创编数字钟设计时间:2021.02.04创作:欧阳育一、实验目的:通过设计实例,深入理解自顶向下设计方法,系统设计规范、系统设计、模块设计和系统仿真与实现各阶段的设计内容,初步掌握规范的数字系统设计方法并实践。二、实验要求:1、系统概述:设计一个用 LED 7段显示器显示的24小时制数字钟。2、系统目标:(1)用8个LED 显示时间,如9点25分10秒显示为,092510。(2)设置2个按键,按键SET用于工作模式选择,按键UP用于设置数值。(可选)(3)按SET键循环设置工作模式为:正常显示时设置分设置秒设置。在设置工作模式时,被设置相应数字按1秒速率闪烁,其它数字不变

    2、。(4)在设置工作模式时,按UP键一次,被设置相应数字增加1,加到最大值后再加返回0,如小时加到23后再加就返回0,分和秒加到59后再加返回0 。3、系统设计依据:外部输入时钟为40MHZ,通过分频产生秒脉冲信号,用模60计数器对其计数产生分脉冲信号,对分脉冲用模60计数器对其计数产生时脉冲信号,再用模24计数器对时脉冲计数,即可实现一天24小时的时间信号,通过7段LED数码管显示出来则为基本数字钟,校时电路通过两个外部异步按键对“时”、“分”、“秒”显示数字进行校对调整。4、系统实现要求:要求用Mars-EP1C3-EDA实验平台。芯片与封装选择:本设计用EP1C3T FPGA实现,144脚

    3、封装,输入输出为LVTTL电平。5、系统验证及测试要求:用Mars-EP1C3-EDA实验平台搭建模拟测试平台测试,测试验证数字钟实现设计目标。三、系统设计关键技术1、按键消抖图3-1由图3-l可见,在按键闭合和断开时产生了多个边沿,而在实际中每按一次键,我们只需要一组稳定的上升或下降边沿,所以对于电路中的按键信号,如果我们不滤除抖动的话,还是简单的读取信号的边沿,会引起一次按键被误读多次,这样就会引起电路的误动作。为了保证按一次键电路只有一次正确的响应,即在键闭合稳定时读取键的状态,就要求电路中必须采取滤除抖动的措施。原理:在设计中用时钟信号(key_clk)进行采样,对于按键输入信号,当两

    4、次采样信号相同时,这是判定已经稳定的按下或放开了按键,D触发器相应的被置成0态或1态。如两次采样结果不相同,则触发器维持原输出信号不变,由于直接由触发器输出的信号时间宽度可能过长,所以在触发器后再接一级同步化电路,保证每次输出的信号只占有一个时钟周期的宽度。应用这种方法去滤除抖动,关键是确定采样时钟的频率,保证两次采样的时间间隔能够大于按键的抖动时间,且小于正常按键时的按键稳定闭合时间。2、采用BCD码的计数模式时、分、秒的计数都采用BCD码计数,如果采用二进制计数,分的最大计数值为59,只需要6位就可以,因为时的计数值要通过两个数码管显示,所以计数值需要经过两级译码才能驱动数码管使其正常显示

    5、,必须先把计数值译码成高低四位的BCD码,然后再分别把高、低四位BCD码译码成数码管的显示编码。如果直接采用BCD码计数,只需要一次译码就可以正常显示计数值,故采用BCD码计数更方便,简化电路。3、数码管的动态显示数码管的动态扫描,就是轮流向各位数码管送出字形码和相应的位选,利用发光管的余辉和人眼视觉暂留作用,使人的感觉好像各位数码管同时在显示。数码管的轮流扫描频率不能太小,否则数码管不能同时显示,一般扫描频率在500Hz到1Khz即可。本设计中的数码管位选信号为低电平有效,数码管的段为低显,复位后把位选信号d_col赋值为8b1111_1110,然后以1Khz的扫描频率使其循环左移,并送出相

    6、应位的字形码,即可实现数码管的动态显示。四、系统详细设计方案:1、系统设计分析:数字钟是一个将“ 时”,“分”,“秒”显示于人的视觉器官的计时装置。它的计时周期为24小时,显示满刻度为23时59分59秒,另外应有校时功能。秒信号产生器是整个系统的时基信号,它直接决定计时系统的精度,通过将外部输入时钟为40MHZ分频实现。将标准秒信号送入“秒计数器”,“秒计数器”采用60进制计数器,每累计60秒发生一个“分脉冲”信号,该信号将作为“分计数器”的时钟脉冲。“分计数器”也采用60进制计数器,每累计60分钟,发出一个“时脉冲”信号,该信号将被送到“时计数器”。“时计数器”采用24进制计时器,可实现对一

    7、天24小时的累计。将“时”、“分”、“秒”计数器的输出值经七段显示译码器译码,通过八位LED七段显示器显示出来,显示格式为“时分秒”。通过Set和Up按键对“时”、“分”、“秒”显示数字进行校对调整,Set键循环控制工作模式,即“正常显示”、“时设置”、“分设置”、“秒设置”的循环控制,在设置工作模式时,被设置相应数字按1秒速率闪烁,其它数字不变。Up键实现调整状态时相应时间的快速加“1”以实现时间校准。2、系统时钟和复位规划:本设计采用一个全局时钟clk和复位reset。3、顶层模块划分及模块功能说明系统分为5个模块,Freq_div模块,Clock_cnt模块,Clock_ctl模块,Ke

    8、y_ctl模块和Display模块。系统框图如图4-1所示,图4-2是顶层模块设计。输入信号:clk:系统时钟; reset:系统复位;set:工作模式选择按键; up:调时按键;输出信号:d_col7:0:八位LED动态选择;d_out7:0:LED显示数据;图4-1 系统框图图4-2 顶层模块设计4、每个模块详细功能说明,信号定义及时序定义(1)Freq_div模块:将40M Hz的系统时钟进行分频产生三种时钟使能信号:scan_clk(1khz)、key_clk(100hz)、s_clk(1hz)。输入信号:clk:系统时钟rst_n:复位信号输出信号:scan_clk:数码管扫描频率k

    9、ey_clk:按键采样频率s_clk:1s时钟信号(2)Key_ctl模块:完成对按键的同步、去抖功能,输出稳定的按键信号set_en、up_en。输入信号:clk:系统时钟rst_n:复位信号set:模式设置按键up:计数值加按键输出信号:Set_en:模式设置使能信号up_en:按键加使能信号(3)Clock_ctl模块:通过set_en信号对“正常显示”、“时设置”、“分设置”、“秒设置”模式的循环控制,并产生设置信号h_set(时)、m_set(分)、s_set(秒)供Clock_cnt使用。输入信号:Clk:系统时钟;reset:复位信号;set_en:工作模式选择信号;输出信号:H

    10、_set:时设置使能信号;M_set:分设置使能信号,S_set:秒设置使能信号;状态机信号:Normal:正常显示状态;Hour_set:时设置状态;Minute_set:分设置状态;Second_set:秒设置状态。(4)Clock_cnt模块:完成数字钟的正常显示和数字钟的时、分、秒的校时,在校时模式下,通过ctl信号控制LED的闪烁,也就是间隔1s输出时间数据。输入信号:Clk:系统时钟reset:复位信号;up_en:校时信号s_clk:1秒脉冲信号;h_set:时设置使能信号;m_set:分设置使能信号,s_set:秒设置使能信号;输出信号:h_data:时输出信号;m_data:

    11、分输出信号;s_data:秒输出信号;(5)Display模块:LED的动态显示,显示格式“时分秒”。输入信号:reset:复位信号;clk:系统时钟信号scan_clk:数码管扫描信号h_data:时信号;m_data:分信号;s_data:秒信号;输出信号:d_col:数码管的位选择信号d_out:译码后驱动数码管信号五、系统设计仿真及测试方案A、采用Quartusii和Modelsim的功能仿真,采用Quartusii的时序仿真分析,验证设计的正确性。B、在Mars-EP1C3-EDA实验平台上实现本设计,并测试其正确性。具体方案如图4-3所示。图4-3C、实验板信号定义本设计信号名实验

    12、板信号名FPGA引脚备注本设计信号名实验板信号名FPGA引脚备注d_out0display7p5低显dp段d_col2Dis_A6P10低显示d_out1display6p4低显g段d_col3Dis_A5P7低显示d_out2display5p3低显f段d_col4Dis_A4P6低显示d_out3display4p2低显e段d_col5Dis_A3P11低显示d_out4display3p1低显d段d_col6Dis_A2P26低显示d_out5display2p143低显c段d_col7Dis_A1P27低显示d_out6display1p141低显b段setKEY1p107按下为低d_

    13、out7display0p142低显a段upKEY2p106按下为低d_col0Dis_A8P31低显示clkCLK_40Mp1640M时钟d_col1Dis_A7P28低显示resetSYS_RSTp144低复位表4-1六、模块详细设计及功能仿真1、Freq_div模块设计及功能仿真:(1)模块设计分频电路的原理:分频电路实际上就是一个计数器,根据系统提供的时钟频率和你所需的时钟频率计算出计数的值,当计数值达到设置的值时,使输出变化一次。系统提供的时钟频率为40MHz,该模块包括三个分频电路:原理如图2-4所示。第一步:将系统时钟40_000分频产生1KHz信号scan_clk;第二步:将1

    14、KHz进行10分频产生100Hz信号key_clk;第三步:将100Hz进行100分频产生1Hz信号s_clk。图6-1(2)功能仿真为了减小仿真时间和难度,把分频值改小进行仿真。设置clk周期为2ns。设置对clk进行4分频产生scan_clk;设置对scan_clk进行3分频产生key_clk;设置对key_clk进行5分频产生s_clk。图6-2有图知,scan_clk周期为:8ns=4Tclk。key_clk周期为:24ns=3Tscan_clk。S_clk周期为:120ns=5Tkey_clk=。分频功能正确。2、Key_ctl模块设计及功能仿真该模块主要功能是对异步的按键信号同步处

    15、理,并消除按键抖动。原理:先用D触发器打两级,然后间隔10ms(key_clk有效)采样,把两次采样值相与,比较两次采样值是否同一,由于直接由触发器输出的信号时间宽度可能过长,所以在触发器后再接一级同步化电路,保证每次输出的有效信号只占有一个时钟周期的宽度。图6-3是set按键的同步消抖处理电路,up的原理与其相同。(1)模块设计图6-3 Set 按键消抖原理 (2)功能仿真图6-4 有图6-4知,按键set的前沿抖动时间为120ns,后沿抖动时间为130ns,按键的稳定时间为540ns,故可设置采样间隔为200ns,有set_en波形可知,当两次的采样信号结果相同时,这时输出信号才可能发生变

    16、化,对应的按键的稳定闭合或断开,当两次的采样信号结果不同时,认为输入的信号为抖动信号,这时电路输出维持原状态不变,同时由于有同步化的处理,输出信号的高电平宽度只为系统时钟的一个周期。3、Clcok_ctl模块设计及功能仿真(1)模块算法设计图4-7(2)、功能仿真有图可知,复位状态后进入:“正常显示”状态,输出控制信号:h_set=0,m_set=0,s_set=0;此后set_en按键每按一次状态发生一次变化,从“正常显示”“时设置”“分设置”“秒设置”这样循环变化,并输出相应控制信号,“时设置”状态下输出控制信号:h_set=1,m_set=0,s_set=0;“分设置”状态下输出控制信号

    17、:h_set=0,m_set=1,s_set=0;“秒设置”状态下输出控制信号:h_set=0,m_set=0,s_set=1。工作模式转换和输出都正确。4、Clock_cnt计数模块设计及功能仿真(1)模块算法设计时设置闪烁算法流程图 “分设置”、“秒设置”闪烁原理和“时设置原理一样”。正常显示算法流程图:采用BCD码计数,秒计计数值满之后向分进一位,让秒值清零,否则秒值自身加1,分计数值满之后向时进一位,让分值清零,否则分值加1,时计数值满之后,时清零,重新回到秒计数,这样循环执行。图4-11时设置算法流程图:图4-8分设置和秒设置算法流程和时设置流程类似。(2)功能仿真设置复位后时间初值

    18、为“234509”。“正常显示”:设置h_set=0,m_set=0,s_set=0;有图可知,“正常显示”状态下,不管up_en是否按下,时、分、秒的计数都正确。“时设置”:设置h_set=1,m_set=0,s_set=0;有图知,“时设置”状态下,按键按下一次h_data加1,并间隔一个s_clk周期,输出时计数值h_data,功能正确“分设置”:设置h_set=0,m_set=1,s_set=0;有图知,“分设置”状态下,按键按下一次m_data加1,并间隔一个s_clk周期,输出分计数值m_data,功能正确“秒设置”:设置h_set=0,m_set=0,s_set=1;有图知,“秒

    19、设置”状态下,按键按下一次s_data加1,并间隔一个s_clk周期,输出时计数值s_data,功能正确。5、display显示模块设计及功能仿真(1)模块设计显示原理:用1ms的扫描信号循环控制数码的某一位有效,在相应为有效时输出数据经译码后驱动数码管,比如:d_col=8b1111_1110,8位数码管的最低位有效,此时将秒的低四位数据(s_data3:0)译码,驱动数码管,若此时s_data3:0=4d9=4b1001,数码管此时将显示“9”。数码管译码表:ledled显示编码(d_out)4b00008b0000_00114b00018b1001_11114b00108b0010_01

    20、014b00118b0000_11014b01008b1001_10014b01018b0100_10014b01108b0100_00014b01118b0001_11114b10008b0000_00014b10018b0001_10014b10108b1111_11014b11118b1111_1111说明:4b1010,经译码后显示“”,4b1111,经译码后,LED不亮。(2)功能仿真设置时间初值为“234509”,控制数码管位选择的信号d_col复位状态后为“8b1111_1110”,然后在扫描频率作用下位选信号循环左移,并输出相应的时间数据译码值,从“秒低四位”“秒高四位”“”“

    21、分低四位”“分高四位”“”“时第四位”“时高四位”这样循环送出数据。显示数据正确。七、系统功能仿真计数初始设置:设置系统复位后时间初值为“234509”;分频设置:设置clk周期为2ns。设置对clk进行5分频产生scan_clk;设置对scan_clk进行5分频产生key_clk;设置对key_clk进行4分频产生s_clk。(1)正常显示模式(2)设置模式有图可以知系统功能正确。八、系统综合实现及静态时序分析综合后的RTL级电路静态时序分析报告设置建立时间为1ns九、实际系统测试设置系统复位后时间初值为“234509”,然后全编译,下载到实验板,按KEY1(set键)可以进行正常的模式选择

    22、,从正常显示时设置分设置秒设置,每按下一次循环一次。并且在设置工作模式时,可以看到被设置相应数字按1秒速率闪烁,其它数字不变,功能正确。达到了设计的要求。在设置工作模式时,每按KEY2(UP)键一次,被设置相应数字增加1,加到最大值后再加返回0,如小时加到23后再加就返回0,分和秒加到59后再加返回0 。功能正确。达到了设计的要求。十、总结经过两周的学习,初步掌握了一简单个数字系统的设计方法和设计流程;深入了解了数字系统自顶向下的设计方法,顶层设计、模块详细设计、各个模块仿真、系统仿真和时序分析。刚开始设计时,忽略了好多细节,比如按键的消抖原理,不能用软件的消抖原理来设计硬件电路,为什么要采用

    23、BCD码计数,处于设置模式时怎么控制数码管的闪烁,这问题困扰了好久,通过陈老师讲解,以及和其他同学的相互沟通,把这些难题都解决了。现在明白了做设计前写设计方案的重要性,只要方案正确可行,后面写代码以及调试,都很简单。自己在写设计方案方面还有好多不足,以后需多多学习。在写代码时,要以FPGA的设计规范为准则,比如模块、信号的命名要有一定的意义;使用if.else语句时,必须严格的逐层缩进对齐;代码后必须加入详细、清晰的注释行以增强代码的可读性和可移植性;等等。附录:源代码和测试代码Freq_div模块:源代码:module Freq_div(/ ALTERA_ARGS_BEGIN DO NOT

    24、REMOVE THIS LINE!clk, rst_n, scan_clk, s_clk, key_clk/ ALTERA_ARGS_END DO NOT REMOVE THIS LINE!);/ Port Declaration/ ALTERA_IO_BEGIN DO NOT REMOVE THIS LINE!input clk;input rst_n;output scan_clk;output s_clk;output key_clk;/ ALTERA_IO_END DO NOT REMOVE THIS LINE!reg scan_clk;reg s_clk;reg key_clk;re

    25、g15:0 cnt1;always(posedge clk or negedge rst_n)beginif(!rst_n)begin scan_clk=0; cnt1=16d0;endelse if(cnt1=16d39_999) begin cnt1=16d0;scan_clk=1; endelse begin cnt1=cnt1+16d1;scan_clk=0; endendreg3:0 cnt2;always(posedge clk or negedge rst_n)beginif(!rst_n)begin key_clk=0;cnt2=4d0;endelse if(scan_clk)

    26、 beginif(cnt2=4d9) begin cnt2=4d0; key_clk=1; end else begin cnt2=cnt2+4d1;key_clk=0;end endelse key_clk=0;endreg6:0 cnt3;always(posedge clk or negedge rst_n)beginif(!rst_n)begin s_clk=0; cnt3=7d0;endelse if(key_clk) begin if(cnt3=7d99) begin cnt3=7d0; s_clk=1; end else begin cnt3=cnt3+7d1;s_clk=0;e

    27、nd endelse s_clk=0;endendmodule测试代码:timescale 1ns/1nsmodule freq_div_tb; reg rst_n,clk; wire key_clk,scan_clk,s_clk; always #1 clk=clk; initial begin clk=0; rst_n=0; #3 rst_n=1; #200_000 $stop; end freq_div freq_div(clk, rst_n, scan_clk, s_clk, key_clk);endmoduleKey_ctl模块:Clock_ctl模块:源代码:module Cloc

    28、k_ctl(/ ALTERA_ARGS_BEGIN DO NOT REMOVE THIS LINE!clk, rst_n, set_en, h_set, m_set, s_set/ ALTERA_ARGS_END DO NOT REMOVE THIS LINE!);/ Port Declaration/ ALTERA_IO_BEGIN DO NOT REMOVE THIS LINE!input clk;input rst_n;input set_en;output h_set;output m_set;output s_set;/ ALTERA_IO_END DO NOT REMOVE THI

    29、S LINE!reg h_set;reg m_set;reg s_set;parameter1:0 normal=2b00,hour_set=2b01, minute_set=2b10,second_set=2b11;reg1:0 current_state,next_state;always(posedge clk or negedge rst_n)beginif(!rst_n) begin current_state=normal;endelse current_state=next_state;endalways(current_state or set_en)begincase(current_state)normal: if(set_en)next_state=hour_set; else next_state=normal;hour_set: if(set_en)next_state=minute_set; else next_state=hour_set;minute_set:if(set_en)next_state=second_set; else next_state=minute_set;second_set:i


    注意事项

    本文(FPGA数字钟之欧阳育创编.docx)为本站会员主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(点击联系客服),我们立即给予删除!

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




    关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

    copyright@ 2008-2022 冰点文档网站版权所有

    经营许可证编号:鄂ICP备2022015515号-1

    收起
    展开