VHDL語(yǔ)言的十字路口交通燈控制器設(shè)計(jì).doc
《VHDL語(yǔ)言的十字路口交通燈控制器設(shè)計(jì).doc》由會(huì)員分享,可在線閱讀,更多相關(guān)《VHDL語(yǔ)言的十字路口交通燈控制器設(shè)計(jì).doc(9頁(yè)珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。
南昌大學(xué)實(shí)驗(yàn)報(bào)告 學(xué)生姓名: 學(xué) 號(hào): 專(zhuān)業(yè)班級(jí): 實(shí)驗(yàn)類(lèi)型:□ 驗(yàn)證 □ 綜合 □ 設(shè)計(jì) □ 創(chuàng)新 實(shí)驗(yàn)日期: 實(shí)驗(yàn)成績(jī): 實(shí)驗(yàn)五 十字路口交通燈控制器設(shè)計(jì) 一、實(shí)驗(yàn)?zāi)康? 1、進(jìn)一步加強(qiáng)經(jīng)典狀態(tài)機(jī)的設(shè)計(jì) 2、學(xué)會(huì)設(shè)計(jì)??勺兊褂?jì)時(shí)計(jì)數(shù)器 二、實(shí)驗(yàn)要求 一條主干道,一條鄉(xiāng)間公路。組成十字路口,要求優(yōu)先保證主干道通行。有MR(主紅)、MY(主黃)、MG(主綠)、CR(鄉(xiāng)紅)、CY(鄉(xiāng)黃)、CG(鄉(xiāng)綠)六盞交通燈需要控制;交通燈由綠→紅有4秒黃燈亮的間隔時(shí)間,由紅→綠沒(méi)有間隔時(shí)間;系統(tǒng)有MRCY、MRCG、MYCR、MGCR四個(gè)狀態(tài); 鄉(xiāng)間公路右側(cè)各埋有一個(gè)傳感器,當(dāng)有車(chē)輛通過(guò)鄉(xiāng)間公路時(shí),發(fā)出請(qǐng)求信號(hào)S=1,其余時(shí)間S=0; 平時(shí)系統(tǒng)停留在MGCR(主干道通行)狀態(tài),一旦S信號(hào)有效,經(jīng)MYCR(黃燈狀態(tài))轉(zhuǎn)入MRCG(鄉(xiāng)間公路通行)狀態(tài),但要保證MGCR的狀態(tài)不得短于一分鐘;一旦S信號(hào)無(wú)效,系統(tǒng)脫離MRCG狀態(tài)。隨即經(jīng)MRCY(黃燈狀態(tài))進(jìn)入MGCR狀態(tài),即使S信號(hào)一直有效,MRCG狀態(tài)也不得長(zhǎng)于20秒鐘。 三、設(shè)計(jì)過(guò)程 1,交通燈工作原理分析: 根據(jù)交通燈控制器的功能與要求,將其總體電路分為狀態(tài)控制,倒計(jì)時(shí),數(shù)碼管顯示,信號(hào)燈顯示模塊。外部?jī)陕访}沖振蕩器的頻率選為1 kHz和1 Hz的信號(hào),1khz信號(hào)用于顯示模塊的掃描,1 Hz信號(hào)用做倒計(jì)時(shí)模塊的計(jì)數(shù)脈沖。由于實(shí)驗(yàn)箱只能接一個(gè)信號(hào)源故加入分頻模塊。 2,計(jì)時(shí)電路應(yīng)滿足下列條件 1)當(dāng)S=1,且計(jì)數(shù)器已完成60計(jì)數(shù)時(shí),計(jì)數(shù)器進(jìn)入模4計(jì)數(shù),隨后進(jìn)入模 20計(jì)數(shù),再進(jìn)入模4計(jì)數(shù),再回到模60計(jì)數(shù) 2)當(dāng)計(jì)數(shù)器進(jìn)行摸20計(jì)數(shù)時(shí),一旦S變?yōu)?,計(jì)數(shù)器立馬進(jìn)入模4計(jì)數(shù), 再進(jìn)入模60計(jì)數(shù) 3)完成模20計(jì)數(shù)后,不論S為0或1,計(jì)數(shù)器進(jìn)入模4計(jì)數(shù),再進(jìn)入模60 計(jì)數(shù) 4)若計(jì)數(shù)器未完成模60計(jì)數(shù),不論S如何變?cè)?,?jì)數(shù)器將繼續(xù)進(jìn)行模60 計(jì)數(shù) 3、使用文本設(shè)計(jì)底層文件,并生成相應(yīng)元器件,再使用原理圖設(shè)計(jì)頂層文件 四、實(shí)驗(yàn)步驟 1、頂層文件的設(shè)計(jì) 頂層原理圖設(shè)計(jì)可以依據(jù)系統(tǒng)框圖進(jìn)行,由狀態(tài)控制計(jì)數(shù)模塊,數(shù)碼管顯示分頻模塊和交通燈顯示模塊(jtdjs,jtdfp,jtdxs)三部分組成。 2,各模塊設(shè)計(jì)文件 ① 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)輸入完程序之后逐個(gè)編譯 2)逐個(gè)編譯無(wú)錯(cuò)之后進(jìn)行全程編譯 4、將以上模塊生成元器件 計(jì)數(shù)控制 數(shù)碼管顯示分頻 交通燈顯示 5,將以上各器件連接成實(shí)驗(yàn)原理圖 6、系統(tǒng)仿真 1)建立新的波形激勵(lì)文件 2)在波形編輯器窗口添加節(jié)點(diǎn) 3)通過(guò)Edit->End Time 來(lái)設(shè)定仿真結(jié)束時(shí)間 4)在CLOCK窗口中設(shè)置clk的時(shí)鐘周期為1us 5)點(diǎn)擊save保存 6) 通過(guò)Tools下的Simulator Tools項(xiàng)進(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,連接到實(shí)驗(yàn)箱下載程序觀察實(shí)驗(yàn)結(jié)果: 有開(kāi)關(guān)K1控制S的值,當(dāng)K1斷開(kāi)時(shí)實(shí)驗(yàn)箱交通燈處于MGCR狀態(tài),數(shù)碼管在倒數(shù)60計(jì)數(shù)。合上K1后S由0轉(zhuǎn)入1狀態(tài),數(shù)碼管繼續(xù)倒數(shù)60計(jì)數(shù)且交通燈仍處于MGCR狀態(tài),60計(jì)數(shù)完成后隨即轉(zhuǎn)入MYCG4S-MRCG20S-MGCY4S-MGCR60S的循環(huán)狀態(tài)直到S再次由1變成0,數(shù)碼管立即停止計(jì)數(shù)進(jìn)入倒數(shù)4S的黃燈狀態(tài),4S結(jié)束后交通燈進(jìn)入MGCR狀態(tài) 按下reset鍵數(shù)碼管從頂端重新開(kāi)始計(jì)時(shí)不清楚交通燈狀態(tài)- 1.請(qǐng)仔細(xì)閱讀文檔,確保文檔完整性,對(duì)于不預(yù)覽、不比對(duì)內(nèi)容而直接下載帶來(lái)的問(wèn)題本站不予受理。
- 2.下載的文檔,不會(huì)出現(xiàn)我們的網(wǎng)址水印。
- 3、該文檔所得收入(下載+內(nèi)容+預(yù)覽)歸上傳者、原創(chuàng)作者;如果您是本文檔原作者,請(qǐng)點(diǎn)此認(rèn)領(lǐng)!既往收益都?xì)w您。
下載文檔到電腦,查找使用更方便
9.9 積分
下載 |
- 配套講稿:
如PPT文件的首頁(yè)顯示word圖標(biāo),表示該P(yáng)PT已包含配套word講稿。雙擊word圖標(biāo)可打開(kāi)word文檔。
- 特殊限制:
部分文檔作品中含有的國(guó)旗、國(guó)徽等圖片,僅作為作品整體效果示例展示,禁止商用。設(shè)計(jì)者僅對(duì)作品中獨(dú)創(chuàng)性部分享有著作權(quán)。
- 關(guān) 鍵 詞:
- VHDL 語(yǔ)言 十字路口 交通燈 控制器 設(shè)計(jì)
鏈接地址:http://appdesigncorp.com/p-6657747.html