資源描述:
《VHDL數(shù)字鐘設(shè)計.doc》由會員上傳分享,免費在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫。
1、VHDL數(shù)字鐘設(shè)計報告一、系統(tǒng)功能概述:1.進行一個具有‘時’、‘分’、‘秒’的十進制數(shù)計時功能,‘時’、‘分’、‘秒’各用兩個數(shù)碼管分別顯示(小時從00~23,分、秒從00~59);2.可以進行手動校時,校分,校時完畢之后從校正點開始從新計時;3.具有定時功能,可以預(yù)設(shè)鬧鐘,并在預(yù)定的時間發(fā)出鬧鈴聲;4.具有整點報時功能,即從59分50秒起,每隔2秒鐘發(fā)出一次低音“嘟”的信號,連續(xù)5次,最后一次發(fā)出高音“嘀”的信號,此信號結(jié)束即達到整點。二、系統(tǒng)組成以及系統(tǒng)各部分的設(shè)計:1..⑴系統(tǒng)結(jié)構(gòu)描述:輸入輸出端
2、口設(shè)置port(reset:instd_logic;----上升沿有效,用于改變工作狀態(tài)sign:instd_logic;---高電平有效,用來控制校時,定時功能;clk:instd_logic;----計時脈沖;clk2:instd_logic;-----鬧鈴脈沖;hourmusic1:outstd_logic;hourmusic2:outstd_logic;music:outstd_logic;------鬧鈴端口;q5:outstd_logic_vector(3downto0);-------小時高
3、位出口;q4:outstd_logic_vector(3downto0);-------小時低位出口;q3:outstd_logic_vector(3downto0);-------分鐘高位出口;q2:outstd_logic_vector(3downto0);-------分鐘低位出口;q1:outstd_logic_vector(3downto0);-------秒鐘高位出口;q0:outstd_logic_vector(3downto0)---------秒鐘低位出口;);endclock;中間變量
4、設(shè)置signalqq5,qq4,qq3,qq2,qq1,qq0:std_logic_vector(3downto0);——用于計時,校時時‘時’、‘分’、‘秒’的對應(yīng)中間變量;signalqqhh,qqhl,qqmh,qqml:std_logic_vector(3downto0);——用于定時時‘時’、‘分’、‘秒’的對應(yīng)中間變量;signalqqq5,qqq4,qqq3,qqq2,qqq1,qqq0:std_logic_vector(3downto0);——用于顯示時‘時’、‘分’、‘秒’的對應(yīng)中間變量
5、;signalflag:std_logic_vector(2downto0);——用來標記計時,定時,校時的狀態(tài);signalmusica:std_logic;——鬧鈴的中間變量;signalhourmusic11,hourmusic22:std_logic;——整點報時的中間變量;signalk:std_logic;——用來控制整點報時;①計時電路:process(reset)-------------通過reset上升沿觸發(fā)調(diào)整工作狀態(tài);beginif(reset'eventandreset='1')
6、thenifflag="100"then-----------若flag等于4,則清零,否則加1;flag<="000";elseflag<=flag+1;endif;endif;endprocess;process(clk,flag,sign)-------------用于計時,校時,定時;beginif(clk'eventandclk='1')thenk<=notk;-----------產(chǎn)生二分頻,用來控制后面整點報時;ifflag="000"then------計時環(huán)節(jié)ifqq0="1001"th
7、enqq0<="0000";ifqq1="0101"thenqq1<="0000";ifqq2="1001"thenqq2<="0000";ifqq3="0101"thenqq3<="0000";ifqq4="1001"thenqq4<="0000";qq5<=qq5+1;elsifqq5="0010"andqq4="0011"thenqq4<="0000";qq5<="0000";elseqq4<=qq4+1;endif;elseqq3<=qq3+1;endif;elseqq2<=qq2+1;endif
8、;elseqq1<=qq1+1;endif;elseqq0<=qq0+1;endif;②校時電路:elsif(flag="001"andsign='1')then------校時ifqq4="1001"thenqq4<="0000";qq5<=qq5+1;elsifqq5="0010"andqq4="0011"thenqq4<="0000";qq5<="0000";elseqq4<=qq4+1;endif;elsif(flag