VHDL交通燈控制器_第1頁
VHDL交通燈控制器_第2頁
VHDL交通燈控制器_第3頁
已閱讀5頁,還剩17頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、一、設(shè)計(jì)要求二、設(shè)計(jì)目的三、設(shè)計(jì)方案 四、設(shè)計(jì)程序 五、管腳分配六、硬件下載實(shí)現(xiàn)現(xiàn)象描述 七、體會(huì)、對(duì)設(shè)計(jì)工作的總結(jié)與展 一、設(shè)計(jì)要求: 在十字路口的兩個(gè)方向上各設(shè)一組紅、綠、黃燈,顯示順序?yàn)槠渲幸环较?lt;東西方向)是綠燈、黃燈、紅燈;另一方向 < 南北方向)是紅燈、綠燈、黃燈。 設(shè)置一組數(shù)碼管,以倒計(jì)時(shí)的方式顯示允許通行或禁止通行的時(shí)間,其中綠燈、黃燈、紅燈的持續(xù)時(shí)間分別是 20s、5s和25s。 當(dāng)各條路上任意一條上出現(xiàn)特殊情況時(shí),如當(dāng)消防車、救護(hù)車或其他需要優(yōu)先放行的車輛通過時(shí),各方向上均是紅燈亮,倒計(jì)時(shí)停止,且顯示數(shù)字在閃爍。當(dāng)特殊運(yùn)行狀態(tài)結(jié)束后,控制器恢復(fù)原來狀態(tài),繼續(xù)正常

2、運(yùn)行。二、設(shè)計(jì)方案:計(jì)數(shù)器的計(jì)數(shù)值與交通燈亮滅的關(guān)系如圖1所示。顯然,本課題的核心是一個(gè)計(jì)數(shù)范圍為 049<共50 s )的計(jì)數(shù)器和一個(gè)根據(jù)計(jì)數(shù)值做出 規(guī)定反應(yīng)的控制器。另外,所用實(shí)驗(yàn)箱配備的晶振為20MH z,因此還需要一個(gè)分頻電路。最后,要驅(qū)動(dòng)七段數(shù)碼管,顯然還需要一個(gè)譯碼電路。根據(jù)上面的分析,可以畫出如圖2所示的系統(tǒng)框圖。圖2交通燈控制器系統(tǒng)框圖2、計(jì)數(shù)器的設(shè)計(jì)這里需要的計(jì)數(shù)器的計(jì)數(shù)范圍為049。計(jì)到49后,下一個(gè)時(shí)鐘沿回復(fù)到0,開始下一輪計(jì)數(shù)。此外,當(dāng)檢測到特殊情況<Hold=''發(fā)生時(shí),計(jì)數(shù)器暫停計(jì)數(shù),而系統(tǒng)復(fù)位信號(hào)Reset則使計(jì)數(shù)器異步清 0。3、控制

3、器的設(shè)計(jì)控制器的作用是根據(jù)計(jì)數(shù)器的計(jì)數(shù)值控制發(fā)光二極管的亮、滅,以及輸出倒計(jì)時(shí)數(shù)值給 七段數(shù)譯管的分位譯碼電路。此外,當(dāng)檢測倒特殊情況<Hold=''發(fā)生時(shí),無條件點(diǎn)亮紅色的發(fā)光二級(jí)管。因?yàn)榭刂破饕獙?duì)計(jì)數(shù)值進(jìn)行判斷,很容易想到用IF語句來實(shí)現(xiàn)。本控制器可以有兩種設(shè)計(jì)方法,一種是利用時(shí)鐘沿的下降沿讀取前級(jí)計(jì)數(shù)器的計(jì)數(shù)值,然后做出反應(yīng);另一種則 是將本模塊設(shè)計(jì)成純組合邏輯電路,不需要時(shí)鐘驅(qū)動(dòng)。這兩種方法各有所長,必須根據(jù)所 用器件的特性進(jìn)行選擇:比如有些FPGA有豐富的寄存器資源,而且可用于組合邏輯的資源則相對(duì)較少,那么使用第1種方法會(huì)比較節(jié)省資源;而有些 CPLD的組合邏輯

4、資源則相對(duì)較多,用第 2種方法可能會(huì)更好。大家可嘗試兩種方法,比較一下哪種方法所用資源較 少,然后在最后的方案中采用這個(gè)方法。4、分位譯碼電路的設(shè)計(jì)因?yàn)榭刂破鬏敵龅牡褂?jì)時(shí)數(shù)值可能是 1 位或者 2 位十進(jìn)制數(shù),所以在七段數(shù)碼管的譯碼 電路前要加上分位電路 即將其分為 2 個(gè) 1 位十進(jìn)制數(shù),如 25 分為 2 和 5, 7 分為 0 和 7)。與控制器一樣,分位電路同樣可以由時(shí)鐘驅(qū)動(dòng),也可以設(shè)計(jì)成純組合邏輯電路。控制器 中,引入了寄存器。三、程序語言: 交通燈帶有點(diǎn)陣顯示 LIBRARY IEEE 。USE IEEE.STD_LOGIC_1164.ALL 。USE IEEE.STD_LOGIC

5、_UNSIGNED.ALL 。USE IEEE.STD_LOGIC_ARITH.ALL 。ENTITY jtd ISPORT(duan : OUT STD_LOGIC_VECTOR(7 DOWNTO0。-數(shù)碼管顯示 bed 碼 from 100 to 91hang,lie:out std_logic_vector(7 downto 0。- 點(diǎn)陣行輸出和列輸出led,light_es : OUT STD_LOGIC_VECTOR(3 DOWNTO 0 。- 數(shù)碼管和燈掃描 led 6 5 2 1| light66 67 68 69 led_no: OUT STD_LOGIC_VECTOR(1 D

6、OWNTO 0。-light : OUT STD_LOGIC_VECTOR(2 DOWNTO 0。 -燈 7270 71B1eep : OUT STD_LOGIC 。- 7clk,jinji : IN STD_LOGIC- 頻率輸入和緊急處理端 。END jtd 。ARCHITECTURE one OF jtd ISSIGNAL clk_1k,clk_1 : STD_LOGIC 。SIGNAL cnt4 : INTEGER RANGE 0 TO 3。 用于計(jì)數(shù)SIGNAL num,num1,num2,num3,num4 : INTEGER RANGE 0 TO 9 。SIGNAL L1,L2:

7、 STD_LOGIC_VECTOR(2 DOWNTO 0。 - 燈顯示 SIGNAL time1,time2: INTEGER RANGE 0 TO 25 。 時(shí)間顯示 signal t:std_logic_vector(2 downto 0。 點(diǎn)陣信號(hào)傳輸signal q:std_logic_vector(1 downto 0。 點(diǎn)陣輸出顯示信號(hào)BEGINled_no<="11" 。 把數(shù)碼管第三第四位屏蔽 1KHz 頻率輸出 process(clk>variable cnt1: integer range 0 to 250。 variable cnt2: i

8、nteger range 0 to 100。 Beginif clk'event and clk='1' thenif cnt1=250 thencnt1:=0。if cnt2=100 thencnt2:=0 。clk_1k<=not clk_1k 。elsecnt2:=cnt2+1 。end if。elsecnt1:=cnt1+1。end if。end if。end process。 點(diǎn)陣掃描 process(clk_1k>variable count:integer range 0 to 8。beginif clk_1k'event and cl

9、k_1k='1' thenif count<=8 then count 數(shù)用于循環(huán)掃描行用if count=8 thencount:=0。end if。case count iswhen 0 => hangv="00000001"。t<="000"。- -掃描第一行,并把 t 賦予 000 因?yàn)樾盘?hào) t 的變化觸發(fā)下一個(gè)進(jìn) 程when 1 => hang<="00000010" 。 t<="001" 。 - -掃描第二行when 2 => hang<=

10、"00000100" 。 t<="010" 。 - -掃描第三行when 3 => hang<="00001000" 。 t<="011" 。when 4 => hang<="00010000" 。 t<="100" 。when 5 => hang<="00100000" 。 t<="101" 。when 6 => hang<="01000000"

11、; 。 t<="110" 。when 7 => hang<="10000000" 。 t<="111" 。when others =>hang<="00000000" t<="000" 。end case。count:=count+1。end if。end if。end process。process(t>variable shu:integer range 0 to 7。begincase t is 根據(jù) t 的值去查表when "00

12、0" => shu:=0 。變量的賦值是when "001" => shu:=1 。 立即發(fā)生的when "010" => shu:=2 。when "011" => shu:=3 。when "100" => shu:=4 。when "101" => shu:=5 。when "110" => shu:=6 。when "111" => shu:=7 。when others =>null

13、。 end case。case q is再根據(jù)相應(yīng)的值送到列上去when "01"=>case shu iswhen 0 => lie<="11111111"。 when 1 => lie<="11111111"。 when 2 => lie<="11111111"。 when 3 => lie<="10111101"。 when 4 => lie<="00000000" 。 when 5 => lie&

14、lt;="10111101"。 when 6 => lie<="11111111"。 when 7 => lie<="11111111"。 when others =>lie<="11111111"。 END CASE 。when "10"=>case shu iswhen 0 => lie<="11101111"。 when 1 => lie<="11000111"。 when 2 =&g

15、t; lie<="10000011" 。 when 3 => lie<="11101111"。 when 4 => lie<="11101111"。 when 5 => lie<="10000011" 。 when 6 => lie<="11000111"。 when 7 => lie<="11101111"。 when others =>lie<="11111111"。 END

16、 CASE 。when "11"=>case shu iswhen 0 => lie<="00111100"。when 1 => lie<="00111100"。when 2 => lie<="11011011"。when 3 => lie<="11100111"。when 4 => lie<="11100111"。when 5 => lie<="11011011"。when 6

17、 => lie<="00111100"。when 7 => lie<="00111100"。when others =>lie<="11111111"。 END CASE 。when others=>null。end case。end process。1s 分頻加計(jì)數(shù) PROCESS(clk_1k>VARIABLE count_1k : INTEGER RANGE 0 TO 499BEGINIF clk_1k'EVENT AND clk_1k='1' THENIF

18、 cnt4=3 THENcnt4<=0。ELSEcnt4<=cnt4+1。END IF 。IF count_1k=499 THEN count_1k:=0。 clk_1<= NOT clk_1 。ELSE count_1k:=count_1k+1。END IF 。END IF 。END PROCESS 。 倒計(jì)時(shí)和燈顯示 PROCESS(cnt4,L1,L2,time1,time2>BEGINCASE time1 IS 輸出時(shí)間 1WHEN 0 TO 9 => num1<=0 。WHEN 10 TO 19 => num1<=1 。WHEN 20

19、TO 25 => num1<=2 。 WHEN OTHERS => num1<=0 。取余 END CASE 。num2<=time1 REM 10 。 CASE time2 ISWHEN 0 TO 9 => num3<=0WHEN 10 TO 19 => num3<=1 。WHEN 20 TO 25 => num3<=2 。WHEN OTHERS => num3<=0 。END CASE 。num4<=time2 REM 10 。CASE cnt4 IS動(dòng)態(tài)掃WHEN 0 => led<=&quo

20、t;1110" 。 - 描數(shù)碼管 <從右到左) num<=num1。 light_cs<="1110"。 light<=L1 。WHEN 1 => led<="1101" 。 num<=num2。 light_cs<="1101"。 light<=L2 。WHEN 2 => led<="1011" 。 num<=num3。 light_cs<="1011"。light<=L1 。WHEN 3 =>

21、led<="0111" 。num<=num4。light_cs<="0111"。light<=L2 。WHEN OTHERS =>led<="1111"。light_cs<="1111"。END CASE 。END PROCESS 。 譯碼 PROCESS(num>BEGINCASE num ISWHEN0=>duan<="00111111" 。 0到 9WHEN 1=>duan<="00000110"

22、。WHEN 2=>duan<="01011011" 。WHEN 3=>duan<="01001111" 。WHEN 4=>duan<="01100110" 。WHEN 5=>duan<="01101101" 。WHEN 6=>duan<="01111101" 。WHEN 7=>duan<="00000111" 。WHEN 8=>duan<="01111111" 。WHEN

23、9=>duan<="01101111" 。WHEN OTHERS=>duan<="00000000" 。END CASE 。END PROCESS 。PROCESS(clk_1>VARIABLE i,j : INTEGER RANGE 0 TO 2 :=0。VARIABLE w: INTEGER RANGE 0 TO 1 :=0 。BEGINIF clk_1'EVENT AND clk_1='1' THENIF jinji='0' then 判斷是否要緊急制動(dòng) -IF time1=0

24、THENIF i=2 THEN i:=0。ELSEi:=i+1 。END IF 。CASE i ISWHEN 1 => time1<=20 。L1<="001" 。B1eep<='0' 。WHEN 2 => time1<=5。L1<="010" 。B1eep<='1'。WHEN 0 => time1<=25。L1<="100" 。點(diǎn)陣B1eep<='0'。 q<="01" 。顯示前進(jìn)方向 W

25、HEN OTHERS => time1<=24。END CASE 。ELSE time1<=time1-1 。END IF 。IF time2=0 THENIF j=2 THENj:=0。ELSEj:=j+1 。 END IF 。 CASE j ISWHEN 1 => time2<=25。 L2<="100" 。 B1eep<='0'。 q<="10" 。 點(diǎn)陣顯示前進(jìn)方向 WHEN 2 => time2<=20。 L2<="001" 。 B1eep&l

26、t;='0'。WHEN 0 => time2<=5。 L2<="010" 。B1eep<='1'。WHEN OTHERS => time2<=24。END CASE 。ELSEtime2<=time2-1 。END IF 。else 出現(xiàn)緊急制動(dòng)情況的表現(xiàn)B1eep<='1' 。 time1<=0 。 time2<=0 。q<="11" 。IF w=1 THEN w:=0。ELSE w:=w+1 。END IF 。CASE w IS 紅燈的閃

27、爍WHEN 1 =>L1<="100" 。L2<="100" 。 WHEN 0 =>L1<="000" 。L2<="000" 。end caseend if。END IF。END PROCESS。END one。四、管腳分配AVAVB vIBaHe«m33slalSBll y SI $1 $vmACTOYOOOOOOOOOASVHAmooooooooS9'lln!pi!9-u!piablr!?l9瓦靜53單aTop viewMAX IIEPM240T100C5&

28、gt;1 -W P'l WJJaii rinsNode NameDirectionLocationI/O BankVtef Group1BleepOutputpm_712dkInputpihi213Oduan7OutputPIN_10024aduan6Outputpin/g25oduan5OutputPIN_9826duan4OutputPIN_9727eduar3OutputP1N 9628duan2OutputPIN_9529duanlOutputPIN_92210duan0OutputPIN.91211hang7OutputPIN_9'3212ahang6OutputPIN S9213*hang5OutputPIN_8S214hang4OutputPIN_8715母hang3OutputPIN_S62ohang2OutputPIN_B5217aha

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論