資源描述:
《EDA快速校時數(shù)字鐘程序文檔.docx》由會員上傳分享,免費在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫。
1、由于要實現(xiàn)快速調(diào)時,所以這就要求在“計數(shù)”時用一個時鐘頻率,在“較時”時有需要一個頻率,這就會出現(xiàn)一個問題,那就是:一個進程(即process)中,不能出現(xiàn)兩個時鐘,否則就會出現(xiàn)error(100028)……,所以如果“較時”和“計數(shù)”在一個process時,就需要避免在一個進程中采用兩個時鐘輸入(即將兩個時鐘頻率作為敏感信號),所以這也就是這里需要解決的問題了,考慮到計數(shù)和調(diào)時不是同時進行的,因此可以考慮在一個進程中,采用一個時鐘輸入進行類似于分時復(fù)用的原理,即計數(shù)時clk信號輸出計數(shù)頻率,校時時輸出計數(shù)頻率頻率。而在設(shè)計時由于采用了EN信號進行計數(shù)和校時的
2、切換(即EN為1時計數(shù),為0時校時),因此可以利用EN信號作為時鐘分頻模塊(即下圖中的CLK_TWO模塊)中的CLK_low輸出的高低頻切換。具體程序如下(主要看一下CLK_TWO模塊中的紅色程序部分即能明白)。頂層原理圖CLK_TWO模塊程序LIBRARYieee;USEieee.std_logic_1164.all;USEieee.std_logic_unsigned.all;ENTITYCLK_TWOISPORT(CLK,CHAG:INSTD_LOGIC;CLK_low,CLK_high:OUTSTD_LOGIC);ENDCLK_TWO;ARCHITEC
3、TUREBEHAVOFCLK_TWOISBEGINPROCESS(CLK,CHAG)VARIABLEA,B:INTEGER:=0;VARIABLEH,L:STD_LOGIC;BEGINIFCLK'EVENTANDCLK='1'THENIFA<10000THENA:=A+1;IFA<5000THENH:='0';ELSEH:='1';ENDIF;ELSEA:=0;ENDIF;ifCHAG='1'thenIFB<24000000THENB:=B+1;------24MHz分頻為1Hz用于計數(shù)IFB<1200000THENL:='0';ELSEL:='1';ENDI
4、F;ELSEB:=0;ENDIF;elseIFB<5000000THENB:=B+1;-----------24MHz分頻,分頻比為5000000。用于校時IFB<250000THENL:='0';ELSEL:='1';ENDIF;ELSEB:=0;ENDIF;endif;ENDIF;CLK_high<=H;CLK_low<=L;ENDPROCESS;ENDBEHAV;DG_CLK模塊程序libraryieee;useieee.std_logic_1164.all;useieee.std_logic_unsigned.all;entityDIG_CLOCKis
5、port(CLK,EN,RST1,RST2,RST3,ADD_HOUR,ADD_SEC,ADD_MIN:INSTD_LOGIC;COUT:OUTSTD_LOGIC;DIS_HOUR10,DIS_HOUR1,DIS_MIN10,DIS_MIN1,DIS_SEC10,DIS_SEC1:OUTSTD_LOGIC_VECTOR(3DOWNTO0));ENDDIG_CLOCK;ARCHITECTUREBEHAVOFDIG_CLOCKISSIGNALCOUNT1,COUNT2:STD_LOGIC:='0';SIGNALLCX:STD_LOGIC;BEGINB1:proce
6、ss(CLK,EN,RST3,ADD_SEC)-----秒校時及計數(shù)模塊VARIABLES10,S1:STD_LOGIC_VECTOR(3DOWNTO0):="0000";VARIABLEu1,v3:INTEGER:=0;BEGINIFRST3='0'THENS10:="0000";S1:="0000";ELSIFCLK'EVENTANDCLK='1'THENIFEN='1'THENIF(S1<9)THENS1:=S1+1;u1:=0;--秒ELSES1:="0000";u1:=1;ENDIF;IF(u1=1)THENIF(S10<5)THENS10:=S10
7、+1;ELSES10:="0000";ENDIF;ENDIF;IF(S10=5)AND(S1=9)THENCOUNT1<='1';--S10:=(OTHERS=>'0');S1:=(OTHERS=>'0');ELSECOUNT1<='0';ENDIF;ELSIFADD_SEC='0'THENIF(S1<9)THENS1:=S1+1;v3:=0;ELSES1:="0000";v3:=1;ENDIF;IF(v3=1)THENIF(S10<5)THENS10:=S10+1;ELSES10:="0000";ENDIF;ENDIF;--IF(S10=5)AND(S1=9
8、)THENS10:=(OTHERS=>