VHDL设计FPGA数字系统:电子万年历
平年闰年判断流程图如图3.4所示
开始 N 年低位被4整除 Y 年低位=100 Y N N 年高位被4整除 Y 闰年 平年
结束 图3.4 平年闰年判断流程图
3.4 本章小结
本章主要介绍了电子万年历的设计思路架构以及流程图,为今后具体的模块设计做出了铺垫。
15
VHDL设计FPGA数字系统:电子万年历
第4章 电子万年历的设计、仿真与展示
4.1 模块分析
4.1.1 秒与分的计数器模块
模块的基本介绍
这个模块主要是一个60进制加法计数器。
秒计数器由频率为1Hz的时钟脉冲信号驱动,秒计数满60,产生进位信号送给分计数器,分计数累加1,分计数满60的时候,产生进位信号送给时计数器,小时计数累加1。
由于秒计数器与分计数器的模值同为60,故而都使用这个计数器模块,并在此模块中加入了手动清零信号,由硬件拨位开关K8控制,在执行校时操作时如果产生错误可清零。
秒和分的60进制计数器通过VHDL语言编程,编译成功可生成器件,其器件如图4.1所示。
cnt_60mclkq1[3..0cinstresetq2[3..0 图4.1 秒和分计数器器件生成图
端口信息: 输入端口: clk:时钟源信号; reset:重置清零信号; 输出端口:
q1:秒分计数低位端口 q2:秒和分计数高位端口 c:进位输出端口
秒计数器的波形仿真如图4.2所示:
16
VHDL设计FPGA数字系统:电子万年历
图4.2 秒计数器仿真图
如图4.2所示,当计数器计数至59时,等待至clk信号下一个脉冲上升沿到来时,进位输出c产生一个输出脉冲,同时计数器再次从0开始计数,故设计正确。
4.1.2 时计数器模块
时计数器模块是一个以分计数器的进位输出信号为时钟脉冲的24进制加法计数器,当时计数器满24,日计数器累计加1。
在此模块中加入了手动清零信号,由拨位开关K8控制,在执行校时操作时如果产生错误可清零。
时的24进制计数器通过VHDL语言编程,编译成功可生成器件,其器件如图4.3所示。
cnt_2clkq1[3..cinst4reseq2[3..
图4.3 时计数器器件生成图
端口信息: 输入端口: clk:时钟源信号; reset:重置清零信号; 输出端口:
q1:时计数低位端口 q2:时计数高位端口 c:进位输出端口
时计数器的波形仿真如图4.4所示:
17
VHDL设计FPGA数字系统:电子万年历
图4.4 时计数器仿真图
如图4.4所示,当时计数器计数至23时,等待至clk信号下一个脉冲上升沿到来时,进位输出c产生一个输出脉冲,同是时计数器再次从0开始计数,故设计正确。
4.1.3 日计数器模块
日计数器模块是比较特别的,因为它的进制设定有四种不同的情况: 若该月为大月(1、3、5、7、8、10、12月)日计数器计数至31时才产生进位信号;
若为该月小月(4、6、9、11月),日计数器计数至30时就产生进位信号; 若该月为闰年的2月,日计数器计数至29时就产生进位信号; 若该月为平年的2月份,日计数器计数至28时就产生进位信号。
所以,在日计数器中需要输入判断信号panduan,该判断信号可用2位2进制表示,若判断信号为00,则日计数器为31进制计数器;若判断信号为01,则日计数器为30进制计数器;若判断信号为10,则日计数器为28进制计数器;若判断信号为11,则日计数器为29进制计数器。
该判断信号panduan由月计数器的输出信号pan提供。
同样,在模块中加入了手动清零信号,由K8控制,在校时时产生错误可清零。
日的计数器通过VHDL语言编程,编译成功可生成器件,其器件如图4.5所示。
daypanduan[1..0]clkresetinst5q1[3..0]q2[3..0]c
图4.5 日计数器器件生成图
18
VHDL设计FPGA数字系统:电子万年历
端口信息: 输入端口: clk:时钟源信号; reset:重置清零信号; 输出端口:
q1:日计数低位端口 q2:日计数高位端口 c:进位输出端口
panduan:月份状态判断端口
日计数器的波形仿真如图4.6至图4.9所示:
(1)当判断信号panduan为00时,日计数器的波形仿真如图4.6所示:
图4.6 判断信号panduan为00时日计数器的仿真图
如图4.6所示,当输入信号panduan为00时,日计数器计数至31时,等待至clk信号下一个脉冲上升沿到来时,进位输出c产生一个输出脉冲,同时日计数器再次从1开始计数,故设计正确。
(2)当输入信号panduan为01时,日计数器的波形仿真如图4.7所示:
图4.7 判断信号panduan为01时日计数器的仿真图
19