【摘要】以可編程邏輯器件(FPGA)為載體,采用狀態(tài)機的設(shè)計思想對十字路口交通燈的狀態(tài)及其相互轉(zhuǎn)移關(guān)系的描述,運用時序和組合邏輯等進程描述硬件模塊間的邏輯關(guān)系,用Very-High-Speed Integrated Circuit HardwareDescription Language(簡稱VHDL)編程實現(xiàn)了十字路口交通的控制。經(jīng)波形仿真,并下載到EPIC3T144C8芯片進行了硬件調(diào)試,達到了設(shè)定的功能仿真,整個程序設(shè)計思路清晰,硬件電路簡單,實現(xiàn)過程靈活。
【關(guān)鍵詞】FPGA;狀態(tài)機;交通燈;VHDL
1.引言
目前在教學中運用軟件實現(xiàn)交通燈的控制可以用標準邏輯器件、可編程序控制器PLC、單片機等方案來實現(xiàn)。但是這些方法在進行功能修改及調(diào)試時,都涉及硬件電路的調(diào)整,在一定程度上增加了工作的難度,另外對初學者而言,設(shè)計程序也有一定困難,采用可編程邏輯器件FPGA,應(yīng)用狀態(tài)機來設(shè)計控制系統(tǒng)的控制功能,可根據(jù)實際情況對燈亮時間進行自由調(diào)整,整個系統(tǒng)通過QuartusⅡ9.0軟件平臺進行了仿真,同時下載到EP1C3T144C8中進行調(diào)試,驗證了交通信號燈控制電路預(yù)定的功能。采取狀態(tài)機進行控制,學生容易接受。對初學者而言,有一定的指導(dǎo)意義。利用狀態(tài)機設(shè)計一般步驟:首先將行為狀態(tài)轉(zhuǎn)換成符號狀態(tài),接著將符號狀態(tài)轉(zhuǎn)換成真值表,利用真值表列出狀態(tài)轉(zhuǎn)換的組合邏輯、時序邏輯關(guān)系,編寫程序、芯片選擇、引腳鎖定和下載調(diào)試。
2.交通燈行為分析
任何模型和控制對象建立,均要找出運行規(guī)律,將行為語言轉(zhuǎn)換為數(shù)字符號,以便于控制。下面以十字路口雙向六車道為例介紹交通燈的控制情況,東西方向交通流直行即東西方向交通流左轉(zhuǎn),南北方向交通流直行,南北方向交通流左轉(zhuǎn),所有右轉(zhuǎn)方向交通流不予控制。交通燈控制示意圖如圖1所示。
圖1 雙向六車道的示意圖
根據(jù)交通運行規(guī)則,在十字路口雙向六車道中有下列6種循環(huán)的工作狀態(tài),順序為,順序為:S0→S1→S2→S3→S4→S5。在各方向的交通燈運行狀態(tài)有綠燈亮、黃燈亮、左轉(zhuǎn)彎亮、紅燈亮,詳細情況如表1所示。
表1 交通燈的狀態(tài)轉(zhuǎn)換規(guī)律表
工作狀態(tài)東西方向符號時間(秒)南北方向符號時間(秒)
S0綠燈亮GA40紅燈亮GB60
S1黃燈亮YA5紅燈亮YB
S2左轉(zhuǎn)彎亮LTA15紅燈亮LTB
S3紅燈亮RA60綠燈亮RB40
S4紅燈亮 黃燈亮 5
S5紅燈亮 左轉(zhuǎn)彎亮 15
為了便于利用狀態(tài)機進行程序設(shè)計,用1表示指示燈亮,0指示燈滅,根據(jù)狀態(tài)轉(zhuǎn)換規(guī)律轉(zhuǎn)化成真值表如2所示。
3.程序設(shè)計
本設(shè)計選用有限狀態(tài)機FSM(finite state machine)來進行設(shè)計,狀態(tài)機,與可完成相同功能的CPU相比,有限狀態(tài)機有其獨特的、難以超越的優(yōu)越性,利用VHDL的有限狀態(tài)機設(shè)計不同實用邏輯控制系統(tǒng)時,通常采用枚舉類型來定義狀態(tài)機的狀態(tài),這樣可以獲得可綜合的、高效的VHDL描述,并且使用多進程方式來描述狀態(tài)機的內(nèi)部邏輯。在程序設(shè)計中一般由說明部分、組合部分、時序部分組成,用TYPE定義新的數(shù)據(jù)類型和狀態(tài)名,以及在此新數(shù)據(jù)下定義的狀態(tài)變量。本設(shè)計采用狀態(tài)機來進行頂層文件的設(shè)計,狀態(tài)機的說明語句如下:
type state is(S0,S1,S2,S3,S4,S5);
signal presentstate,nextstate:state;
該程序結(jié)構(gòu)體分成以下四個部分:
3.1 分頻器秒脈沖的產(chǎn)生程序
由于選擇芯片的某引腳輸出信號為4HZ,則進行四分頻就可以得到1HZ的信號,clk定義為輸入信號,sec為結(jié)構(gòu)體時序轉(zhuǎn)換的邏輯信號,則程序如下:
——get 1 hz clock pulse
process(clk)
begin
if clk'event and clk='1'then q<=q+1;end if;
sec<=q(2);——get 1 hz clock pulse
end process;
3.2 交通燈時序控制程序
根據(jù)交通燈的狀態(tài)轉(zhuǎn)換規(guī)律表中需要有40秒、5秒、15秒三個轉(zhuǎn)換時間,為了方便狀態(tài)轉(zhuǎn)換描述,定義了timeout1、timeout2、timeout3三個時間標致信號,為1時表示時間結(jié)束,而且三個時間有先后順序,Presentstate <=nextstate達到了狀態(tài)在時序條件下轉(zhuǎn)換。則得到了流程圖如圖2所示。
圖2 交通燈時序控制流程圖
如下的時序控制程序:
timing:process(sec)
begin
if sec'event and sec='1'then
if tmp1=39 then timeout1<='1';timeout2<='0';timeout3<='0';tmp1<=0;
else if timeout1='1'then
if tmp2=4 then timeout2<='1';timeout1<='0';timeout3<='0';tmp2<=0;
else if timeout2='1'then
if tmp3=14 then timeout3<='1';timeout1<='0';timeout2<='0';tmp3<=0;
else tmp3<=tmp3+1;end if;
tmp2<=tmp2+1;end if;
tmp1<=tmp1+1;end if;
end if;
Presentstate<=nextstate;
end if;
end process;
3.3 交通燈的狀態(tài)轉(zhuǎn)換組合程序
下面以狀態(tài)為S0來進行說明,timeout1 =‘0’表示40秒的時間未到,則仍然在此狀態(tài)循環(huán),否則轉(zhuǎn)到下一狀態(tài)S1,其組合邏輯控制程序如下:
changestate:process(presentstate)
Begin
case presentstate is
when S0 => if timeout1='0'then
nextstate<=s0;
ra<='0';ya<='0';ga<='1';lta<='0';
rb<='1';yb<='0';gb<='0';ltb<='0';
else nextstate<=s1;end if;
……
end case;
end process;
4.仿真下載調(diào)試
將編寫好的程序首先利用波形編輯器進行功能仿真,在分析波形仿真正常的情況,將輸入、輸出引腳進行鎖定。比如采用EPIC3T144C8,時鐘端連接17引腳,輸出端分別接100、99、98和83、82、79。編譯下載后可以觀察到交通燈的模擬狀態(tài)圖。
參考文獻
[1]彭汪昆等.FPGA的模糊控制交通燈控制方案設(shè)計[J].單片機與嵌入式系統(tǒng)應(yīng)用,2011(11):49-51.
[2]王維松等.十字路口智能交通燈控制系統(tǒng)的FPGA實現(xiàn)[J].電子科技,2012(25):37-44.
[3]馮競楠等.利用有限狀態(tài)機的交通燈控制系統(tǒng)設(shè)計與仿真[J].電子設(shè)計工程,2011(06):156-159.
[4]楚巖等.基于FPGA的交通信號燈控制系統(tǒng)[J].現(xiàn)代電子技術(shù),2012(05):184-186.
[5]袁海林等.基于FPGA的交通燈的設(shè)計與實現(xiàn)[J].電子質(zhì)量,2013(03):15-18.