第一篇:FPGA交通燈實驗報告
交通燈實驗報告
一,實驗?zāi)康?/p>
實現(xiàn)兩路信號燈交替亮起,并利用兩組數(shù)碼管分別對兩路信號進(jìn)行倒計時。
兩路信號時間分別為:
V:綠燈(30S)
H:紅燈(35S)
黃燈(5s)
綠燈(30S)
紅燈(35S)
黃燈(5S)
二,實驗步驟 建立工程
可在歡迎界面點擊“Creat a New Project”進(jìn)入工程建立界面,亦可關(guān)閉歡迎界面,點擊菜單欄的“File”,點擊“New Project Wizard”進(jìn)入建立工程界面。右側(cè)為建立工程界面,點擊next。
在此界面選定工程路徑,取好工程名,點擊“Next”。注意:路徑中不能有中文,工程名也不能有中文。
一直點擊“Next”進(jìn)入器件設(shè)置界面,DE2-70開發(fā)工具采用的Cyclone II系列的EP2C70F896C6N。點擊“Finish”,完成工程建立
1、點擊“File”,點擊“New” 選擇“Verilog HDL” 2,點擊主界面工具欄中的 選擇“Verilog HDL”
3、寫入verilog代碼。
代碼如下:
module traffic(Clk_50M,Rst,LedR_H,LedG_H,LedY_H,LedR_V,LedG_V,LedY_V,Seg7_VH,Seg7_VL,Seg7_HH,Seg7_HL,led15);
parameter S1=2'b00;parameter S2=2'b01;parameter S3=2'b10;parameter S4=2'b11;
input Clk_50M,Rst;output LedR_H,LedG_H,LedY_H,LedR_V,LedG_V,LedY_V;output[6:0] Seg7_VH,Seg7_VL,Seg7_HH,Seg7_HL;output led15;
//-------------div for 1Hz-------start----reg Clk_1Hz;reg [31:0] Cnt_1Hz;always@(posedge Clk_50M or negedge Rst)begin
if(!Rst)
begin
Cnt_1Hz<=1;
Clk_1Hz<=1;
end
else
begin
if(Cnt_1Hz>=25000000)
end
//-----------div for 1Hz------end-----reg[7:0] Cnt30,CntH,CntV,CntHH,CntVV;reg[7:0] CntDis,CntDiss;//-----------30 counter and seg7---start---reg LedR_H,LedG_H,LedY_H,LedR_V,LedG_V,LedY_V;always@(posedge Clk_1Hz)begin
end
begin
Cnt_1Hz<=1;
Clk_1Hz<=~Clk_1Hz;
end
else
Cnt_1Hz<=Cnt_1Hz + 1;
case(state)
S1:
end
always@(posedge Clk_1Hz)begin
case(stateV)
S1:
begin
if(CntV>=30)
CntV<=1;
begin
if(Cnt30>=30)
Cnt30<=1;
else
Cnt30<=Cnt30 + 1;S2:
begin
if(Cnt30>=5)
Cnt30<=1;end
else
Cnt30<=Cnt30 + 1;S3:
begin
if(Cnt30>=30)
Cnt30<=1;end
else
Cnt30<=Cnt30 + 1;S4:
begin
if(Cnt30>=5)
Cnt30<=1;end
else
Cnt30<=Cnt30 + 1;end endcase
else
CntV<=CntV + 1;
S2: begin
end
end if(CntV>=5)
CntV<=1;
else
CntV<=CntV + 1;end
S3:
begin
if(CntV>=35)
CntV<=1;
else
CntV<=CntV + 1;end endcase always@(posedge Clk_1Hz)begin
case(stateH)
S1:
end
always@(negedge Clk_50M or negedge Rst)begin
begin
if(CntH>=35)
CntH<=1;
else
CntH<=CntH + 1;
S2:
begin
if(CntH>=30)
CntH<=1;end
else
CntH<=CntH + 1;end
S3:
begin
if(CntH>=5)
CntH<=1;
else
CntH<=CntH + 1;end endcase
case(state)
S1:
end always@(negedge Clk_50M or negedge Rst)begin
case(state)
S1:
end
//16進(jìn)制計數(shù)器轉(zhuǎn)換為用于顯示的10進(jìn)制計數(shù)器 always@(posedge Clk_50M)begin
if(CntVV>29)
begin
CntDis[7:4]<=3;
CntDis[3:0]<=CntVV20;end else if(CntVV>9)begin
CntDis[7:4]<=1;
CntDis[3:0]<=CntVV30;end else if(CntHH>19)begin
CntDiss[7:4]<=2;
CntDiss[3:0]<=CntHH10;end else
CntDiss<=CntHH;
end
if(Cnt30>=5)
end
end S3:
begin
state<=S4;
end S4:
begin
state<=S1;
end default:
begin
state<=S1;
end endcase
if(Cnt30>=30)
if(Cnt30>=5)always@(posedge Clk_1Hz)begin
case(state)
S1:
end
always@(posedge Clk_50M or negedge Rst)
begin
stateH<=S1;
stateV<=S1;
end S2:
begin
stateH<=S1;
stateV<=S2;
end S3:
begin
stateH<=S2;
stateV<=S3;
end S4:
begin
stateH<=S3;
stateV<=S3;
end endcase begin
if(!Rst)
begin
LedR_H<=0;
else
LedG_H<=0;LedY_H<=0;
LedR_V<=0;
LedG_V<=0;end LedY_V<=0;
begin
case(state)
S1:
begin
LedR_H<=1;LedG_H<=0;LedY_H<=0;LedR_V<=0;LedG_V<=1;LedY_V<=0;end
S2:
begin
LedR_H<=1;LedG_H<=0;LedY_H<=0;LedR_V<=0;LedG_V<=0;LedY_V<=1;end
S3:
begin
LedR_H<=0;LedG_H<=1;LedY_H<=0;LedR_V<=1;LedG_V<=0;LedY_V<=0;end
S4:
begin LedR_H<=0;LedG_H<=0;
end
LedY_H<=1;LedR_V<=1;LedG_V<=0;LedY_V<=0;end
default:
begin
end LedR_H<=0;LedG_H<=0;LedY_H<=0;LedR_V<=0;LedG_V<=0;LedY_V<=0;end
endcase assign led15=state;
endmodule
module SEG7_LUT input [3:0] iDIG;output reg
always @(iDIG)begin
case(iDIG)4'h1: oSEG = 7'b1111001;
//---t----4'h2: oSEG = 7'b0100100;// |
| 4'h3: oSEG = 7'b0110000;// lt rt
4'h4: oSEG = 7'b0011001;// |
| 4'h5: oSEG = 7'b0010010;//---m----4'h6: oSEG = 7'b0000010;// |
| 4'h7: oSEG = 7'b1111000;// lb rb 4'h8: oSEG = 7'b0000000;// |
| 4'h9: oSEG = 7'b0011000;//---b----4'ha: oSEG = 7'b0001000;4'hb: oSEG = 7'b0000011;4'hc: oSEG = 7'b1000110;4'hd: oSEG = 7'b0100001;4'he: oSEG = 7'b0000110;[6:0] oSEG;[6:0] oSEG;(oSEG,iDIG);
end
4'hf: oSEG = 7'b0001110;4'h0: oSEG = 7'b1000000;endcase endmodule 編譯工程
保存文件,將文件放在所建工程所在路徑下 點擊主界面工具欄中的圖標(biāo)
也可點擊菜單欄中“Processing”,點擊“Start Compilation”
分配關(guān)鍵如下:
Clk_50M Input PIN_AD15 LedG_H Output PIN_AD9 LedG_V Output PIN_AJ6 LedR_H Output PIN_AJ7)LedR_V Output PIN_AJ5)LedY_H Output PIN_AD8 LedY_V Output PIN_AK5 Rst Input PIN_AA23 Seg7_HH[6] Output PIN_G1 Seg7_HH[5] Output PIN_H3 Seg7_HH[4] Output PIN_H2 Seg7_HH[3] Output PIN_H1 Seg7_HH[2] Output PIN_J2 Seg7_HH[1] Output PIN_J1 Seg7_HH[0] Output PIN_K3
Seg7_HL[6] Seg7_HL[5] Seg7_HL[4] Seg7_HL[3] Seg7_HL[2] Seg7_HL[1] Seg7_HL[0] Seg7_VH[6] Seg7_VH[5] Seg7_VH[4] Seg7_VH[3] Seg7_VH[2] Seg7_VH[1] Seg7_VH[0] Seg7_VL[6] Seg7_VL[5] Seg7_VL[4] Seg7_VL[3] Seg7_VL[2] Seg7_VL[1] Seg7_VL[0] Output Output Output Output Output Output Output Output Output Output Output Output Output Output Output Output Output Output Output Output Output PIN_E4 PIN_F4 PIN_G4 PIN_H8 PIN_H7 PIN_H4 PIN_H6 PIN_AD17 PIN_AF17 7 PIN_AE17 7 PIN_AG16 PIN_AF16 7 PIN_AE16 7 PIN_AG13 PIN_AD12 PIN_AD11 PIN_AF10 8 PIN_AD10 PIN_AH9 8 PIN_AF9 8 PIN_AE8 8
燒寫代碼
在管腳配置完成后,還需將工程再編譯一次,成功后,點擊主界面工具欄中的亦可點擊主界面菜單欄中“Tools”,點擊“Programmer”
進(jìn)入代碼燒寫界面后,點擊“Start”,當(dāng)“Progress”為100%時,表示燒寫完成,這是可觀察DE2-70板現(xiàn)象
獲得預(yù)期的效果,兩組的信號紅黃綠燈交替切換,計數(shù)器記為零時信號燈切換狀態(tài),紅燈35s,黃燈5s,綠燈30s。三,心得體會
通過本次實驗初步了解了EDA技術(shù),熟悉了FPGA開發(fā)板的開發(fā)流程,鍛煉了動手能力。
第二篇:基于FPGA的交通燈控制系統(tǒng)
基于FPGA的交通燈控制系統(tǒng)
摘 要:針對現(xiàn)實中越來越嚴(yán)重的城市交通擁堵現(xiàn)象,提出了一種城市十字路口 交通信號燈控制與FPGA實現(xiàn)的新方法。利用超高速硬件描述語言VHDL設(shè)計十字路口交通信號燈控制器,實現(xiàn)主干道和支干道的交通控制功能,實時監(jiān)測每個路口的車輛通行情況,以此更改主干道與支干道的交通燈狀態(tài),提高十字路口的車輛通行效率,最后通過硬件測試實現(xiàn)具體功能。
關(guān)鍵詞:VHDL FPGA 交通燈控制
一、概述 1.1 設(shè)計要求:
(1)設(shè)計一個交通信號燈控制器,由一條主干道和一條支干道匯合成十字路口,在每個入口處設(shè)置紅、綠、黃三色信號燈,紅燈亮禁止通行,綠燈亮允許通行,黃燈亮則給行駛中的車輛有時間停在禁行線外。(2)紅、綠、黃發(fā)光二極管作信號燈。
(3)主干道處于常允許通行的狀態(tài),支干道有車來時才允許通行。主干道亮綠燈時,支干道亮紅燈;支干道亮綠燈時,主干道亮紅燈。
(4)主、支干道均有車時,兩者交替允許通行,主干道每次放行45秒,支干道每次放行25秒,設(shè)立45秒、25秒計時、顯示電路。
(5)在每次由綠燈亮到紅燈亮的轉(zhuǎn)換過程中,要亮5秒黃燈作為過渡,使行駛中的車輛有時間停到禁行線外,設(shè)立5秒計時、顯示電路。1.2 課題分析
(1)主支道路分4種行車狀況,無無、無有、有無、有有,此信號從傳感器輸出信號得到,作為系統(tǒng)的輸入,在本系統(tǒng)中用撥片開關(guān)模擬狀態(tài)輸入。(2)主支道路有4種亮燈情況:主綠支紅、主黃支紅、支綠主紅、支黃主紅。(3)只要支路無車通行,則一直為主綠支紅狀態(tài),只有支路有車通過才會進(jìn)入支綠主紅狀態(tài)。
(4)系統(tǒng)可以根據(jù)行車情況智能進(jìn)入相應(yīng)亮燈情況,提高了十字路口的通車效率。
(5)用6個發(fā)光二極管作為主道路綠黃紅三燈顯示輸出和支道路綠黃紅三燈顯示輸出;用4個數(shù)碼管分別作為主支道路倒計時顯示輸出。
二、系統(tǒng)方案設(shè)計 2.1 整體模塊設(shè)計 2.1.1整體設(shè)計思路
整體設(shè)計思路為:交通燈控制系統(tǒng)主要包括兩個模塊,即交通燈控制模塊和倒計時顯示模塊。首先利用教學(xué)實驗箱提供的1HZ時鐘信號,實現(xiàn)計數(shù)功能,1s計數(shù)一次,同時設(shè)定主干道、支干道的交通燈的具體亮燈時間,并將計數(shù)結(jié)果傳給倒計時模塊,以實現(xiàn)倒計時模塊顯示的時間與交通燈的狀態(tài)相對應(yīng)。在交通燈控制過程中,用狀態(tài)機(jī)來實現(xiàn),設(shè)定主干道、支干道的行車檢測信號,用以進(jìn)行狀態(tài)變換。每進(jìn)入一個狀態(tài)就開始計數(shù),該狀態(tài)結(jié)束則清零,在下個狀態(tài)開始時重新計數(shù),實現(xiàn)每個狀態(tài)亮燈時間不同的需求。2.1.2 整體設(shè)計框架
根據(jù)系統(tǒng)要求可知:
輸入信號為系統(tǒng)時鐘,主支道路行車情況模擬輸入。輸出信號為主支道路紅綠黃顯示信號、倒計時顯示。
2.2 交通燈狀態(tài)轉(zhuǎn)換模塊設(shè)計
由原理分析可知系統(tǒng)需要在4種亮燈狀態(tài)之間切換,所以需要設(shè)計一個狀態(tài)轉(zhuǎn)換控制模塊,而倒計時顯示則來自內(nèi)部的計數(shù),所以狀態(tài)轉(zhuǎn)換模塊內(nèi)部包含了計數(shù)模塊,又因為二極管模擬紅綠燈顯示是和亮燈狀態(tài)緊密相關(guān)的,所以相應(yīng)的二極管控制整合在狀態(tài)轉(zhuǎn)換控制模塊內(nèi)部。故在狀態(tài)轉(zhuǎn)換模塊內(nèi)部包含3個子模塊,分別為計數(shù)模塊、狀態(tài)轉(zhuǎn)換控制模塊、二極管實現(xiàn)模塊。最后因為數(shù)碼管動態(tài)顯示模塊需要根據(jù)亮燈狀態(tài)決定輸出,所以本模塊還需增加計數(shù)輸出以及狀態(tài)輸出信號。該模塊計數(shù)采用1hz的時鐘脈沖,以期實現(xiàn)交通燈的秒數(shù)設(shè)置。
狀態(tài)循環(huán)控制: S0:主干道綠燈支干道紅燈45s S1:主干道黃燈支干道紅燈5s S2:主干道紅燈支干道綠燈25s S3:主干道紅燈支干道黃燈5s
2.3 數(shù)碼管倒計時顯示模塊設(shè)計
由于此模塊采用了數(shù)碼管的動態(tài)顯示原理,所以代碼量較多,單獨分為一個模塊,又因為動態(tài)顯示倒計時間是與亮燈狀態(tài)緊密相關(guān)的,所以必須從交通燈狀態(tài)控制模塊獲取相關(guān)的狀態(tài)輸入,引出狀態(tài)輸出信號,以供本模塊使用。又因為動態(tài)顯示需要較高的時鐘頻率,所以本模塊的時鐘信號采用系統(tǒng)輸入信號,而非之前計數(shù)的1hz時鐘。4位數(shù)碼管的前兩位顯示支干道的亮燈時間,后兩位顯示主干道的亮燈時間。
三、硬件設(shè)計 3.1總體設(shè)計框圖
由clk1hz輸入,用來計數(shù),道路行車檢測由pass_state1,pass_state0控制,pass_state1為主干道行車檢測,pass_state0為支干道行車檢測。1為有車通行,0為無車通行,輸出為數(shù)碼管的位選信號和段選信號,以及6個二極管控制信號。
3.2交通燈狀態(tài)轉(zhuǎn)換模塊
輸入計數(shù)時鐘和行車控制,輸出主干道以及支干道紅綠黃三燈的控制信號,最重要的是將此時的計數(shù)時間輸出給倒計時模塊,并將4個狀態(tài)的狀態(tài)輸出信號給倒計時模塊,實現(xiàn)在對應(yīng)的狀態(tài)下顯示對應(yīng)的時間。3.3數(shù)碼管倒計時顯示模塊
為了實現(xiàn)數(shù)碼管動態(tài)掃描,此模塊的時鐘使用較高頻率,輸入上級電路的計數(shù)輸出和狀態(tài)輸出,給出位選以及段選信號的控制。
四、硬件測試 4.1 引腳分配
Pin_3——1hz時鐘輸入,用于狀態(tài)控制模塊 Pin_33——24khz時鐘輸入,用于數(shù)碼管動態(tài)掃描 Pin_4——K1 支干道行車模擬輸入 Pin_5——K2 主干道行車模擬輸入
Pin_6,Pin_8,Pin_10——數(shù)碼管位選信號
Pin_11,Pin_12,Pin_13,Pin_14,Pin_15,Pin_30,Pin_31——數(shù)碼管段選信號
Pin_34——R1主干道紅燈 Pin_35——Y1 主干道黃燈 Pin_36——G1 主干道綠燈 Pin_37——R2 支干道紅燈 Pin_39——Y2 支干道黃燈 Pin_40——G2 支干道綠燈
4.2 仿真結(jié)果 交通燈顯示:
倒計時顯示:
S1狀態(tài)(支紅主黃):
S0狀態(tài)(支紅主綠)
五、總結(jié)
基本實現(xiàn)了設(shè)計所需的功能,能根據(jù)道路行車情況實現(xiàn)交通燈的智能控制,并將紅綠燈通行的時間通過數(shù)碼管直觀顯示出來,較好的完成了十字路口交通情況的模擬。
六、附錄
6.1 頂層模塊源程序
LIBRARY IEEE;---自動交通燈控制系統(tǒng)頂層描述 USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY TRAFFIC_LIGHT_CONTROL IS PORT(CLK1hz,CLK1khz : IN STD_LOGIC;---信號時鐘輸入
PASS_STATE : IN STD_LOGIC_VECTOR(1 DOWNTO 0);---主支通道的通車情況,低位為支通道高位為主通道,0為無車1為有車
ALIGHT : OUT STD_LOGIC_VECTOR(2 DOWNTO 0);---主干道紅綠黃燈控制信號 BLIGHT : OUT STD_LOGIC_VECTOR(2 DOWNTO 0);---支干道紅綠黃燈控制信號 SEL : OUT STD_LOGIC_VECTOR(2 DOWNTO 0);---輸出數(shù)碼管位選信號 LED7S : OUT STD_LOGIC_VECTOR(6 DOWNTO 0)---輸出數(shù)碼管段選信號);END ENTITY TRAFFIC_LIGHT_CONTROL;
ARCHITECTURE behav OF TRAFFIC_LIGHT_CONTROL IS COMPONENT STATE_CONTROL PORT(CLK1 : IN STD_LOGIC;---1Hz時鐘信號輸入
PASS_STATE_IN : IN STD_LOGIC_VECTOR(1 DOWNTO 0);---主支通道的通車情況,低位為支通道高位為主通道,0為無車1為有車
A_LIGHT: OUT STD_LOGIC_VECTOR(2 DOWNTO 0);---主干道紅綠黃燈控制信號 B_LIGHT: OUT STD_LOGIC_VECTOR(2 DOWNTO 0);---支干道紅綠黃燈控制信號 CNTOUT : OUT STD_LOGIC_VECTOR(5 DOWNTO 0);---已計數(shù)時間輸出
STATEOUT : OUT STD_LOGIC_VECTOR(1 DOWNTO 0)---狀態(tài)輸出,傳遞給數(shù)碼顯示模塊);END COMPONENT;
COMPONENT DISPLAY PORT(CLK2 : IN STD_LOGIC;---1KHz時鐘信號輸入
CNTIN : IN STD_LOGIC_VECTOR(5 DOWNTO 0);---亮燈已過時間輸入 STATEIN : IN STD_LOGIC_VECTOR(1 DOWNTO 0);---狀態(tài)輸入
LED7SOUT : OUT STD_LOGIC_VECTOR(6 DOWNTO 0);---數(shù)碼管段選信號輸出 SELOUT : OUT STD_LOGIC_VECTOR(2 DOWNTO 0)---數(shù)碼管位選信號輸出);END COMPONENT;
SIGNAL MSTATE : STD_LOGIC_VECTOR(1 DOWNTO 0);---中間信號傳遞通車狀態(tài)
SIGNAL MCNT : STD_LOGIC_VECTOR(5 DOWNTO 0);---中間信號傳遞亮燈已計數(shù)時間
BEGIN---例化語句
U1: STATE_CONTROL PORT MAP(CLK1=>CLK1hz,PASS_STATE_IN=>PASS_STATE,B_LIGHT=>BLIGHT, A_LIGHT=>ALIGHT, CNTOUT=>MCNT, STATEOUT=>MSTATE);U2: DISPLAY PORT MAP(CLK2=>CLK1khz,CNTIN=>MCNT,STATEIN=>MSTATE,LED7SOUT=>LED7S,SELOUT=>SEL);
END ARCHITECTURE behav;6.2 交通燈狀態(tài)轉(zhuǎn)換模塊源程序
LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY STATE_CONTROL IS GENERIC(GREENA_CNT:INTEGER:=45;---主通道綠燈亮的時間45s
YELLOWA_CNT:INTEGER:=5;---主通道黃燈亮的時間5s
GREENB_CNT:INTEGER:=25;---支通道綠燈亮的時間25s
YELLOWB_CNT:INTEGER:=5);---支通道黃燈亮的時間5s PORT(CLK1 : IN STD_LOGIC;---1Hz時鐘信號輸入
PASS_STATE_IN : IN STD_LOGIC_VECTOR(1 DOWNTO 0);---主支通道的通車情況,低位為支通道高位為主通道,0為無車1為有車
A_LIGHT : OUT STD_LOGIC_VECTOR(2 DOWNTO 0);---主干道紅綠黃燈控制信號 B_LIGHT : OUT STD_LOGIC_VECTOR(2 DOWNTO 0);---支干道紅綠黃燈控制信號 CNTOUT : OUT STD_LOGIC_VECTOR(5 DOWNTO 0);---已計數(shù)時間輸出 STATEOUT : OUT STD_LOGIC_VECTOR(1 DOWNTO 0)---剩余時間輸出顯示);END ENTITY STATE_CONTROL;
ARCHITECTURE behav OF STATE_CONTROL IS TYPE STATES IS(ST0,ST1,ST2,ST3);---4個狀態(tài)分別為【主綠支紅45s、主黃支紅5s、支綠主紅25s、支黃主紅5s、】
SIGNAL STATE : STATES:=ST0;---初始化狀態(tài)為狀態(tài)0 SIGNAL CNT_EN : STD_LOGIC:='0';---計數(shù)使能控制信號,初始不計數(shù)
SIGNAL CNT : STD_LOGIC_VECTOR(5 DOWNTO 0):=“000001”;---因為初始不計數(shù),但已過一個周期,所以初值為1 BEGIN
PROCESS(CLK1)BEGIN IF CLK1'EVENT AND CLK1 = '0' THEN
IF(CNT_EN='1')THEN---計數(shù)模塊
CNT<=CNT+1;ELSE
CNT<=“000001”;---若溢出則計數(shù)使能為0,CNT重新賦值為1 END IF;CASE STATE IS---狀態(tài)循環(huán)控制模塊 WHEN ST0 => IF(CNT=GREENA_CNT)THEN---主綠支紅若計數(shù)滿45s則根據(jù)主支通道的通車情況決定轉(zhuǎn)入下一個狀態(tài)
CASE PASS_STATE_IN IS
WHEN “00” => STATE<=ST0;
WHEN “01” => STATE<=ST1;
WHEN “10” => STATE<=ST0;
WHEN “11” => STATE<=ST1;
WHEN OTHERS => NULL;
END CASE;ELSE
STATE<=ST0;---若計數(shù)未滿則為原來狀態(tài)
END IF;WHEN ST1 =>---主黃支紅若計數(shù)滿5s則根據(jù)主支通道的通車情況決定轉(zhuǎn)入下一個狀態(tài)
IF(CNT=YELLOWA_CNT)THEN
CASE PASS_STATE_IN IS
WHEN “00” => STATE<=ST2;
WHEN “01” => STATE<=ST2;
WHEN “10” => STATE<=ST2;
WHEN “11” => STATE<=ST2;
WHEN OTHERS => NULL;
END CASE;ELSE
STATE<=ST1;---若計數(shù)未滿則為原來狀態(tài) END IF;WHEN ST2 =>---支綠主紅若計數(shù)滿25s則根據(jù)主支通道的通車情況決定轉(zhuǎn)入下一個狀態(tài)
IF(CNT=GREENB_CNT)THEN
CASE PASS_STATE_IN IS
WHEN “00” => STATE<=ST3;
WHEN “01” => STATE<=ST2;
WHEN “10” => STATE<=ST3;
WHEN “11” => STATE<=ST3;
WHEN OTHERS => NULL;
END CASE;ELSE
STATE<=ST2;---若計數(shù)未滿則為原來狀態(tài)
END IF;
WHEN ST3 =>---支黃主紅若計數(shù)滿5s則根據(jù)主支通道的通車情況決定轉(zhuǎn)入下一個狀態(tài)
IF(CNT=YELLOWA_CNT)THEN
CASE PASS_STATE_IN IS
WHEN “00” => STATE<=ST0;
WHEN “01” => STATE<=ST0;
WHEN “10” => STATE<=ST0;
WHEN “11” => STATE<=ST0;
WHEN OTHERS => NULL;
END CASE;ELSE
STATE<=ST3;---若計數(shù)未滿則為原來狀態(tài)
END IF;END CASE;END IF;CNTOUT<=CNT;END PROCESS;
PROCESS(STATE)BEGIN CASE STATE IS WHEN ST0 =>---狀態(tài)0時主綠支紅
A_LIGHT<=“010”;B_LIGHT<=“100”;CNT_EN<='1';STATEOUT<=“00”;---將當(dāng)前狀態(tài)傳遞給數(shù)碼管顯示模塊,以供后續(xù)使用 IF(CNT=GREENA_CNT)THEN CNT_EN<='0';END IF;
WHEN ST1 =>---狀態(tài)1時主黃支紅
A_LIGHT<=“001”;B_LIGHT<=“100”;CNT_EN<='1';STATEOUT<=“01”;---將當(dāng)前狀態(tài)傳遞給數(shù)碼管顯示模塊,以供后續(xù)使用 IF(CNT=YELLOWA_CNT)THEN CNT_EN<='0';END IF;
WHEN ST2 =>---狀態(tài)2時支綠主紅
A_LIGHT<=“100”;B_LIGHT<=“010”;CNT_EN<='1';STATEOUT<=“10”;---將當(dāng)前狀態(tài)傳遞給數(shù)碼管顯示模塊,以供后續(xù)使用 IF(CNT=GREENB_CNT)THEN CNT_EN<='0';END IF;
WHEN ST3 =>---狀態(tài)3時支黃主紅
A_LIGHT<=“100”;B_LIGHT<=“001”;CNT_EN<='1';STATEOUT<=“11”;---將當(dāng)前狀態(tài)傳遞給數(shù)碼管顯示模塊,以供后續(xù)使用 IF(CNT=YELLOWB_CNT)THEN CNT_EN<='0';END IF;
END CASE;END PROCESS;END behav;6.3 數(shù)碼管顯示倒計時源程序
LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY DISPLAY IS PORT(CLK2 : IN STD_LOGIC;---時鐘輸入
CNTIN : IN STD_LOGIC_VECTOR(5 DOWNTO 0);---已計數(shù)輸入,來自狀態(tài)控制模塊 STATEIN : IN STD_LOGIC_VECTOR(1 DOWNTO 0);---狀態(tài)輸入,來自狀態(tài)控制模塊 LED7SOUT : OUT STD_LOGIC_VECTOR(6 DOWNTO 0);---數(shù)碼管段選信號輸出 SELOUT : OUT STD_LOGIC_VECTOR(2 DOWNTO 0)---數(shù)碼管位選信號輸出);END ENTITY DISPLAY;ARCHITECTURE behav OF DISPLAY IS BEGIN PROCESS(CLK2)VARIABLE BITSEL : STD_LOGIC_VECTOR(2 DOWNTO 0);BEGIN-----------------------------位選信號循環(huán)模塊----------------IF CLK2'EVENT AND CLK2='0' THEN CASE BITSEL IS WHEN “000” => BITSEL:=“001”;SELOUT<=“001”;WHEN “001” => BITSEL:=“010”;SELOUT<=“010”;WHEN “010” => BITSEL:=“011”;SELOUT<=“011”;WHEN “011” => BITSEL:=“000”;SELOUT<=“000”;WHEN OTHERS => NULL;END CASE;END IF;-------------------------動態(tài)顯示模塊-----------------CASE STATEIN IS WHEN “00” =>---主綠支紅狀態(tài) OK CASE BITSEL IS WHEN “000” =>---主綠支紅狀態(tài) 點亮支干道十位數(shù)字 OK CASE CNTIN IS WHEN “000001” => LED7SOUT <= “1101101”;---01 50 WHEN “000010” => LED7SOUT <= “1100110”;---02 49 WHEN “000011” => LED7SOUT <= “1100110”;WHEN “000100” => LED7SOUT <= “1100110”;WHEN “000101” => LED7SOUT <= “1100110”;WHEN “000110” => LED7SOUT <= “1100110”;---06 45 WHEN “000111” => LED7SOUT <= “1100110”;WHEN “001000” => LED7SOUT <= “1100110”;WHEN “001001” => LED7SOUT <= “1100110”;WHEN “001010” => LED7SOUT <= “1100110”;WHEN “001011” => LED7SOUT <= “1100110”;---11 40 WHEN “001100” => LED7SOUT <= “1001111”;WHEN “001101” => LED7SOUT <= “1001111”;WHEN “001110” => LED7SOUT <= “1001111”;WHEN “001111” => LED7SOUT <= “1001111”;WHEN “010000” => LED7SOUT <= “1001111”;---16 35 WHEN “010001” => LED7SOUT <= “1001111”;WHEN “010010” => LED7SOUT <= “1001111”;WHEN “010011” => LED7SOUT <= “1001111”;WHEN “010100” => LED7SOUT <= “1001111”;WHEN “010101” => LED7SOUT <= “1001111”;---21 30 WHEN “010110” => LED7SOUT <= “1011011”;WHEN “010111” => LED7SOUT <= “1011011”;WHEN “011000” => LED7SOUT <= “1011011”;WHEN “011001” => LED7SOUT <= “1011011”;WHEN “011010” => LED7SOUT <= “1011011”;---26 25 WHEN “011011” => LED7SOUT <= “1011011”;WHEN “011100” => LED7SOUT <= “1011011”;WHEN “011101” => LED7SOUT <= “1011011”;WHEN “011110” => LED7SOUT <= “1011011”;WHEN “011111” => LED7SOUT <= “1011011”;---31 20 WHEN “100000” => LED7SOUT <= “0000110”;WHEN “100001” => LED7SOUT <= “0000110”;WHEN “100010” => LED7SOUT <= “0000110”;WHEN “100011” => LED7SOUT <= “0000110”;WHEN “100100” => LED7SOUT <= “0000110”;---36 15 WHEN “100101” => LED7SOUT <= “0000110”;WHEN “100110” => LED7SOUT <= “0000110”;WHEN “100111” => LED7SOUT <= “0000110”;WHEN “101000” => LED7SOUT <= “0000110”;WHEN “101001” => LED7SOUT <= “0000110”;---41 10 WHEN “101010” => LED7SOUT <= “0111111”;WHEN “101011” => LED7SOUT <= “0111111”;WHEN “101100” => LED7SOUT <= “0111111”;WHEN “101101” => LED7SOUT <= “0111111”;---45 06 WHEN OTHERS => NULL;END CASE;WHEN “001” =>---主綠支紅狀態(tài) 點亮支干道個位數(shù)字 OK CASE CNTIN IS WHEN “000001” => LED7SOUT <= “0111111”;---01 50 WHEN “000010” => LED7SOUT <= “1101111”;---02 49 WHEN “000011” => LED7SOUT <= “1111111”;WHEN “000100” => LED7SOUT <= “0000111”;WHEN “000101” => LED7SOUT <= “1111101”;WHEN “000110” => LED7SOUT <= “1101101”;WHEN “000111” => LED7SOUT <= “1100110”;---07 44 WHEN “001000” => LED7SOUT <= “1001111”;WHEN “001001” => LED7SOUT <= “1011011”;WHEN “001010” => LED7SOUT <= “0000110”;WHEN “001011” => LED7SOUT <= “0111111”;WHEN “001100” => LED7SOUT <= “1101111”;---12 39 WHEN “001101” => LED7SOUT <= “1111111”;WHEN “001110” => LED7SOUT <= “0000111”;WHEN “001111” => LED7SOUT <= “1111101”;WHEN “010000” => LED7SOUT <= “1101101”;WHEN “010001” => LED7SOUT <= “1100110”;---17 34 WHEN “010010” => LED7SOUT <= “1001111”;WHEN “010011” => LED7SOUT <= “1011011”;WHEN “010100” => LED7SOUT <= “0000110”;WHEN “010101” => LED7SOUT <= “0111111”;WHEN “010110” => LED7SOUT <= “1101111”;---22 29 WHEN “010111” => LED7SOUT <= “1111111”;WHEN “011000” => LED7SOUT <= “0000111”;WHEN “011001” => LED7SOUT <= “1111101”;WHEN “011010” => LED7SOUT <= “1101101”;WHEN “011011” => LED7SOUT <= “1100110”;---27 24 WHEN “011100” => LED7SOUT <= “1001111”;WHEN “011101” => LED7SOUT <= “1011011”;WHEN “011110” => LED7SOUT <= “0000110”;WHEN “011111” => LED7SOUT <= “0111111”;WHEN “100000” => LED7SOUT <= “1101111”;---32 19 WHEN “100001” => LED7SOUT <= “1111111”;WHEN “100010” => LED7SOUT <= “0000111”;WHEN “100011” => LED7SOUT <= “1111101”;WHEN “100100” => LED7SOUT <= “1101101”;WHEN “100101” => LED7SOUT <= “1100110”;---37 14 WHEN “100110” => LED7SOUT <= “1001111”;WHEN “100111” => LED7SOUT <= “1011011”;WHEN “101000” => LED7SOUT <= “0000110”;WHEN “101001” => LED7SOUT <= “0111111”;---41 09 WHEN “101010” => LED7SOUT <= “1101111”;WHEN “101011” => LED7SOUT <= “1111111”;WHEN “101100” => LED7SOUT <= “0000111”;WHEN “101101” => LED7SOUT <= “1111101”;---45 06 WHEN OTHERS => NULL;END CASE;WHEN “010” =>---主綠支紅狀態(tài) 點亮主干道十位數(shù)字 OK CASE CNTIN IS WHEN “000000” => LED7SOUT <= “1111101”;---00 46 WHEN “000001” => LED7SOUT <= “1100110”;WHEN “000010” => LED7SOUT <= “1100110”;WHEN “000011” => LED7SOUT <= “1100110”;WHEN “000100” => LED7SOUT <= “1100110”;WHEN “000101” => LED7SOUT <= “1100110”;---05 41 WHEN “000110” => LED7SOUT <= “1100110”;WHEN “000111” => LED7SOUT <= “1001111”;WHEN “001000” => LED7SOUT <= “1001111”;WHEN “001001” => LED7SOUT <= “1001111”;WHEN “001010” => LED7SOUT <= “1001111”;---10 36 WHEN “001011” => LED7SOUT <= “1001111”;WHEN “001100” => LED7SOUT <= “1001111”;WHEN “001101” => LED7SOUT <= “1001111”;WHEN “001110” => LED7SOUT <= “1001111”;WHEN “001111” => LED7SOUT <= “1001111”;---15 31 WHEN “010000” => LED7SOUT <= “1001111”;WHEN “010001” => LED7SOUT <= “1011011”;WHEN “010010” => LED7SOUT <= “1011011”;WHEN “010011” => LED7SOUT <= “1011011”;WHEN “010100” => LED7SOUT <= “1011011”;---20 26 WHEN “010101” => LED7SOUT <= “1011011”;WHEN “010110” => LED7SOUT <= “1011011”;WHEN “010111” => LED7SOUT <= “1011011”;WHEN “011000” => LED7SOUT <= “1011011”;WHEN “011001” => LED7SOUT <= “1011011”;---25 21 WHEN “011010” => LED7SOUT <= “1011011”;WHEN “011011” => LED7SOUT <= “0000110”;WHEN “011100” => LED7SOUT <= “0000110”;WHEN “011101” => LED7SOUT <= “0000110”;WHEN “011110” => LED7SOUT <= “0000110”;---30 16 WHEN “011111” => LED7SOUT <= “0000110”;WHEN “100000” => LED7SOUT <= “0000110”;WHEN “100001” => LED7SOUT <= “0000110”;WHEN “100010” => LED7SOUT <= “0000110”;WHEN “100011” => LED7SOUT <= “0000110”;---35 11 WHEN “100100” => LED7SOUT <= “0000110”;---36 10 WHEN “100101” => LED7SOUT <= “0111111”;WHEN “100110” => LED7SOUT <= “0111111”;WHEN “100111” => LED7SOUT <= “0111111”;WHEN “101000” => LED7SOUT <= “0111111”;WHEN “101001” => LED7SOUT <= “0111111”;WHEN “101010” => LED7SOUT <= “0111111”;WHEN “101011” => LED7SOUT <= “0111111”;WHEN “101100” => LED7SOUT <= “0111111”;WHEN “101101” => LED7SOUT <= “0111111”;---45 01 WHEN OTHERS => NULL;END CASE;WHEN “011” =>---主綠支紅狀態(tài) 點亮主干道個位數(shù)字 OK CASE CNTIN IS WHEN “000000” => LED7SOUT <= “1111101”;---00 46 WHEN “000001” => LED7SOUT <= “1101101”;---01 45 WHEN “000010” => LED7SOUT <= “1100110”;WHEN “000011” => LED7SOUT <= “1001111”;WHEN “000100” => LED7SOUT <= “1011011”;WHEN “000101” => LED7SOUT <= “0000110”;WHEN “000110” => LED7SOUT <= “0111111”;---06 40 WHEN “000111” => LED7SOUT <= “1101111”;WHEN “001000” => LED7SOUT <= “1111111”;WHEN “001001” => LED7SOUT <= “0000111”;WHEN “001010” => LED7SOUT <= “1111101”;WHEN “001011” => LED7SOUT <= “1101101”;---11 35 WHEN “001100” => LED7SOUT <= “1100110”;WHEN “001101” => LED7SOUT <= “1001111”;WHEN “001110” => LED7SOUT <= “1011011”;WHEN “001111” => LED7SOUT <= “0000110”;WHEN “010000” => LED7SOUT <= “0111111”;---16 30 WHEN “010001” => LED7SOUT <= “1101111”;WHEN “010010” => LED7SOUT <= “1111111”;WHEN “010011” => LED7SOUT <= “0000111”;WHEN “010100” => LED7SOUT <= “1111101”;WHEN “010101” => LED7SOUT <= “1101101”;---21 25 WHEN “010110” => LED7SOUT <= “1100110”;WHEN “010111” => LED7SOUT <= “1001111”;WHEN “011000” => LED7SOUT <= “1011011”;WHEN “011001” => LED7SOUT <= “0000110”;WHEN “011010” => LED7SOUT <= “0111111”;---26 20 WHEN “011011” => LED7SOUT <= “1101111”;WHEN “011100” => LED7SOUT <= “1111111”;WHEN “011101” => LED7SOUT <= “0000111”;WHEN “011110” => LED7SOUT <= “1111101”;WHEN “011111” => LED7SOUT <= “1101101”;---31 15 WHEN “100000” => LED7SOUT <= “1100110”;WHEN “100001” => LED7SOUT <= “1001111”;WHEN “100010” => LED7SOUT <= “1011011”;WHEN “100011” => LED7SOUT <= “0000110”;WHEN “100100” => LED7SOUT <= “0111111”;---35 10 WHEN “100101” => LED7SOUT <= “1101111”;WHEN “100110” => LED7SOUT <= “1111111”;WHEN “100111” => LED7SOUT <= “0000111”;WHEN “101000” => LED7SOUT <= “1111101”;WHEN “101001” => LED7SOUT <= “1101101”;WHEN “101010” => LED7SOUT <= “1100110”;WHEN “101011” => LED7SOUT <= “1001111”;WHEN “101100” => LED7SOUT <= “1011011”;WHEN “101101” => LED7SOUT <= “0000110”;---45 01 WHEN OTHERS => NULL;END CASE;
WHEN OTHERS => NULL;END CASE;-----------WHEN “01” =>---主黃支紅狀態(tài) OK CASE BITSEL IS WHEN “000” =>---主黃支紅狀態(tài) 點亮支干道十位數(shù)字 CASE CNTIN IS WHEN “000001” => LED7SOUT <= “0111111”;WHEN “000010” => LED7SOUT <= “0111111”;WHEN “000011” => LED7SOUT <= “0111111”;WHEN “000100” => LED7SOUT <= “0111111”;WHEN “000101” => LED7SOUT <= “0111111”;WHEN OTHERS => NULL;END CASE;WHEN “001” =>---主黃支紅狀態(tài) 點亮支干道個位數(shù)字 CASE CNTIN IS WHEN “000001” => LED7SOUT <= “1101101”;WHEN “000010” => LED7SOUT <= “1100110”;WHEN “000011” => LED7SOUT <= “1001111”;WHEN “000100” => LED7SOUT <= “1011011”;WHEN “000101” => LED7SOUT <= “0000110”;WHEN OTHERS => NULL;END CASE;WHEN “010”=>---主黃支紅狀態(tài) 點亮主干道十位數(shù)字 CASE CNTIN IS WHEN “000001” => LED7SOUT <= “0111111”;WHEN “000010” => LED7SOUT <= “0111111”;WHEN “000011” => LED7SOUT <= “0111111”;WHEN “000100” => LED7SOUT <= “0111111”;WHEN “000101” => LED7SOUT <= “0111111”;WHEN OTHERS => NULL;END CASE;WHEN“011” =>---主黃支紅狀態(tài) 點亮主干道個位數(shù)字 CASE CNTIN IS WHEN “000001” => LED7SOUT <= “1101101”;WHEN “000010” => LED7SOUT <= “1100110”;WHEN “000011” => LED7SOUT <= “1001111”;WHEN “000100” => LED7SOUT <= “1011011”;WHEN “000101” => LED7SOUT <= “0000110”;WHEN OTHERS => NULL;END CASE;WHEN OTHERS => NULL;END CASE;-----------------------WHEN “10” =>---支綠主紅狀態(tài) OK CASE BITSEL IS WHEN “000” =>---支綠主紅狀態(tài) 點亮支干道十位數(shù)字 OK CASE CNTIN IS WHEN “000001” => LED7SOUT <= “1011011”;---01 25 WHEN “000010” => LED7SOUT <= “1011011”;WHEN “000011” => LED7SOUT <= “1011011”;WHEN “000100” => LED7SOUT <= “1011011”;WHEN “000101” => LED7SOUT <= “1011011”;WHEN “000110” => LED7SOUT <= “1011011”;---06 20 WHEN “000111” => LED7SOUT <= “0000110”;WHEN “001000” => LED7SOUT <= “0000110”;WHEN “001001” => LED7SOUT <= “0000110”;WHEN “001010” => LED7SOUT <= “0000110”;WHEN “001011” => LED7SOUT <= “0000110”;---11 15 WHEN “001100” => LED7SOUT <= “0000110”;WHEN “001101” => LED7SOUT <= “0000110”;WHEN “001110” => LED7SOUT <= “0000110”;WHEN “001111” => LED7SOUT <= “0000110”;WHEN “010000” => LED7SOUT <= “0000110”;---16 10 WHEN “010001” => LED7SOUT <= “0111111”;WHEN “010010” => LED7SOUT <= “0111111”;WHEN “010011” => LED7SOUT <= “0111111”;WHEN “010100” => LED7SOUT <= “0111111”;WHEN “010101” => LED7SOUT <= “0111111”;---21 05 WHEN “010110” => LED7SOUT <= “0111111”;WHEN “010111” => LED7SOUT <= “0111111”;WHEN “011000” => LED7SOUT <= “0111111”;WHEN “011001” => LED7SOUT <= “0111111”;---25 01 WHEN OTHERS => NULL;END CASE;WHEN “001” =>---支綠主紅狀態(tài) 點亮支干道個位數(shù)字 OK CASE CNTIN IS WHEN “000001” => LED7SOUT <= “1101101”;---01 25 WHEN “000010” => LED7SOUT <= “1100110”;WHEN “000011” => LED7SOUT <= “1001111”;WHEN “000100” => LED7SOUT <= “1011011”;WHEN “000101” => LED7SOUT <= “0000110”;WHEN “000110” => LED7SOUT <= “0111111”;---06 20 WHEN “000111” => LED7SOUT <= “1101111”;WHEN “001000” => LED7SOUT <= “1111111”;WHEN “001001” => LED7SOUT <= “0000111”;WHEN “001010” => LED7SOUT <= “1111101”;WHEN “001011” => LED7SOUT <= “1101101”;---11 15 WHEN “001100” => LED7SOUT <= “1100110”;WHEN “001101” => LED7SOUT <= “1001111”;WHEN “001110” => LED7SOUT <= “1011011”;WHEN “001111” => LED7SOUT <= “0000110”;WHEN “010000” => LED7SOUT <= “0111111”;---16 10 WHEN “010001” => LED7SOUT <= “1101111”;WHEN “010010” => LED7SOUT <= “1111111”;WHEN “010011” => LED7SOUT <= “0000111”;WHEN “010100” => LED7SOUT <= “1111101”;WHEN “010101” => LED7SOUT <= “1101101”;---21 05 WHEN “010110” => LED7SOUT <= “1100110”;WHEN “010111” => LED7SOUT <= “1001111”;WHEN “011000” => LED7SOUT <= “1011011”;WHEN “011001” => LED7SOUT <= “0000110”;---25 01 WHEN OTHERS => NULL;END CASE;WHEN “010” =>---支綠主紅狀態(tài) 點亮主干道十位數(shù)字 OK CASE CNTIN IS WHEN “000001” => LED7SOUT <= “1001111”;---01 30 WHEN “000010” => LED7SOUT <= “1011011”;---02 29 WHEN “000011” => LED7SOUT <= “1011011”;WHEN “000100” => LED7SOUT <= “1011011”;WHEN “000101” => LED7SOUT <= “1011011”;WHEN “000110” => LED7SOUT <= “1011011”;---06 25 WHEN “000111” => LED7SOUT <= “1011011”;WHEN “001000” => LED7SOUT <= “1011011”;WHEN “001001” => LED7SOUT <= “1011011”;WHEN “001010” => LED7SOUT <= “1011011”;WHEN “001011” => LED7SOUT <= “1011011”;---11 20 WHEN “001100” => LED7SOUT <= “0000110”;WHEN “001101” => LED7SOUT <= “0000110”;WHEN “001110” => LED7SOUT <= “0000110”;WHEN “001111” => LED7SOUT <= “0000110”;WHEN “010000” => LED7SOUT <= “0000110”;---16 15 WHEN “010001” => LED7SOUT <= “0000110”;WHEN “010010” => LED7SOUT <= “0000110”;WHEN “010011” => LED7SOUT <= “0000110”;WHEN “010100” => LED7SOUT <= “0000110”;WHEN “010101” => LED7SOUT <= “0000110”;---21 10 WHEN “010110” => LED7SOUT <= “0111111”;WHEN “010111” => LED7SOUT <= “0111111”;WHEN “011000” => LED7SOUT <= “0111111”;WHEN “011001” => LED7SOUT <= “0111111”;---25 06 WHEN OTHERS => NULL;END CASE;WHEN“011” =>---支綠主紅狀態(tài) 點亮主干道個位數(shù)字 OK CASE CNTIN IS WHEN “000001” => LED7SOUT <= “0111111”;---01 30 WHEN “000010” => LED7SOUT <= “1101111”;---02 29 WHEN “000011” => LED7SOUT <= “1111111”;WHEN “000100” => LED7SOUT <= “0000111”;WHEN “000101” => LED7SOUT <= “1111101”;WHEN “000110” => LED7SOUT <= “1101101”;WHEN “000111” => LED7SOUT <= “1100110”;---07 24 WHEN “001000” => LED7SOUT <= “1001111”;WHEN “001001” => LED7SOUT <= “1011011”;WHEN “001010” => LED7SOUT <= “0000110”;WHEN “001011” => LED7SOUT <= “0111111”;WHEN “001100” => LED7SOUT <= “1101111”;---12 19 WHEN “001101” => LED7SOUT <= “1111111”;WHEN “001110” => LED7SOUT <= “0000111”;WHEN “001111” => LED7SOUT <= “1111101”;WHEN “010000” => LED7SOUT <= “1101101”;WHEN “010001” => LED7SOUT <= “1100110”;---17 14 WHEN “010010” => LED7SOUT <= “1001111”;WHEN “010011” => LED7SOUT <= “1011011”;WHEN “010100” => LED7SOUT <= “0000110”;WHEN “010101” => LED7SOUT <= “0111111”;WHEN “010110” => LED7SOUT <= “1101111”;---22 09 WHEN “010111” => LED7SOUT <= “1111111”;WHEN “011000” => LED7SOUT <= “0000111”;WHEN “011001” => LED7SOUT <= “1111101”;---25 06 WHEN OTHERS => NULL;END CASE;
WHEN OTHERS => NULL;END CASE;------------
WHEN “11” =>---支黃主紅狀態(tài) OK CASE BITSEL IS WHEN “000” =>---支黃主紅狀態(tài) 點亮支干道十位數(shù)字 CASE CNTIN IS WHEN “000001” => LED7SOUT <= “0111111”;WHEN “000010” => LED7SOUT <= “0111111”;WHEN “000011” => LED7SOUT <= “0111111”;WHEN “000100” => LED7SOUT <= “0111111”;WHEN “000101” => LED7SOUT <= “0111111”;WHEN OTHERS => NULL;END CASE;WHEN “001” =>---支黃主紅狀態(tài) 點亮支干道個位數(shù)字 CASE CNTIN IS WHEN “000001” => LED7SOUT <= “1101101”;WHEN “000010” => LED7SOUT <= “1100110”;WHEN “000011” => LED7SOUT <= “1001111”;WHEN “000100” => LED7SOUT <= “1011011”;WHEN “000101” => LED7SOUT <= “0000110”;WHEN OTHERS => NULL;END CASE;WHEN “010” =>---支黃主紅狀態(tài) 點亮主干道十位數(shù)字 CASE CNTIN IS WHEN “000001” => LED7SOUT <= “0111111”;WHEN “000010” => LED7SOUT <= “0111111”;WHEN “000011” => LED7SOUT <= “0111111”;WHEN “000100” => LED7SOUT <= “0111111”;WHEN “000101” => LED7SOUT <= “0111111”;WHEN OTHERS => NULL;END CASE;WHEN “011” =>---支黃主紅狀態(tài) 點亮主干道個位數(shù)字 CASE CNTIN IS WHEN “000001” => LED7SOUT <= “1101101”;WHEN “000010” => LED7SOUT <= “1100110”;WHEN “000011” => LED7SOUT <= “1001111”;WHEN “000100” => LED7SOUT <= “1011011”;WHEN “000101” => LED7SOUT <= “0000110”;WHEN OTHERS => NULL;END CASE;
WHEN OTHERS => NULL;END CASE;
------------END CASE;END PROCESS;END behav;
第三篇:基于FPGA的智能交通燈
設(shè)計題目: 基于FPGA的交通燈控制系統(tǒng)設(shè)計
專 業(yè):
學(xué)生姓名: 學(xué) 號:
起迄日期: 2014.8.22.--2014.9.22.指導(dǎo)教師: 教研室主任:
目錄
1.緒論..............................................................1 2.課題研究背景及意義................................................1 3.設(shè)計要求..........................................................1 4.設(shè)計方案..........................................................1 4.1方案比較....................................錯誤!未定義書簽。4.2 方案說明...................................錯誤!未定義書簽。5.VHDL語言介紹...................................錯誤!未定義書簽。6.系統(tǒng)仿真..........................................................3 6.1 系統(tǒng)電路框圖................................................4 6.2設(shè)計結(jié)果仿真.................................................4 7.心得體會..........................................................5 8.參考文獻(xiàn)..........................................................6 7.附件..............................................................6
摘要:針對現(xiàn)實中越來越嚴(yán)重的城市交通擁堵現(xiàn)象,提出了一種城市十字路口交通信號燈控制與FPGA實現(xiàn)的新方法。設(shè)計的智能交通控制系統(tǒng)利用對相向車道采用不同步的紅綠燈信號控制方法,能夠減少交通資源浪費(fèi),大幅提高十字路口的車輛通行效率。利用超高速硬件描述語言VHDL設(shè)計十字路口交通信號燈控制器,實現(xiàn)主干道和支干道的交通控制功能,并通過Quartus II完成綜合、仿真、進(jìn)行管腳分配、繪出仿真波形及原理圖。
關(guān)鍵字:硬件描述語言VHDL;交通信號燈;智能控制
1.緒論
智能的交通燈指揮著人們和各種車輛的安全運(yùn)行,實現(xiàn)紅、黃、綠燈的自動指揮是城鄉(xiāng)交通管理現(xiàn)代化的重要課題。在城鄉(xiāng)街道的十字交叉路口,為了保證交通秩序和行人的安全,一般在每條街道上各有一組紅、黃、綠交通信號燈,其中紅燈亮,表示該條道禁止通行;黃燈亮該條道路上未過停車線的停止通行,已過停車線的車輛繼續(xù)通行;綠燈亮,表示該條道路允許通行。交通燈自動控制十字路口兩組紅、黃、綠交通燈的狀態(tài)轉(zhuǎn)換,指揮各種車輛和行人安全通行。實現(xiàn)十字路口交通管理自動化。
DEA技術(shù)的發(fā)展和應(yīng)用領(lǐng)域的擴(kuò)大與深入,在電子信息,通信,自動,控制及計算機(jī)應(yīng)用等領(lǐng)域的重要性日益突出,因此本論文研究基于FPGA的交通燈設(shè)計。FPGA中有大量實現(xiàn)組合邏輯的資源,可以完成較大規(guī)模的組合邏輯電路設(shè)計,而其中相當(dāng)數(shù)量的存儲電路(觸發(fā)器)又可完成復(fù)雜的時序邏輯電路設(shè)計。通過使用各種EDA工具,用原理圖或硬件描述語言,可以很方便地將復(fù)雜的電路在FPGA中實現(xiàn)。像典型的數(shù)字系統(tǒng)分頻器,數(shù)字鐘,數(shù)字頻率計等等都可用FPGA完成。本文以QuartusII 軟件為開發(fā)平臺,通過VHDL硬件描述語言以及原理圖的輸入方式來設(shè)計交通燈。
2.課題研究背景及意義
隨著公路交通運(yùn)輸?shù)陌l(fā)展,交通擁擠、道路阻塞和交通事故頻繁發(fā)生等問題越來越嚴(yán)重地困擾著世界各大城市。相對于交通運(yùn)輸工具的飛速發(fā)展,我國交通配套設(shè)施建設(shè)明顯滯后,道路安全網(wǎng)絡(luò)、道路標(biāo)識、交通指揮中心仍然不足。單獨從車輛方面或道路方面考慮,均很難有效地解決交通問題。通過采用信息通信技術(shù)、電子技術(shù)以及其他科學(xué)技術(shù)把它們聯(lián)系起來,并實現(xiàn)智能化的交通控制才能解決根本問題,交通信息化需要融合科技力量才能使目前的交通問題得到改善。
在現(xiàn)代文明高速發(fā)展的社會,道路的高度發(fā)達(dá)使得整個社會進(jìn)步的速度進(jìn)一步的加快,交通燈的出現(xiàn)是社會發(fā)展的必然產(chǎn)物。交通燈在道路事業(yè)中占有舉足輕重的地位,它直接影響到公路以及市區(qū)內(nèi)的通車質(zhì)量。所以,智能交通燈的研究具有重大意義。
3.設(shè)計要求
主干道綠燈亮支干道紅燈亮?xí)r間是50秒,接下來黃燈閃爍5秒,此時主干道的綠燈和支干道的紅燈繼續(xù)亮;然后是主干道紅燈亮支干道綠燈亮,時間為20秒,再黃燈閃5秒同時主干道的紅燈和支干道的綠燈也繼續(xù)亮。
4.設(shè)計方案
首先根據(jù)系統(tǒng)的需要進(jìn)行分析。系統(tǒng)要求主干道綠燈亮支干道紅燈亮?xí)r間是50秒,接下來黃燈閃爍5秒,此時主干道的綠燈和支干道的紅燈繼續(xù)亮,然后是 主干道紅燈亮支干道綠燈亮?xí)r間為20秒,再黃燈閃5秒同時主干道的紅燈和支干道的綠燈也繼續(xù)亮。
因此將整個系統(tǒng)分為計時模塊和控制模塊組成。計時模塊中秒模塊主要將50MHZ的時鐘進(jìn)行分頻得到20ns的時鐘信號,再將信號50000000倍得到秒信號??刂颇K由交通燈控制模塊以及黃燈閃爍模塊構(gòu)成。
Verilog HDL語言介紹 5.1 Verilog HDL特點
Verilog HDL語言不僅定義了語法,而且對每個語法結(jié)構(gòu)都定義了清晰地模擬、仿真語義。使用這種語言編寫的模型可以方便地使用Verilog仿真器進(jìn)行驗證。Verilog HDL從C語言繼承了多種操作符和結(jié)構(gòu)。Verilog HDL提供了擴(kuò)展的建模能力和擴(kuò)展模塊。
Verilog HDL之所以成為和VHDL并駕齊驅(qū)的描述語言,以為它有如下特點:
(1)基本邏輯門,例如and、or和nand等都內(nèi)置在語言中。
(2)用戶定義原語(UDP)創(chuàng)建的靈活性。用戶定義的原語既可以是組合邏輯原語,也可以是時序邏輯原語。
(3)開關(guān)級基本結(jié)構(gòu)模型,例如pmos 和nmos等也被內(nèi)置在語言中。(4)提供顯式語言結(jié)構(gòu)指定設(shè)計中的端口到端口的時延及路徑時延和設(shè)計的時序檢查。
(5)可采用三種不同方式或混合方式對設(shè)計建模。這些方式包括:行為描述方式—使用過程化結(jié)構(gòu)建模;數(shù)據(jù)流方式—使用連續(xù)賦值語句方式建模;結(jié)構(gòu)化方式—使用門和模塊實例語句描述建模。
(6)Verilog HDL中有兩類數(shù)據(jù)類型:線網(wǎng)數(shù)據(jù)類型和寄存器數(shù)據(jù)類型。線網(wǎng)類型表示構(gòu)件間的物理連線,而寄存器類型表示抽象的數(shù)據(jù)存儲元件。
(7)能夠描述層次設(shè)計,可使用模塊實例結(jié)構(gòu)描述任何層次。設(shè)計能夠在多個層次上加以描述,從開關(guān)級、門級、寄存器傳送級(RTL)到算法級。
(8)設(shè)計的規(guī)??梢允侨我獾?;語言不對設(shè)計的規(guī)模(大?。┦┘尤魏蜗拗?。Verilog HDL不再是某些公司的專有語言而是IEEE標(biāo)準(zhǔn)。人和機(jī)器都可閱讀Verilog 語言,因此它可作為EDA的工具和設(shè)計者之間的交互語言。
5.2Verilog HDL程序基本結(jié)構(gòu)
模塊是Verilog HDL的基本描述單位,描述某個設(shè)計的功能或結(jié)構(gòu)及與其他模塊通信的外部端口。一個模塊的基本語法如下:
module module_name//模塊名稱
(port_list);//輸入輸出信號列表//說明 reg//寄存器 wire//線網(wǎng)
parameter//參數(shù) input//輸入信號 output//輸出信號 inout//輸入輸出信號 function//函數(shù) task//任務(wù) …//語句
Initial statement Always statement Module instantiation// Gate instantiation// UDP instantiation// Continuous assignment// Endmodule 說明部分用于定義不同的項,例如模塊描述中使用寄存器和參數(shù)、語句定義設(shè)計的功能和結(jié)構(gòu)。說明部分和語句可以放置在模塊的任何地方,但是變量、寄存器、線網(wǎng)和參數(shù)等的說明部分必須在使用前出現(xiàn)。為了使模塊描述清晰和具有良好的可讀性,最好將所有的說明部分放在語句前。
6.系統(tǒng)仿真
本文的仿真是在QuartuslI上進(jìn)行的。QuartuslI 是 Altera 提供的 FPGA/CPLD 開發(fā)集成環(huán)境,Altera 是世界上最大的可編程邏輯器件供應(yīng)商之一。QimrtiisII在21世紀(jì) 初推出,是Altera前一代FPGA/CPLD集成開發(fā)環(huán)境MAX+plusII的更 新?lián)Q代產(chǎn)品,其界面友好,使用便捷。QuartiisII提供了一種與結(jié)構(gòu) 無關(guān)的設(shè)計環(huán)境,使設(shè)計者能方便地進(jìn)行設(shè)計輸入、快速處理和器件 編程。
Altera的QuartusII提供了完整的多平臺設(shè)計環(huán)境,能滿足各 種特定設(shè)計的需要,也是單芯片可編程系統(tǒng)(SOPC)設(shè)計的綜合性環(huán) 境和SOPC開發(fā)的基本設(shè)計工具,并為Altera DSP開發(fā)包進(jìn)行系統(tǒng)模 型設(shè)計提供了集成綜合環(huán)境。
QuartusII包括模塊化的編輯器。編輯器包括的功能模塊有分析 /綜合器、適配器、裝配器、時序分析器、設(shè)計輔助模塊、EDA網(wǎng)表 文件生成器、編輯數(shù)據(jù)接口等。可以通過選擇Start Compilation來運(yùn)行所有的編輯器模塊,也可以選擇單獨運(yùn)行各個模塊。
基于Quartus II的設(shè)計流程:
(1)建立工作庫文件夾和編輯設(shè)計文件(2)創(chuàng)建工程;(3)全程編譯工程;(4)時序仿真;(5)引腳鎖定;
(6)下載至硬件系統(tǒng)驗證。
6.1 系統(tǒng)電路框圖
系統(tǒng)整體電路設(shè)計采用原理圖輸入法,將各個模塊包括子模塊進(jìn)行連接,得到系統(tǒng)的電路框圖如下圖所示。
圖三 系統(tǒng)整體電路圖
6.2設(shè)計結(jié)果仿真
利用Quartus II軟件對本設(shè)計的程序進(jìn)行編譯,得到系統(tǒng)的仿真圖。
交通燈運(yùn)行時時序仿真圖1
交通燈運(yùn)行時時序仿真圖1
7.心得體會
在這次課程設(shè)計中,我再一次的體驗到了細(xì)心對一個編程者的重要性,和程序的規(guī)范性對于程序的重要性,這些平時我們忽略的問題,其實有時候關(guān)乎著我們編程的成功與否的。
在verilog語言中,我們必須注意其與C語言的異同,比如格式和變量定義,還有模塊的調(diào)用,和時鐘信號的應(yīng)用。我覺得需要在以后多加練習(xí),可以對以后的學(xué)習(xí)和工作帶來莫大的幫助。這次的
課程設(shè)計相對以前的較難,其實就是對我們的一次考核,也是一次考驗,它培養(yǎng)了學(xué)生綜合運(yùn)用所學(xué)知識,發(fā)現(xiàn),提出,分析和解決實際問題,鍛煉實踐能力的重要環(huán)節(jié),是對我們實際工作能力的具體訓(xùn)練和考察過程。然而從理論到實踐的轉(zhuǎn)化過程,我在做課程設(shè)計的近一個月時間里,有了更進(jìn)一步的認(rèn)識和了解,要想學(xué)知識要重在實踐,要通過不斷的實際操作才能更好地學(xué)習(xí)。
通過這次課程設(shè)計,我懂得了理論與實際相結(jié)合是很重要的,只有理論知識是遠(yuǎn)遠(yuǎn)不夠的,只有把所學(xué)的理論知識與實踐相結(jié)合起來,從理論中得出結(jié)論,從而提高自己的實際動手能力和獨立思考的能
力。在設(shè)計的過程中遇到問題,可以說得是困難重重,遇到了各種各樣的問題,同時在設(shè)計的過程中發(fā)現(xiàn)了自己的不足之處,對以前所學(xué)過的知解得不夠深刻,掌握得不夠牢固。實踐出真知,通過親自動手制作,使我們掌握的知識不再是紙上談兵。
8.參考文獻(xiàn)
(1)程云長.可編程邏輯器件與VHDL語言[M].北京:科學(xué)出版社,2005(2)黃智偉.全國大學(xué)生電子設(shè)計競賽系統(tǒng)設(shè)計[M].北京:北京航空航天大學(xué)出版社,2006(3)黃智偉.全國大學(xué)生電子設(shè)計競賽電路設(shè)計[M].北京:北京航空航天大學(xué)出版社,2006(4)黃智偉.全國大學(xué)生電子設(shè)計競賽 常用電路模塊制作[M].北京:北京航空航天大學(xué)出版社,2010(5)黃智偉等.基于NI multisim的電子電路計算機(jī)仿真設(shè)計與分析[M].北京:電子工業(yè)出版社,2007(6)黃智偉.印制電路板(PCB)設(shè)計技術(shù)與實踐[M].北京:電子工業(yè)出版社,2009(7)高吉祥等.電子技術(shù)基礎(chǔ)實驗與課程設(shè)計[M].北京:電子工業(yè)出版社,2002(8)潘松.EDA技術(shù)實用教程[M].科學(xué)出版社.2005
7.附件 原程序
`timescale 100ms / 1us //程序中的時間單位和仿真精度。module signal_led(clk, rst_n, traffic_signal_master_red, traffic_signal_master_green, traffic_signal_master_yellow, traffic_signal_slave_red, traffic_signal_slave_green, traffic_signal_slave_yellow);input clk;input rst_n;output reg
traffic_signal_master_red;// 交通信號燈主干道紅燈
output reg
traffic_signal_master_green;// 交通信號燈主干道綠燈
output reg
traffic_signal_master_yellow;// 交通信號燈主干道黃燈 output reg
traffic_signal_slave_red;// 交通信號燈次干道紅燈
output reg
traffic_signal_slave_green;// 交通信號燈次干道綠燈
output reg
traffic_signal_slave_yellow;// 交通信號燈次干道黃燈
reg signal_red_led;reg signal_green_led;reg signal_yellow_led;reg [31:0] traffic_signal_cnt;parameter
LED_ON
= 1'b0;// 1亮
parameter
LED_OFF
= 1'b1;// 0滅
parameter
TIME_CELL
= 32'd50000000;// 時間單元時間 = Time_cell * 20ns(50MHz主頻)parameter START = 32'd0;parameter MASTER_GREEN = TIME_CELL * 20;parameter MASTER_YELLOW_1 = TIME_CELL * 20 + TIME_CELL;parameter MASTER_YELLOW_2 = TIME_CELL * 20 + 2 * TIME_CELL;parameter MASTER_YELLOW_3 = TIME_CELL * 20 + 3 * TIME_CELL;parameter MASTER_YELLOW_4 = TIME_CELL * 20 + 4 * TIME_CELL;parameter MASTER_YELLOW_5 = TIME_CELL * 20 + 5 * TIME_CELL;parameter SLAVE_GREEN = TIME_CELL * 20 + 5 * TIME_CELL + TIME_CELL * 20;parameter SLAVE_YELLOW_1 = TIME_CELL * 20 + 5 * TIME_CELL + TIME_CELL * 20 + TIME_CELL;parameter SLAVE_YELLOW_2 = TIME_CELL * 20 + 5 * TIME_CELL + TIME_CELL * 20 + 2 * TIME_CELL;parameter SLAVE_YELLOW_3 = TIME_CELL * 20 + 5 * TIME_CELL + TIME_CELL * 20 + 3 * TIME_CELL;parameter SLAVE_YELLOW_4 = TIME_CELL * 20 + 5 * TIME_CELL + TIME_CELL * 20 + 4 * TIME_CELL;parameter TOTAL_TIME = TIME_CELL * 20 + 5 * TIME_CELL + TIME_CELL * 20 + 5 * TIME_CELL;
//******************************************************************* // 模塊名稱:時間計數(shù)種子 // 功能描述
//******************************************************************* always @(posedge clk or negedge rst_n)begin if(!rst_n)traffic_signal_cnt <= 32'h0;else if(traffic_signal_cnt == TOTAL_TIME)traffic_signal_cnt <= START;else traffic_signal_cnt <= traffic_signal_cnt+1;end //******************************************************************* // 模塊名稱:LED燈閃爍控制 // 功能描述
//******************************************************************* always @(posedge clk or negedge rst_n)begin if(!rst_n)
begin signal_red_led <= LED_OFF;signal_green_led <= LED_OFF;signal_yellow_led <= LED_OFF;end else begin case(traffic_signal_cnt)START
:
begin signal_red_led <= LED_OFF;signal_green_led <= LED_ON;signal_yellow_led <= LED_OFF;end MASTER_GREEN
:
begin signal_red_led <= LED_OFF;signal_green_led <= LED_ON;signal_yellow_led <= LED_ON;end MASTER_YELLOW_1 :
begin signal_red_led <= LED_OFF;signal_green_led <= LED_ON;signal_yellow_led <= LED_OFF;end MASTER_YELLOW_2 :
begin signal_red_led <= LED_OFF;signal_green_led <= LED_ON;signal_yellow_led <= LED_ON;end MASTER_YELLOW_3 :
begin signal_red_led <= LED_OFF;signal_green_led <= LED_ON;signal_yellow_led <= LED_OFF;end MASTER_YELLOW_4 :
begin signal_red_led <= LED_OFF;signal_green_led <= LED_ON;signal_yellow_led <= LED_ON;end MASTER_YELLOW_5 :
begin signal_red_led <= LED_ON;signal_green_led <= LED_OFF;signal_yellow_led <= LED_OFF;end SLAVE_GREEN
:
begin signal_red_led <= LED_ON;signal_green_led <= LED_OFF;signal_yellow_led <= LED_OFF;end SLAVE_YELLOW_1 :
begin signal_red_led <= LED_ON;signal_green_led <= LED_OFF;signal_yellow_led <= LED_ON;end SLAVE_YELLOW_2 :
begin signal_red_led <= LED_ON;signal_green_led <= LED_OFF;signal_yellow_led <= LED_OFF;end SLAVE_YELLOW_3 :
begin signal_red_led <= LED_ON;signal_green_led <= LED_OFF;signal_yellow_led <= LED_ON;end SLAVE_YELLOW_4 :
begin signal_red_led <= LED_ON;signal_green_led <= LED_OFF;signal_yellow_led <= LED_OFF;end endcase end end //******************************************************************* // 模塊名稱:主從LED輸出 // 功能描述:
//******************************************************************* always @(posedge clk or negedge rst_n)begin if(!rst_n)begin traffic_signal_master_red <= LED_OFF;traffic_signal_master_green <= LED_OFF;traffic_signal_master_yellow <= LED_OFF;traffic_signal_slave_red <= LED_OFF;traffic_signal_slave_green <= LED_OFF;traffic_signal_slave_yellow <= LED_OFF;end else begin traffic_signal_master_red <= signal_red_led;traffic_signal_master_green <= signal_green_led;traffic_signal_master_yellow <= signal_yellow_led;traffic_signal_slave_red <= ~signal_red_led;traffic_signal_slave_green <= ~signal_green_led;traffic_signal_slave_yellow <= signal_yellow_led;end end endmodule
第四篇:基于FPGA的交通燈控制器設(shè)計
數(shù)字系統(tǒng)課程設(shè)計
基于FPGA的交通控制燈設(shè)計
姓名:
學(xué)號:
班級:
摘要
隨著社會的發(fā)展,城市規(guī)模的不斷擴(kuò)大,城市交通成為制約城市發(fā)展的一大因素。人口和汽車日益增長,市區(qū)交通也日益擁擠,人們的安全問題當(dāng)然也日益重要。因此,紅綠交通信號燈成為交管部門管理交通的重要工具之一。有了交通燈,人們的安全出行也有了很大的保障。自從交通燈誕生以來,其內(nèi)部的電路控制系統(tǒng)就不斷的被改進(jìn),設(shè)計方法也開始多種多樣,從而使交通燈顯得更加智能化。尤其是近幾年來,隨著電子與計算機(jī)技術(shù)的飛速發(fā)展,電子電路分析和設(shè)計方法有了很大的改進(jìn),電子設(shè)計自動化也已經(jīng)成為現(xiàn)代電子系統(tǒng)中不可或缺的工具和手段,這些都為交通燈控制系統(tǒng)的設(shè)計提供了一定的技術(shù)基礎(chǔ)。本課程設(shè)計運(yùn)用erilog HDL語言描述交通控制器,通過狀態(tài)機(jī)計數(shù)法,實現(xiàn)設(shè)計所要求的交通燈控制及時間顯示,并最后進(jìn)行了軟件實現(xiàn),達(dá)到了系統(tǒng)要求的功能。
設(shè)計原理
1.1設(shè)計要求
設(shè)計一個交通控制器,用LED顯示燈表示交通狀態(tài),并以7段數(shù)碼顯示器顯示當(dāng)前狀態(tài)剩余秒數(shù) 主干道綠燈亮?xí)r,支干道紅燈亮;反之亦然,二者交替允許通行,主干道每次放行35s,支干道每次放行25s。每次由綠燈變?yōu)榧t燈的過程中,亮光的黃燈作為過渡,黃燈的時間為5s。能進(jìn)行特殊狀態(tài)顯示,特殊狀態(tài)時東西、南北路口均顯示紅燈狀態(tài)。用LED燈顯示倒計時,并且能實現(xiàn)總體清零功能,計數(shù)器由初始狀態(tài)開始計數(shù),對應(yīng)狀態(tài)的顯示燈亮。能實現(xiàn)特殊狀態(tài)的功能顯示,1.2設(shè)計思路和原理
本次設(shè)計是針對十字路口,進(jìn)行南北和東西直行情況下交通燈控制。設(shè)定東西方向為主干道方向,根據(jù)交通燈的亮的規(guī)則,在初始狀態(tài)下四個方向的都為紅燈亮啟,進(jìn)入正常工作狀態(tài)后,當(dāng)主干道上綠燈亮?xí)r,支干道上紅燈亮,持續(xù)35S后,主干道和支干道上的黃燈都亮啟,持續(xù)5S后,主干道上紅燈亮啟,支干道上綠燈亮啟持續(xù)25S,之后主干道和支干道上的黃燈都亮啟5s,一個循環(huán)完成。循環(huán)往復(fù)的直行這個過程。其過程如下圖所示:
0s主干道方向25s綠燈亮30s紅燈亮黃燈亮65s支干道方向0s紅燈亮35s綠燈亮黃燈亮60s65s
圖1.交通燈點亮?xí)r間控制說明
1.3實現(xiàn)方法
本次采用文本編輯法,即利用Verilog HDL語言描述交通控制器,通過狀態(tài)機(jī)計數(shù)法,實現(xiàn)設(shè)計所要求的交通燈控制及時間顯示。設(shè)計中用兩組紅黃綠LED模擬兩個方向上的交通燈,用4個7段數(shù)碼管分別顯示兩個方向上的交通燈剩余時間,控制時鐘由試驗箱上頻率信號提供。
Verilog HDL程序設(shè)計
2.1整體設(shè)計
根據(jù)上章設(shè)計原理,交通燈控制的關(guān)鍵是各個狀態(tài)之間的轉(zhuǎn)換和進(jìn)行適當(dāng)?shù)臅r間延時,根據(jù)狀態(tài)機(jī)的設(shè)計規(guī)范,本次設(shè)計了三個狀態(tài)之間的循環(huán)轉(zhuǎn)化,其真值表及狀態(tài)轉(zhuǎn)化圖如下所示:
狀狀00狀狀00狀狀10狀狀11狀狀01狀狀01狀狀11狀狀10狀狀狀狀狀狀狀狀狀狀001狀狀狀狀狀010狀狀狀狀狀100狀狀狀狀狀010狀狀狀狀狀狀狀狀狀狀100狀狀狀狀狀010狀狀狀狀狀001狀狀狀狀狀010
圖2.交通燈控制狀態(tài)轉(zhuǎn)化
說明:該狀態(tài)圖為交通燈在正常情況下的狀態(tài)轉(zhuǎn)化圖,進(jìn)入控制后,狀態(tài)00時主干道綠燈及支干道紅燈亮起,進(jìn)入狀態(tài)01后兩路黃燈亮起,狀態(tài)11時主干道紅燈及支干道綠燈亮起。進(jìn)入10狀態(tài)兩路黃燈亮起。結(jié)束一個循環(huán),從00狀態(tài)重新開始循環(huán)。
為實現(xiàn)控制與顯示的功能,需要設(shè)計交通燈點亮順序控制程序,倒數(shù)計時程序,七段數(shù)碼管顯示程序,數(shù)碼管顯示掃描程序,其系統(tǒng)結(jié)構(gòu)圖如下所示:
holdrst狀狀狀狀1Hz狀狀狀狀狀狀狀狀狀狀狀狀狀狀狀狀狀狀狀clk1KHz狀狀狀狀狀狀狀1Hz狀狀狀狀狀狀狀狀狀狀狀狀狀狀狀狀狀狀狀狀狀 圖3.交通燈控制系統(tǒng)結(jié)構(gòu)圖
其中rst為復(fù)位信號,clk為時鐘信號,hold為特殊情況控制信號,輸入hold時兩個方向紅燈無條件亮起。
2.2 具體設(shè)計
根據(jù)整體設(shè)計要求,編寫各個功能部分Verilog HDL程序,設(shè)置各輸入輸出變量說明如下 clk: 為計數(shù)時鐘; qclk:為掃描顯示時鐘;
en: 使能信號,為1 的話,則控制器開始工作; rst: 復(fù)位信號,為1的話,控制及技術(shù)回到初始狀態(tài);
hoid:特殊情況控制信號,為1的話,則兩個方向無條件顯示為紅燈;
light1: 控制主干道方向四盞燈的亮滅;其中,light1[0]~light[2],分別控制主干道方向的 綠燈、黃燈和紅燈;
light2: 控制支干道方向四盞燈的亮滅;其中,light2[0] ~ light2[2],分別控制支干道方向的 綠燈、黃燈和紅燈;
num1: 用于主干道方向燈的時間顯示,8 位,可驅(qū)動兩個數(shù)碼管; num2: 用于支干道方向燈的時間顯示,8 位,可驅(qū)動兩個數(shù)碼管; counter:用于數(shù)碼管的譯碼輸出; st1,st2:數(shù)碼管掃描信號。輸入輸出及中間變量設(shè)置如下:
module traffic(en,clk,qclk,rst,rst1,hold,num1,num2,light1,light2,counter,st1,st2);input en,clk,qclk,rst,hold,rst1;output st1,st2;output[7:0] num1,num2;output[6:0]counter;output[2:0] light1,light2;reg tim1,tim2,st1,st2;reg[1:0]state1,state2,ste;reg[2:0]light1,light2;reg[3:0]num;reg[6:0]counter;reg[7:0] num1,num2;reg[7:0] red1,red2,green1,green2,yellow1,yellow2;
1.二極管點亮控制
該部分程序的作用是根據(jù)計數(shù)器的計數(shù)值控制發(fā)光二極管的亮、滅,以及輸出倒計時數(shù)值給七段數(shù)碼管的譯碼電路。此外,當(dāng)檢測到特殊情況(hold=‘1’)發(fā)生時,無條件點亮紅燈的二極管,當(dāng)檢測到復(fù)位信號,兩個方向計數(shù)與控制回復(fù)到00狀態(tài)。因為主、支干道兩個方向二極管點亮的順序與延遲時間不同,顧編寫兩個獨立的部分來控制,具體程序如下: 1)主干道方向 always @(posedge clk)begin
if(rst)//復(fù)位與特殊情況控制
begin light1<=3'b001;num1<=green1;end else if(hold)begin light1<=3'b100;num1<=green1;end else if(en)
begin //使能有效開始控制計數(shù)
if(!tim1)//
begin //主干道交通燈點亮控制
tim1<=1;
case(state1)
2'b00:begin num1<=green1;light1<=3'b001;state1<=2'b01;end
2'b01:begin num1<=yellow1;light1<=3'b010;state1<=2'b11;end
2'b11:begin num1<=red1;light1<=3'b100;state1<=2'b10;end
2'b10:begin num1<=yellow1;light1<=3'b010;state1<=2'b00;end
default:light1<=3'b100;
endcase
end 2)支干道方向
always @(posedge clk)begin
if(rst)//復(fù)位與特殊情況控制
begin
light2<=3'b100;
num2<=red2;
end
else if(hold)
begin
light2<=3'b100;
num2<=red2;
end
else if(en)
begin
if(!tim2)
begin
tim2<=1;
case(state1)
2'b00:begin num2<=red2;light2<=3'b100;state2<=2'b01;end
2'b01:begin num2<=yellow1;light2<=3'b010;state2<=2'b11;end
2'b11:begin num2<=green2;light2<=3'b001;state2<=2'b10;end
2'b10:begin num2<=yellow2;light2<=3'b010;state2<=2'b00;end
default:light2<=3'b100;
endcase
end
2.倒數(shù)計時
該部分程序完成二極管發(fā)光時延的計數(shù),并將計數(shù)結(jié)果送到數(shù)碼管顯示電路,每切換到一個狀態(tài),計數(shù)器的初值都被重置,以實現(xiàn)不同顏色二極管不同的時延要求。本次設(shè)計直接用邏輯運(yùn)算完成2位十進(jìn)制數(shù)的計數(shù),未采用分位器的設(shè)計。因為主、支干道上計數(shù)器的結(jié)構(gòu)完全相同,顧只列出一路的程序,其具體程序如下所示:
always @(posedge clk)begin else begin //倒數(shù)計時
if(num1>0)
if(num1[3:0]==0)
begin
num1[3:0]<=4'b1001;
num1[7:4]<=num1[7:4]-1;
end
else num1[3:0]<=num1[3:0]-1;
if(num1==1)tim1<=0;
end
end
else
begin
light1<=3'b010;
num1=2'b00;
tim1<=0;
end end
3.數(shù)碼管的譯碼及掃描顯示
該段程序主要完成4個7段數(shù)碼管的譯碼顯示及掃描,使系統(tǒng)能正常顯示主、支干道兩個方向上的剩余時間。譯碼的時鐘頻率要低,為Hz級。掃描的時鐘頻率要高,最低不得小于人眼分辨頻率50Hz,具體程序如下所示: always @(posedge qclk)begin //數(shù)碼管掃描
if(rst1)
begin
st1=0;
st2=0;
end else
begin
case({st2,st1})
2'b00:begin num<=num1[3:0];{st2,st1}<=2'b01;end
2'b01:begin num<=num1[7:4];{st2,st1}<=2'b10;end
2'b10:begin num<=num2[3:0];{st2,st1}<=2'b11;end
2'b11:begin num<=num2[7:4];{st2,st1}<=2'b00;end
endcase
end end always @(posedge qclk)begin //數(shù)碼管譯碼顯示 case(num)4'b0000: counter<=7'b0111111;//0 4'b0001: counter<=7'b0000110;//1 4'b0010: counter<=7'b1011011;//2 4'b0011: counter<=7'b1001111;//3 4'b0100: counter<=7'b1100110;//4 4'b0101: counter<=7'b1101101;//5 4'b0110: counter<=7'b1111101;//6 4'b0111: counter<=7'b0000111;//7 4'b1000: counter<=7'b1111111;//8 4'b1001: counter<=7'b1101111;//9 default: counter<=7'b0111111;//0 endcase end endmodule 總體程序見程序清單所示
仿真與硬件調(diào)試
3.1 波形仿真
在QuartursⅡ軟件下創(chuàng)建工程,新建編輯設(shè)計文件,將程序輸入,整體編譯后,新建波形仿真文件。設(shè)置仿真時間,時鐘周期,輸入輸出端口,進(jìn)行波形仿真。具體仿真波形圖及說明如下所示: 仿真截止時間:100us; 時鐘:clk 1us,qclk 0.1us 1.正常工作時波形仿真圖
圖4.正常工作時波形仿真圖
圖形說明
波形仿真主要完成了控制與計數(shù)以及數(shù)碼管顯示的波形圖。en為低電品時,計數(shù)器置初值,高電平時開始正??刂婆c計數(shù)??刂瓢l(fā)光二極管首次輸出為“l(fā)ight1=001,light2=100”,表示主干道路綠燈亮,支桿道路紅燈亮,計數(shù)器num1和num2從“00110101”開始遞減計數(shù),計數(shù)至“00000000”時,進(jìn)入下一個狀態(tài),控制輸出量為light=010,light2=010,表示主、支干道黃燈均亮起,計數(shù)器num1和num2從“00000101”開始計數(shù)遞減,計數(shù)至”00000000”時進(jìn)入下一個狀態(tài),light=100,light2=001,表示主干道路紅燈亮,支桿道路綠燈亮。Counter根據(jù)num1,num2變化隨時鐘上升沿輸出譯碼后的數(shù)據(jù)。由于屏幕顯示大小有限,未仿真出一個完整周期。
2.特殊情況仿真波形
圖5.特殊情況仿真波形
圖形說明
當(dāng)hold輸入高電平時,在時鐘上升沿的控制下,light 1與light2被強(qiáng)制置位為”100”,表示兩路紅燈均亮起
3.復(fù)位情況仿真波形
圖6.復(fù)位情況仿真波形
圖形說明
當(dāng)rst輸入高電平時,在時鐘上升沿控制下,計數(shù)與控制都回到00狀態(tài),即light1=001,light2=100,計數(shù)器num1和num2從“00110101”開始遞減計數(shù)。3.2 硬件調(diào)試
完成時序仿真確認(rèn)無誤后,進(jìn)行實驗箱管腳設(shè)置,注意設(shè)置完成后一定要再進(jìn)行一次全局仿真,使程序真正對應(yīng)于硬件輸出輸出。具體連接說明如下所示
輸入變量:rst、clk、qclk、hold、en 其中en,hold,rst接”0-1”撥碼開關(guān),以穩(wěn)定的輸出可變化的電平。計數(shù)時鐘clk接實驗箱上1Hz時鐘,掃描顯示時鐘qclk接125Khz時鐘。
輸出變量:light1[2:0]、light2[2:0]、counter[6:0]、st1、st2 其中l(wèi)ight1[0]、light2[0]分別接綠色的發(fā)光二極管;light1[1]、light2[1] 分別接黃色的發(fā)光二極管;light1[2]、light2[2]分別接紅色的發(fā)光二極管。counter[0]~counter[6],分別接七段數(shù)碼管的a~f,st1、st2分別接試驗箱上”4-16”譯碼器的低兩位。
完成接線后將程序燒寫到芯片上,開始功能調(diào)試。分辨改變使能信號,復(fù)位信號以及特殊情況信號,觀察數(shù)碼管以及發(fā)光二級管情況。
程序清單
module traffic(en,clk,qclk,rst,rst1,hold,num1,num2,light1,light2,counter,st1,st2);input en,clk,qclk,rst,hold,rst1;output st1,st2;output[7:0] num1,num2;output[6:0]counter;output[2:0] light1,light2;reg tim1,tim2,st1,st2;reg[1:0]state1,state2,ste;reg[2:0]light1,light2;reg[3:0]num;reg[6:0]counter;reg[7:0] num1,num2;reg[7:0] red1,red2,green1,green2,yellow1,yellow2;
always @(en)if(!en)begin //設(shè)置計數(shù)初值 green1<=8'b00110101;red1<=8'b00100101;yellow1<=8'b00000101;green2<=8'b00100101;red2<=8'b00110101;yellow2<=8'b00000101;end
always @(posedge clk)begin if(rst)//復(fù)位與特殊情況控制
begin
light1<=3'b001;num1<=green1;
end else if(hold)
begin
light1<=3'b100;
num1<=green1;
end
else if(en)
begin //使能有效開始控制計數(shù)
if(!tim1)//開始控制
begin //主干道交通燈點亮控制
tim1<=1;
case(state1)
2'b00:begin num1<=green1;light1<=3'b001;state1<=2'b01;end
2'b01:begin num1<=yellow1;light1<=3'b010;state1<=2'b11;end
2'b11:begin num1<=red1;light1<=3'b100;state1<=2'b10;end
2'b10:begin num1<=yellow1;light1<=3'b010;state1<=2'b00;end
default:light1<=3'b100;
endcase
end
else
begin //倒數(shù)計時
if(num1>0)
if(num1[3:0]==0)
begin
num1[3:0]<=4'b1001;
num1[7:4]<=num1[7:4]-1;
end
else num1[3:0]<=num1[3:0]-1;
if(num1==1)tim1<=0;
end
end
else
begin
light1<=3'b010;
num1=2'b00;
tim1<=0;
end
end
always @(posedge clk)begin
if(rst)//復(fù)位與特殊情況控制
begin
light2<=3'b100;
num2<=red2;
end
else if(hold)
begin
light2<=3'b100;
num2<=red2;
end
else if(en)
begin
if(!tim2)
begin
tim2<=1;
case(state1)
2'b00:begin num2<=red2;light2<=3'b100;state2<=2'b01;end
2'b01:begin num2<=yellow1;light2<=3'b010;state2<=2'b11;end
2'b11:begin num2<=green2;light2<=3'b001;state2<=2'b10;end
2'b10:begin num2<=yellow2;light2<=3'b010;state2<=2'b00;end
default:light2<=3'b100;
endcase
end
else
begin //倒數(shù)計時
if(num2>0)
if(num2[3:0]==0)
begin
num2[3:0]<=4'b1001;
num2[7:4]<=num2[7:4]-1;
end
else num2[3:0]<=num2[3:0]-1;
if(num2==1)tim2<=0;
end
end
else
begin
tim2<=0;
state2<=2'b00;
light2<=3'b010;
end
end
always @(posedge qclk)begin //數(shù)碼管掃描
if(rst1)
begin
st1=0;
st2=0;
end else
begin
case({st2,st1})
2'b00:begin num<=num1[3:0];{st2,st1}<=2'b01;end
2'b01:begin num<=num1[7:4];{st2,st1}<=2'b10;end
2'b10:begin num<=num2[3:0];{st2,st1}<=2'b11;end
2'b11:begin num<=num2[7:4];{st2,st1}<=2'b00;end
endcase
end end always @(posedge qclk)begin //數(shù)碼管譯碼顯示 case(num)4'b0000: counter<=7'b0111111;//0 4'b0001: counter<=7'b0000110;//1 4'b0010: counter<=7'b1011011;//2 4'b0011: counter<=7'b1001111;//3 4'b0100: counter<=7'b1100110;//4 4'b0101: counter<=7'b1101101;//5 4'b0110: counter<=7'b1111101;//6 4'b0111: counter<=7'b0000111;//7 4'b1000: counter<=7'b1111111;//8 4'b1001: counter<=7'b1101111;//9 default: counter<=7'b0111111;//0 endcase end endmodule
總結(jié)
在設(shè)計中采用V erilog HDL語言設(shè)計交通燈控制系統(tǒng), 借助其功能強(qiáng)大的語言結(jié)構(gòu), 簡明的代碼描述復(fù)雜控制邏輯設(shè)計, 與工藝無關(guān)特性, 在提高工作效率的同時達(dá)到求解目的, 并可以通過V erilog HDL 語言的綜合工具進(jìn)行相應(yīng)硬件電路生成, 具有傳統(tǒng)邏輯設(shè)計方法所無法比擬的優(yōu)越性。
在設(shè)計過程中,覺得最難的部分是波形仿真部分,雖然程序編譯通過但仿真出不了正確的波形,不是計數(shù)器無法正常計數(shù),就是控制輸出無法進(jìn)入到下一個狀態(tài),每次出現(xiàn)問題就必須返回重新修改程序。實踐證明,在編寫一個較復(fù)雜的程序時,一開始一定要畫流程圖,弄清楚各個功能及實現(xiàn)它們的邏輯算法,做到心中有數(shù)后在開始下筆寫編寫程序。在編寫的時候要尤其要注意語言的規(guī)范,如本次設(shè)計中編寫的V erilog在Quartus8.1中可以正常生成時序圖,而在低版本的軟件中卻無法生成,原因就是語言使用不規(guī)范,在解決這個問題時我總結(jié)了一些經(jīng)驗,首先程序要邏輯清晰,簡潔明了,避免不必要的嵌套與條用,其次要適當(dāng)?shù)亟o程序加上注解文字,提高可讀性,以方便之后的程序出錯時進(jìn)行查找,最后充分利用仿真軟件提供的各項編譯工具與報錯消息,按圖索驥,有方向的完成程序調(diào)試。
完成仿真后進(jìn)行,進(jìn)行試驗箱上的硬件調(diào)試,該步驟主要是要求細(xì)心,按照引腳清單,逐一完成連線,本次設(shè)計用到兩個時鐘輸入,注意一定要選擇合適頻率的時鐘,以便達(dá)到期望的效果。注意觀察實物的現(xiàn)象,看是否滿足設(shè)計要求,不滿足時檢查是硬件問題還是程序問題,如果是程序問題,在修改完之后必須要重新編譯,重新燒入。不斷排查錯誤,直至達(dá)到滿意的效果。
通過這次課程設(shè)計,熟悉了簡單EDA設(shè)計的整個流程,加深了對Verilog HDL硬件描述語言的理解,提高了動手能力,并且鍛煉了自己的耐心,收獲頗豐,我會把在本次課程設(shè)計中學(xué)到的東西應(yīng)用到今后的工作學(xué)習(xí)中。
參考資料
[1] 夏宇聞.復(fù)雜數(shù)字電路與系統(tǒng)的V erilog HDL設(shè)計技術(shù) [M ].北京: 北京航空航天大學(xué)出版社, 1998 [2] 郭梯云.移動通信[M ].西安: 西安電子科技大學(xué)出版社, 1995 [3] [法]M ichelMouly, M arie Bernadet te Pautet1GSM 數(shù)字移動通信系統(tǒng)[M ].駱健霞, 顧龍信, 徐云霄譯.北京: 電子工業(yè)出版社, 1996 [4] 張毅剛, 喬立巖.虛擬儀器軟件開發(fā)環(huán)境L abW indow s?CV I 610 編程指南[M ].北京: 機(jī)械工業(yè)出版社, 2002 [5] 劉國權(quán).GSM 手機(jī)的測試[J ].中國無線電管理, 2003 [6] 俞定玖, 劉湘慧.GSM 數(shù)字蜂窩移動交換系統(tǒng)測試[J ].電信科學(xué), 2000 [7] 張明.V erilog HDL 實用教程[M ].成都: 電子科技大學(xué)出版社, 1999 [8] Hyde D C.Bucknell Handbook on V erilog HDL 1Computer Science Department, Bucknell U niversity L ew is burg, 1995 [9] 康華光.電子技術(shù)基礎(chǔ)(數(shù)字部分)[M ].北京: 高等教育出版社, 1988
第五篇:基于FPGA的交通燈控制電路的設(shè)計
編號:
EDA技術(shù)
實訓(xùn)(論文)說明書
題 目: 交通燈控制電路的設(shè)計 院(系): 信息與通信學(xué)院 專 業(yè): 電子信息工程 學(xué)生姓名: 學(xué) 號: 指導(dǎo)教師:
2013年月日
桂林電子科技大學(xué)實訓(xùn)說明書用紙
摘要
EDA工具對于電子設(shè)計人員來說極其重要,它可以在電子設(shè)計的各個階段、層次進(jìn)行計算機(jī)模擬驗證,確保設(shè)計的準(zhǔn)確性,可縮短設(shè)計周期,降低設(shè)計成本。交通燈可以實現(xiàn)十字路口紅綠燈的自動控制?;贔PGA的交通燈設(shè)計系統(tǒng)具有可靠性強(qiáng)、實時快速擦寫、運(yùn)算速度高、故障率低、電路簡單,且體積小的特點。本設(shè)計采用的是Altera公司CycloneII系列的EP2C5T144芯片作為核心最小系統(tǒng),它可以方便嵌入到實際的交通燈應(yīng)用系統(tǒng)中,可以完成簡單的邏輯控制、數(shù)據(jù)采集、信號處理、數(shù)學(xué)計算等功能;使用QuartusII軟件作為開發(fā)平臺;采用自頂向下的設(shè)計思路對系統(tǒng)進(jìn)行模塊化設(shè)計和綜合,并通過波形仿真和硬件實現(xiàn)兩種方式實現(xiàn)并驗證交通燈的功能。關(guān)鍵詞:交通燈、EDA、FPGA
桂林電子科技大學(xué)實訓(xùn)說明書用紙
Abstract EDA tools for electronic design personnel is very important, it can be in the electronic design of each stage, levels of computer simulation verification, to ensure the accuracy of the design, can shorten the design cycle, reduce design cost.The traffic light can realize intersection traffic light automatic control.Based on the FPGA of traffic light design system has the reliability, real-time fast operation speed is high, integration.it, low failure rate, circuit is simple, and the characteristics of small volume.This design USES is Altera company CycloneII series of EP2C5T144 chip as the core minimum system, it can be convenient to the actual traffic lights embedded application system, can complete the simple logic control, data acquisition, signal processing, mathematical calculations, etc;Use QuartusII software as a development platform, Using the top-down design idea of system modular design and comprehensive, and through the waveform simulation and hardware realization two ways to realize and verify the function of the traffic lights.Key words: traffic lights;EDA;FPGA
桂林電子科技大學(xué)實訓(xùn)說明書用紙
引言
“EDA技術(shù)”是一門實踐性和實用性都很強(qiáng)的課程,學(xué)習(xí)的目的在于應(yīng)用。本設(shè)計實訓(xùn)是配合“EDA技術(shù)”課堂教學(xué)的一個重要的實踐教學(xué)環(huán)節(jié),在本課程設(shè)計指導(dǎo)書中列舉了一些常用的小型設(shè)計系統(tǒng),旨在起到鞏固課堂和書本上所學(xué)知識,加強(qiáng)綜合能力,提高系統(tǒng)設(shè)計水平,啟發(fā)創(chuàng)新思想的效果。
1設(shè)計任務(wù)與要求
1.1本綜合設(shè)計實訓(xùn)任務(wù)的內(nèi)容和要求
① 用EDA實訓(xùn)儀上的4只八段數(shù)碼管分別顯示道路東西和南北通行和禁止的倒計時時間。
② 能設(shè)置道路東西和南北兩側(cè)通行和禁止的倒計時時間,最大設(shè)置時間為99秒,最小設(shè)置時間為1秒。
③ 交通燈用紅、綠、黃三種發(fā)光二極管(LED)顯示控制的結(jié)果。④ 紅、綠、黃燈顯示的次序應(yīng)符合實際交通道路控制的要求。系統(tǒng)概述及設(shè)計原理
2.1 系統(tǒng)的主要功能
交通燈控制電路是用于城市交通疏導(dǎo)的管理系統(tǒng),它是現(xiàn)代城市交通監(jiān)控指揮系統(tǒng)中最重要的組成部分。交通信號燈指揮著人和各種車輛的安全運(yùn)行,實現(xiàn)紅、黃、綠燈的自動指揮是城鄉(xiāng)交通管理現(xiàn)代化的重要課題。在城鄉(xiāng)街道的十字交叉路口,為了保證交通秩序和行人安全,一般在每條道路上各有一組紅、黃、綠交通信號燈。交通燈控制電路自動控制十字路口兩組紅、黃、綠交通燈的狀態(tài)轉(zhuǎn)換,指揮各種車輛和行人安全通行,實現(xiàn)十字路口城鄉(xiāng)交通管理自動化。設(shè)計一個十字路口交通控制器,方向分為東南西北四個方向。東西方向的紅綠燈狀態(tài)一樣,南北方向的紅綠燈狀態(tài)一樣。每個方向上,有四盞燈,分別是左轉(zhuǎn)燈、紅燈、綠燈和黃燈。左拐燈亮表示左轉(zhuǎn)車輛可以通行;紅燈亮表示左轉(zhuǎn)和直行車輛禁行;綠燈亮表示直行車輛和右轉(zhuǎn)的車輛可以通行;黃燈亮表示左轉(zhuǎn)和直行的車輛即將禁行。
本論文簡要介紹了FPGA器件的特點和設(shè)計意義,以QuartusII軟件為開發(fā)平臺,通過VHDL硬件描述語言以及原理圖的輸入方式來設(shè)計交通燈。交通燈控制器用于自動控制十字路口交通燈和計時器。
系統(tǒng)的主要功能模塊方框圖如圖2-1所示
桂林電子科技大學(xué)實訓(xùn)說明書用紙
圖2-1 系統(tǒng)主要功能模塊
2.2交通燈的設(shè)計原理
交通燈控制電路的原理框圖如圖1.3所示。其中,clkgen是分頻器,將EDA實訓(xùn)儀主板提供的20MHz的主頻經(jīng)20000000分頻后,得到電路所需的1Hz(秒)時鐘。Cnt10de(兩個)是十進(jìn)制減法計數(shù)器,產(chǎn)生道路東西和南北通行和禁止的倒計時時間。Contr是控制電路,控制整個系統(tǒng)的工作??刂破鹘邮盏褂嫊r的結(jié)果,當(dāng)?shù)褂嫊r歸0時,改變電路的控制模式,輸出倒計時的初始時間和交通燈亮滅控制信號。
圖2-2 交通燈控制電路的原理圖 系統(tǒng)各個模塊的的設(shè)計與仿真
3.1 分頻器模塊的設(shè)計
由于采用的FPGA芯片的時鐘頻率是50MHz,需要將其分頻為1Hz。該模塊即是實現(xiàn)50M的分頻,將頻率變?yōu)?Hz的脈沖波,從而得到周期為1s的脈沖波。如果要真正的實現(xiàn)分頻50M,在仿真結(jié)果圖中是很難觀察的,甚至是沒有辦法驗證的,故在仿真過程中,將分頻的倍數(shù)變小,變?yōu)?0分頻,這樣從圖中可容易的得到并驗證對時鐘輸入信號的20分頻,如圖3-1所示,Reset是復(fù)位信號,CLK_50MHz是輸入時鐘頻率,CLK_1Hz是
桂林電子科技大學(xué)實訓(xùn)說明書用紙
輸出時鐘頻率,從圖中可以看出,輸出頻率CLK_1Hz確實是輸入時鐘頻率CLK_50MHz的20分頻。
圖3-1 分頻器仿真圖
3.2 狀態(tài)控制模塊的設(shè)計
狀態(tài)控制模塊根據(jù)輸入CLK_1Hz的脈沖信號輸出不同的STATUS值,下游的模塊依據(jù)STATUS的值來確定紅綠燈的狀態(tài);于此同時對倒計時信號賦初值。在狀態(tài)控制模塊仿真圖中,輸入信號CLK是一個頻率為1Hz的時鐘脈沖信號,RESET是復(fù)位信號;輸出信號STATUS是狀態(tài)轉(zhuǎn)換信號,控制著下游交通信號燈顯示模塊的顯示情況;LOAD_EW、LOAD_SN是東西、南北方向倒計時開始控制信號,DJS_EW、DJS_SN是東西、南北方向倒計時間信號。其仿真結(jié)果圖如圖3-2所示,由圖可得,STATUS共有000(S1)、001(S2)、010(S3)、011(S4)、100(S5)、101(S6)共6個狀態(tài),80s為紅燈和左轉(zhuǎn)燈的倒計時間,45s為綠燈的倒計時間,5s是黃燈的倒計時間,和狀態(tài)轉(zhuǎn)換表的狀態(tài)一致。
圖3-2 狀態(tài)控制模塊仿真圖
3.3 交通燈信號燈顯示模塊的設(shè)計
交通信號燈顯示模塊根據(jù)輸入的STATUS信號,輸出對應(yīng)的紅綠黃燈信號,并直接驅(qū)動交通信號燈的亮滅。在交通燈信號燈顯示模塊程序仿真結(jié)果圖中,STATUS為輸入信號,而它依賴于狀態(tài)控制模塊產(chǎn)生的信號STATUS信號,一種六種狀態(tài),依次為000(S1)、001(S2)、010(S3)、011(S4)、100(S5)、101(S6);EW_LRGY(8位)是東西方向上交通信號燈的狀態(tài),SN_LRGY(8位)是南北方向上交通信號燈的狀態(tài),依次為左轉(zhuǎn)、紅、綠、黃,對應(yīng)著EW_LRGY、SN_LRGY的前四位,‘1’表示點亮,‘0’表示熄滅,后四位均為0,表示四個燈的陰極接負(fù)極。例如,在STATUS為001時,對應(yīng)的是東西方向紅燈亮,南北方向綠燈亮,仿真結(jié)果符合預(yù)期,完全正確。其仿真圖如3-3所示:
圖3-3 信號燈顯示模塊仿真圖
桂林電子科技大學(xué)實訓(xùn)說明書用紙
3.4東西方向倒計時模塊設(shè)計
東西方向倒計時模塊用來接收狀態(tài)控制模塊的輸出并作為初值,每檢測到一個CLK脈沖信號,就進(jìn)行減一動作,最后把減一結(jié)果輸出。在該模塊仿真圖中,CLK為1Hz的輸入信號,LOAD_EW為計數(shù)器的裝載信號,當(dāng)其為高電平時,將輸入信號DJS_EW_IN的值裝載到計數(shù)器中,并開始進(jìn)行減一操作,每遇一個CLK脈沖,進(jìn)行一次減一操作,并將結(jié)果輸出,由于輸入的時鐘頻率是1Hz,所以顯示的時間間隔是1s,與現(xiàn)實生活中的時間保持一致。其仿真結(jié)果如圖3-4所示,由圖可得,該模塊首先將80秒的倒計時信號裝載進(jìn)去,并進(jìn)行減一操作。
圖3-4 東西方向倒計時仿真圖
3.5 南北方向倒計時模塊設(shè)計
南北方向倒計時模塊用來接收狀態(tài)控制模塊的輸出并作為初值,每檢測到一個CLK脈沖信號,就進(jìn)行減一動作,最后把減一結(jié)果輸出。在該模塊仿真圖中,CLK為1Hz的輸入信號,LOAD_SN為計數(shù)器的裝載信號,當(dāng)其為高電平時,將輸入信號DJS_SN_IN的值裝載到計數(shù)器中,并開始進(jìn)行減一操作,每遇一個CLK脈沖,進(jìn)行一次減一操作,并將結(jié)果輸出,由于輸入的時鐘頻率是1Hz,所以顯示的時間間隔是1s,與現(xiàn)實生活中的時間保持一致。其仿真結(jié)果如圖3-5所示,由圖可得,該模塊將45秒的倒計時信號裝載進(jìn)去,并進(jìn)行減一操作。
圖3-5南北方向倒計時仿真圖
3.6 譯碼模塊設(shè)計
譯碼模塊程序用來將輸入的兩位倒計時數(shù)值,分解成兩個整形數(shù)值,以此供后面的譯碼顯示模塊譯碼顯示。在譯碼程序TO_8421_BCD模塊仿真圖中,DJS_EW_OUT,DJS_SN_OUT為上一倒計時模塊的輸出信號,其范圍在0~80,所有倒計時的范圍都包含其內(nèi);DJS_EW_OUT_SW,DJS_EW_OUT_GW,DJS_SN_OUT_SW,DJS_SN_OUT_GW為輸出信號,其范圍為0~9,代表了各個方向的倒計時的十位和個位,且數(shù)碼管所有顯示數(shù)字的范圍均在其內(nèi)。例如圖中DJS_EW_OUT的值不斷變化,相應(yīng)的依次將其分解為十位(DJS_EW_OUT_SW)和個位(DJS_EW_OUT_GW),并依次遞減,仿真結(jié)果符合預(yù)期,完全正確。仿真結(jié)果如圖3-6所示:
桂林電子科技大學(xué)實訓(xùn)說明書用紙
圖3-6 譯碼仿真結(jié)果圖
3.7 譯碼顯示模塊設(shè)計
譯碼顯示模塊將上一模塊譯碼模塊輸出的四個一位數(shù)譯碼成相對應(yīng)的七位數(shù)碼管段碼,完成倒計時的譯碼和顯示。在譯碼顯示模塊仿真圖中,DJS_ EW_OUT_ SW,DJS_EW_OUT_GW,DJS_SN_OUT_SW,DJS_SN_OUT_GW是四位的輸入信號,也是上一模塊TO_8421_BCD的輸出信號,它們的范圍為數(shù)字0~9,DJS_EW_ OUT_SW1,DJS_ EW_ OUT_GW1,DJS_SN_OUT_SW1,DJS_SN_OUT_GW1對應(yīng)的是相應(yīng)的七位數(shù)碼管顯示段碼的值。圖中輸出信號的值隨著輸入信號的變化而相應(yīng)的變化,例如DJS_EW_OUT_SW為7,DJS_EW_OUT_GW為5時,DJS_EW_OUT_SW1為00000111(a、b、c、d、e、f、g依次對應(yīng)著1110000,最高位的0表示是數(shù)碼管的類型是共陰的),表示數(shù)碼管顯示7,DJS_EW_OUT_GW1為01101101,表示數(shù)碼管顯示5。仿真完全正確,符合預(yù)期。其仿真結(jié)果如圖3-7所示:
圖3-7 譯碼顯示模塊仿真圖
3.8 頂層文件模塊設(shè)計
頂層設(shè)計采用VHDL語言描述方式實現(xiàn),并在工程文件仿真過后通過工具菜單自動生成原理圖文件,從而是設(shè)計原理更加清晰明朗。
在頂層設(shè)計VHDL描述中,共包含7個元件,分別是:
1、分頻器模塊,2、狀態(tài)控制模塊,3、交通信號燈顯示模塊,4、東西方向倒計時模塊設(shè)計,5、南北方向倒計時模塊設(shè)計,6、譯碼模塊設(shè)計,7、譯碼顯示模塊設(shè)計。這7個模塊經(jīng)過程序設(shè)計、編譯仿真,結(jié)果均能夠達(dá)到設(shè)計要求。最后在頂層設(shè)計中,通過元件例化語句將這7個模塊連接起來,生成頂層文件。在頂層設(shè)計中,RESET是復(fù)位信號,輸入的時鐘頻率CLK是50MHz,經(jīng)過分頻50M的分頻器后,變?yōu)轭l率為1Hz的時鐘信號,周期為1s,用此時鐘信號來控制整個系統(tǒng)的步調(diào),與現(xiàn)實生活中交通燈的步調(diào)保持一致。EW_LRGY、SN_LRGY分別為東西和南北方向上交通信號燈的狀態(tài),EW_DJS_DISPLAY、SN_DJS_DISPLAY為東西
桂林電子科技大學(xué)實訓(xùn)說明書用紙
和南北方向紅綠燈倒計時間。另外,所有的數(shù)碼管和二極管均為共陰極顯示。例如,在EW_LRGY為01000000(即東西方向紅燈亮)、SN_LRGY為10000000(即南北方向左轉(zhuǎn)燈亮)時,EW_DJS_DISPLAY的前八位表示倒計時的十位,后八位表示倒計時的個位;圖中EW_DJS_DISPLAY的前八位都是00000111表示7,后八位01111101表示6,后八位01101101表示5,后八位01100110表示4;SN_DJS_DISPLAY的前八位是01001111表示3,后八位01011011表示2,后八位00000110表示1,后八位00111111表示0,以上表明紅綠燈和倒計時時間顯示符合預(yù)期。仿真結(jié)果如圖3-8所示:
圖3-8 頂層文件波形仿真圖 實訓(xùn)心得體會
本次EDA技術(shù)實訓(xùn)的交通燈采用的是Altera公司CycloneII系列的EP2C5T144芯片作為核心最小系統(tǒng),它可以方便嵌入到實際的交通燈應(yīng)用系統(tǒng)中,可以完成簡單的邏輯控制、數(shù)據(jù)采集、信號處理、數(shù)學(xué)計算等功能;使用QuartusII軟件作為開發(fā)平臺;采用自頂向下的設(shè)計思路對系統(tǒng)進(jìn)行模塊化設(shè)計和綜合,并通過波形仿真和硬件實現(xiàn)兩種方式實現(xiàn)并驗證交通燈的功能。為期兩周的實訓(xùn),我利用網(wǎng)絡(luò)和圖書館的有效資源,搜集并下載了大量的關(guān)于用FPGA做交通燈設(shè)計的資料;然后精心閱讀,在老師的指導(dǎo)督促下,并和周圍同學(xué)進(jìn)行有效學(xué)習(xí)和溝通,最終確定了自己的設(shè)計方案;最后按照既定的設(shè)計方案,通過努力有步驟的實現(xiàn)了交通燈的設(shè)計。
通過此次實訓(xùn)設(shè)計,讓我加深了FPGA的理解,更加熟練了VHDL語言,同時,我深深體會到了通過FPGA設(shè)計數(shù)字電路的方便、簡潔的特點,這讓我相信未來數(shù)字電路的應(yīng)用必將更加廣泛。另外,我還體會到:從事開發(fā)設(shè)計工作,一定要保持個勤奮、踏實、嚴(yán)謹(jǐn)?shù)墓ぷ鲬B(tài)度,這樣才能更好的完成工作。最后,我覺得在交通燈控制系統(tǒng)設(shè)計中還可以增加一些實用功能,如:
1、針對弱視或色盲人群進(jìn)行聲音提示;
2、在遇到突發(fā)狀況時,可以將紅綠燈改為緊急模式控制;
3、當(dāng)有119、120等特種車輛通過時,系統(tǒng)可轉(zhuǎn)為特種車放行,其他車輛禁行。
但是這次實訓(xùn)我也發(fā)現(xiàn)自己的很多不足之處。在設(shè)計過程中我發(fā)現(xiàn)自己考慮問題很不全面,自己的專業(yè)知識掌握的很不牢靠,所掌握的編程語句還不夠,很多程序都看不懂,我希望自己的這些不足之處能在今后的工作和學(xué)習(xí)中得到改善。而且,通過這次實訓(xùn),我懂得了學(xué)習(xí)的重要性,學(xué)會了堅持和努力,這將為以后的學(xué)習(xí)做出了最好的榜樣!
桂林電子科技大學(xué)實訓(xùn)說明書用紙
還有光有知識是不行的,還得有能力、有技術(shù),單干也是不行的,要適當(dāng)尋求合作,那樣才能更好實現(xiàn)我們的價值。在實訓(xùn)中及社會上,我們都要懂得虛心地向別人學(xué)習(xí),即使你覺得自己很厲害,但總有一些東西你是不懂的,所以不懂要多向別人請教,這樣才能更好地提高自己的水平和能力,全面發(fā)展自己。
桂林電子科技大學(xué)實訓(xùn)說明書用紙
謝 辭
在這短短的兩周EDA實訓(xùn)中,在這期間同學(xué)們都在努力學(xué)習(xí),認(rèn)真做自己各自的實訓(xùn)。在此我要特別感謝各位指導(dǎo)老師們對我的指導(dǎo),還有各位同學(xué)對我的幫助,尤其感謝老師在百忙之中抽出時間為我們講解設(shè)計原理,同時,還要感謝和我一起努力的各位同學(xué),在他們對我的幫助很我自己的努力下,我才能順利地完成這次實訓(xùn)。
這次實訓(xùn)我受匪頗多,但這多是得益于老師無微不至的關(guān)心和細(xì)心的教導(dǎo)。在實訓(xùn)中,讓我學(xué)到了不少知識,給了我一次復(fù)習(xí)學(xué)過的知識的機(jī)會,鞏固了基礎(chǔ)知識。也多虧同學(xué)們的無私的幫助和支持,在我無助的時候還是他們伸出他們的友愛之手,幫我渡過難關(guān),在此我也真心的多謝他們默默的幫助。最后再次對老師們說聲:謝謝!
桂林電子科技大學(xué)實訓(xùn)說明書用紙
參考文獻(xiàn)
[1] 潘松,黃繼業(yè).EDA技術(shù)實用教程(第三版).北京:科學(xué)出版社,2010.1 [2] 劉江海,涂傳威,陳瑋.EDA技術(shù)課程設(shè)計.武漢:華中科技大學(xué)出版社,2009.5 [3] 夏路易.基于EDA的電子技術(shù)課程設(shè)計.北京:電子工業(yè)出版社,2009.1 [4] 王金明,周順.數(shù)字系統(tǒng)設(shè)計與VHDL.北京:電子工業(yè)出版社,2010.5 [5] 鄒彥,莊嚴(yán),鄒寧.EDA技術(shù)與數(shù)字系統(tǒng)設(shè)計.北京:電子工業(yè)出版社,2007.4 [6] 林明權(quán),馬維旻.VHDL數(shù)字控制系統(tǒng)設(shè)計范例.北京:電子工業(yè)出版社,2003.1