【正文】
DOWNTO 0)。 END ENTITY t_24。 BEGIN PROCESS(clk) BEGIN IF clk39。139。139。q22=q22+39。 END IF。q11=0000。139。039。 END IF。 q1=q11。 END ARCHITECTURE rt_1。 日計數(shù)器模塊日計數(shù)器模塊是比較特別的,因為它的進制設定有四種不同的情況,若該月為大月(12)日計數(shù)器計數(shù)至31時才產(chǎn)生進位信號。若該月為閏年的2月,日計數(shù)器計數(shù)至29時就產(chǎn)生進位信號。所以,在日計數(shù)器中需要輸入判斷信號,該判斷信號可用2位2進制表示,若判斷信號為00,則日計數(shù)器為31進制計數(shù)器;若判斷信號為01,則日計數(shù)器為30進制計數(shù)器;若判斷信號為10,則日計數(shù)器為28進制計數(shù)器;若判斷信號為11,則日計數(shù)器為29進制計數(shù)器。日計數(shù)器的源程序如下: LIBRARY IEEE。 USE 。 clk :IN STD_LOGIC。 q2 :OUT STD_LOGIC_VECTOR (3 DOWNTO 0)。 END ENTITY day。 SIGNAL pan:STD_LOGIC_VECTOR(1 DOWNTO 0)。EVENT AND clk=39。 THEN q3=q3+39。 IF q3=9 THEN q4=q4+39。q3=0000。 pan=panduan。q4=0000。139。039。 WHEN 01=IF q3=0000 AND q4=0011THEN q3=0001。c=39。 ELSE c=39。 END IF。q4=0000。139。039。 WHEN 11=IF q3=1001 AND q4=0010THEN q3=0001。c=39。 ELSE c=39。 END IF。 END CASE。 q1=q3。 END PROCESS。 : 1)當判斷信號panduan為00時,: 判斷信號panduan為00時日計數(shù)器的仿真圖 ,當輸入信號panduan為00時,日計數(shù)器計數(shù)至31時,等待至clk信號下一個脈沖上升沿到來時,進位輸出c產(chǎn)生一個輸出脈沖,同時日計數(shù)器再次從1開始計數(shù),故設計正確。 3)當輸入信號panduan為10時,: 判斷信號panduan為10時日計數(shù)器的仿真圖 ,當輸入的panduan為10時,日計數(shù)器計數(shù)至28時,等待至clk信號下一個脈沖上升沿到來時,進位輸出c產(chǎn)生一個輸出脈沖,同時日計數(shù)器再次從1開始計數(shù),故設計正確。 月計數(shù)器模塊月計數(shù)器為12進制計數(shù)器,但需要為日計數(shù)器的進制提供判斷信號,所以該模塊需要有判斷信號的輸出。最終,其必須達到如下設計要求:若月份是大月,則該信號pan輸出00,若月份是小月,則該信號pan輸出01,若月份是平年的2月,則該信號pan輸出10,若月份是閏年的2月,則該信號pan輸出11。 USE 。 ENTITY t_12 IS port(clk :IN STD_LOGIC。 c:OUT STD_LOGIC。 q1,q2:OUT STD_LOGIC_VECTOR(3 DOWNTO 0))。 ARCHITECTURE rt_1 OF t_12 IS SIGNAL qq1,qq2: STD_LOGIC_VECTOR (3 DOWNTO 0)。 BEGIN PROCESS(clk) BEGIN IF clk39。139。139。qq1=0000。 IF qq2=1 AND qq1=2 THEN qq1=0001。c=39。 ELSE c=39。 END IF。 q3=qq2amp。 CASE q3 IS WHEN 00000001=pan=00。139。 ELSE pan=10。 february WHEN 00000011=pan=00。 april WHEN 00000101=pan=00。 june WHEN 00000111=pan=00。 august WHEN 00001001=pan=01。 october WHEN 00010001=pan=01。 december WHEN others=NULL。 q1=qq1。 END PROCESS。 : 1)當輸入信號run為1時,即表示該年份為閏年,: 閏年時月計數(shù)器的仿真圖 ,當輸入信號run為高電平,即表示閏年時,在2月份,輸出判斷信號pan為11;在大月,輸出判斷信號pan為00;在小月,輸出判斷信號pan為01;與日計數(shù)器的進制判斷要求一致,故設計正確。 年計數(shù)器模塊1) 年低位計數(shù)器 年低位計數(shù)器為100進制計數(shù)器,同時在年低位計數(shù)器中需要判斷該年是否為閏年。 年低位計數(shù)器源程序如下: LIBRARY IEEE。 USE 。 y1,y2:OUT STD_LOGIC_VECTOR(3 DOWNTO 0)。 END ENTITY year_1。 BEGIN PROCESS(clk) BEGIN IF clk39。139。139。q2=q2+39。 END IF。q1=0000。139。039。 END IF。 PROCESS(clk) BEGIN IF clk39。139。139。run=39。 ELSE run =39。 END IF。 y1=q1。 END PROCESS。 : 年低位計數(shù)器的仿真圖 ,當年低位計數(shù)器計數(shù)至99時,等待至clk信號的下一個脈沖上升沿到來時,進位輸出信號c產(chǎn)生一個脈沖輸出,同時年低位計數(shù)器重新從0開始計數(shù)。2) 年高位計數(shù)器年高位計數(shù)器是100進制計數(shù)器,因為本設計是萬年歷,所以年高位計數(shù)器不用進位輸出。年高位計數(shù)器源程序如下: LIBRARY IEEE。 USE 。 y3,y4:OUT STD_LOGIC_VECTOR(3 DOWNTO 0))。 ARCHITECTURE rt_1 OF year_2 IS SIGNAL q1,q2,q3:STD_LOGIC_VECTOR(3 DOWNTO 0)。EVENT AND clk=39。 THEN q1=q1+39。 IF q1=9 THEN q1=0000。139。 IF q2=9 AND q1=9 THEN q2=0000。 END IF。 y3=q1。 END PROCESS。 : 年高位計數(shù)器的仿真圖 ,當年高位計數(shù)器計數(shù)至99時,等待至clk信號的下一個脈沖上升沿到來時,計數(shù)器重新從0開始計數(shù),故設計正確。當不按K1按鍵時,計數(shù)器正常計時,而當按下K1按鍵時,根據(jù)所按的次數(shù)不同進入不同的工作模式,利用K2改變對應計數(shù)器的值,每按下K2,對應計數(shù)器的值加1。 USE . ALL。 ENTITY jiaoshi IS PORT(mo,fo,so,ro,yo,n1o:IN STD_LOGIC。 調時模塊的控制,調時信號輸入 fi,si,ri,yi,n1i,n2i:OUT STD_LOGIC。 工作模式顯示燈的控制信號 END ENTITY jiaoshi。 BEGIN PROCESS(k1,k2) BEGIN IF k139。139。 IF a=6 THEN a=000。 END IF。si=fo。yi=ro。n2i=n1o。039。039。039。039。039。039。si=39。ri=39。yi=39。n1i=39。n2i=39。 l1=39。l2=39。l3=39。l4=39。l5=39。l6=39。 模式1,選通分模塊,調分 WHEN010=fi=mo。ri=39。yi=39。n1i=39。n2i=39。 l1=39。l2=39。l3=39。l4=39。l5=39。l6=39。 模式2,選通時模塊,調時 WHEN011=fi=mo。ri=k2。039。039。039。039。039。139。039。039。039。si=fo。yi=k2。039。039。039。039。039。139。039。039。si=fo。yi=ro。n2i=39。 l1=39。l2=39。l3=39。l4=39。l5=39。l6=39。