【文章內(nèi)容簡介】
4=seg7(15 downto 0)=0101101101100110。 when 25=seg7(15 downto 0)=0101101101101101。 when 26=seg7(15 downto 0)=0101101101111101。 when 27=seg7(15 downto 0)=0101101100000111。 when 28=seg7(15 downto 0)=0101101101111111。 when 29=seg7(15 downto 0)=0101101101111011。 when 30=seg7(15 downto 0)=0100111100111111。 when 31=seg7(15 downto 0)=0100111100000110。 when 32=seg7(15 downto 0)=0100111101011011。 when 33=seg7(15 downto 0)=0100111101001111。 when 34=seg7(15 downto 0)=0100111101100110。 when 35=seg7(15 downto 0)=0100111101101101。 when 36=seg7(15 downto 0)=0100111101111101。 when 37=seg7(15 downto 0)=0100111100000111。 when 38=seg7(15 downto 0)=0100111101111111。 when 39=seg7(15 downto 0)=0100111101111011。 when others=seg7(15 downto 0)=0011111100111111。 end case。 end if。 end process。 next_state = 39。139。 when t_ff=1 else 39。039。 end BEHAVIOR。在源程序中Clk是由外接信號發(fā)生器提供1kHz的時鐘脈沖信號;Reset是系統(tǒng)內(nèi)部自復位信號;ena_1hz是clk_gen電路提供1Hz的時鐘脈沖信號;recount是紅綠燈信號譯碼電路產(chǎn)生的重新計數(shù)的使能控制信號;Load負責接收計數(shù)器所需的計數(shù)數(shù)值。系統(tǒng)輸出信號Seg7負責將計數(shù)數(shù)值轉(zhuǎn)換成BCD碼,并利用直接驅(qū)動方式譯碼產(chǎn)生七段共陰極顯示器所需的驅(qū)動信號,為seg7是16bit的輸出信號,負責控制七段顯示器的輸出,故16bit需拆成2組8bit信號控制2組七段顯示器,輸出字型參見表62;Next_state作為轉(zhuǎn)態(tài)觸發(fā)信號,當計數(shù)器計時完畢時,負責產(chǎn)生一個脈沖信號, t_ff(十進制數(shù))是一個8bit的內(nèi)部信號,作為倒計時使用, 其仿真輸出波形和元件符號如圖654所示。 (a) (b)圖654定時控制電路count_down(a) 仿真輸出波形。(b)元件符號圖當load=(23)16時,t_ff=34,并從該數(shù)開始到計數(shù)到0(總共35秒鐘,為東西路口的綠燈維持秒數(shù)),兩位數(shù)碼管的譯碼輸出為4F66(34)。4 紅綠燈信號譯碼電路traffic_fsm的VHDL程序設(shè)計在紅綠燈交通信號系統(tǒng)中,大多數(shù)的情況是通過自動控制的方式指揮交通的。但為了配合高峰時段,防止交通擁擠,有時還必須使用手動控制,即讓交警自行指揮交通。因此,traffic_fsm電路除了負責監(jiān)控路口紅綠燈之外,最主要的功能就是能夠利用開關(guān)來切換手動與自動的模式,讓交警能夠通過外部輸入的方式來控制紅綠燈信號系統(tǒng)的運作。 該電路的核心部分是在自動控制和手動控制下紅綠燈信號的狀態(tài)譯碼輸出及紅綠燈閃爍控制電路。該電路的輸入信號有:clk(由clk_gen電路提供1kHz的時鐘脈沖信號);reset是系統(tǒng)內(nèi)部自復位信號;ena_scan(接收由clk_gen電路提供的250Hz時鐘脈沖信號);ena_1hz(clk_gen電路提供1Hz的時鐘脈沖信號);Flash_1hz(接收由clk_gen電路提供的1Hz方波信號);a_m 手動、自動切換鈕輸入(1:自動,0:手動);在手動模式下使用的Sr_butt 紅綠燈狀態(tài)切換鈕(每按一次就切換一個狀態(tài));Next_state(在自動模式下接收由cont_down電路提供的狀態(tài)觸發(fā)信號)。輸出信號有:recount (產(chǎn)生重新計數(shù)的輸出使能控制信號);Sign_state(產(chǎn)生的輸出狀態(tài)信號共2bit,4種狀態(tài));Red(負責紅燈的顯示,共2bit,4種狀態(tài)); Green (負責綠燈的顯示共2bit,4種狀態(tài));Yellow 負責黃燈的顯示共2bit,4種狀態(tài));設(shè)東西路口紅黃綠三色燈為的r0、yO、g0,南北路口的紅黃綠三色燈為的ryg1,自動操作模式和手動操作模式信號燈顯示的真值表如表6表67所示。表中定義了一些進程(process)間整體共享的電路內(nèi)部傳遞信號,以整合所有功能,它們是:State信號(設(shè)定紅綠燈電路的狀態(tài),在該程序里定義8種狀態(tài));St_tansfer(在手動模式下判斷是否轉(zhuǎn)態(tài)的控制信號);Light[5..0] (在自動模式下該信號為是否轉(zhuǎn)態(tài)的控制信號,其位數(shù)從高到低分別表示Redred0、yellowyellow0、greengreen0)。表66自動操作模式(a_m=1)信號燈顯示的真值表CLKresetena_1hznext_stagestate狀態(tài)sing_staterecountlightState11XXr0g1001010010State2011r0g1224。r0y1011011000010r0g1000010010State3011r0y1224。g0r1101100001010r0y1010011000State4011y0r1224。g0r1111100100010g0r1100100001State5011y0r1224。r0g1001010010010y0r1110100100State6011ohters000110000表67手動操作模式(a_m=0)信號燈顯示的真值表CLKresetena_sre_transferstate狀態(tài)sing_staterecountlightState11XXr0g1001010010State2011r0g1224。r0y1011011000010r0g1001010010State3011r0y1224。g0r1101100001010r0y1011011000State4011g0r1224。 y0r1111100100010g0r1101100001State5011y0r1224。r0g1001010010010y0r1111100100State6011ohters000110000其VHDL源程序如下:LIBRARY IEEE。 USE 。USE 。USE 。 ENTITY traffic_CON IS port(reset,clk,ena_scan,ena_1Hz,flash_1Hz,a_m,st_butt,next_state:in std_logic。 recount: out std_logic。 sign_state: out std_logic_vector(1 downto 0)。 red: out std_logic_vector(1 downto 0)。 green: out std_logic_vector(1 downto 0)。 yellow: out std_logic_vector(1 downto 0))。end。 ARCHITECTURE BEHAVIOR of traffic_CON IStype Sreg0_type is (r0g1, r0y1, g0r1, y0r1, y0y1, y0g1, g0y1, r0r1)。signal state: Sreg0_type。 signal st_transfer: std_logic。signal light: std_logic_vector(5 downto 0)。 r(10)y(10)g(10)begin rebounce:process (reset,clk,ena_scan,st_butt) variable rebn_ff: std_logic_vector(5 downto 0)。 begin if (st_butt=39。139。 or reset=39。139。) then rebn_ff := 111111。 st_transfer =39。039。 elsif (clk3