利用有限狀態(tài)機(jī)的交通燈控制系統(tǒng)設(shè)計(jì)與仿真
2.3.2 控制與倒計(jì)時(shí)模塊的VHDL描述
用VHDL設(shè)計(jì)有限狀態(tài)機(jī)并沒有固定的格式,但需要遵循一定的編碼風(fēng)格。一般采用進(jìn)程(process)描述,有限狀態(tài)機(jī)描述方式有如下3種:三進(jìn)程描述、雙進(jìn)程描述和單進(jìn)程描述。這里采用雙進(jìn)程描述:一個(gè)是時(shí)鐘進(jìn)程,控制狀態(tài)機(jī)在時(shí)鐘有效沿,根據(jù)時(shí)鐘有效沿和某些輸入信號(hào)條件得到下一狀態(tài)并進(jìn)行狀態(tài)遷移;另一個(gè)是組合進(jìn)程,不受時(shí)鐘控制,由輸出相關(guān)的信號(hào)觸發(fā),該進(jìn)程根據(jù)觸發(fā)信號(hào)決定狀態(tài)機(jī)的輸出信號(hào)值,即通過簡(jiǎn)便地定義狀態(tài)變量,將狀態(tài)描述成進(jìn)程,每個(gè)狀態(tài)均可表達(dá)為CASE_WHEN語(yǔ)句結(jié)構(gòu)中的一條CASE語(yǔ)句,狀態(tài)的轉(zhuǎn)移通過IF_THEN_ELSE語(yǔ)句實(shí)現(xiàn),并輸出信號(hào)以控制其他進(jìn)程,從而實(shí)現(xiàn)狀態(tài)的轉(zhuǎn)移。
在時(shí)序進(jìn)程中,狀態(tài)機(jī)是隨時(shí)鐘脈沖信號(hào)clk以同步方式工作,同時(shí)還受異步復(fù)位信號(hào)rst的控制。在rst=1時(shí),狀態(tài)機(jī)復(fù)位,當(dāng)rst=0(復(fù)位無效)而clk發(fā)生變化時(shí),狀態(tài)機(jī)的狀態(tài)發(fā)生變化,轉(zhuǎn)向狀態(tài)機(jī)的下一狀態(tài);在組合進(jìn)程中,狀態(tài)機(jī)根據(jù)外部輸入的控制信號(hào)(如hold),以及來自狀態(tài)機(jī)內(nèi)部(如cnt)信號(hào),或當(dāng)前狀態(tài)機(jī)的狀態(tài)值,確定其下一狀態(tài)的走向。
基于有限狀態(tài)機(jī)的VHDL交通燈控制與倒計(jì)時(shí)模塊的源程序的實(shí)體和結(jié)構(gòu)體部分如下:
評(píng)論