資源描述:
《vhdl設(shè)計(jì)數(shù)字鐘系統(tǒng)》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫(kù)。
1、VHDL設(shè)計(jì)數(shù)字鐘系統(tǒng)1.熟練利用VHDL語(yǔ)言進(jìn)行數(shù)字系統(tǒng)設(shè)計(jì);2.掌握數(shù)字系統(tǒng)的設(shè)計(jì)方法——自頂向下的設(shè)計(jì)思想;3.掌握計(jì)數(shù)器的設(shè)計(jì)與使用;4.掌握調(diào)時(shí),調(diào)分功能的實(shí)現(xiàn);5.根據(jù)數(shù)字鐘的功能要求設(shè)計(jì)一個(gè)數(shù)字鐘;6.掌握鬧鐘系統(tǒng)的原理。數(shù)字鐘是一計(jì)時(shí)的工具,有著廣泛的用途。本實(shí)驗(yàn)的數(shù)字鐘要求有三個(gè)功能按鈕:一個(gè)是清零按鈕reset11,當(dāng)按下此按鈕時(shí),數(shù)字鐘顯示有位都清零.二是調(diào)分鐘的按鈕setmin,當(dāng)按下此按鈕時(shí)分鐘會(huì)以1HZ的頻率速度進(jìn)行調(diào)時(shí),而且在調(diào)分鐘時(shí)秒鐘會(huì)暫停不動(dòng);三是調(diào)小時(shí)的按鈕sethour,當(dāng)按下此按鈕時(shí)時(shí)鐘會(huì)以1H
2、Z的頻率速度進(jìn)行調(diào)時(shí),在調(diào)小時(shí)時(shí)分鐘會(huì)暫停不動(dòng),但秒鐘是正常記時(shí)的。另外還有一個(gè)鬧鐘模塊,在鬧鐘模塊中,當(dāng)按下調(diào)時(shí)或調(diào)分鍵時(shí),數(shù)碼顯示管顯示所調(diào)鬧鐘的時(shí)間,并進(jìn)行調(diào)時(shí)或調(diào)分。當(dāng)兩個(gè)鍵都未按下時(shí),數(shù)碼管顯示數(shù)字鐘的時(shí)間。當(dāng)設(shè)定的鬧鐘時(shí)間和數(shù)字鐘的時(shí)間一致時(shí),紅燈亮,黃燈滅,同時(shí)喇叭叫。其余時(shí)間黃燈亮,紅燈滅,喇叭不叫。此數(shù)字鐘是以24小時(shí)制記時(shí),當(dāng)?shù)秸c(diǎn)時(shí)會(huì)報(bào)時(shí)一分鐘,按下清零鍵時(shí)也會(huì)報(bào)時(shí)一分鐘。主要元件有計(jì)數(shù)器,分頻器,報(bào)時(shí)器,選擇器和譯碼器等。控制邏輯主要是用來(lái)實(shí)現(xiàn)計(jì)數(shù)和清零。基本方框圖如下:.....................
3、......................................分頻模塊采用原理圖輸入方式實(shí)現(xiàn)2分頻與1000分頻,但這里并沒(méi)有用到1000分頻,因?yàn)楹髞?lái)考慮到精度問(wèn)題,將千分頻用直接輸入了。程序如圖:利用三個(gè)7490進(jìn)行硬件分頻!微秒模塊采用VHDL語(yǔ)言輸入方式,以時(shí)鐘clk,清零信號(hào)clr以及暫停信號(hào)STOP為進(jìn)程敏感變量,程序如下:libraryieee;useieee.std_logic_1164.all;useieee.std_logic_unsigned.all;entityMINSECONDbisport(cl
4、k,clrm,stop:instd_logic;----時(shí)鐘/清零信號(hào)secm1,secm0:outstd_logic_vector(3downto0);----秒高位/低位co:outstd_logic);-------輸出/進(jìn)位信號(hào)endMINSECONDb;architectureSECofMINSECONDbissignalclk1,DOUT2:std_logic;beginprocess(clk,clrm)variablecnt1,cnt0:std_logic_vector(3downto0);---計(jì)數(shù)VARIABLECOU
5、NT2:INTEGERRANGE0TO10;beginIFCLK'EVENTANDCLK='1'THENIFCOUNT2>=0ANDCOUNT2<10THENCOUNT2:=COUNT2+1;ELSECOUNT2:=0;DOUT2<=NOTDOUT2;ENDIF;ENDIF;ifclrm='1'then----當(dāng)clr為1時(shí),高低位均為0cnt1:="0000";cnt0:="0000";elsifclk'eventandclk='1'thenifstop='1'thencnt0:=cnt0;cnt1:=cnt1;endif;ifcnt
6、1="1001"andcnt0="1000"then----當(dāng)記數(shù)為98(實(shí)際是經(jīng)過(guò)59個(gè)記時(shí)脈沖)co<='1';----進(jìn)位cnt0:="1001";----低位為9elsifcnt0<"1001"then----小于9時(shí)cnt0:=cnt0+1;----計(jì)數(shù)--elsifcnt0="1001"then--clk1<=notclk1;elsecnt0:="0000";ifcnt1<"1001"then----高位小于9時(shí)cnt1:=cnt1+1;elsecnt1:="0000";co<='0';endif;endif;endif;s
7、ecm1<=cnt1;secm0<=cnt0;endprocess;endSEC;秒模塊程序清單libraryieee;useieee.std_logic_1164.all;useieee.std_logic_unsigned.all;entitySECONDisport(clk,clr:instd_logic;----時(shí)鐘/清零信號(hào)sec1,sec0:outstd_logic_vector(3downto0);----秒高位/低位co:outstd_logic);-------輸出/進(jìn)位信號(hào)endSECOND;architecture
8、SECofSECONDisbeginprocess(clk,clr)variablecnt1,cnt0:std_logic_vector(3downto0);---計(jì)數(shù)beginifclr='1'then-