VHDL語言的十字路口交通燈控制器設(shè)計.doc
《VHDL語言的十字路口交通燈控制器設(shè)計.doc》由會員分享,可在線閱讀,更多相關(guān)《VHDL語言的十字路口交通燈控制器設(shè)計.doc(9頁珍藏版)》請在裝配圖網(wǎng)上搜索。
南昌大學(xué)實驗報告 學(xué)生姓名: 學(xué) 號: 專業(yè)班級: 實驗類型:□ 驗證 □ 綜合 □ 設(shè)計 □ 創(chuàng)新 實驗日期: 實驗成績: 實驗五 十字路口交通燈控制器設(shè)計 一、實驗?zāi)康? 1、進(jìn)一步加強(qiáng)經(jīng)典狀態(tài)機(jī)的設(shè)計 2、學(xué)會設(shè)計??勺兊褂嫊r計數(shù)器 二、實驗要求 一條主干道,一條鄉(xiāng)間公路。組成十字路口,要求優(yōu)先保證主干道通行。有MR(主紅)、MY(主黃)、MG(主綠)、CR(鄉(xiāng)紅)、CY(鄉(xiāng)黃)、CG(鄉(xiāng)綠)六盞交通燈需要控制;交通燈由綠→紅有4秒黃燈亮的間隔時間,由紅→綠沒有間隔時間;系統(tǒng)有MRCY、MRCG、MYCR、MGCR四個狀態(tài); 鄉(xiāng)間公路右側(cè)各埋有一個傳感器,當(dāng)有車輛通過鄉(xiāng)間公路時,發(fā)出請求信號S=1,其余時間S=0; 平時系統(tǒng)停留在MGCR(主干道通行)狀態(tài),一旦S信號有效,經(jīng)MYCR(黃燈狀態(tài))轉(zhuǎn)入MRCG(鄉(xiāng)間公路通行)狀態(tài),但要保證MGCR的狀態(tài)不得短于一分鐘;一旦S信號無效,系統(tǒng)脫離MRCG狀態(tài)。隨即經(jīng)MRCY(黃燈狀態(tài))進(jìn)入MGCR狀態(tài),即使S信號一直有效,MRCG狀態(tài)也不得長于20秒鐘。 三、設(shè)計過程 1,交通燈工作原理分析: 根據(jù)交通燈控制器的功能與要求,將其總體電路分為狀態(tài)控制,倒計時,數(shù)碼管顯示,信號燈顯示模塊。外部兩路脈沖振蕩器的頻率選為1 kHz和1 Hz的信號,1khz信號用于顯示模塊的掃描,1 Hz信號用做倒計時模塊的計數(shù)脈沖。由于實驗箱只能接一個信號源故加入分頻模塊。 2,計時電路應(yīng)滿足下列條件 1)當(dāng)S=1,且計數(shù)器已完成60計數(shù)時,計數(shù)器進(jìn)入模4計數(shù),隨后進(jìn)入模 20計數(shù),再進(jìn)入模4計數(shù),再回到模60計數(shù) 2)當(dāng)計數(shù)器進(jìn)行摸20計數(shù)時,一旦S變?yōu)?,計數(shù)器立馬進(jìn)入模4計數(shù), 再進(jìn)入模60計數(shù) 3)完成模20計數(shù)后,不論S為0或1,計數(shù)器進(jìn)入模4計數(shù),再進(jìn)入模60 計數(shù) 4)若計數(shù)器未完成模60計數(shù),不論S如何變話,計數(shù)器將繼續(xù)進(jìn)行模60 計數(shù) 3、使用文本設(shè)計底層文件,并生成相應(yīng)元器件,再使用原理圖設(shè)計頂層文件 四、實驗步驟 1、頂層文件的設(shè)計 頂層原理圖設(shè)計可以依據(jù)系統(tǒng)框圖進(jìn)行,由狀態(tài)控制計數(shù)模塊,數(shù)碼管顯示分頻模塊和交通燈顯示模塊(jtdjs,jtdfp,jtdxs)三部分組成。 2,各模塊設(shè)計文件 ① jtdjs: LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY JTDJS IS PORT(CLK1,S,RESET:IN STD_LOGIC; b:BUFFER STD_LOGIC; tim:OUT STD_LOGIC_VECTOR(7 DOWNTO 0)); END JTDJS; ARCHITECTURE behav OF JTDJS IS TYPE STA IS(mgcr,mycr,mrcg,mrcy); SIGNAL STATE:STA; BEGIN PROCESS(CLK1) -- VARIABLE b:STD_LOGIC:=0; VARIABLE a:STD_LOGIC:=0; VARIABLE th,tl:STD_LOGIC_VECTOR(3 DOWNTO 0); BEGIN IF RESET=0 THEN STATE<=mgcr; th:="0000" ;tl:="0000";a:=0;b<=0; ELSIF CLK1EVENT AND CLK1=1 THEN CASE STATE IS WHEN mgcr => IF S=1 AND b=1 THEN STATE<=mycr;a:=0;th:="0000";tl:="0100";b<=0; -- ELSIF S=0 AND b=1 THEN STATE<=mgcr;a:=0;--th:="0110";tl:="0000"; ELSE IF a=0 THEN th:="0110";tl:="0000";a:=1; else IF NOT(th="0000" AND tl="0010") then IF tl="0000" then tl:="1001";th:=th-1; else tl:=tl-1; END IF; ELSE th:="0000";tl:="0001";a:=0;b<=1; END IF; END IF; END IF; WHEN mycr => IF a=0 THEN th:="0000";tl:="0100";a:=1; else IF NOT(th="0000" AND tl="0010") then tl:=tl-1; ELSE th:="0000";tl:="0001";a:=0;STATE<=mrcg; END IF; END IF; WHEN mrcg =>IF S=1 THEN IF a=0 THEN th:="0010";tl:="0000";a:=1; else IF NOT(th="0000" AND tl="0010") then IF tl="0000" then tl:="1001";th:=th-1; else tl:=tl-1; END IF; ELSE th:="0000";tl:="0001";a:=0;STATE<=mrcy; END IF; END IF; ELSE a:=0;STATE<=mrcy;th:="0000";tl:="0100"; END IF; WHEN mrcy =>IF a=0 THEN th:="0000";tl:="0100";a:=1; else IF NOT(th="0000" AND tl="0010") then tl:=tl-1; ELSE th:="0000";tl:="0001";a:=0;STATE<=mgcr; END IF; END IF; END CASE; tim <= th & tl; END IF; end process; END behav; ② JTDFP LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY JTDFP IS PORT (CLK : IN STD_LOGIC; JIN : IN STD_LOGIC_VECTOR(7 DOWNTO 0); SG : OUT STD_LOGIC_VECTOR(7 DOWNTO 0); sel0,sel1,sel2 : OUT STD_LOGIC; CLK1:buffer STD_LOGIC ); END JTDFP; ARCHITECTURE behav OF JTDFP IS SIGNAL Q : STD_LOGIC_VECTOR(11 DOWNTO 0); SIGNAL P,R: STD_LOGIC_VECTOR(3 DOWNTO 0); SIGNAL CONT8: STD_LOGIC_VECTOR(2 DOWNTO 0); SIGNAL CONT : STD_LOGIC_VECTOR(7 DOWNTO 0); SIGNAL YM : STD_LOGIC_VECTOR(11 DOWNTO 0); SIGNAL A : STD_LOGIC_VECTOR(3 DOWNTO 0); BEGIN F:PROCESS(CLK) BEGIN IF CLKEVENT AND CLK = 1 THEN CONT<=CONT+1; IF CONT=100 THEN CLK1<=1;CONT<="00000000"; ELSE CLK1<=0; END IF; END IF; END PROCESS; C:PROCESS( CLK) BEGIN IF CLKEVENT AND CLK=1 THEN IF CONT8<"001" THEN CONT8 <=CONT8+1; ELSE CONT8<=(OTHERS=>0); END IF; END IF; CASE CONT8 IS WHEN "000" => sel0<=0;sel1<=1;sel2<=0;A<=JIN(3 downto 0); WHEN "001" => sel0<=1;sel1<=0;sel2<=0;A<=JIN(7 downto 4); WHEN OTHERS =>NULL; END CASE; END PROCESS ; D:PROCESS(A) BEGIN CASE A IS WHEN "0000" =>SG<="00111111" ;WHEN "0001" =>SG<="00000110" ; WHEN "0010" =>SG<="01011011"; WHEN "0011" =>SG<="01001111"; WHEN "0100"=>SG<="01100110"; WHEN "0101" =>SG<="01101101"; WHEN "0110" =>SG<="01111101"; WHEN "0111" =>SG<="00000111"; WHEN "1000" =>SG<="01111111"; WHEN "1001" =>SG<="01101111"; WHEN OTHERS=>NULL; END CASE; END PROCESS; END behav; ③ JTDXS LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY JTDXS IS PORT(CLK1,S,B,RESET:IN STD_LOGIC; COUNT: IN STD_LOGIC_VECTOR(7 DOWNTO 0); MG,MY,MR,CG,CY,CR:OUT STD_LOGIC); END JTDXS ; ARCHITECTURE behav OF JTDXS IS TYPE STATES IS(mgcr,mycr,mrcg,mrcy); SIGNAL STATE:STATES; BEGIN PROCESS(STATE,CLK1, S,RESET) BEGIN IF RESET=0 THEN STATE<=mgcr;MG<=1;CR<=1;MY<=0;MR<=0;CG<=0;CY<=0; ELSIF CLK1EVENT AND CLK1=1 then CASE STATE IS WHEN mgcr=>IF B=1 AND S=1THEN STATE<=mycr;MY<=1;CR<=1;MG<=0;MR<=0;CG<=0;CY<=0; ELSE STATE<=mgcr;MG<=1;CR<=1;MY<=0;MR<=0;CG<=0;CY<=0; END IF; WHEN mycr=>IF COUNT="00000001" THEN STATE<=mrcg;MR<=1;CG<=1;MG<=0;MY<=0;CR<=0;CY<=0; ELSE STATE<=mycr;MY<=1;CR<=1;MG<=0;MR<=0;CG<=0;CY<=0; END IF; WHEN mrcg=>IF COUNT="00000001" OR S=0THEN STATE<=mrcy;MR<=1;CY<=1;MY<=0;MG<=0;CR<=0;CG<=0; ELSE STATE<=mrcg;MR<=1;CG<=1;MG<=0;MY<=0;CR<=0;CY<=0; END IF; WHEN mrcy=>IF COUNT="00000001" THEN STATE<=mgcr;MG<=1;CR<=1;MR<=0;MY<=0;CY<=0;CG<=0; ELSE STATE<=mrcy;MR<=1;CY<=1;MY<=0;MG<=0;CR<=0;CG<=0; END IF; END CASE; END IF; END PROCESS; END behav; 3、編譯 1)輸入完程序之后逐個編譯 2)逐個編譯無錯之后進(jìn)行全程編譯 4、將以上模塊生成元器件 計數(shù)控制 數(shù)碼管顯示分頻 交通燈顯示 5,將以上各器件連接成實驗原理圖 6、系統(tǒng)仿真 1)建立新的波形激勵文件 2)在波形編輯器窗口添加節(jié)點 3)通過Edit->End Time 來設(shè)定仿真結(jié)束時間 4)在CLOCK窗口中設(shè)置clk的時鐘周期為1us 5)點擊save保存 6) 通過Tools下的Simulator Tools項進(jìn)行仿真,然后觀察輸出波形。 仿真波形如下: S=1鄉(xiāng)間公路狀態(tài)(既MGCR60S-MYCG4S-MRCG20S-MGCY4S-MGCR60S) S=0轉(zhuǎn)S=1立即進(jìn)入MYCR4S-MRCG20S 7,引腳鎖定 8,連接到實驗箱下載程序觀察實驗結(jié)果: 有開關(guān)K1控制S的值,當(dāng)K1斷開時實驗箱交通燈處于MGCR狀態(tài),數(shù)碼管在倒數(shù)60計數(shù)。合上K1后S由0轉(zhuǎn)入1狀態(tài),數(shù)碼管繼續(xù)倒數(shù)60計數(shù)且交通燈仍處于MGCR狀態(tài),60計數(shù)完成后隨即轉(zhuǎn)入MYCG4S-MRCG20S-MGCY4S-MGCR60S的循環(huán)狀態(tài)直到S再次由1變成0,數(shù)碼管立即停止計數(shù)進(jìn)入倒數(shù)4S的黃燈狀態(tài),4S結(jié)束后交通燈進(jìn)入MGCR狀態(tài) 按下reset鍵數(shù)碼管從頂端重新開始計時不清楚交通燈狀態(tài)- 1.請仔細(xì)閱讀文檔,確保文檔完整性,對于不預(yù)覽、不比對內(nèi)容而直接下載帶來的問題本站不予受理。
- 2.下載的文檔,不會出現(xiàn)我們的網(wǎng)址水印。
- 3、該文檔所得收入(下載+內(nèi)容+預(yù)覽)歸上傳者、原創(chuàng)作者;如果您是本文檔原作者,請點此認(rèn)領(lǐng)!既往收益都?xì)w您。
下載文檔到電腦,查找使用更方便
9.9 積分
下載 |
- 配套講稿:
如PPT文件的首頁顯示word圖標(biāo),表示該PPT已包含配套word講稿。雙擊word圖標(biāo)可打開word文檔。
- 特殊限制:
部分文檔作品中含有的國旗、國徽等圖片,僅作為作品整體效果示例展示,禁止商用。設(shè)計者僅對作品中獨創(chuàng)性部分享有著作權(quán)。
- 關(guān) 鍵 詞:
- VHDL 語言 十字路口 交通燈 控制器 設(shè)計
鏈接地址:http://www.820124.com/p-6657747.html