verilog語言設(shè)計一個交通燈信號控制電路_第1頁
verilog語言設(shè)計一個交通燈信號控制電路_第2頁
verilog語言設(shè)計一個交通燈信號控制電路_第3頁
verilog語言設(shè)計一個交通燈信號控制電路_第4頁
verilog語言設(shè)計一個交通燈信號控制電路_第5頁
已閱讀5頁,還剩13頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、西北工業(yè)大學(xué)fpga實驗報告學(xué) 院: 軟件與微電子學(xué)院 學(xué)號: 2011303596 姓名: 楊清山 專 業(yè): 微電子學(xué) 實驗時間: 2013/11/11 實驗地點: 毅字樓335 指導(dǎo)教師: 韓兵 西北工業(yè)大學(xué)2013 年 11 月大作業(yè) 設(shè)計一個交通燈信號控制電路一、實驗?zāi)康募耙髮嶒災(zāi)康模和ㄟ^交通燈的設(shè)計與仿真綜合,體會復(fù)雜時序的實現(xiàn)方法,學(xué)會用框圖表示程序的設(shè)計思想,掌握中小規(guī)模集成電路的系統(tǒng)綜合設(shè)計方法。實驗要求:設(shè)計一個交通燈信號控制電路。具體要求為:輸入為50mhz的時鐘和復(fù)位信號,輸出為紅、綠、黃三個信號(高電平為亮)。復(fù)位信號(高電平)有效,紅、綠、黃燈滅;接著進(jìn)行如下循環(huán):

2、綠燈亮1分鐘,黃燈閃爍10秒,紅燈亮1分鐘。在此基礎(chǔ)上再加兩個數(shù)碼管,對倒計時的數(shù)顯示。二、實驗設(shè)備(環(huán)境)及要求 實驗eda工具為: 預(yù)裝了synplify pro 9.6.2和modelsim se 6.2b的pc機(jī)。三、實驗內(nèi)容與步驟1.設(shè)計思路概述總體上分為三個大模塊,即:頂層模塊、分頻模塊、控制模塊、譯碼顯示模塊。作用如下:頂層及控制模塊:此模塊做例化,和控制,是本程序的主體,對底層的分頻模塊和譯碼顯示模塊進(jìn)行例化,并且做控制設(shè)計??刂圃O(shè)計如下: 采用同步時序邏輯。包括一個循環(huán)計數(shù)器,三個比較器,always 控制。 通過分頻后的clk1新號(1hz),進(jìn)行對一個循環(huán)變量“k”的周期

3、為130的循環(huán),進(jìn)而控制三個燈的控制;具體循環(huán)為:clk1每進(jìn)行一次跳變,k值減1;當(dāng)k=0時,重新復(fù)值為129。 通過比較器,每個燈的條件不同,當(dāng)129=k=70時綠燈亮,69=k=60黃燈閃爍,59=k=0紅燈亮。 對于數(shù)碼管輸出,當(dāng)129=k=70時,數(shù)碼管個位輸出=(k-70)%10,十位輸出為(k-70-個位)/10;當(dāng)69=k=60數(shù)碼管個位輸出=(k-60)%10,十位輸出為(k-60-個位)/10,當(dāng)59=k=0時,數(shù)碼管個位輸出=k%10十位輸出為(k-個位)/10。分頻模塊: 分頻模塊用以把輸入的50mhz的信號轉(zhuǎn)換為1hz信號,便于其后的交通燈控制及數(shù)碼管輸出。譯碼模塊:

4、 考慮到數(shù)字顯示需要兩個七段譯碼器,且在數(shù)字系統(tǒng)中,數(shù)字的表示都是采用二進(jìn)制,因為兩個管子分別輸入,所以需要把循環(huán)變量k轉(zhuǎn)換為有用的十位和各位輸出。為了方便,把循環(huán)變量k減去各狀態(tài)的基數(shù)值后,用數(shù)學(xué)方法取十位和各位分別做輸入。如綠燈時,129=k=70時,數(shù)碼管個位輸出=(k-70)%10,十位輸出為(k-70-個位)/10。七段譯碼器的設(shè)計原理如圖: 2.總體設(shè)計框圖及說明:clk 50hzrstblu循環(huán)變量k1290 yel控制clk11hzred 圖一輸入:clk 全局時鐘信號,50mhz rst 全局復(fù)位端,高電平有效輸出:ctrl_1s 倒計時個位上數(shù)字ctrl_10s 倒計時十位

5、上數(shù)字 blu,yel,red 各個燈狀態(tài)框圖說明: 狀態(tài)機(jī)的輸入,只有時鐘信號clk和復(fù)位信號reset.輸出為數(shù)碼管十位和個位的二進(jìn)制顯示狀態(tài)以及三個燈的顏色顯示(blu,yel,red,分別是綠黃紅燈,“1”表示燈亮,“0”表示滅)。輸入clk的頻率很大,需要通過計數(shù)器對其進(jìn)行分頻。首先計數(shù)產(chǎn)生一個1hz的輸出,通過該輸出再次循環(huán)計數(shù),產(chǎn)生周期為130的計數(shù)變量,從而控制各個燈的亮滅。而控制黃燈閃爍的分頻,為方便起見,仍以1s為單位,每秒鐘改變一次。用if嵌套語句來控制三燈亮與滅,同時間接地進(jìn)行倒計時的過程,輸出個位和十位上的數(shù),直接用兩個七段譯碼顯示倒計時數(shù)。rst信號是清零用的,為“

6、1”時,三個信號燈及循環(huán)變量k復(fù)位置“0”。 流程圖開始輸入50mhzclk1:1hz循環(huán)變量k計數(shù)70k12960k69blu=1yel=yelred=10k59 圖四顯示輸出3.時序說明: 整段程序共有四個狀態(tài):初始狀態(tài)、綠燈狀態(tài)、黃燈狀態(tài)、紅燈狀態(tài)。 如果有rst的“1”狀態(tài),則要進(jìn)行清零,恢復(fù)到初始狀態(tài);這是在控制模塊的計數(shù)器會清零,倒計時不再進(jìn)行,三個燈都是滅的狀態(tài), rst為“1”狀態(tài)跳轉(zhuǎn)為初始狀態(tài)的,等待著清零結(jié)束,開始工作;此時七段譯碼也不會顯示。 清零結(jié)束后,系統(tǒng)開始正常工作。首先是分頻時鐘開始工作,此時循環(huán)變量開始循環(huán),綠燈亮60s,譯碼器開始顯示倒計時的輸出,直到k=70

7、。當(dāng)循環(huán)變量k=69時,黃燈閃爍10s,同時譯碼倒計時,直到k=60;當(dāng)循環(huán)變量k=59時,紅燈亮,同時譯碼倒計時直到k=0。至此一個周期已經(jīng)完成,沿此過程循環(huán)進(jìn)行,直到reset信號的出現(xiàn)。初始k=k-1綠燈狀態(tài)k69k0使k=129k=k-1黃燈狀態(tài)紅燈狀態(tài)k=k-1k59 圖二4.模塊設(shè)計框圖、相關(guān)時序本程序分為三個模塊,頂層模塊、控制模塊、譯碼模塊,各模塊的設(shè)計框圖以及相關(guān)時序說明如下:頂層及控制模塊框圖頂層控制譯碼顯示塊分頻 圖三輸入:clk 全局時鐘信號,50mhz rst 全局復(fù)位端,高電平有效輸出:led1 個位七段譯碼 led10 十位七段譯碼 時序說明:加上時鐘信號之后,首

8、先用reset清零,然后分頻模塊會分頻產(chǎn)生分頻時鐘clk1,根據(jù)分頻時鐘的高與低,進(jìn)而進(jìn)行變量循環(huán),然后會控制3個狀態(tài)之間的跳轉(zhuǎn),譯碼顯示模塊會同步通過數(shù)碼管來顯示倒計時數(shù);燈控信號blu,yel,red同時輸出對交通燈的控制。分頻模塊: 輸入50mhz的信號,rst為“1”時,計數(shù)器j置“0”,并在以后每經(jīng)歷一個系統(tǒng)時鐘周期時加1,知道k=49999999時,clk1=clk1,同時k=0.到此分頻完成。(在實際代碼編寫中,為了代碼的精簡,此模塊已經(jīng)集成入頂層及控制模塊)j=49999999計數(shù)器顯示計數(shù)clk 50mhz clk=clk rst 圖四譯碼顯示模塊:輸入端口: din_1s

9、顯示器個位數(shù)據(jù),由控制模塊輸入 din_10s 顯示器十位數(shù)據(jù),由控制模塊輸入輸出端口: led_data_1s 顯示器個位數(shù)據(jù)的譯碼 led_data_10s 顯示器十位數(shù)據(jù)的譯碼時序說明: 此模塊接受主模塊輸出的個位和十位的數(shù)值控制,并間接受(系統(tǒng)時鐘)clk(50mhz) 和(全局復(fù)位)rst,及分頻時鐘clk1的控制,均為上升沿觸發(fā),當(dāng) rst 為高電平時,電路復(fù)位,重新開始工作。當(dāng)rst為低電平時,電路正常。5.仿真及綜合結(jié)果表1 仿真結(jié)果信號解釋說明信號解釋備注clk系統(tǒng)時鐘, 50mhz為了方便,這里取2nsblu,yel,red最終三燈狀態(tài)分別綠紅燈,“1”為亮“0”為滅k循環(huán)

10、計數(shù)變量用以狀態(tài)判斷控制led10倒計時十位七段譯碼數(shù)碼管十位顯示led1倒計時個位七段譯碼數(shù)碼管個位顯示out1倒計時個位上的數(shù)字控制模塊的輸出out10倒計時十位上的數(shù)字控制模塊的輸出rst系統(tǒng)控制變量高電平有效上圖中blu,yel,red,三個信號反映的綠黃紅交通燈的狀態(tài),其中包括綠燈亮60秒,黃燈以2hz為周期閃爍,紅燈亮60s,總周期為130s。上圖為循環(huán)控制變量的值隨分頻后信號從129到0的循環(huán)計數(shù)。綜合結(jié)果:頂層及控制,分頻模塊的綜合rtl級電路如圖:譯碼顯示模塊的綜合如下: rtl級 門級6. 代碼及注釋此為頂層及控制模塊代碼:include ./decode.vmodule

11、bulb(clk,rst,red,blu,yel,led1,led10); input clk,rst; output blu,yel,red,led1,led10; reg red,yel,blu; wire 6:0 led1; wire 6:0 led10; reg3:0 out10,out1; reg5:0 j; reg7:0 k; /j,k reg clk1; /initial begink=d129;blu=0; yel=0;red=0;/j=0;/clk1=0; end/*/這是分頻部分功能實現(xiàn)/*?*always(posedge clk or posedge rst)begin

12、if(rst) begin clk1=0; j=0; end else if(j=4) / begin j=0; clk1=clk1; end else begin j=d70&k=d129) begin red=0; blu=d60&k=d69)begin yel=yel; /黃燈閃爍 blu=0; out1=(k-60)%10; out10=(k-60-out1)/10; endelse red=1; /yel=0; out1=k%10; out10=(k-out1)/10; endelsebegin blu=0; yel=0; red=0; enddecode d(.din_1s(out

13、1), .din_10s(out10), .led_data_1s(led1), .led_data_10s(led10);endmodule以下是譯碼及顯示模塊代碼:module decode ( din_1s, /個位輸入 din_10s, / 十位輸入 led_data_1s, / 數(shù)碼管個位輸出 led_data_10s / 數(shù)碼管十位輸出 );input din_1s;input din_10s;output 6:0 led_data_1s;output 6:0 led_data_10s;reg 6:0 led_data_1s;reg 6:0 led_data_10s; always

14、(din_1s) begin case(din_1s) 0 : led_data_1s = 7b0001000; 1 : led_data_1s = 7b1101101; 2 : led_data_1s = 7b0100010; 3 : led_data_1s = 7b0100100; 4 : led_data_1s = 7b1000101; 5 : led_data_1s = 7b0010100; 6 : led_data_1s = 7b0010000; 7 : led_data_1s = 7b0101101; 8 : led_data_1s = 7b0000000; 9 : led_dat

15、a_1s = 7b0000100; default : led_data_1s = 7b1111111; endcase end always(din_10s) begin case(din_10s) 0 : led_data_10s = 7b0001000; 1 : led_data_10s = 7b1101101; 2 : led_data_10s = 7b0100010; 3 : led_data_10s = 7b0100100; 4 : led_data_10s = 7b1000101; 5 : led_data_10s = 7b0010100; 6 : led_data_10s =

16、7b0010000; 7 : led_data_10s = 7b0101101; 8 : led_data_10s = 7b0000000; 9 : led_data_10s = 7b0000100; default : led_data_10s = 7b1111111; endcase endendmodule測試模塊代碼:timescale 1ns/1nsinclude bulb.vmodule top; reg clk,rst; wire red,blu,yel,led1,led10; /reg clk1,red,blu,yel;initialbegin rst=1; clk=1; #500 rst=0; #500 rst=1; #500 rst=0;endalways #20 clk=clk;bulb bulb(clk,rst,red,blu,yel,led1,led10);endmodule5、 分析與討論電路關(guān)鍵是在進(jìn)行時序狀態(tài)轉(zhuǎn)換,倒計時計數(shù),控制黃燈閃爍過程,經(jīng)過分析,需要一個來判斷三個燈狀態(tài)的判斷條件。本電路主要運(yùn)用一個循環(huán)變量k,作為程序控制的靈魂,進(jìn)行各個狀態(tài)循環(huán),黃燈閃爍的判斷和數(shù)碼管的輸入。程序亮點:為了數(shù)碼管的個位十位輸入,把循環(huán)變量k 進(jìn)行倒數(shù)計時,這樣與數(shù)碼管的倒計時數(shù)值一致,經(jīng)過簡單數(shù)學(xué)計算,就可以把每個狀

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論