基于fpga电子万年历的设计与实现内容摘要:

第 3 章 系统分析 计时流程 当计时开始时,每出现一次 CLK,则秒个位计数加 1,当秒个位计数到 9 时则向秒十位进 1,当秒十位到达 5 且秒个位到达 9 时则 分个位计数加 1,当分个位计数到 9 时则向分十位进 1,当分十位到达 5 切分个位到达 9 时则时个位计数加 1,当时个位计数到达 9 时则向时十位进 1,当时十位到达 2 切时个位到达 3 时则日期计时中的日个位计数加 1. 功能按键 本设计共有 1 个功能键以及两个调整键 功能键用来选择不同的工作模式: 时间正常显示功能、时间调整与显示、秒表功能、闹钟设置与查看、日期显示、日期调整与设置。 调整键 1:主要用于闹钟设置、日期显示与调整、秒表、时间调整与设置中的位置选择按钮,与功能键配合使用。 2 号键功能模式,即时间调整与设置时,用作时 、分、秒的移位,按一下,将会实现“时 分 秒”的依次移位,便于在特定位置进行调整; 4 号键功能模式,即闹钟设置与查看时,同样用作时、分、秒的移位,按一下,将会实现“时 分 秒”的依次移位,便于在特定位置进行调整; 6 号键功能模式,即日期调整与设置时,用作月、日的移位,按一下,将会实现“月日”的依次移位,便于在特定位置进行调整。 调整键 2:主要用于闹钟设置、日期显示与调整、秒表、时间调整与设置中的调整按钮,与功能键配合使用。 2 号键功能模式,即时间调整与设置时,用作时、分、秒的调整,按一下,将会使得当前调整 键 1 选择的位置数字增加 1; 4 号键功能模式,即闹钟设置与查看时,同样用作时、分、秒的调整,按一下,将会使得当前调整键 1 选择的位置数字增加 1; 6 号键功能模式,即日期调整与设置时,用作月、日的移位,按一下,将会使得当前调整键 1 选择的位置数字增加 1。 6 功能框架 本设计的框架图如图 所示: 主控制模块 maincontrol 时间及其设置模块 timepiece_main 时间显示动态位选模块 time_disp_select 显示模块 disp_data_mux 秒表模块 stopwatch 日期显示 与设置模块 date_main 闹钟模块 alarmclock 分频模块 fdiv 7 ENc lk 1c lk 2F _o uts t op w at c hins t 2D at e_ENdat e_dis p_c lkday _END at e_Set _ENSW 1SW 2m ont h1[ 3. . 0]m ont h0[ 3. . 0]day 1[ 3. . 0]day 0[ 3. . 0]D is p_s elec t _dat e[ 5. . 0]dat e_m ainins t 4c lk _1k H zc lk _200H zT im e_ENT im eSet _ENt im es et _dis p_driv e[ 2. . 0]t im e_dis p_s elec t [ 5. . 0]t im e_dis p_s elec tins t 6c lk f 200H zf 60H zf 1H zf divins t 5SW 3 T im epiec e_ENT im eSet _ENSt opw at c h_ENAlarm c loc k _END at e_END at eSet _ENm ainc ont rolins t 3C LKT im ep iec e_ ENT im eS et _E NSW 1SW 2D ay _E Nho ur_ 1[ 3. . 0]ho ur_ 0[ 3. . 0]m inu t e_ 1[ 3. . 0]m inu t e_ 0[ 3. . 0]s ec on d_ 1[ 3. . 0]s ec on d_ 0[ 3. . 0]T im eS et _d is p_ dri v e[ 2. . 0]t im e_ au t o_ an d_ s etins t 1ENSW 1SW 2c lk _200H zhour1[ 3. . 0]hour0[ 3. . 0]m inut e1[ 3. . 0]m inut e0[ 3. . 0]s ec ond1[ 3. . 0]s ec ond0[ 3. . 0]alarmalarm c loc k _dis p_s elec t [ 5. . 0]alarm c loc kins t 11T im ep iec e_ ENT im eSe t _ENSt op w at c h_ ENt im e_ dis p_ s ele c t [ 5. . 0]Alarm c loc k _ENala rm c loc k _d is p_ s ele c t [ 5. . 0]ho ur1 [ 3. . 0]ho ur0 [ 3. . 0]m inu t e1 [ 3. . 0]m inu t e0 [ 3. . 0]s ec on d1 [ 3. . 0]s ec on d0 [ 3. . 0]D at e_ END at eSe t _ENda t e_ dis p_ s ele c t [ 5. . 0]m on t h1 [ 3. . 0]m on t h0 [ 3. . 0]da y 1[ 3. . 0]da y 0[ 3. . 0]dis p_ s ele c t [ 5. . 0]dis p_ da t a[ 6. . 0]dis p_ da t a_ m uxins t 8G N DC loc kIN P U TG N DSW 3IN P U TG N DSW 1IN P U TG N DSW 2IN P U TalarmO U T P U Tdis p_ s ele c t [ 5. . 0]O U T P U Tdis p_dat a[ 6. . 0]O U T P U T 图 电子万年历框架图 8 第 4 章 系统设计 时钟问题 不管是离散逻辑还是可编程逻辑,时钟的稳定性是很重要的。 在 FPGA 设计中通常采用:全局时钟、门控时钟、多级逻辑时钟和波动时时钟。 电子万年历是这四种时钟的任意组合。 全局时钟 对于一个设计项目,全局时钟(或同步同步)是最简单和最稳定的时钟。 在 FPGA中最好的时钟设计方案是:由专用的时钟驱动主时钟来控制项目中的触发器。 FPGA一般都有专用的全局时钟 引脚的设计计划,应尽量采用全局时钟,它可以提供一种装置,在最短的时钟至输出延迟。 门控时钟 在许多应用中,整个设计项目,使用一个外部的全局时钟是不可能或不实际的,它通常是阵列时钟构成门控时钟。 门控时钟经常与微处理器的接口。 每当组合逻辑控制触发,都会存在门控时钟。 在门控时钟,时钟功能等方面应该多注意,以避免不同时钟的的影响。 旨在满足以下两个条件,可以保证时钟信号不出现危险的毛刺,门控时钟可以像全局时钟工作。 多级逻辑时钟 无论是用离散逻辑、可编程逻辑,还是用其他器件实现的任何数字设计,稳定 可靠的时钟是设计成功与否的关键。 不稳定的时钟在不良条件下回产生不必要的偏差导致最终数据出错。 在利用 FPGA 芯片时通常采用几种固定的时钟类型。 波动式时钟 大部分系统都会在设计中采用多时钟。 例如,两个异步处理器之间的接口使用微处理器或者异步通信通道。 两个时钟之间需要保持时间关系,因此引入一些附加的约束条件。 他们会将信号同步。 , 在许多应用中,只有异步信号同步是不够的,当系统有两个或两个以上的非同源时钟,数据的建立和保持时间是很难得到保证,将面临与一个复杂时间 analysisproblem 的。 最好的 办法是所有非同源时钟同步。 FPGA 内部锁相环( PLL)是一个很好的方法,但并非所有 FPGA 与 PLL,但有 PLL 功能的芯片大多很昂贵。 因此,你需要使用有使能端 D 触发器,和高频率的时钟来使信号同步。 时钟的稳定性对于系统来说很重要,所以设计中不能将任何有毛刺的输出当做时钟 9 信号。 而且尽量只是用一个全局时钟。 对多时钟的系统要特别注意异步信号的同步问题。 使用 FPGA 内部的时钟资源主要是为了获得高驱动能、低抖动时延、以及稳定的占空比的时钟信号。 专用时钟主要有两部分,一部分是布线资源,另一部分是 FPGA 内部的 PLL。 电子万年历的控制系统 本万年历系统共有 8 个模块,分别进行仿真以下是 8 模块: 主控制模块 maincontrol 时间及其设置模块 timepiece_main 时间显示动态位选模块 time_disp_select 显示模块 disp_data_mux 秒表模块 stopwatch 日期显示与设置模块 date_main 闹钟模块 alarmclock 分频模块 fdiv 接下来分别描述一下每个模块的功能以及流程图 主控制模块 maincontrol 该模块实现了整体控制各种模块的功能,包括时 间显示和调整,年月日显示和调整,闹钟和调整,秒表控制。 该模块的按键影响相应的输出用于控制其他模块工作。 每次按下功能键,则按照时钟自动显示使能,时钟设置与调整使能,秒表功能使能,闹钟时间设置使能,日期显示使能,日期显示与设置使能,的顺序依次输出,对相应的模块输入有效使能,从而实现相应的功能。 时间及其设置模块 time_auto_and_set 时间及其设置模块主要完成时间的自动正常运行与显示,以及在相应的功能号下,实现时间的调整与设置。 该模块主要完成对时间的设置相关的闪烁显示控制以及时间中的小时 、分钟、秒等数据的改变。 流程图如图 所示: 10 图 时间设置流程图 当时间使能为 1 时,即处于时间自动工作状态,即每出现一次时钟信号 clk,计数一次,先计数秒的个位,当计数到 9 时,向秒的十位发出一个计数信号,此时秒的十位进行一次计数,类推,秒的十位计数到 5,且秒的个位计数到 9 时,分的个位则进行一次计数,按照此规律进行时间的计数。 当计满 24 小时,向日期发出一个计数信号,即此使能端输出有效信号 1,进行日期的计数。 时间数据与时间设置数据多路选择模块 time_mux 该模块用来分时向显示单元传输显 示数据,流程图如图 所示: 11 图 多路选择模块的流程图 该模块用来判定是进入自动显示时间状态还是显示调整后的的时间,当时间设置使能为 1 时则显示调整后时间,反之则显示自动模式时的时间。 时间显示动态位选模块 time_disp_select 该模块用来分时显示时间数据,但是在选择合适的时间间隔下,人眼并不能分辨出是分时显示的,这样显示的方式可以降低功耗。 当时间设置使能为 0,时间自动显示使能为 1 时,以 clk_1kHz 为时钟信号,输出自动显示的时间,按位依次显示;当时间设置使能为 1,时间自 动显示使能为 0 时,则以clk_200Hz 为时钟信号,输出以时间设置数据显示的同步信号对应的位置。 显示模块 disp_data_mux 模块是时间、日期等数据用数码管显示的控制与数据传输模块,包括数据的传输以及 BCD 码的译码等。 显示原理采用的是七段数码管的现实原理,原理图如图 所示: 图 七段数码管原理图 12 日期显示与设置模块 date_main 该模块实现日期的显示和日期的调整与设置。 当时间模块的时十位为 2 个位为 23 且分十位为 5 个位为 9 秒十位为 5 个位为 9 时则日期日位加 1,当月位为 12 时则日位为 31 时月份加 1。 闹钟模块 alarmcloc。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。