【正文】
CLK_1HZ。 WHEN 010=CHOOSE=11111011。DIN=1010。 WHEN 011=CHOOSE=11110111。DIN(0)=M_L(0) AND CLK_1HZ。DIN(1)=M_L(1) AND CLK_1HZ。DIN(2)=M_L(2) AND CLK_1HZ。DIN(3)=M_L(3) AND CLK_1HZ。 WHEN 100=CHOOSE=11101111。DIN(0)=M_H(0) AND CLK_1HZ。DIN(1)=M_H(1) AND CLK_1HZ。DIN(2)=M_H(2) AND CLK_1HZ。DIN(3)=M_H(3) AND CLK_1HZ。 WHEN 101=CHOOSE=11011111。DIN=1011。 WHEN 110=CHOOSE=10111111。DIN(0)=H_L(0) AND CLK_1HZ。DIN(1)=H_L(1) AND CLK_1HZ。DIN(2)=H_L(2) AND CLK_1HZ。DIN(3)=H_L(3) AND CLK_1HZ。 WHEN 111=CHOOSE=01111111。DIN(0)=H_H(0) AND CLK_1HZ。DIN(1)=H_H(1) AND CLK_1HZ。DIN(2)=H_H(2) AND CLK_1HZ。DIN(3)=H_H(3) AND CLK_1HZ。 WHEN OTHERS=NULL。 END CASE。ELSE CASE CNT IS WHEN 000=CHOOSE=11111110。DIN=S_L。 WHEN 001=CHOOSE=11111101。DIN=S_H。 WHEN 010=CHOOSE=11111011。DIN=1010。 WHEN 011=CHOOSE=11110111。DIN=M_L。 WHEN 100=CHOOSE=11101111。DIN=M_H。 WHEN 101=CHOOSE=11011111。DIN=1011。 WHEN 110=CHOOSE=10111111。DIN=H_L。 WHEN 111=CHOOSE=01111111。DIN=H_H。 WHEN OTHERS=NULL。 END CASE。END IF。END PROCESS。 PROCESS(CLK_1kHZ)BEGINDP=39。039。END PROCESS。 PROCESS(DIN) BEGINIF START=39。039。 THEN DOUT=0000000。ELSIF START=39。139。 THENCASE DIN IS WHEN 0000=DOUT=0111111。 WHEN 0001=DOUT=0000110。 WHEN 0010=DOUT=1011011。 WHEN 0011=DOUT=1001111。 WHEN 0100=DOUT=1100110。 WHEN 0101=DOUT=1101101。 WHEN 0110=DOUT=1111101。 WHEN 0111=DOUT=0000111。 WHEN 1000=DOUT=1111111。 WHEN 1001=DOUT=1101111。 WHEN 1010=DOUT=1000000。 WHEN 1011=DOUT=1000000。 WHEN OTHERS=NULL。END CASE。END IF。END PROCESS。END BEHAVIOR。LIBRARY IEEE。USE 。USE 。USE 。ENTITY ALARM ISport( CLK_1HZ :IN STD_LOGIC。 ALARM_IN :IN STD_LOGIC。 H_H,H_L :IN STD_LOGIC_VECTOR(3 DOWNTO 0)。 M_H,M_L :IN STD_LOGIC_VECTOR(3 DOWNTO 0)。 S_H,S_L :IN STD_LOGIC_VECTOR(3 DOWNTO 0)。 ALARM_H_H,ALARM_H_L :IN STD_LOGIC_VECTOR(3 DOWNTO 0)。 ALARM_M_H,ALARM_M_L :IN STD_LOGIC_VECTOR(3 DOWNTO 0)。 SPEAK :OUT STD_LOGIC。 LOW_BEEP :OUT STD_LOGIC。 HIGH_BEEP :OUT STD_LOGIC )。END ALARM。 ARCHITECTURE BEHAVIOR OF ALARM ISBEGIN ALARM_PRO:PROCESS(ALARM_IN,H_H,H_L,M_H,M_L,S_H,S_L,ALARM_H_H,ALARM_H_L,ALARM_M_H,ALARM_M_L) BEGIN IF(H_H=ALARM_H_H AND H_L=ALARM_H_L AND M_H=ALARM_M_H AND M_L=ALARM_M_L)THEN IF(S_L(3 DOWNTO 0)=0000 OR S_L(3 DOWNTO 0)=0010 OR S_L(3 DOWNTO 0)=0100 OR S_L(3 DOWNTO 0)=0110 OR S_L(3 DOWNTO 0)=1000)THEN IF(ALARM_IN=39。139。)THEN SPEAK=39。039。 ELSE SPEAK=39。139。 END IF。 END IF。 ELSE SPEAK=39。039。 END IF。END PROCESS。 TIMEKEEPING:PROCESS(CLK_1HZ) BEGIN IF RISING_EDGE(CLK_1HZ) THEN IF(M_H=0101 AND M_L=1001)THEN IF(S_H(3 DOWNTO 0)=0101) THEN IF(S_L(3 DOWNTO 0)=0000 OR S_L(3 DOWNTO 0)=0010 OR S_L(3 DOWNTO 0)=0100 OR S_L(3 DOWNTO 0)=0110 OR S_L(3 DOWNTO 0)=1000)THEN LOW_BEEP=39。039。 ELSE LOW_BEEP=39。139。 END IF。 END IF。 END IF。 IF(M_H=0000 AND M_L=0000 AND S_H=0000 AND S_L=0000) THEN HIGH_BEEP=39。039。 ELSE HIGH_BEEP=39。139。 END IF。 END IF。 END PROCESS。 END BEHAVIOR。 定時鬧鐘模塊仿真波形 頂層文件(原理圖輸入) 頂層文件線路連接圖結果將設計程序下載到硬件電路上運行調試后,最終結果與預期效果基本一致,整點報時功能正常,時、分都能夠正常計數并能由按鍵控制校時。在此次的數字鐘設計過程中,更進一步地熟悉有關數字電路的知識和具體應用。學會了利用QuarterII軟件進行原理圖的繪制,硬件描述語言VHDL的編寫,程序的仿真等工作。并能根據仿真結果分析設計的存在的問題和缺陷,從而進行程序的調試和完善。在設計電路中,往往是先仿真后連接實物圖,但有時候仿真和電路連接并不是完全一致的,例如在對具體模塊的仿真的過程中,往往沒有考慮到整體設計的層面以及與上下模塊接口的設計。再加上器件對信號的延時等問題,實際下載硬件電路上后會出現一系列的問題,因此仿真圖和電路連接圖還是有一定區(qū)別的。此次的數字鐘設計重在于按鍵的控制和各個模塊代碼的編寫,雖然能把鍵盤接口和各個模塊的代碼編寫出來,并能正常顯示,但對于各個模塊的優(yōu)化設計還有一定的缺陷和不足??偟膩碚f,通過這次的設計更進一步地增強了動手能力,對數字鐘的工作原理也有了更加透徹的理解。