1功能概述
萬(wàn)年歷是記錄一定時(shí)間范圍內(nèi)的年歷,其名稱(chēng)只是一種象征,表示時(shí)間跨度大。由于其功能非常常用,且極為方便人們查詢(xún)使用,因此廣泛應(yīng)用于鐘表、歷書(shū)出版物、電子產(chǎn)品、電腦軟件和手機(jī)應(yīng)用等行業(yè)中。
與傳統(tǒng)計(jì)時(shí)工具如鐘表日歷等相比,數(shù)字萬(wàn)年歷具備精確度高、成本低廉、運(yùn)行穩(wěn)定、功能多樣等眾多優(yōu)點(diǎn),因此國(guó)內(nèi)外許多設(shè)計(jì)人員先后進(jìn)行了相關(guān)設(shè)計(jì)開(kāi)發(fā)。其中,基于FPGA開(kāi)發(fā)除設(shè)計(jì)簡(jiǎn)便、開(kāi)發(fā)成本低、電路簡(jiǎn)潔等,更具備功能設(shè)計(jì)靈活方面的優(yōu)勢(shì)。只需要在軟件上做簡(jiǎn)單修改即可添加不同功能,如鬧鐘、陰陽(yáng)歷對(duì)照等。
在FPGA設(shè)計(jì)中,數(shù)字萬(wàn)年歷屬于小規(guī)模集成電路。從原理上來(lái)講,是典型的數(shù)字電路,包括組合邏輯電路和時(shí)序電路。在本案例中具體功能要求如下:
1. 上板復(fù)位后從元年1月1號(hào)開(kāi)始計(jì)數(shù),為方便上板調(diào)試,將一天的時(shí)間壓縮為1秒;
2. 按鍵用于設(shè)置日歷,按下按鍵0進(jìn)入設(shè)置狀態(tài),再次按下按鍵0退出設(shè)置狀態(tài);
3. 按鍵1用來(lái)選擇想要設(shè)置的年月日的各個(gè)位;
4. 按鍵2在設(shè)置狀態(tài)時(shí)進(jìn)行計(jì)數(shù)設(shè)置,每按一次數(shù)碼管顯示數(shù)字加1;
5. 平年365天(52周+1天),閏年366天(52周+2天),其中平年2月28天,閏年2月29天。
6. 閏年:每400年整一閏,或每4年且不為百年的一閏。即能被400整除,或不能被100整除但能被4整除的年份為閏年。
2 設(shè)計(jì)思路
首先根據(jù)所需要的功能,列出工程頂層的輸入輸出信號(hào)列表。如下表:

我們可以把工程劃分成三個(gè)模塊,分別是萬(wàn)年歷計(jì)數(shù)模塊、按鍵模塊和數(shù)碼管顯示模塊。

1. 計(jì)數(shù)模塊——實(shí)現(xiàn)的是萬(wàn)年歷計(jì)數(shù)功能,為方便觀(guān)看,將一天時(shí)間設(shè)置為1秒;日計(jì)數(shù)器dat_cnt、月份計(jì)數(shù)器mon_cnt_h、mon_cnt_1、mon_2_h、mon_2_1分別為大月小月以及平年閏年的2月計(jì)數(shù)器、年份計(jì)數(shù)器yea_one、yea_ten、yea_hun、yea_tho分別為年份的個(gè)十百千位,由yea_cnt_tol 《= yea_cnt1000 + yea_cnt100 + yea_cnt10 + yea_one得到年份。本模塊還自動(dòng)計(jì)算當(dāng)年是否是平閏年。
信號(hào)列表如下:

2. 按鍵模塊——4x4矩陣鍵盤(pán),實(shí)現(xiàn)了矩陣鍵盤(pán)的掃描并使用按鍵消抖功能。
信號(hào)列表如下:

3. 數(shù)碼管模塊——實(shí)現(xiàn)將年月日的信息顯示在數(shù)碼管上。
信號(hào)列表如下:

? ?3、程序設(shè)計(jì)

















電子發(fā)燒友App





評(píng)論