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

以下附完整源程序下載
VHDL語(yǔ)言數(shù)字鐘
多功能電子數(shù)字鐘文檔