馮競楠
(陜西科技大學 陜西 西安 710021)
實現路口交通燈控制器系統(tǒng)的方法很多,可以用標準邏輯器件、可編程序控制器PLC、單片機等方案來實現。但是這些方法在進行功能修改及調試時,都涉及硬件電路的調整,在一定程度上增加了工作的難度。隨著電子技術的迅猛發(fā)展,集成電路的設計方法也在不斷地更新,傳統(tǒng)的“固定功能集成電路+連線”的手工電子設計方法已被現代的對“芯片”進行設計的電子設計自動化(EDA)的設計方法所替代[1-3],使用“語言”進行電子電路設計已成為一種趨勢。筆者設計開發(fā)的交通信號燈控制器系統(tǒng),采用EDA技術和可編程邏輯器件FPGA,應用VHDL有限狀態(tài)機來設計控制系統(tǒng)的控制功能,并可根據實際情況對燈亮時間進行自由調整,整個系統(tǒng)通過QuartusⅡ軟件平臺進行了仿真,并下載到FPGA器件EP1C12Q240C8中進行調試,驗證了設計的交通信號燈控制電路完全可以實現預定的功能。該系統(tǒng)可以較好地緩解交通壓力,并可實現對突發(fā)事件進行緊急處理,具有一定的實用性。
有限狀態(tài)機FSM(finite state machine)由有限的狀態(tài)及其相互之間的轉移關系構成。從有限狀態(tài)機的角度看,許多數字系統(tǒng)中的時序電路都可以用其來描述,因此,有限狀態(tài)機是一種重要的、易于建立的、比較規(guī)范、以描述控制特性為主的建模方法,它可以應用于從系統(tǒng)分析到設計的所有階段。同時,因為有限狀態(tài)機具有有限個狀態(tài),所以可以在實際的工程上實現。但這并不意味著其只能進行有限次的處理。相反,有限狀態(tài)機是閉環(huán)系統(tǒng),可以用有限的狀態(tài),處理無窮的事務。
在用VHDL語言來設計實用系統(tǒng)的控制功能時,通常會選用有限狀態(tài)機方法來實現,因為無論與VHDL的其他設計方案相比,還是與可完成相同功能的CPU相比,有限狀態(tài)機有其獨特的、難以超越的優(yōu)越性,主要表現在以下幾個方面[4]:
1)有限狀態(tài)機由純硬件來實現,工作方式是根據控制信號按照預先設定的狀態(tài)進行順序運行,在運行和控制方式上類似于控制靈活和方便的CPU,而在設計中能使用各種完整的容錯技術,使其在運行速度和工作可靠性方面又都優(yōu)于CPU。
2)用VHDL設計有限狀態(tài)機,設計流程和方案相對固定,程序層次分明,程序結構簡單清晰,特別是可以定義符號化枚舉類型的狀態(tài),使VHDL綜合器對狀態(tài)機具有強大的優(yōu)化功能。
3)狀態(tài)機容易構成性能良好的同步時序模塊,為了消除電路中的毛刺現象,在有限狀態(tài)機設計中有多種設計方案可供選擇,相比其他硬件設計方法,電路的完善性更能得到保證。
因此,在控制靈活、高速、高可靠性要求的系統(tǒng)設計中應用VHDL設計有限狀態(tài)機將是非常實用的選擇。
利用VHDL的有限狀態(tài)機設計不同實用邏輯控制系統(tǒng)時,通常采用枚舉類型來定義狀態(tài)機的狀態(tài),這樣可以獲得可綜合的、高效的VHDL描述,并且使用多進程方式來描述狀態(tài)機的內部邏輯。例如:可用兩個進程來描述,一個進程描述時序邏輯功能,通常稱為時序進程;另一個進程描述組合邏輯功能,即組合進程,必要時還可以引入第3個進程完成其他的邏輯功能,另外還需要相應的說明部分,在說明部分用TYPE定義新的數據類型和狀態(tài)名,以及在此新數據下定義的狀態(tài)變量[5]。
作為一個十字路口交通信號燈控制系統(tǒng),每條道路都需要有一組紅、綠、黃燈和倒計時計數器,用于指揮車輛的有序通行。為便于區(qū)分,將十字路口交通信號燈分為主路a和支路b,應具有以下功能:
1)主路a和支路b各設置兩組(雙向)紅燈、綠燈、黃燈,以指示通行狀態(tài);同時還設置數字式的時間顯示,以倒計時方式顯示每一路允許通行或禁止通行的剩余時間。
2)具有復位功能,當出現故障時,可復位回到初始設置狀態(tài)。
3)當主路a或支路b出現緊急情況時,按緊急情況鍵可進入緊急情況狀態(tài),各方向(兩路)均亮紅燈,倒計時停止。當特殊情況結束時,控制其恢復到電路的原來狀態(tài)繼續(xù)運行。
4)主路a或支路b的通行時間可在一定范圍自定義設置。
按照功能分析的要求,自頂向下,設計交通燈控制系統(tǒng)的整體組成框圖如圖1所示,它主要由分頻模塊,交通燈控制與倒計時模塊和動態(tài)掃描顯示控制模塊組成。分頻電路用于產生倒計時控制電路所需的周期為1 s的時鐘信號頻率;倒計時控制電路控制交通信號燈(紅、綠、黃)的亮燈時間和亮燈順序。根據對VHDL的使用熟悉程度,可對各模塊繼續(xù)分解,可視情而定。
圖1 交通燈控制系統(tǒng)整體組成框圖Fig.1 Block diagram of traffic light control system
在交通燈控制系統(tǒng)中,交通燈控制與倒計時模塊是系統(tǒng)的核心部分,采用有限狀態(tài)機設計實現。主路a和支路b分別控制該方向上紅、綠、黃信號燈的亮燈時間和亮燈順序,正常工作時共有St0、St1、St2、St3 4種狀態(tài),每個狀態(tài)之間的具體關系如表 1 所示,其中,red1_cnt、green1_cnt、yellow1_cnt和red2_cnt、green2_cnt、yellow2_cnt分別表示主路 a和支路 b 上紅綠黃燈所亮燈的時間,這里可自己定義倒計時時間。其狀態(tài)轉換圖如圖2所示。cnt為倒計時的計數值,同時用它來判斷是否進入下一個狀態(tài)。
表1 交通燈狀態(tài)控制關系表Tab.1 Relationship of traffic light state control
圖2 交通燈控制與倒計時模塊的狀態(tài)轉移圖Fig.2 State transfer of traffic light control and count down module
2.3.2 控制與倒計時模塊的VHDL描述
用VHDL設計有限狀態(tài)機并沒有固定的格式,但需要遵循一定的編碼風格。一般采用進程(process)描述,有限狀態(tài)機描述方式有如下3種:三進程描述、雙進程描述和單進程描述。這里采用雙進程描述:一個是時鐘進程,控制狀態(tài)機在時鐘有效沿,根據時鐘有效沿和某些輸入信號條件得到下一狀態(tài)并進行狀態(tài)遷移;另一個是組合進程,不受時鐘控制,由輸出相關的信號觸發(fā),該進程根據觸發(fā)信號決定狀態(tài)機的輸出信號值[6],即通過簡便地定義狀態(tài)變量,將狀態(tài)描述成進程,每個狀態(tài)均可表達為CASE_WHEN語句結構中的一條CASE語句,狀態(tài)的轉移通過IF_THEN_ELSE語句實現[7],并輸出信號以控制其他進程,從而實現狀態(tài)的轉移。
在時序進程中,狀態(tài)機是隨時鐘脈沖信號clk以同步方式工作,同時還受異步復位信號rst的控制。在rst=1時,狀態(tài)機復位,當rst=0(復位無效)而clk發(fā)生變化時,狀態(tài)機的狀態(tài)發(fā)生變化,轉向狀態(tài)機的下一狀態(tài);在組合進程中,狀態(tài)機根據外部輸入的控制信號 (如hold),以及來自狀態(tài)機內部(如cnt)信號,或當前狀態(tài)機的狀態(tài)值,確定其下一狀態(tài)的走向。
基于有限狀態(tài)機的VHDL交通燈控制與倒計時模塊的源程序的實體和結構體部分如下:
ENTITY rgy IS
PORT(clk,hold,rst:IN STD_LOGIC;
light:OUT STD_LOGIC_VECTOR(5 DOWNTO 0);
a,b:OUT INTEGER RANGE 0 TO 35 );
END rgy;
ARCHITECTURE rtl OF rgy IS
TYPE states IS (st0,st1,st2,st3);
SIGNAL state :STATES:=st0;
SIGNAL cnt :INTEGER RANGE 0 TO 35:=1;--cnt
計數值
SIGNAL cnt_enb :STD_LOGIC:='0';--cnt_enb 計 數的使能端
BEGIN PROCESS(clk,rst) --狀態(tài)機的時序進程(控制狀態(tài)的轉換)
BEGIN
IF(rst='1')THEN state<=st0; cnt<=1; --清零部分
ELSIF(rising_edge(clk))THEN
IF(cnt_enb='1')THEN
IF(hold='0')THEN cnt<=cnt+1; --緊急情況的倒計時計數處理
ELSE cnt<=cnt;
END IF;
ELSE cnt<=1;
END IF;
CASE state IS
WHEN st0=>IF(cnt=green1_cnt)THEN state<=st1;
ELSE state<=st0;
END IF;
WHEN st1=>……
WHEN st2=>……
WHEN st3=> IF (cnt=yellow2_cnt)THEN
state<=st0;
ELSE state<=st3;
END IF;
END CASE;
END IF;
END PROCESS;
PROCESS(state,cnt,hold) --狀態(tài)機的組合邏輯進程
VARIABLE counta,countb:integer range 0 to 35;
BEGIN
IF (hold='1')THEN light<="100100";--緊急情況燈信號的處理
ELSE
CASE state IS --各個狀態(tài)的邏輯處理
WHEN st0=>light<="001100";--該狀態(tài)下燈的信號賦值
cnt_enb<='1'; --開啟計數,開始倒計時
counta:=green1_cnt;--給主路倒計時賦初值
countb:=red2_cnt;--支路倒計時賦初值
IF (cnt=green1_cnt)THEN--當 cnt計數滿足該狀態(tài)下的時間長度 則進入下一狀態(tài)
cnt_enb<='0'; --- --停止計數,進入下一狀態(tài)開始計數
END IF;
WHEN st1=>light<="010100";
……
WHEN st2=>light<="100001";
……
WHEN st3=>light<="100010";
……
END CASE;
END IF;
a<=counta-cnt;b<=countb-cnt; --給倒計時賦值
END PROCESS;
END rtl;
將編譯后的程序進行仿真,得到交通燈控制與倒計時模塊仿真波形圖如圖3所示。由仿真波形可以看出,交通燈按St0→St1→St2→St3→St0順序進行狀態(tài)循環(huán)。light按主路紅、主路黃、主路綠、支路紅、支路黃、支路綠的順序排列。如在St0狀態(tài)下,light的值為“001100”,當hold緊急情況信號為高電平時,主路、支路均亮紅燈,并且停止倒計時。當rst復位信號為高電平時,恢復到初態(tài)。
將分頻模塊和顯示控制模塊均分別用VHDL進行編程、仿真,檢查其功能正確性,并包裝元件入庫建立元件符號。
在上述3個模塊設計完成之后,按照圖1所示電路結構,用原理圖輸入方式進行連接,構成交通燈控制系統(tǒng)的頂層文件,并在Quartus II平臺上進行編譯、仿真,引腳鎖定,得到仿真波形如圖 4 所示,圖中信號 light、a(b)、dec7sa(dec7sb)分別用二進制、十進制、十六進制表示。
圖3 交通燈控制與倒計時模塊仿真波形Fig.3 Simulation results for traffic light control and count down module
圖4 交通燈控制系統(tǒng)仿真波形Fig.4 Simulation results for traffic light control system
從仿真波形中可以看出:當復位信號rst=1有效時,電路復位,此時light復位為“001100”狀態(tài),置a方向和 b方向計數器為最大值24和29;當rst=0無效,緊急信號hold=1有效時,light為 “100100”表示兩路紅燈均亮的狀態(tài);當rst=0,hold=0時,恢復電路原來的 light為“001100”狀態(tài),a和 b進行倒計時計數。7段顯示譯碼器a方向的dec7sa和b方向的dec7sb分別顯示計數器a和b的數值,如當a計數到21時,dec7sa的高位 2和低位 1的 0gfedcba=01011011B (5B)和00000110 B(06),即 5B06,同理當 b 計數到 26 時,dec7sb 的值為5B7D,所以交通燈控制系統(tǒng)的仿真結果完全正確。
最后將頂層文件下載到可編程邏輯器件EP1C12Q240C8中,經測試,交通燈控制系統(tǒng)正常工作,完全符合設計要求。
有限狀態(tài)機及其設計技術是數字系統(tǒng)中實現高效率、高可靠性邏輯控制的重要途徑[7]。在交通燈控制系統(tǒng)設計中,通過對控制功能的分析和實際狀態(tài)的選擇,把交通燈的控制歸納為4種工作狀態(tài),并建立狀態(tài)轉移關系,較為準確、直觀的反映了實際需求。在用VHDL語言設計實現交通燈控制系統(tǒng)時,既有傳統(tǒng)的基于邏輯單元構建的整體組成結構方式,也有利用純軟件編程實現的邏輯模塊。設計方法靈活、實現簡單、性能穩(wěn)定的特點。
以上有限狀態(tài)機的設計方法具有通用性,對于較為復雜的有限狀態(tài)機可采用多個進程,分別完成任意復雜組合邏輯和時序邏輯,包括進程間狀態(tài)值的傳遞以及狀態(tài)轉換值的輸出,對類似含有邏輯控制功能的系統(tǒng),通過自頂向下設計、分步實現,是切實可行的方法。
[1]周飚,謝曉陽.有限狀態(tài)機在RTC設計中的分析與應用[J].計算機系統(tǒng)應用,2008(5):77-78.ZHOU Biao,XIE Xiao-yang.Analysis and application of finite state machine in RTC design[J].Computer Systems &Applications, 2008(5):77-78.
[2]胡星,唐皓.基于CPLD的道路交通自動控制系統(tǒng)[J].自動化技術與應用,2009(2):92-94.HU Xing, TANG Hao.Traffic light control based on CPLD[J].Techniques of Automation & Applications, 2009(2):92-94.
[3]蔡軍,曹慧英.智能交通燈控制系統(tǒng)的設計與實現[J].重慶郵電學院學報,2004(6):129-132.CAI Jun,CAO Hui-ying.Design and implementation of intelligent traffic light control system[J].Journal of Chongqing UniversityofPostsandTelecommunications, 2004(6):129-132.
[4]李云,馮永浩,孟濤.基于VHDL有限狀態(tài)機控制器的設計方法[J].微計算機信息,2010(5-1):74-75,103.LI Yun, FENG Yong-hao, MENG Tao.A controller design method based on VHDL Finite state machine[J].Microcomputer Information, 2010(5-1):74-75,103.
[5]聶茹.基于Multisim10的十字路口交通燈控制器的設計與仿真[J].現代電子技術,2010(33-11):179-181.NIE Ru.Design and simulation of traffic lights controller at the crossroads based on multisim10[J].Modern Electronics Technique, 2010(33-11):179-181.
[6]徐春嬌.基于VHDL狀態(tài)機設計的智能交通控制[J].電子設計工程,2007(6-2):31-35,39.XUChun-jiao.VHDLstatemachinebasedintelligenttrafficlight[J].Electronic Design Engineering, 2007(6-2):31-35,39.
[7]王振紅.VHDL數字電路設計與應用實踐教程[M].北京:機械工業(yè)出版社,2006.