北郵數(shù)字電路實驗報告——交通燈控制器(VHDL)(最全的)_第1頁
北郵數(shù)字電路實驗報告——交通燈控制器(VHDL)(最全的)_第2頁
北郵數(shù)字電路實驗報告——交通燈控制器(VHDL)(最全的)_第3頁
北郵數(shù)字電路實驗報告——交通燈控制器(VHDL)(最全的)_第4頁
北郵數(shù)字電路實驗報告——交通燈控制器(VHDL)(最全的)_第5頁
已閱讀5頁,還剩19頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、 課題三:交通燈控制器學(xué)院:信息與通信工程學(xué)院專業(yè):通信工程姓名:馬賽克學(xué)號:09210246課題三:交通燈控制器一設(shè)計課題的任務(wù)要求(一)、實驗?zāi)康?. 熟練掌握 vhdl 語言和quartusii 軟件的使用;2. 理解狀態(tài)機的工作原理和設(shè)計方法;3. 掌握利用 eda 工具進行自頂向下的電子系統(tǒng)設(shè)計方法;(二)、相關(guān)知識本實驗要利用 cpld 設(shè)計實現(xiàn)一個十字路口的交通燈控制系統(tǒng),與其他控制系統(tǒng)一樣,本系統(tǒng)劃分為控制器和受控電路兩部分。控制器使整個系統(tǒng)按設(shè)定的工作方式交替指揮車輛及行人的通行,并接收受控部分的反饋信號,決定其狀態(tài)轉(zhuǎn)換方向及輸出信號,控制整個系統(tǒng)的工作過程。路口交通燈控制系

2、統(tǒng)的有東西路和南北路交通燈 r(紅)、y(黃)、g(綠)三色,所有燈均為高電平點亮。設(shè)置20s 的通行時間和5s 轉(zhuǎn)換時間的變模定時電路,用數(shù)碼管顯示剩余時間。提供系統(tǒng)正常工作/復(fù)位和緊急情況兩種工作模式。(三)、實驗任務(wù)1.基本任務(wù):設(shè)計制作一個用于十字路口的交通燈控制器。1). 南北和東西方向各有一組綠、黃、紅燈用于指揮交通,綠燈、黃燈和紅燈的持續(xù)時間分別為20 秒、5 秒和25 秒;2). 當(dāng)有特殊情況(如消防車、救護車等)時,兩個方向均為紅燈亮,計時停止,當(dāng)特殊情況結(jié)束后,控制器恢復(fù)原來狀態(tài),繼續(xù)正常運行;3). 用兩組數(shù)碼管,以倒計時方式顯示兩個方向允許通行或禁止通行的時間;2.提高

3、要求:1). 增加左、右轉(zhuǎn)彎顯示控制功能;2). 緊急狀況時增加聲光警告功能;3). 自擬其它功能。二系統(tǒng)設(shè)計(包括設(shè)計思路、總體框圖、分塊設(shè)計)(一)設(shè)計思路 利用有限狀態(tài)機描繪出交通燈的狀態(tài)轉(zhuǎn)移圖,并設(shè)置記錄東西和南北路口可通行時間的全局變量count,共設(shè)置四個正常狀態(tài),狀態(tài)間的轉(zhuǎn)移以count的值作為判斷條件。對于兩種特殊情況:當(dāng)復(fù)位信號reset為高電平時,則回到最初狀態(tài);當(dāng)緊急輸入信號emergency為高電平時,則轉(zhuǎn)移到一特殊狀態(tài)。(二)總體框圖1.系統(tǒng)結(jié)構(gòu)框圖2.模塊劃分方框圖3控制模塊流程圖4.狀態(tài)轉(zhuǎn)移圖(三)分塊設(shè)計 -在vhdl設(shè)計中,采用自頂向下的設(shè)計思路。1.頂層模塊

4、中,根據(jù)硬件設(shè)計,設(shè)置如下端口:u 外部時鐘信號:clku 緊急狀態(tài)按鍵:emergencyu 南北方向狀態(tài)燈:light1u 東西方向狀態(tài)燈:light2u 蜂鳴器控制:bellu 數(shù)碼管顯示信號:numu 數(shù)碼管共陰極控制:cat_temp2.在底層中,把不同功能分模塊設(shè)計。u 主分頻模塊:由于外部時鐘信號clk的頻率為50mhz,而實際需要的內(nèi)部計時時鐘頻率為1hz,需要一個分頻電路。輸入端口:clk外部時鐘信號輸出端口:clk_out分頻后信號u 次分頻模塊:由于主頻對于數(shù)碼管掃描來說頻率過高,因而再進行一次分頻輸入端口:clk外部時鐘信號輸出端口:clk_out1分頻后信號u 計數(shù)器

5、模塊:由于整個過程的顯示周期為50秒,即50個狀態(tài),所以該模塊為計數(shù)器模塊,計數(shù)周期為50,輸入為1hz的外部時鐘,并加入緊急信號和復(fù)位信號,當(dāng)輸入緊急信號,計數(shù)停止,當(dāng)輸入復(fù)位信號,計數(shù)置1.通過該計數(shù)器的計數(shù)輸出信號來控制light模塊和countdown模塊的狀態(tài)。輸入端口:clk時鐘信號,emergency緊急信號,reset復(fù)位信號輸出端口:counter計數(shù)狀態(tài)信號,bell報警信號u 數(shù)碼管計數(shù)模塊:倒計時顯示模塊,通過輸入的counter和clk來控制數(shù)碼管共陰極和7段數(shù)碼管數(shù)字顯示控制。輸入接口:clk時鐘信號,count計數(shù)器信號輸出接口:cat_temp共陰極控制,num

6、in數(shù)字輸出u 顯示模塊:接收數(shù)字信號,進行7位數(shù)碼管顯示譯碼輸出。輸入接口:numin輸入信號輸出接口:num譯碼輸出u 信號燈控制模塊:使用狀態(tài)機控制5個狀態(tài)輸入接口:count計數(shù)器信號,emergency緊急狀態(tài)控制,reset復(fù)位信號輸出接口:light1,light2信號燈輸出三仿真波形及波形分析仿真波形-由于時鐘為50mhz,故在仿真時為了波形圖更易讀,將分頻器設(shè)為20分頻1狀態(tài)周期為150,在每個狀態(tài)內(nèi),數(shù)碼管共陰極進行掃描,且掃描同時數(shù)碼管顯示進行循環(huán)變化2周期狀態(tài),在120,2125,2645,4650進行紅綠燈顯示變化3.一整個周期狀態(tài)150,在120,2125,2645

7、,4650進行紅綠燈顯示變化 4.多個周期循環(huán)5.緊急狀態(tài)和復(fù)位狀態(tài)四源程序(注釋)l trafficilght.vhd-主程序library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;use ieee.std_logic_arith.all;entity trafficlight is port( clk,reset,emergency:in std_logic;-輸入時鐘信號,復(fù)位信號,緊急信號 light1,light2:out std_logic_vector(2 downto 0);-輸出東西南北

8、向兩個紅信號num:out std_logic_vector(6 downto 0);-輸出7端數(shù)碼管選通信號cat_temp:out std_logic_vector(5 downto 0);-輸出7端數(shù)碼管共陰極信號bell:out std_logic-輸出警鈴信號 );end trafficlight;architecture main of trafficlight issignal tempclk:std_logic;signal tempclk2:std_logic;signal tempcount:std_logic_vector(5 downto 0);signal tempn

9、um:std_logic_vector(3 downto 0);component div is-組合frequency模塊,以下同 port( clk:in std_logic; clk_out:out std_logic );end component;component div2 is port( clk:in std_logic; clk_out:out std_logic );end component;component count isport(clk:in std_logic;reset:in std_logic;emergency:in std_logic;counter:o

10、ut std_logic_vector (5 downto 0);bell:out std_logic);end component;component light is port( emergency:in std_logic; count:in std_logic_vector(5 downto 0); light1,light2:out std_logic_vector(2 downto 0) );end component;component shumaguan is port( count:in std_logic_vector(5 downto 0); clk:in std_log

11、ic; numin:out std_logic_vector(3 downto 0); cat_temp:out std_logic_vector(5 downto 0) );end component;component show isport(num_in:in std_logic_vector(3 downto 0);num:out std_logic_vector(6 downto 0);end component;begin-將各個模塊接口連接起來u1:div port map (clk=clk,clk_out=tempclk);u2:count port map(bell=bell

12、,clk=tempclk,reset=reset,emergency=emergency,counter=tempcount);u3:light port map(emergency=emergency,count=tempcount,light1=light1,light2=light2);u4:shumaguan port map(cat_temp=cat_temp,count=tempcount,clk=clk,numin=tempnum);u5:show port map (num_in=tempnum,num=num);u6:div2 port map (clk=clk,clk_ou

13、t=tempclk2);end main;l div.vhd-分頻器模塊,1hzlibrary ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity div isport(clk:in std_logic;clk_out:out std_logic);end div;architecture freq of div issignal temp:integer range 0 to 49999999;-設(shè)置分頻49999999,則為1hzbeginprocess(clk)beginif(clkevent a

14、nd clk=1)thenif(temp=4999999)thentemp=0;elsetemp=temp+1;end if;if temp=49999999 then clk_out=1; else clk_out=0; end if; end if;end process;end;l div2.vhd-次分頻器模塊,50khzlibrary ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity div2 isport(clk:in std_logic;clk_out:out std_logic);en

15、d div2;architecture freq of div2 issignal temp:integer range 0 to 4999;beginprocess(clk)beginif(clkevent and clk=1)thenif(temp=4999)thentemp=0;elsetemp=temp+1;end if;if temp=4999 then clk_out=1; else clk_out=0; end if; end if;end process;end;l count.vhd-計數(shù)器模塊(主要控制模塊),用外部時鐘設(shè)置了50個狀態(tài)的一個周期150 -由于該交通燈的狀態(tài)

16、為50種,數(shù)碼管有50種顯示狀態(tài) -完全通過控制計數(shù)器的停止和復(fù)位來控制閃燈和數(shù)碼管library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;use ieee.std_logic_arith.all;entity count isport(clk:in std_logic;-外部時鐘輸入reset:in std_logic;-復(fù)位信號輸入emergency:in std_logic;-緊急信號輸入counter:out std_logic_vector (5 downto 0):=000001;-計數(shù)信號輸

17、出bell:out std_logic-警鈴信號輸出);end count;architecture con of count issignal tempcount:integer range 1 to 50:=1;-定義信號計數(shù),初始狀態(tài)為1beginprocess(clk,reset,emergency)begin if clkevent and clk=1 then-外部時鐘,1hz if emergency=0 then-當(dāng)不是緊急狀態(tài) bell=0; if reset=1 then-復(fù)位狀態(tài) tempcount=1;-計數(shù)器回到初始狀態(tài)1 elsif tempcount=50 the

18、n tempcount=1;-計數(shù)器計數(shù)狀態(tài),加1 else tempcount=tempcount+1; end if; elsif emergency=1 then-當(dāng)緊急信號為高電平,進入緊急狀態(tài) tempcount=tempcount;-計數(shù)器停止計數(shù) bell=1;-警鈴為高電平 end if; end if; end process;counter=conv_std_logic_vector(tempcount,6);-內(nèi)部信號轉(zhuǎn)化為輸出end con;l light.vhd-交通燈顯示信號library ieee;use ieee.std_logic_1164.all;use i

19、eee.std_logic_unsigned.all;use ieee.std_logic_arith.all;entity light is port( emergency:in std_logic;-緊急信號輸入,控制緊急狀態(tài) count:in std_logic_vector(5 downto 0);-計數(shù)器輸入,控制其它正常狀態(tài) light1,light2:out std_logic_vector(3 downto 0)-交通燈信號輸出 );end light;architecture lightshow of light istype states is-設(shè)置狀態(tài)機,控制狀態(tài)(s0,

20、s1,s2,s3,s4);signal state:states;signal tempcount:integer range 1 to 50;beginp1:process(count,emergency)begintempcount=conv_integer(count);-將二進制輸入轉(zhuǎn)化為十進制計數(shù)信號 if emergency=1 then-emergency為高電平時為緊急狀態(tài) state state state state statelight1=0010;-南北綠燈 light2light1=0100;-南北黃燈 light2light1=1001;-南北紅燈,且禁止左轉(zhuǎn) li

21、ght2light1=1001;-南北紅燈,且禁止左轉(zhuǎn) light2light1=1001;-南北紅燈,且禁止左轉(zhuǎn) light2=1001;-東西紅燈,且禁止左轉(zhuǎn) end case;end process;end lightshow;l shumaguan.vhd-7段數(shù)碼管倒計時控制模塊library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;use ieee.std_logic_arith.all;entity shumaguan is port( count:in std_logic_vector(5

22、 downto 0);-計數(shù)器輸入信號 clk:in std_logic;-時鐘信號 numin:out std_logic_vector(3 downto 0);-輸出7段數(shù)碼管顯示數(shù)字信號,輸出到譯碼模塊 cat_temp:out std_logic_vector(5 downto 0)-7端數(shù)碼管共陰極輸出控制信號 );end shumaguan;architecture counter of shumaguan issignal temp:integer range 0 to 3;signal counter:integer range 1 to 50;signal cat:std_l

23、ogic_vector(5 downto 0):=011111;signal num_in:std_logic_vector(3 downto 0);beginp1:process(clk)-內(nèi)部時鐘,控制7段數(shù)碼管顯示掃描內(nèi)容begin counter=conv_integer(count);if(clkevent and clk=1)thenif(temp=3)thentemp=0;elsetemp=temp+1;end if;end if;end process p1;p2:process(counter,temp) begin countercase temp is-在每個狀態(tài)內(nèi)部設(shè)置

24、數(shù)碼管掃描過程,由于counter和-掃描時鐘不同 -則可在數(shù)碼管上同時顯示4個數(shù)字,以狀態(tài)1-(counter=1)為例 -顯示“1924”,并在共陰極上掃描,以下同 -共標(biāo)記50種狀態(tài) when 0=num_in=0001;catnum_in=1001;catnum_in=0010;catnum_in=0100;catcase temp is when 0=num_in=0001;catnum_in=1000;catnum_in=0010;catnum_in=0011;catcase temp is when 0=num_in=0001;catnum_in=0111;catnum_in=0

25、010;catnum_in=0010;catcase temp is when 0=num_in=0001;catnum_in=0110;catnum_in=0010;catnum_in=0001;catcase temp is when 0=num_in=0001;catnum_in=0101;catnum_in=0010;catnum_in=0000;catcase temp is when 0=num_in=0001;catnum_in=0100;catnum_in=0001;catnum_in=1001;catcase temp is when 0=num_in=0001;catnum

26、_in=0011;catnum_in=0001;catnum_in=1000;catcase temp is when 0=num_in=0001;catnum_in=0010;catnum_in=0001;catnum_in=0111;catcase temp is when 0=num_in=0001;catnum_in=0001;catnum_in=0001;catnum_in=0110;catcase temp is when 0=num_in=0001;catnum_in=0000;catnum_in=0001;catnum_in=0101;catcase temp is when

27、0=num_in=0000;catnum_in=1001;catnum_in=0001;catnum_in=0100;catcase temp is when 0=num_in=0000;catnum_in=1000;catnum_in=0001;catnum_in=0011;catcase temp is when 0=num_in=0000;catnum_in=0111;catnum_in=0001;catnum_in=0010;catcase temp is when 0=num_in=0000;catnum_in=0110;catnum_in=0001;catnum_in=0001;c

28、atcase temp is when 0=num_in=0000;catnum_in=0101;catnum_in=0001;catnum_in=0000;catcase temp is when 0=num_in=0000;catnum_in=0100;catnum_in=0000;catnum_in=1001;catcase temp is when 0=num_in=0000;catnum_in=0011;catnum_in=0000;catnum_in=1000;catcase temp is when 0=num_in=0000;catnum_in=0010;catnum_in=0

29、000;catnum_in=0111;catcase temp is when 0=num_in=0000;catnum_in=0001;catnum_in=0000;catnum_in=0110;catcase temp is when 0=num_in=0000;catnum_in=0000;catnum_in=0000;catnum_in=0101;catcase temp is when 0=num_in=0000;catnum_in=0100;catnum_in=0000;catnum_in=0100;catcase temp is when 0=num_in=0000;catnum

30、_in=0011;catnum_in=0000;catnum_in=0011;catcase temp is when 0=num_in=0000;catnum_in=0010;catnum_in=0000;catnum_in=0010;catcase temp is when 0=num_in=0000;catnum_in=0001;catnum_in=0000;catnum_in=0001;catcase temp is when 0=num_in=0000;catnum_in=0000;catnum_in=0000;catnum_in=0000;catcase temp is when 0=num_in=0001;catnum_in=100

溫馨提示

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

評論

0/150

提交評論