VHDL語言的十字路口交通燈控制器設計.doc
《VHDL語言的十字路口交通燈控制器設計.doc》由會員分享,可在線閱讀,更多相關《VHDL語言的十字路口交通燈控制器設計.doc(9頁珍藏版)》請在裝配圖網上搜索。
南昌大學實驗報告 學生姓名: 學 號: 專業(yè)班級: 實驗類型: 驗證 綜合 設計 創(chuàng)新 實驗日期: 實驗成績: 實驗五 十字路口交通燈控制器設計 一、實驗目的1、進一步加強經典狀態(tài)機的設計2、學會設計模可變倒計時計數器二、實驗要求一條主干道,一條鄉(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)間公路右側各埋有一個傳感器,當有車輛通過鄉(xiāng)間公路時,發(fā)出請求信號S=1,其余時間S=0;平時系統(tǒng)停留在MGCR(主干道通行)狀態(tài),一旦S信號有效,經MYCR(黃燈狀態(tài))轉入MRCG(鄉(xiāng)間公路通行)狀態(tài),但要保證MGCR的狀態(tài)不得短于一分鐘;一旦S信號無效,系統(tǒng)脫離MRCG狀態(tài)。隨即經MRCY(黃燈狀態(tài))進入MGCR狀態(tài),即使S信號一直有效,MRCG狀態(tài)也不得長于20秒鐘。三、設計過程1,交通燈工作原理分析:根據交通燈控制器的功能與要求,將其總體電路分為狀態(tài)控制,倒計時,數碼管顯示,信號燈顯示模塊。外部兩路脈沖振蕩器的頻率選為1 kHz和1 Hz的信號,1khz信號用于顯示模塊的掃描,1 Hz信號用做倒計時模塊的計數脈沖。由于實驗箱只能接一個信號源故加入分頻模塊。2,計時電路應滿足下列條件1)當S=1,且計數器已完成60計數時,計數器進入模4計數,隨后進入模 20計數,再進入模4計數,再回到模60計數 2)當計數器進行摸20計數時,一旦S變?yōu)?,計數器立馬進入模4計數, 再進入模60計數 3)完成模20計數后,不論S為0或1,計數器進入模4計數,再進入模60 計數 4)若計數器未完成模60計數,不論S如何變話,計數器將繼續(xù)進行模60 計數3、使用文本設計底層文件,并生成相應元器件,再使用原理圖設計頂層文件四、實驗步驟 1、頂層文件的設計頂層原理圖設計可以依據系統(tǒng)框圖進行,由狀態(tài)控制計數模塊,數碼管顯示分頻模塊和交通燈顯示模塊(jtdjs,jtdfp,jtdxs)三部分組成。2,各模塊設計文件 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 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 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;STATEIF 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;STATEIF 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; JTDFPLIBRARY 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 CONT8001 THEN CONT8 =CONT8+1; ELSE CONT80); END IF; END IF; CASE CONT8 IS WHEN 000 = sel0=0;sel1=1;sel2=0;A sel0=1;sel1=0;sel2=0;ANULL; END CASE; END PROCESS ; D:PROCESS(A) BEGIN CASE A IS WHEN 0000 =SGSGSGSGSGSGSGSGSGSGNULL; END CASE; END PROCESS; END behav; JTDXSLIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY JTDXS ISPORT(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;CYIF 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;CYIF 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;CYIF 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;CYIF 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;CGEnd Time 來設定仿真結束時間 4)在CLOCK窗口中設置clk的時鐘周期為1us5)點擊save保存6) 通過Tools下的Simulator Tools項進行仿真,然后觀察輸出波形。仿真波形如下: S=1鄉(xiāng)間公路狀態(tài)(既MGCR60S-MYCG4S-MRCG20S-MGCY4S-MGCR60S) S=0轉S=1立即進入MYCR4S-MRCG20S7,引腳鎖定8,連接到實驗箱下載程序觀察實驗結果:有開關K1控制S的值,當K1斷開時實驗箱交通燈處于MGCR狀態(tài),數碼管在倒數60計數。合上K1后S由0轉入1狀態(tài),數碼管繼續(xù)倒數60計數且交通燈仍處于MGCR狀態(tài),60計數完成后隨即轉入MYCG4S-MRCG20S-MGCY4S-MGCR60S的循環(huán)狀態(tài)直到S再次由1變成0,數碼管立即停止計數進入倒數4S的黃燈狀態(tài),4S結束后交通燈進入MGCR狀態(tài)按下reset鍵數碼管從頂端重新開始計時不清楚交通燈狀態(tài)- 配套講稿:
如PPT文件的首頁顯示word圖標,表示該PPT已包含配套word講稿。雙擊word圖標可打開word文檔。
- 特殊限制:
部分文檔作品中含有的國旗、國徽等圖片,僅作為作品整體效果示例展示,禁止商用。設計者僅對作品中獨創(chuàng)性部分享有著作權。
- 關 鍵 詞:
- VHDL 語言 十字路口 交通燈 控制器 設計
裝配圖網所有資源均是用戶自行上傳分享,僅供網友學習交流,未經上傳用戶書面授權,請勿作他用。
鏈接地址:http://www.szxfmmzy.com/p-6657747.html