利用VHDL語言寫的一個數字鐘的程序。該數字鐘實現 的功能有:
1.時間:顯示及校時,時間為24小時制
2.日歷:顯示年月日,及設定功能;自動判定閏年,每個月的天數;
3.秒表:啟動/停止/保持顯示/清零;
4.鬧鐘:設定鬧鐘時間,由蜂鳴器鬧鈴。
利用開發板上提供的40MHz晶振時鐘信號做脈沖,接與P183管腳;
還有一個11.0592MHz的時鐘信號做掃描脈沖
管腳定義:
Clr: 時間清零 : P94
Clr+Sclock: 秒表清零: P94+P96
Clr+Data: 年月日初始化: P94+P97
Clock: 鬧鐘顯示: P95
Sclock: 秒表顯示: P96
Data: 年月日顯示: P97
H_add: 調整時間(小時): P99
M_add: 調整時間(分鐘): P100
Clock+hclock: 調整鬧鐘小時: P95+P101
Clock+hclock: 調整鬧鐘分鐘: P95+P102
Pause: 秒表暫停: P96+P103
Data+hclock: 調整年: P97+P101
Data+mclock: 調整月: P97+P102
Data+pause: 調整日: P97+P103
在具體程序實現時,發現VHDL語言語法的一些莫名其妙的問題:
1、信號量STD_LOGIC_VECTOR,STD_LOGIC類型等不允許賦初值
,一旦賦初值,后面就不能改變。這樣設計的理由?
2、盡管信號量有默認值,但在用之前假如沒有賦值語句,就可
能報錯!
3、關于信號上升沿的問題,自己在編程運用的過程中發現并非
所有信號都能用rising_edge()來做條件,即使你定義該信號時的情
況與時鐘信號的定義是一樣的,具體原因還不明白。
4、關于變量和信號量的問題:即使定義時用的是同一個數據類
型,例如整形INTEGER,但在具體用時卻有不同的問題,盡管兩者可
以賦值,但賦值后有可能會產生奇怪的問題,例如將信號量付給變
量,變量的很多運算可能會報錯。
5、VHDL中的算術運算有一些奇怪的特性,對REM取余,MOD取
模等對操作數都有限制,但令人難以捉摸。不明白其中的原因。
6、VHDL中除法運算‘/’好像存在這樣一個問題,例如a/b,如
果a為變量,則b必須是2的乘方數;而如果a是一個整型數值,則對b
沒有該要求!這個問題對寫程序產生很大的麻煩,不知為什么這樣
設計,或者有無其他解決辦法。
以上問題我在程序中遇到,不斷調試總是存在,還請高手指點!

以下附完整源程序下載
VHDL語言數字鐘
多功能電子數字鐘文檔