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