資源描述:
《eda快速校時數(shù)字鐘程序文檔 》由會員上傳分享,免費在線閱讀,更多相關內容在工程資料-天天文庫。
1、由于要實現(xiàn)快速調時,所以這就要求在“計數(shù)”時用一個時鐘頻率,在“較時”時有需要一個頻率,這就會出現(xiàn)一個問題,那就是:一個進程(即process)中,不能出現(xiàn)兩個時鐘,否則就會出現(xiàn)error(100028),所以如果“較時”和“計數(shù)”在一個process吋,就需要避免在一個進程中采用兩個時鐘輸入(即將兩個時鐘頻率作為敏感信號),所以這也就是這里需要解決的問題了,考慮到計數(shù)和調時不是同時進行的,因此可以考慮在一個進程中,采用一個時鐘輸入進行類似于分時復用的原理,即計數(shù)時elk信號輸出計數(shù)頻率,校時時輸出計數(shù)
2、頻率頻率。而在設計時由于釆用了EN信號進行計數(shù)和校時的切換(即EN為1吋汁數(shù),為0吋校吋),因此可以利用EN信號作為時鐘分頻模塊(即下圖屮的CLK_TW0模塊)屮的CLK_low輸出的高低頻切換。具體程序如下(主要看一下CLK_TW0模塊中的紅色程序部分即能明白)。頂層原理圖CLK_TW0模塊程序LIBRARYieee;USEieee.std_logic_1164.all;USEieee.std_logic_unsigned.all;ENTITYCLK_TWOISPORT(CLK,CHAG:INSTD_
3、LOGIC;CLK_low,CLK_high:OUTSTD_LOGIC);ENDCLK_TWO;ARCHITECTUREBEHAVOFCLK一TWOISBEGINPROCESS(CLKZCHAG)VARIABLEA,BJNTEGER:=0;VARIABLEH,L:STD_LOGIC;BEGINIFCLK'EVENTANDCLK=TTHENIFA<10000THENA:=A+1;IFA<5000THENH:='0*;ELSEH:=T;ENDIF;ELSEA:=0;ENDIF;ifCHAG='l'then2
4、4000000THENB:=B+1;——24MHz分頻為1Hz用于計數(shù)IFHENL-'O';ELSEL:=T;ENDIF;ELSEB:=0;ENDIF;elseIFENB:=B+1;24MHz分頻,分頻比為5000000。用于校時000THENL:='O*;ELSEL:=T;ENDIF;ELSEB:=0;ENDIF;endif;ENDIF;CLK_highCLK_low<=L;ENDPROCESS;ENDBEHAV;DG_CLK模塊程序libraryieee;useieee.std_logic_1164
5、.all;useieee.std_logic_unsigned.all;entityDIG_CLOCKisport(CLK/EN,RST1,RST2,RST3/ADD_HOUR/ADD_SEC,ADD_MIN:INSTD_LOGIC;COUT:OUTSTD_LOGIC;DIS_HOUR10ZDIS_HOUR1/DIS_MIN10/DIS_MIN1,DIS_SEC10/DIS_SEC1:OUTSTD_LOGIC_VECTOR(3DOWNTO0));ENDDIG_CLOCK;ARCHITECTUREBEHA
6、VOFDIG_CLOCKISSIGNALCOUNT1ZCOUNT2:STD_LOGIC:=*0';SIGNALLCX:STD_LOGIC;BEGINBI:process(CLK,EN,RST3,ADD_SEC)-----秒校時及計數(shù)模塊VARIABLES1O,S1:STD_LOGIC_VECTOR(3DOWNTO0):="0000";VARIABLEul,v3JNTEGER:=0;BEGINIFRST3=*0*THENS10:="0000";Sl:="0000";ELSIFCLK'EVENTANDCLK
7、=TTHENIFEN=TTHENIENS1:=Sl+l;ul:=0;-秒ELSESI:="0000";ul:=l;ENDIF;IF(ul=l)THENIF(S10<5)THENS10:=S10+1;ELSES10:="0000";ENDIF;ENDIF;IF(S1O=5)AND(S1=9)THENCOUNT1<=T;--S10:=(OTHERS=>'0*);Sl:=(OTHERS=>O');ELSECOUNT1<=■?■;ENDIF;ELSIFADD_SEC=*0'THENIF(Sl<9)THENSI:
8、=Sl+1;v3:=0;ELSESI:="0000";v3:=l;ENDIF;IF(v3=l)THENIF(S10<5)THENS10:=S10+1;ELSES10:="0000";ENDIF;ENDIF;IF(S1O=5)AND(S1=9)THENS10:=(OTHERS=>'O');S1:=(OTHERS=>*0');ENDIF;ENDIF;ENDIF;DIS_SEC10<=S10;DIS_SEC1<=S1;ENDPROCESSBI;B