




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、江西理工大學(xué)應(yīng)用科學(xué)學(xué)院課程設(shè)計 SOPC/EDA綜合課程設(shè)計報告 設(shè)計題目:帶鬧鐘功能的24小時制鬧鐘系統(tǒng)的設(shè)計設(shè) 計 者: 學(xué) 號: 班 級: 指導(dǎo)老師: 完成時間: 設(shè)計報告綜合測試總評格式(10)內(nèi)容(40)圖表(10)答辯(20)平時(20)1目錄目錄1第一章 系統(tǒng)設(shè)計綜述21.1設(shè)計要求21.2要求分析2第二章 系統(tǒng)模塊分析42.1 譯碼器的設(shè)計42.2移位寄存器的設(shè)計:42.3鬧鐘寄存器的設(shè)計:42.4 時間計數(shù)器模塊設(shè)計: 42.5顯示驅(qū)動器的設(shè)計:52.6分頻器的設(shè)計:52.7控制器的設(shè)計:5第三章 鬧鐘系統(tǒng)的整體組裝7第四章
2、 系統(tǒng)子程序設(shè)計84.1、整個設(shè)計中將要用到的程序包定義程序P_ALARM.VHD84.2、譯碼器源程序DECODER.VHD84.3、寄存器源程序ALARM_REG.VHD94.4、時間計數(shù)器源程序ALARM_COUNTER.VHD104.5、移位寄存器源程序KEY_BUFFER.VHD114.6、顯示驅(qū)動器源程序DISPLAY_DRIVER.VHD124.7、分頻器源程序FQ_DIVIDER.VHD134.8、控制器源程序ALARM_CONTROLLER.VHD144.9、鬧鐘系統(tǒng)的整體組裝源程序ALARM_CLOCK.VHD17 第五章 心得體會
3、; 19第六章 參考文獻201第一章 系統(tǒng)設(shè)計綜述 1.1設(shè)計要求 隨著電子技術(shù)與計算機技術(shù)的高速發(fā)展,電子電路的設(shè)計產(chǎn)品無處不在。開發(fā)周期短兼容性的電子設(shè)計自動化(EDA)已經(jīng)成為電子設(shè)計領(lǐng)域的潮流。本設(shè)計的研究目的也是利用EDA技術(shù)來實現(xiàn)帶鬧鐘功能的24小時計時器。分別介紹研究背景、發(fā)展動態(tài)、研究思路、系統(tǒng)原理、系統(tǒng)功能分析、系統(tǒng)結(jié)構(gòu)、各個模塊分析與設(shè)計以及主要工作過程。其中將重點介紹Quartus II 軟件進行各部分器件程序的編輯、綜合、波形仿真。從而實現(xiàn)了一種基于FPGA的精確可靠的數(shù)字鬧鐘系統(tǒng)。 &
4、#160; 計時器設(shè)計要求完成如下功能。 (1) 計時功能:這是 本計時器設(shè)計的基本功能,每隔一分鐘計時一次,并在顯示屏上顯示當(dāng)前時間。 (2) 鬧鐘功能:如果當(dāng)前時間與設(shè)置的鬧鐘時間相同,則揚聲器發(fā)出蜂鳴聲。 (3) 設(shè)置新的計時器時間:用戶用數(shù)字鍵09輸入新的時間,然后按 "TIME"鍵確認。(4) 設(shè)置新的鬧鐘時間:用戶用數(shù)字鍵“0”“9”輸入新的時間,然后按“ALARM”鍵確認。過程與(3)類似。
5、(5) 顯示所設(shè)置的鬧鐘時間:在正常計時顯示狀態(tài)下,用戶直接按下“ALARM”鍵,則已設(shè)置的鬧鐘時間將顯示在顯示屏上。 1.2要求分析 根據(jù)本設(shè)計的要求,鬧鐘系統(tǒng)包括以下幾個子系統(tǒng):1用于鍵盤輸入的緩沖器2用于時鐘計時的計數(shù)器;3用于保存鬧鐘時間的寄存器;4用于顯示的氣短數(shù)碼管閑事電路和控制以上各個電路協(xié)同工作的控制器。 各部分的功能: (1)譯碼器(DECOER)可將KEYPAD信號轉(zhuǎn)換為0-9的整數(shù)可直觀額表示和處理用戶輸入的數(shù)字。(2)鍵盤緩沖器(KEY-BUFFER)是一個移位寄存器,暫
6、存用戶鍵入的數(shù)字并且實現(xiàn)用戶鍵入數(shù)字在顯示器上從左到右依次顯示,由上圖我們可以看出KEY_BUFFER的時鐘端連接的是外部KEY_DOWN的信號。這個表示用戶輸入一個數(shù)字KEY_BUFFER移位一次。(3)分頻器(FQ_DIVIER)將較高速的外部時鐘頻率成為每分鐘一次的時鐘頻率以便進行時鐘的計時。(4)計數(shù)器(ALARM_COUNTER)實際上市一個異步復(fù)位、異步置數(shù)的累加器,通常情況下進行時間累加計數(shù)必要時可置入新時鐘值然后從該值開始新的計數(shù)。(5)寄存器(ALARM_REG)用于保存用戶設(shè)置的鬧鐘時間,是一個異步復(fù)位寄存器。(6)顯示器(DISPLAY_DRIVER)根據(jù)需要顯示當(dāng)前時間
7、,用戶設(shè)置的鬧鐘時間或用戶通過鍵盤鍵入的新時間,同時判斷當(dāng)前時間是否已經(jīng)到了鬧鐘實際上是一個多路選擇器加比較器。(7)控制器(ALARM_CONTEOLLER)設(shè)計的核心部分,按設(shè)計的要求產(chǎn)生相應(yīng)的控制邏輯,以控制其他個部分額工作。第二章 系統(tǒng)模塊分析 2.1 譯碼器的設(shè)計: 本模塊的功能是將每次按下難找那個系統(tǒng)的數(shù)字鍵盤后產(chǎn)生的一個數(shù)字所對應(yīng)的10位二進制數(shù)據(jù)信號轉(zhuǎn)換為1為10進制整數(shù)信號;以作為小時,分鐘計數(shù)的四個數(shù)字之一,其中,KEYPAD為輸入端口,接受10位二進制數(shù)據(jù)信號;VALUE為輸出端口,輸出相應(yīng)的1位十進制整數(shù)信號。 2.2
8、移位寄存器的設(shè)計: 本模塊的功能是在CLK端口輸入信號的上升沿同步下,將KEY端口的輸入信號移入NEW_TIME端口的輸出信號最低位,原有的信息依次向左移,最高位信息丟失;RESET端口的輸入信號對NEW_TIME端口輸出信號進行異步清零復(fù)位。 儲存鍵入的數(shù)字,并實現(xiàn)鍵入數(shù)字在顯示屏上從左到右的顯示,RESET端口的輸入信號對NEW_TIME端口的輸出信號清零,在CLK端口輸入信號的上升沿同步下,KEY端口的輸入信號移入NEW_TIME端口的輸出信號最低位,依次左移,最高為丟失,由圖可知,程序功能正常。 2.3鬧鐘寄
9、存器的設(shè)計:鬧鐘寄存模塊的功能是在時鐘上升沿同步下,根據(jù)LOAD_NEW_A端口的輸入信號控制ALARM_TIME端口的輸出;當(dāng)控制信號有效時,把NEW_ALARM_TIME端口的輸入信號值輸出;RESET端口輸入信號隨ALAR_TIME端口的輸出進行異步的清零復(fù)位。 異步復(fù)為寄存器,從圖中可以看到當(dāng)控制信號為高電平寄存器把NEW_ALARM_TIME端口的輸入信號值(即鬧鐘時間)輸出,程序功能正常。 2.4 時間計數(shù)器模塊設(shè)計: 當(dāng)RESET端口輸入信號為高電平時,對CURRENT_TIME端口輸出信號清零復(fù)位;當(dāng)LOAD_NEW_C端口輸入信號為高電平時,將N
10、EW_CURRENT_TIME端口的輸入信號輸出給CURRENT_TIME端口。RESET端口的控制優(yōu)先于LAOD_NEW_C端口。當(dāng)這兩個控制信號都無效時,在時鐘上升沿同步下,對CURRENT_TIME端口輸出信號累加1,并根據(jù)小時,分鐘的規(guī)律處理進位 計數(shù)器實際是一個異步復(fù)位、異步指數(shù)的累加器,由圖可以看出,當(dāng)沒有新的地輸入值時,只是進行時鐘累加計數(shù),在輸入新的時鐘值時又開始新的計數(shù)。 2.5顯示驅(qū)動器的設(shè)計:
11、60; 本模塊的功能是當(dāng)SHOW_NEW_TIME端口輸入信號有效時,根據(jù)NEW_TIME端口輸入信號,產(chǎn)生相應(yīng)的四個七段數(shù)碼顯示器的驅(qū)動數(shù)據(jù),并在DISPLAY端口輸出該信號沒為高電平時,根據(jù)ALARM_TIME端口的輸入信號產(chǎn)生相應(yīng)的四個七段數(shù)碼顯示管的驅(qū)動數(shù)據(jù),并在DISPLAY端口輸出該信號:為低電平時,根據(jù)CURRENT_TIME端口的輸入信號,對DISPLAY端口進行驅(qū)動,當(dāng)ALAR
12、M_TIME端口的輸入信號值與CURRENT_TIME端口的輸入喜好值相同時,SOUND_ALARM端口的輸出信號有效,反之無效。顯示器的功能是根據(jù)需要的顯示當(dāng)前時間、設(shè)置的鬧鐘時間或通過鍵盤輸入的新時間同時判斷當(dāng)前時間是否和設(shè)定的時間一致是一個多路選擇加比較器,從仿真圖中看到相應(yīng)的輸入輸出,程序功能正常 2.6分頻器的設(shè)計: 模塊的功能是將CLK_IN端口輸入的時鐘信號分頻后送給CLK_OUT端口:當(dāng)RESET端口輸入信號有效時,CLK_OUT端口輸出信號清零。 分頻器將比較高速的外部時鐘頻率分成每分鐘一次的時鐘頻率,以便進行時鐘計數(shù),從仿真圖上可以
13、看到CLK_IN端口的輸入的時鐘信號分頻后輸出,當(dāng)RESET端口為高電平時,輸出端口CLK_OUT輸出信號清零 2.7控制器的設(shè)計: 控制器的功能是控制各模塊協(xié)同工作的,端口及各自作用為:a、CLK為外部始時鐘信號,REXET為復(fù)位信號。b、當(dāng)KEY為高電平時(KEY=1),表示按下數(shù)字鍵(“0”“9”)。c、當(dāng)ALARM_BUTTON為高電平時,表示按下“ALARM”鍵。d、當(dāng)TIEM_BUTTON為高電平時,表示按下“TIME”。e、當(dāng)LOAD_NEW_A為高電平時,控制加載新的鬧鐘時間。f、當(dāng)LOAD_NEW_C為高電平時,控制設(shè)置新的時間值。g、當(dāng)SHOW_NEW_
14、TIME為高電平時,控制顯示新的時間值,即通過數(shù)字鍵輸入的時間;否則,當(dāng)SHOW_NEW_TIME為低電平時,根據(jù)SHOW_A信號的值控制顯示當(dāng)前時間或鬧鐘時間.此時,當(dāng)SHOW_A為高電平時,控制顯示鬧鐘時間,否則,顯示當(dāng)前時間. 控制器的功能可以通過有限狀態(tài)自動機(FSM)的方式來實現(xiàn).根據(jù)設(shè)計的具體要求及端口設(shè)置,需要五個狀態(tài)實現(xiàn): S0:表示電路初態(tài)即正常時鐘計數(shù)狀態(tài),完成前面設(shè)計功能a的工作.S1:接受鍵盤輸入狀態(tài).在狀態(tài)S0時用換下數(shù)字鍵后進入此狀態(tài).在此狀態(tài)下,顯示屏上顯示的是鍵入的數(shù)字.S2:設(shè)置新
15、的鬧鐘時間.在狀態(tài)S1時按下ALARM鍵后進入比賽.S3:設(shè)置新的計時器時間.在狀態(tài)S1時按下TIME鍵后進入此狀態(tài).S4:顯示鬧鐘時間.在狀態(tài)S0時按下ALARM鍵后進入此狀態(tài).在此狀態(tài)下,顯示屏上顯示的是所設(shè)置的鬧鐘時間.在此狀態(tài)下,按下ALARM鍵后,顯示屏上保持顯示鬧鐘時間,經(jīng)過一段時間以后,再返回狀態(tài)S0顯示計時器時間. 第三章 鬧鐘系統(tǒng)的整體組裝前面已經(jīng)完成了計數(shù)器各個總成部分的設(shè)計。下面把這些組成部分組裝起來,形成完整的總體設(shè)計。該計時器命名為ALARM_CLOCK,其外部端口如下圖所示。 對應(yīng)5種不同的狀態(tài),是鬧鐘系統(tǒng)分別執(zhí)行正常技術(shù)狀態(tài)(S0),
16、鍵盤輸入狀態(tài)(S1),設(shè)置鬧鐘時間狀態(tài)(S2),設(shè)置計數(shù)器狀態(tài)(S3),顯示鬧鐘時間狀態(tài)(S4).操作流程如下(1) 給定CLK輸入信號,其他輸入給定無效電平,鬧鐘工作于正常計數(shù)狀態(tài)。(2)給定CLK輸入信號,并用數(shù)字鍵入 ,鬧鐘處于鍵盤輸入數(shù)字狀態(tài),輸出不變。(3)給定CLK輸入信號,并用數(shù)字鍵入1235,同時給定ALARM_BUTTON有效電平,鬧鐘時間設(shè)置狀態(tài),顯示頻顯示該鬧鐘時間。(4)給定CLK輸入信號,并用數(shù)字鍵鍵入1235,同時給定ALARM_TIME有效電平,鬧鐘處于新的計數(shù)時間設(shè)置狀態(tài),顯示頻顯示改時間,并把它作為計時時間起點。(5)給定CLK
17、輸入信號,并用數(shù)字鍵鍵入1235,同時給定ALARM_BUTTON有效電平,鬧鐘顯示頻顯示的為鬧鐘時間。第四章 系統(tǒng)子程序設(shè)計4.1、整個設(shè)計中將要用到的程序包定義程序P_ALARM.VHDLIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;PACKAGE P_ALARM IS SUBTYPE T_DIGITAL IS INTEGER RANGE 0 TO 9; SUBTYPE T_SHORT IS INTEGER RANGE 0 TO 65535; TY
18、PE T_CLOCK_TIME IS ARRAY (3 DOWNTO 0) OF T_DIGITAL; TYPE T_DISPLAY IS ARRAY (3 DOWNTO 0) OF STD_LOGIC_VECTOR(6 DOWNTO 0); TYPE SEG7 IS ARRAY (0 TO 9) OF STD_LOGIC_VECTOR(6 DOWNTO 0); CONSTANT SEVEN_SEG: SEG7 :=("0111111",
19、 "0000110",
20、0; "1011011", &q
21、uot;1001111", "1100110",
22、0; "1101101",
23、160; "1111101", "0000111",
24、0; "1111111",
25、160; "1110011" ); TYPE KEYPAD9 IS ARRAY (0 TO 9) OF STD_LOGIC_VECTOR (9 DOWNTO 0); CONSTANT KEYNUMBER: KEYPAD9 :=( "0000000001", -0
26、160; "0000000010", -1
27、 "0000000100", -2
28、0; "0000001000", -3
29、160; "0000010000", -4
30、 "0000100000", -5
31、0; "0001000000", -6 "0010000000", -7
32、 "0100000000", -8
33、0; "1000000000" );-9END PACKAGE P_ALARM; 4.2、譯碼器源程序DECODER.VHDLIBRARY IEEE;USE IEEE.STD_L
34、OGIC_1164.ALL;USE WORK.P_ALARM.ALL;ENTITY DECODER ISPORT(KEYPAD:IN STD_LOGIC_VECTOR(9 DOWNTO 0); VALUE:OUT T_DIGITAL);END ENTITY DECODER;ARCHITECTURE ART OF DECODER ISBEGINWITH KEYPAD SELECTVALUE<=0 WHEN "0000000001",1 WHEN "0000000010",
35、; 2 WHEN "0000000100", 3 WHEN "0000001000", 4 WHEN "0000010000", 5 WHEN "0000100000"
36、, 6 WHEN "0001000000", 7 WHEN "0010000000", 8 WHEN "0100000000", 9 WHEN "1000
37、000000", 0 WHEN OTHERS;END ARCHITECTURE ART; 4.3、寄存器源程序ALARM_REG.VHDLIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE WORK.P_ALARM.ALL;ENTITY ALARM_REG IS PORT(NEW_ALARM_TIME:IN T_CLOCK_TIME; LOAD_NEW_A
38、:IN STD_LOGIC; CLK:IN STD_LOGIC; RESET:IN STD_LOGIC; ALARM_TIME:OUT T_CLOCK_TIME);END ENTITY ALARM_REG;ARCHITECTURE ART OF ALARM_REG IS BEGIN PROCESS(CLK, RESET)
39、BEGIN IF RESET='1'THEN ALARM_TIME<=(0,0,0,0); ELSE IF RISING_EDGE(CLK) THEN IF LOAD_NEW_A='1' THEN ALARM_TIME<=NEW_ALARM_TIME; EL
40、SIF LOAD_NEW_A/='0'THEN ASSERT FALSE REPORT "UNCERTAIN LOAD_NEW_ALARM CONTROL!" SEVERITY WARNING; END IF; END IF; END IF; END PROCESS;END ARCHITECTURE ART; 4
41、.4、時間計數(shù)器源程序ALARM_COUNTER.VHDLIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE WORK.P_ALARM.ALL;ENTITY ALARM_COUNTER IS PORT(NEW_CURRENT_TIME:IN T_CLOCK_TIME; LOAD_NEW_C:IN STD_LOGIC; CLK:IN STD_LOGIC;
42、 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)
43、0;VARIABLE C_T:T_CLOCK_TIME; BEGIN IF RESET='1' THEN I_CURRENT_TIME<=(0, 0, 0, 0); ELSIF LOAD_NEW_C='1' THEN I_CURRENT_TIME<=NEW_CURRENT_TIME; ELSIF RISING_EDGE(CLK) THEN C_T:=I_CURRE
44、NT_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 &
45、#160; C_T(1):=C_T(1)+1; ELSE C_T(1):=0; IF C_T(3)<2 THEN IF C_T(2)<9 THEN
46、0; C_T(2):=C_T(2)+1; ELSE C_T(2):=0;
47、60; C_T(3):=C_T(3)+1; END IF; ELSE IF C_T(2)<3 THEN C_T(2):=C_T(2)+1;
48、; ELSE C_T(2):=0; C_T(3):=0; END IF;
49、0; END IF; END IF; END IF; I_CURRENT_TIME<=C_T; END IF; END PROCESS; CURRENT_TIME<=I_CURRENT_TIME;END ARCHITECTURE ART;
50、160; 4.5、移位寄存器源程序KEY_BUFFER.VHDLIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE WORK.P_ALARM.ALL;ENTITY KEY_BUFFER IS PORT(KEY:IN T_DIGITAL; CLK:IN STD_LOGIC; RESET:IN STD_LOGIC;
51、0; 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) BEGIN IF (RESET='1') THEN
52、0;N_T<=(0, 0, 0, 0); ELSIF (CLK'EVENT AND CLK='1') THEN FOR I IN 3 DOWNTO 1 LOOP N_T(I)<=N_T(I-1); END LOOP;
53、0; N_T(0)<=KEY; END IF; END PROCESS SHIFT; NEW_TIME<=N_T;END ARCHITECTURE ART; 4.6、顯示驅(qū)動器源程序DISPLAY_DRIVER.VHDLIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE WORK.P_ALARM.ALL;ENTITY DISPLAY
54、_DRIVER IS PORT(ALARM_TIME:IN T_CLOCK_TIME; CURRENT_TIME:IN T_CLOCK_TIME; NEW_TIME:IN T_CLOCK_TIME; SHOW_NEW_TIME:IN STD_LOGIC; SHOW_A:IN STD_LOGIC; &
55、#160; SOUND_ALARM:OUT STD_LOGIC; DISPLAY:OUT T_DISPLAY);END ENTITY DISPLAY_DRIVER;ARCHITECTURE ART OF DISPLAY_DRIVER IS SIGNAL DISPLAY_TIME: T_CLOCK_TIME; BEGIN CTRL:PROCESS(ALARM_TIME, CURRENT_TIME, NEW_TIME,
56、 SHOW_A, SHOW_NEW_TIME) BEGIN SOUND_LP: FOR I IN ALARM_TIME'RANGE LOOP IF NOT(ALARM_TIME(I)=CURRENT_TIME(I) THEN SOUND_ALARM<='0'
57、0; EXIT SOUND_LP; ELSE SOUND_ALARM<='1' END IF; END LOOP SOUND_LP;
58、 IF SHOW_NEW_TIME='1' THEN DISPLAY_TIME<=NEW_TIME; ELSIF SHOW_A='1' THEN DISPLAY_TIME<=ALARM_TIME;
59、0; ELSIF SHOW_A='0' THEN DISPLAY_TIME<=CURRENT_TIME; ELSE ASSERT FALSE REPORT "UNCERTAIN DISPLAY
60、_DRIVER CONTROL!" SEVERITY WARNING; END IF;END PROCESS CTRL;DISP:PROCESS(DISPLAY_TIME)BEGIN FOR I IN DISPLAY_TIME'RANGE LOOP
61、160; DISPLAY(I)<=SEVEN_SEG(DISPLAY_TIME(I); END LOOP; END PROCESS DISP;END ARCHITECTURE ART; 4.7、分頻器源程序FQ_DIVIDER.VHDLIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE WORK.P_ALARM.ALL;ENTITY FQ_DIVIDER IS
62、 PORT(CLK_IN:IN STD_LOGIC; RESET:IN STD_LOGIC; CLK_OUT:OUT STD_LOGIC);END ENTITY FQ_DIVIDER;ARCHITECTURE ART OF FQ_DIVIDER IS CONSTANT DIVIDE_PERIOD:T_SHORT:=6000; BEGIN DIVI
63、DE_CLK: PROCESS(CLK_IN, RESET) VARIABLE CNT : T_SHORT; BEGIN IF(RESET='1') THEN CNT:=0; CLK_OUT<='0' ELSIF RISING_EDGE(CLK_IN) THEN IF(CNT<(DIVIDE_
64、PERIOD/2) THEN CLK_OUT<='1' CNT:=CNT+1; ELSIF(CNT<(DIVIDE_PERIOD-1) THEN CLK_OUT<='0' CNT:=CNT+1; ELSE CNT:=0;
65、0; END IF; END IF; END PROCESS DIVIDE_CLK;END ARCHITECTURE ART; 4.8、控制器源程序ALARM_CONTROLLER.VHDLIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE WORK.P_ALARM.ALL;ENTITY ALARM_CONTROLLER ISPORT(KEY : IN STD_LOGIC;
66、160; ALARM_BUTTON : IN STD_LOGIC; TIME_BUTTON : IN STD_LOGIC; CLK : IN STD_LOGIC; RESET : IN STD_LOGIC; LOAD_NEW_A : OUT STD_LOGIC; LOAD_N
67、EW_C : OUT STD_LOGIC; SHOW_NEW_TIME : OUT STD_LOGIC; SHOW_A : OUT STD_LOGIC);END ENTITY ALARM_CONTROLLER;ARCHITECTURE ART OF ALARM_CONTROLLER ISTYPE T_STATE IS (S0, S1, S2, S3, S4);CONSTANT KEY_TIMEOUT : T_SHORT:=500;CONSTANT SHOW_ALARM_TIMEO
68、UT : T_SHORT:=500;SIGNAL CURR_STATE : T_STATE;SIGNAL NEXT_STATE : T_STATE;SIGNAL COUNTER_K : T_SHORT;SIGNAL ENABLE_COUNT_K : STD_LOGIC;SIGNAL COUNT_K_END : STD_LOGIC; SIGNAL COUNTER_A : T_SHORT;SIGNAL ENABLE_COUNT_A : STD_LOGIC;SIGNAL COUNT_A_END : STD_LOGIC;BEGIN PROCESS(CLK, RESET)
69、 BEGIN IF RESET='1' THEN CURR_STATE<=S0; ELSIF RISING_EDGE(CLK) THEN CURR_STATE<=NEXT_STATE; END IF;END PROCESS;PROCESS(KEY, ALARM_BUTTON, TIME_BUTTON, CURR_STATE, COUNT_A_END, COUNT_K_END) B
70、EGIN NEXT_STATE<=CURR_STATE; LOAD_NEW_A<='0' LOAD_NEW_C<='0' SHOW_A<='0' SHOW_NEW_TIME<='0' ENABLE_COUNT_K<='0' ENABLE_COUNT_A<='0' CASE CURR_S
71、TATE IS WHEN S0=> IF (KEY='1') THEN NEXT_STATE<=S1; SHOW_NEW_TIME<='1' ELSIF (ALARM_BUTTON='1') THEN
72、0; NEXT_STATE<=S4; SHOW_A<='1' ELSE NEXT_STATE<=S0; END IF; WHEN S1=> &
73、#160; IF (KEY='1') THEN NEXT_STATE<=S1; ELSIF (ALARM_BUTTON='1') THEN NEXT_STATE<=S2; LOAD_
74、NEW_A<='1' ELSIF (TIME_BUTTON='1') THEN NEXT_STATE<=S3; LOAD_NEW_C<='1' ELSE
75、60; IF (COUNT_K_END='1') THEN NEXT_STATE<=S0; ELSE NEXT_STATE<=S1; EN
76、D IF; ENABLE_COUNT_K<='1' END IF; SHOW_NEW_TIME<='1' WHEN S2=> IF (ALARM_BUTTON='1') THEN
77、60; NEXT_STATE<=S2; LOAD_NEW_A<='1' ELSE NEXT_STATE<=S0; END IF; WHEN S3=>
78、160; IF (TIME_BUTTON='1') THEN NEXT_STATE<=S3; LOAD_NEW_C<='1' ELSE NEXT_STATE<=S0
79、; END IF; WHEN S4=> IF (KEY='1') THEN NEXT_STATE<=S1; ELSE NEXT_STATE<=S4;IF (COUNT_A_END='1') THENNEXT_STATE<=S0; EL
80、SE NEXT_STATE<=S4;SHOW_A<='1'END IF;ENABLE_COUNT_A<='1'END IF;WHEN OTHERS=>NULL;END CASE;END PROCESS;COUNT_KEY: PROCESS(ENABLE_COUNT_K, CLK)BEGINIF (ENABLE_COUNT_K='0') THEN COUNTER_K<=0; COUNT_K_END<=
81、'0' ELSIF (RISING_EDGE(CLK) THEN IF (COUNTER_K>=KEY_TIMEOUT) THEN COUNT_K_END<='1' ELSE COUNTER_K<=COUNTER_K+1; END IF; END IF;END PROCESS COUNT
82、_KEY;COUNT_ALARM: PROCESS(ENABLE_COUNT_A, CLK) BEGIN IF (ENABLE_COUNT_A='0') THEN COUNTER_A<=0; COUNT_A_END<='0' ELSIF RISING_EDGE(CLK) THEN
83、;IF (COUNTER_A>=SHOW_ALARM_TIMEOUT) THEN COUNT_A_END<='1' ELSE COUNTER_A<=COUNTER_A+1; END IF; END IF;END PROCESS COUNT_
84、ALARM;END ARCHITECTURE ART; 4.9、鬧鐘系統(tǒng)的整體組裝源程序ALARM_CLOCK.VHDLIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;USE WORK.P_ALARM.ALL;ENTITY ALARM_CLOCK IS PORT(KEYPAD: IN STD_LOGIC_VECTOR(9 DOWNTO 0); KEY_DOWN: IN STD
85、_LOGIC; ALARM_BUTTON: IN STD_LOGIC; TIME_BUTTON: IN STD_LOGIC; CLK : IN STD_LOGIC; RESET: IN STD_LOGIC;
86、60; DISPLAY: OUT T_DISPLAY; SOUND_ALARM:OUT STD_LOGIC);END ENTITY ALARM_CLOCK;ARCHITECTURE ART OF ALARM_CLOCK IS COMPONENT DECODER IS PORT( KEYPAD:IN STD_LOGIC_VECTOR(9 DOWNTO 0); VALUE
87、 :OUT T_DIGITAL); END COMPONENT DECODER; COMPONENT KEY_BUFFER IS PORT(KEY:IN T_DIGITAL; CLK:IN STD_LOGIC; RESET:IN STD_LOGIC; NEW_TIME:OUT T_CLO
88、CK_TIME); END COMPONENT KEY_BUFFER; COMPONENT ALARM_CONTROLLER IS PORT(KEY:IN STD_LOGIC; ALARM_BUTTON:IN STD_LOGIC; TIME_BUTTON:IN STD_LOGIC; CL
89、K:IN STD_LOGIC; RESET:IN STD_LOGIC; LOAD_NEW_A:OUT STD_LOGIC; LOAD_NEW_C:OUT STD_LOGIC; SHOW_NEW_TIME:OUT STD_LOGIC; SHOW_A:OUT STD_LOGIC); END COMPONENT ALARM_CONTROLLER; COMPONENT ALA
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 家用紡織品的產(chǎn)品差異化與競爭優(yōu)勢考核試卷
- 智能車載設(shè)備的故障預(yù)測考核試卷
- 工藝美術(shù)品的商業(yè)模式創(chuàng)新考核試卷
- 專業(yè)技術(shù)培訓(xùn)引領(lǐng)行業(yè)變革考核試卷
- 家居裝飾裝修中的施工質(zhì)量控制考核試卷
- 城市軌道交通的旅客負擔(dān)與收入分析考核試卷
- 技術(shù)標準制定考核試卷
- 工業(yè)控制計算機在電力系統(tǒng)的應(yīng)用考核試卷
- 學(xué)校租賃土地合同范本
- 公司并購簽約合同范本
- 女生青春期知識講座(六年級)課件
- 化工過程安全管理導(dǎo)則
- 建設(shè)工程管理畢業(yè)論文
- 新一代智能變電站二次系統(tǒng)技術(shù)問答
- 索膜結(jié)構(gòu)施工方案
- 完整版老舊小區(qū)改造工程施工組織設(shè)計方案-3
- 從stahl精神藥理學(xué)看二代抗精神病藥物療效及功課件
- 新教科版五年級下冊科學(xué)全冊每節(jié)課后練習(xí)+答案(共28份)
- 建筑施工企業(yè)管理制度匯編(全套)
- 大話藝術(shù)史(全2冊)
- 巖土工程測試與監(jiān)測技術(shù)緒論
評論
0/150
提交評論