集成电路技术分享

 找回密码
 我要注册

QQ登录

只需一步,快速开始

搜索
查看: 1256|回复: 4

基于至简设计法实现的万年历功能

[复制链接]
mdy-郭柏荣 该用户已被删除
mdy-郭柏荣 发表于 2019-7-24 15:14:33 | 显示全部楼层 |阅读模式
本案例:明德扬首创全新FPGA设计技巧--至简设计法,教你如何一步一步去完成一个复杂电路的设计,里面很多有实用技巧,熟练运用这些技巧,有助于你写出非常优秀的FPGA设计代码。非常简洁易读,欢迎比较。
一、   功能描述
1、上板复位后从元年1月1号开始计数,为方便上板调试,将一天的时间压缩为1秒;
2、按键用于设置日历,按下按键0进入设置状态,再次按下按键0退出设置状态;
3、按键1来选择想要设置的年月日的各个位;
4、 按键2在设置状态进行计数设置,每按下一次数码管显示数字加1;
5、 平年365天(52周+1天),闰年366天(52周+2天)。平年2月28天,闰年2月29天。
6、 闰年:每400年整一闰,或每4年且不为百年的一闰。即能被400整除,或不能被100整除但能被4整除的年份为闰年。
二、  平台效果图



3.仿真结果:选取3个日期检查
(1)1900年2月28日:该年不是闰年,故2月份只有28天



(2)2000年2月29日:该年是闰年,故2月份有29天



(3)2016年12月27日:



经验证,日期显示正确。

三、实现过程
首先根据所需要的功能,列出工程顶层的输入输出信号列表。
信号名        I/O        位宽        说明
clk        I        1        系统工作时钟50M
rst_n        I        1        系统复位信号,低电平有效
key_col        I        4        矩阵键盘列信号
key_row        O        4        矩阵键盘行信号
segment        O        8        数码管段选信号
seg_sel        O        8        数码管位选信号





 
 
 
 
 
我们可以把工程划分成三个模块,分别是万年历计数模块、按键模块和数码管显示模块。
1. 万年历计数模块
万年历计数模块实现的是万年历计数功能,为方便观看,将一天时间设置为一秒,日计数器dat_cnt、月份计数器mon_cnt_h、mon_cnt_1、mon_2_h、mon_2_1分别为大月小月以及平年闰年的2月计数器、年份计数器yea_one、yea_ten、yea_hun、yea_tho分别为年份的个十百千位,由yea_cnt_tol <= yea_cnt1000 + yea_cnt100 + yea_cnt10 + yea_one得到年份。本模块还自动计算当年是否是平闰年。
本模块信号列表如下:
信号名        I/O        位宽        说明
clk        I        1        系统工作时钟50M
rst_n        I        1        系统复位信号,低电平有效
key_num        I        4        矩阵键盘列信号
key_vld        I        4        矩阵键盘行信号
dout        O        32        输出给8个数码管数据
&#160;
2. 按键模块
本次案例万年历使用的是4x4矩阵键盘,本模块就是实现了矩阵键盘的扫描并使用以及按键消抖功能。通过行扫描法得到按下的键的位置信息。
本模块的信号列表如下:
信号名        I/O        位宽        说明
clk        I        1        系统工作时钟50M
rst_n        I        1        系统复位信号,低电平有效
key_col        I        4        矩阵键盘列信号
key_row        O        4        矩阵键盘行信号
key_num        O        4        按键位置信号
key_vld        O        1        按键有效信号
&#160;




&#160;
&#160;
&#160;&#160;
3.数码管模块
数码管模块实现了将年月日的信息显示在数码管上。
本模块的信号列表如下:
信号名        I/O        位宽        说明
clk        I        1        系统工作时钟50M
rst_n        I        1        系统复位信号,低电平有效
din        I        32        数码管显示值输入
din_vld        O        8        数码管显示输入指示
segment        O        8        数码管段选信号
seg_sel        O        8        数码管位选信号
&#160;&#160;
zhangyukun 发表于 2019-7-25 09:58:29 | 显示全部楼层
基于至简设计法实现的万年历功能
晓灰灰 发表于 2019-7-25 13:08:13 | 显示全部楼层
基于至简设计法实现的万年历功能
mdy-郭柏荣 该用户已被删除
 楼主| mdy-郭柏荣 发表于 2019-7-25 16:16:27 | 显示全部楼层
一、0基础0经验的小白
二、要转行的社会工作者
三、需要作提高的工作者
想学fpga,都可以私信我
雷磊 发表于 2022-8-4 15:19:56 | 显示全部楼层
vivado使用误区与进阶
http://www.fpgaw.com/forum.php?m ... 1&fromuid=54563
(出处: fpga论坛|fpga设计论坛)
您需要登录后才可以回帖 登录 | 我要注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

QQ|小黑屋|手机版|Archiver|fpga论坛|fpga设计论坛 ( 京ICP备20003123号-1 )

GMT+8, 2025-6-9 13:24 , Processed in 0.065037 second(s), 20 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表