1功能概述
萬年歷是記錄一定時間范圍內的年歷,其名稱只是一種象征,表示時間跨度大。由于其功能非常常用,且極為方便人們查詢使用,因此廣泛應用于鐘表、歷書出版物、電子產品、電腦軟件和手機應用等行業中。
與傳統計時工具如鐘表日歷等相比,數字萬年歷具備精確度高、成本低廉、運行穩定、功能多樣等眾多優點,因此國內外許多設計人員先后進行了相關設計開發。其中,基于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整除的年份為閏年。
2 設計思路
首先根據所需要的功能,列出工程頂層的輸入輸出信號列表。如下表:
我們可以把工程劃分成三個模塊,分別是萬年歷計數模塊、按鍵模塊和數碼管顯示模塊。
1. 計數模塊——實現的是萬年歷計數功能,為方便觀看,將一天時間設置為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得到年份。本模塊還自動計算當年是否是平閏年。
信號列表如下:
2. 按鍵模塊——4x4矩陣鍵盤,實現了矩陣鍵盤的掃描并使用按鍵消抖功能。
信號列表如下:
3. 數碼管模塊——實現將年月日的信息顯示在數碼管上。
信號列表如下:
? ?3、程序設計
評論
查看更多