【文章內(nèi)容簡介】
BRARY IEEE; ? USE ; ? USE ; ? ENTITY DECODER IS ? PORT(KEYPAD : IN STD_LOGIC_VECTOR(9 DOWNTO 0); ? VALUE : OUT T_DIGITAL); ? END ENTITY DECODER; ? ARCHITECTURE ART OF DECODER IS ? BEGIN ? WITH KEYPAD SELECT ? VALUE = 0 WHEN “ 0000000001” , ? 1 WHEN “ 0000000010” , ? 2 WHEN “ 0000000100” , ? 3 WHEN “ 0000001000” , ? 4 WHEN “ 0000010000” , ? 5 WHEN “ 0000100000” , ? 6 WHEN “ 0001000000” , ? 7 WHEN “ 0010000000” , ? ? 8 WHEN “ 0100000000” , ? 9 WHEN “ 1000000000” , ? 0 WHEN OTHERS; ? END ARCHITECTURE ART; ? 鬧鐘系統(tǒng)的移位寄存器的設(shè)計 ? 1. 設(shè)計思路 ? 本模塊的功能是在 CLK端口輸入信號的上升沿同步下 , 將 KEY端口的輸入信號移入 NEW_TIME 端口的輸出信號最低位 , 原有信息依次向左移 , 最高位信息丟失; RESET端口的輸入信號對NEW_TIME端口輸出信號進行異步清零復位 。 電路系統(tǒng)示意圖如圖 。 圖 移位寄存器電路示意圖 K E YC L KK E Y _ B U F F E RN E W_ T I M ER E S E T? 2. VHDL源程序 ? LIBRARY IEEE; ? USE ; ? USE ; ? ENTITY KEY_BUFFER IS ? PORT(KEY : IN T_DIGITAL; ? CLK : IN STD_LOGIC; ? RESET : IN STD_LOGIC; ? NEW_TIME : OUT T_CLOCK_TIME); ? END ENTITY KEY_BUFFER; ? ARCHITECTURE ART OF KEY_BUFFER IS ? SIGNAL N_T: T_CLOCK_TIME; ? BEGIN ? SHIFT: PROCESS(RESET, CLK) IS ? BEGIN ? IF (RESET = 39。139。) THEN ? N_T = (0, 0, 0, 0); ? ELSIF (CLK39。EVENT AND CLK = 39。139。 )THEN ? FOR I IN 3 DOWNTO 1 LOOP ? N_T(I) = N_T(I1); ? END LOOP; ? N_T(0) = KEY; ? END IF; ? END PROCESS SHIFT; ? NEW_TIME = N_T; ? END ARCHITECTURE ART; ? 鬧鐘系統(tǒng)的鬧鐘寄存器和時間計數(shù)器的設(shè)計 ? 1.電路系統(tǒng)工作原理 ? 鬧鐘寄存器模塊的功能是在時鐘上升沿同步下,根據(jù) LOAD_NEW_A端口的輸入信號控制 ALARM_TIME端口的輸出;當控制信號有效 (高電平 )時,把 NEW_ALARM_TIME端口的輸入信號值輸出; RESET端口輸入信號對ALARM_TIME端口的輸出進行異步的清零復位。圖 。 圖 鬧鐘寄存器示意圖 L O A D _ N E W_ AN E W_ A L A R M _ T I M EC L KR E S E TA L A R M _ T I M EA L A R M _ R E G? 鬧鐘系統(tǒng)的鬧鐘時間由鬧鐘寄存器保存和傳遞 , 而當前時間由時間計數(shù)器保存 、 傳遞并按分鐘累加推進 。 這兩個組件的功能和設(shè)計描述比較相似 , 它們之間的區(qū)別主要在于自動累加功能的有無和控制信號的優(yōu)先作用次序 。 圖 時間計數(shù)器示意圖 C L KR E S E TC U R R E N T _ T I M EA L A R M _ C O U N T E RL O A D _ N E W _ CN E W _ C U R R E N T _ T I M E? 時間計數(shù)器模塊的功能是當RESET端口輸入信號為高電平時,對CURRENT_TIME端口輸出信號清零復位;當 LOAD_NEW_C端口輸入信號為高電平時,將 NEW_CURRENT_TIME端口的輸入信號輸出給 CURRENT_TIME端口。RESET端口的控制優(yōu)先于 LOAD_NEW_C端口。當這兩個控制信號都無效時,在時鐘上升沿同步下,對 CURRENT_TIME端口輸出信號累加 1,并根據(jù)小時、分鐘的規(guī)律處理進位。圖 塊的示意圖。 ? 2. VHDL源程序 ? 時間計數(shù)器的源程序 ? LIBRARY IEEE; ? USE ; ? USE ; ? ENTITY ALARM_COUNTER IS ? PORT(NEW_CURRENT_TIME : IN T_CLOCK_TIME; ? LOAD_NEW_C: IN STD_LOGIC; ? CLK: IN STD_LOGIC; ? RESET: IN STD_LOGIC; ? CURRENT_TIME: OUT T_CLOCK_TIME); ? END ENTITY ALARM_COUNTER; ? ARCHITECTURE ART OF ALARM_COUNTER IS ? SIGNAL I_CURRENT_TIME : T_CLOCK_TIME; ? BEGIN ? PROCESS(CLK , RESET , LOAD_NEW_C) IS ? VARIABLE C_T: T_CLOCK_TIME; ? BEGIN ? IF RESET = 39。139。 THEN ? I_CURRENT_TIME = (0,0,0,0); ? ELSIF LOAD_NEW_C =39。139。 THEN ? I_CURRENT_TIME = NEW_CURRENT_TIME; ? ELSIF RISING_EDGE(CLK) THEN ? C_T := I_CURRENT_TIME; ? IF C_T(0) 9 THEN ? C_T(0) := C_T(0) + 1; ? ELSE ? C_T(0) := 0; ? IF C_T(1) 5 THEN ? C_T(1) := C_T(1) + 1; ? ELSE ? C_T(1) := 0; ? IF C_T(3) 2 THEN ? IF C_T(2) 9 THEN ? C_T(2) := C_T(2) + 1; ? ELSE ? C_T(2) := 0; ? C_T(3) := C_T(3) + 1; ? END IF; ? ELSE ? IF C_T(2) 3 THEN ? C_T(2) := C_T(2) + 1; ? ELSE ? C_T(2) := 0; ? C_T(3) := 0; ? END IF; ? END IF; ? END IF; ? END IF; ? I_CURRENT_TIME = C_T; ? END IF; ? END PROCESS;