版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、<p> CPLD/FPGA開發(fā)技術大作業(yè)</p><p> 題 目: 基于VHDL的交通燈控制器設計 </p><p> 院 系: 信息與電氣工程學院 </p><p> 班 級: 08級電子信息工程 </p><
2、;p> 學 號: </p><p> 學生姓名: ××× ××× </p><p> 指導教師: </p><p> 成
3、 績: </p><p><b> 2011年7月</b></p><p> 基于VHDL的交通燈控制器設計</p><p> 一 、系統(tǒng)功能與要求</p><p><b> 1系統(tǒng)功能:</b></p
4、><p> 實現(xiàn)十字路口的交通燈顯示。</p><p><b> 2系統(tǒng)要求:</b></p><p> 用兩組紅、黃、綠三色燈作為兩個方向的紅、黃、綠燈;</p><p> 用兩組數(shù)碼管作為東西和南北方向的倒計時顯示,顯示時間為紅燈45秒、綠燈50秒、黃燈5秒;</p><p> 按照實
5、際紅綠燈規(guī)則,使紅、黃、綠燈與其顯示時間。</p><p><b> 設計思路及實現(xiàn)方法</b></p><p><b> 1基本思路</b></p><p> 要完成本實驗,首先必須了解交通路燈的亮滅規(guī)律。本實驗需要用到實驗箱上交通燈模塊中的發(fā)光二極管,即紅、黃、綠各三個。依人們的交通常規(guī),“紅燈停,綠燈行,黃燈
6、提醒”。其交通燈的亮滅規(guī)律為:初始態(tài)是兩個路口的紅燈全亮,之后東西路口的綠燈亮,南北路口的紅燈亮,東西方向通車,延時一段時間后,東西路口綠燈滅,黃燈開始閃爍。閃爍若干次后,東西路口紅燈亮,而同時南北路口的綠燈亮,南北方向開始通車,延時一段時間后,南北路口的綠燈滅,黃燈開始閃爍。閃爍若干次后,再切換到東西路口方向,重復上述過程。</p><p><b> 2實現(xiàn)方法</b></p>
7、;<p> 交通燈控制器用一個有限自動機來實現(xiàn)上述功能,它定義了5種狀態(tài),見下表:</p><p> 其中狀態(tài)4為初始狀態(tài),其狀態(tài)轉換圖如下:</p><p> 值 狀態(tài)</p><p> 000 0</p><p> 100 1</p><p> 0
8、10 2</p><p> 110 3</p><p> 111 4</p><p> 在結構體中包含一個進程,此進程帶一個顯示敏感信號表,其敏感信號包括TimeL,Times和Cars。所謂敏感信號表,如以下語句:</p><p> Process(cars,timeoutL,timeout
9、S)</p><p> 帶顯示敏感信號表的進程,當敏感信號表中的任何一個信號上發(fā)生事件時,此進程將被激活。</p><p> 進程說明部分定義的幾個變量的意義如下:</p><p> newstate:下一個狀態(tài)值。</p><p> current_state:當前狀態(tài)值。</p><p> newHL:南
10、北方向燈的狀態(tài),三位位長的二進制位串,每一位分別表示綠、黃紅 燈的亮滅狀態(tài)。如“100”表示路燈為紅燈,“010”表示路燈為黃燈“001” 表示路燈為綠燈</p><p> newFL:東西方向燈的狀態(tài),三位位長的二進制位串,每一位分別表示綠、黃紅 燈的亮滅狀態(tài)。</p><p> newST:用于啟動外部計時器的輸出位。</
11、p><p> 在進程中使用一條case語句完成狀態(tài)的轉換關系。</p><p> Case current_state is</p><p> When "000"=>newHL:=“100”newFL:=“001”;</p><p> if (Cars="1")and(timeoutL=
12、"1") then</p><p> newstate:="100";newST:="1";</p><p> newHL:="010";newFL:="001";</p><p><b> else</b></p><
13、p> newstate:="000";newST:="0";</p><p><b> end if;</b></p><p> When "100"=>newHL:=“010”newFL:=“001”;</p><p> if (timeoutS="
14、;1") then</p><p> newstate:="010";newST:="1";</p><p> newHL:="001";newFL:="100";</p><p><b> else</b></p><p>
15、 newstate:="100";newST:="0";</p><p><b> end if;</b></p><p> When "010"=>newHL:=“001”newFL:=“100”;</p><p> if (Cars="1"
16、) or (timeoutL="1") then</p><p> newstate:="100";newST:="1";</p><p> newHL:="001";newFL:="010";</p><p><b> else</b>&
17、lt;/p><p> newstate:="010";newST:="0";</p><p><b> end if;</b></p><p> When "110"=>newHL:=“001”newFL:=“010”;</p><p> if
18、(timeoutS="1") then</p><p> newstate:="000";newST:="1";</p><p> newHL:="100";newFL:="001";</p><p><b> else</b></p
19、><p> newstate:="110";newST:="0";</p><p><b> end if;</b></p><p> When "111"=>newstate:="000";</p><p> newHL:=&q
20、uot;100";</p><p> newFL:="001";</p><p> newST:="0";</p><p> When others=></p><p><b> end case;</b></p><p> 在ca
21、se語句的不同分支中又使用if語句完成狀態(tài)的判斷和轉換。需要注意的是信號在賦值之后,其值并不立即有效(這是由于delta延遲的存在所造成的),只有變量的值在賦值之后會立即有效。因此在本例中用于表示狀態(tài)的current_stat被定義為變量。</p><p><b> 模擬結果分析</b></p><p> 模擬結果部分波形如圖所示:</p><
22、p> 初始時,東西路為紅燈,其值為001,南北路上為綠燈,其值為100.當東西路上來車時,則南北路上的燈開始轉為黃色,但此時東西路上的燈仍為紅燈,同時有限狀態(tài)機的狀態(tài)開始發(fā)生變化。經(jīng)過一段時間后,南北路轉為紅燈,同時東西路轉為綠燈,同時有限狀態(tài)機的狀態(tài)變?yōu)?10,再經(jīng)過一段較短的時間后,不管東西路上是否有車,燈轉為黃色,此時南北路上仍為紅燈,其后,東西路上變?yōu)榧t燈,南北路上變?yōu)榫G燈。周而復始,不斷循環(huán)。</p>&
23、lt;p> 三、設計與仿真結果分析</p><p><b> 1程序:</b></p><p> LIBRARY IEEE;</p><p> USE IEEE.STD_LOGIC_1164.ALL;</p><p> USE IEEE.STD_LOGIC_UNSIGNED.ALL;</p>
24、<p> ENTITY traffic is</p><p> GENERIC( green1:integer:=100;--定義主道綠燈亮50S</p><p> yellow1 :integer:=50 ;--定義主道黃燈亮25S</p><p> green2:integer:=150;--定義支道綠燈亮40S</p>
25、<p> yellow2 :integer:=50);--定義支道黃燈亮25S</p><p><b> PORT(</b></p><p> CLK,RST: IN STD_LOGIC;</p><p> lgt1_r,lgt1_y,lgt1_g,lgt2_r,lgt2_y,lgt2_g: out STD_LOGIC);&l
26、t;/p><p> End traffic;</p><p> ARCHITECTURE rtl of traffic is</p><p> Type states is (st0,st1,st2,st3);--定義控制器各種狀態(tài)</p><p> Signal state:states:=st0; --初始
27、化狀態(tài)</p><p> Signal cnt:integer range 0 to 200:=1;--定義計數(shù)器</p><p> Signal cnt_enb:std_logic:='0'; ---初始化計數(shù)器使能信號</p><p> signal clkcnt: std_logic_vector(18 downto 0);&l
28、t;/p><p> constant divcnt: std_logic_vector(18 downto 0):="1111001110001000000";</p><p> signal clkdiv: std_logic;</p><p> signal tc_clkcnt: std_logic; </p><p&g
29、t; signal clk_int: std_logic;</p><p><b> begin</b></p><p> process(clk,rst)</p><p><b> begin</b></p><p> if(rst='0')then</p>
30、<p> clkcnt<="0000000000000000000";</p><p> elsif(clk'event and clk='1')then</p><p> if(clkcnt=divcnt)then----// t=498752*25ns=12.5ms</p><p> cl
31、kcnt<="0000000000000000000";</p><p><b> else</b></p><p> clkcnt<=clkcnt+1;</p><p><b> end if;</b></p><p><b> end if;&l
32、t;/b></p><p> end process;</p><p> tc_clkcnt<='1' when clkcnt=divcnt else --//12.5ms產(chǎn)生計數(shù)溢出脈沖 '0';</p><p> process(tc_clkcnt,rst)</p><p><b&g
33、t; begin</b></p><p> if(rst='0')then</p><p> clkdiv<='0';</p><p> elsif(tc_clkcnt'event and tc_clkcnt='1')then</p><p> clkdiv&
34、lt;=not clkdiv; --//翻轉時鐘 t=25ms f=40hz</p><p><b> end if;</b></p><p> end process;</p><p> process(clkdiv,rst)</p><p><b> begin</b></p&g
35、t;<p> if(rst='0')then</p><p> clk_int<='0';</p><p> elsif(clkdiv'event and clkdiv='1')then</p><p> clk_int<= not clk_int; --//分頻 t=50ms
36、 f=20hz</p><p><b> end if;</b></p><p> end process;</p><p> Process(clk_int,rst)</p><p><b> Begin</b></p><p> if (rst='0
37、39;) then</p><p> state<=st0;</p><p><b> cnt<=1;</b></p><p> Elsif (clk_int'event and clk_int='1') then</p><p> if (cnt_enb='1
38、') then</p><p> cnt<=cnt+1;--計數(shù)器計數(shù)</p><p><b> else</b></p><p><b> cnt<=1;</b></p><p><b> end if;</b></p><
39、p> Case state is</p><p> when st0=></p><p> if (cnt=green1 ) then</p><p> state<=st1;</p><p><b> Else</b></p><p> state<=
40、st0; End if;</p><p> when st1=></p><p> if (cnt=yellow1 ) then</p><p> state<=st2;</p><p><b> Else</b></p><p> state<=st1;
41、 End if;</p><p> when st2=></p><p> if (cnt=green2 ) then</p><p> state<=st3;</p><p><b> Else</b></p><p> state<=st2; End
42、 if;</p><p> when st3=></p><p> if (cnt=yellow2 ) then</p><p> state<=st0;</p><p><b> Else</b></p><p> state<=st3; End if;
43、</p><p><b> End case;</b></p><p><b> End if;</b></p><p> End process;</p><p> Process(state)</p><p><b> Begin</b>
44、</p><p> Case state is</p><p> when st0=></p><p> lgt1_r<='0';</p><p> lgt1_y<='1';</p><p> lgt1_g<='1';</p&
45、gt;<p> lgt2_r<='0';</p><p> lgt2_y<='1';</p><p> lgt2_g<='1';</p><p> Cnt_enb<='1';</p><p> if (cnt=green1) t
46、hen</p><p> cnt_enb<='0';</p><p><b> end if;</b></p><p> when st1=></p><p> lgt1_r<='1';</p><p> lgt1_y<='
47、;1';</p><p> lgt1_g<='0';</p><p> lgt2_r<='1';</p><p> lgt2_y<='0';</p><p> lgt2_g<='1';</p><p> Cnt_e
48、nb<='1';</p><p> if (cnt=yellow1) then</p><p> cnt_enb<='0';</p><p><b> end if;</b></p><p> when st2=></p><p>
49、 lgt1_r<='0';</p><p> lgt1_y<='0';</p><p> lgt1_g<='1';</p><p> lgt2_r<='1';</p><p> lgt2_y<='1';</p>
50、<p> lgt2_g<='1';</p><p> Cnt_enb<='1';</p><p> if (cnt=green2) then</p><p> cnt_enb<='0';</p><p><b> end if;</b&g
51、t;</p><p> when st3=></p><p> lgt1_r<='1';</p><p> lgt1_y<='0';</p><p> lgt1_g<='0';</p><p> lgt2_r<='0
52、9;;</p><p> lgt2_y<='1';</p><p> lgt2_g<='0';</p><p> Cnt_enb<='1';</p><p> if (cnt=yellow2) then</p><p> cnt_enb&l
53、t;='0';</p><p><b> end if;</b></p><p> End case;</p><p> End process;</p><p> End rtl; </p><p><b> 2 仿真結果:</b></p
54、><p><b> 紅——紅</b></p><p><b> 紅——黃</b></p><p><b> 黃——綠</b></p><p><b> 設計心得</b></p><p> 通過這次交通燈控制器設計和實現(xiàn),我們掌
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 交通燈課程設計--交通燈控制器
- 基于vhdl語言的交通燈控制器設計
- 交通燈課程設計報告---交通燈控制器
- 交通燈控制器課程設計
- 交通燈控制器課程設計
- 課程設計---交通燈控制器
- 課程設計---交通燈控制器設計
- 課程設計----交通燈控制器
- 交通燈控制器課程設計
- 課程設計---交通燈控制器
- 課程設計--交通燈控制器
- 課程設計-- 交通燈控制器設計
- eda交通燈課程設計---交通信號控制器的vhdl設計
- 交通燈課程設計--基于fpga的交通燈設計
- 基于fpga的交通燈控制器設計
- 交通控制器課程設計---交通燈控制器電路的設計
- 交通燈控制器課程設計報告
- 模擬交通燈控制器課程設計
- 基于fpga的交通燈控制課程設計
- eda課程設計--交通燈控制器
評論
0/150
提交評論