luckyb1的个人空间 https://bbs.21ic.com/?1595584 [收藏] [复制] [RSS]

日志

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

已有 219 次阅读2017-3-25 16:42 |系统分类:嵌入式系统| 万年历, 明德扬, fpga, verilog, 至简设计法, fpga, fpga

一、  功能描述

1、上板复位后从元年11号开始计数,为方便上板调试,将一天的时间压缩为1秒;

2、按键用于设置日历,按下按键0进入设置状态,再次按下按键0退出设置状态;

3、按键1来选择想要设置的年月日的各个位;

4、按键2在设置状态进行计数设置,每按下一次数码管显示数字加1

5、平年365天(52+1天),闰年366天(52+2天)。平年228天,闰年229天。

6、闰年:每400年整一闰,或每4年且不为百年的一闰。即能被400整除,或不能被100整除但能被4整除的年份为闰年

二、  平台效果图

3.仿真结果:选取3个日期检查

11900228日:该年不是闰年,故2月份只有28

22000229日:该年是闰年,故2月份有29

320161227日:

经验证,日期显示正确。


三、   实现过程

首先根据所需要的功能,列出工程顶层的输入输出信号列表。 


  

信号名


  

  

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_hmon_cnt_1mon_2_hmon_2_1分别为大月小月以及平年闰年的2月计数器、年份计数器yea_oneyea_tenyea_hunyea_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个数码管数据


  


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


  

  

按键有效信号


  


 

























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


  

  

数码管位选信号


  


路过

鸡蛋

鲜花

握手

雷人

评论 (0 个评论)