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

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

西北工業(yè)大學《FPGA》實驗報告學院:軟件與微電子學院學號:2011303596姓名:楊清山專業(yè):微電子學實驗時間:2013/11/11實驗地點:毅字樓335指導教師:韓兵西北工業(yè)大學2013年11月大作業(yè)設計一個交通燈信號控制電路一、實驗目的及要求實驗目的:通過交通燈的設計與仿真綜合,體會復雜時序的實現(xiàn)方法,學會用框圖表示程序的設計思想,掌握中小規(guī)模集成電路的系統(tǒng)綜合設計方法。實驗要求:設計一個交通燈信號控制電路。具體要求為:輸入為50MHz的時鐘和復位信號,輸出為紅、綠、黃三個信號(高電平為亮)。復位信號(高電平)有效,紅、綠、黃燈滅;接著進行如下循環(huán):綠燈亮1分鐘,黃燈閃爍10秒,紅燈亮1分鐘。在此基礎上再加兩個數碼管,對倒計時的數顯示。二、實驗設備(環(huán)境)及要求實驗EDA工具為:預裝了和的PC機。三、實驗內容與步驟1.設計思路概述總體上分為三個大模塊,即:頂層模塊、分頻模塊、控制模塊、譯碼顯示模塊。作用如下:頂層及控制模塊:此模塊做例化,和控制,是本程序的主體,對底層的分頻模塊和譯碼顯示模塊進行例化,并且做控制設計??刂圃O計如下:采用同步時序邏輯。包括一個循環(huán)計數器,三個比較器,always控制。通過分頻后的CLK1新號(1Hz),進行對一個循環(huán)變量“k”的周期為130的循環(huán),進而控制三個燈的控制;具體循環(huán)為:clk1每進行一次跳變,k值減1;當K=0時,重新復值為129。通過比較器,每個燈的條件不同,當129>=k>=70時綠燈亮,69>=k>=60黃燈閃爍,59>=k>=0紅燈亮。對于數碼管輸出,當129>=k>=70時,數碼管個位輸出=(k-70)%10,十位輸出為(k-70-個位)/10;當69>=k>=60數碼管個位輸出=(k-60)%10,十位輸出為(k-60-個位)/10,當59>=k>=0時,數碼管個位輸出=k%10十位輸出為(k-個位)/10。分頻模塊:分頻模塊用以把輸入的50MHz的信號轉換為1Hz信號,便于其后的交通燈控制及數碼管輸出。譯碼模塊:考慮到數字顯示需要兩個七段譯碼器,且在數字系統(tǒng)中,數字的表示都是采用二進制,因為兩個管子分別輸入,所以需要把循環(huán)變量k轉換為有用的十位和各位輸出。為了方便,把循環(huán)變量k減去各狀態(tài)的基數值后,用數學方法取十位和各位分別做輸入。如綠燈時,129>=k>=70時,數碼管個位輸出=(k-70)%10,十位輸出為(k-70-個位)/10。七段譯碼器的設計原理如圖:設計框圖及說明:Clk50HzrstbluClk50Hzrstblu循環(huán)變量k129~0yel控制Clk1循環(huán)變量k129~0yel控制Clk11Hzredred圖一輸入:clk全局時鐘信號,50MHzrst全局復位端,高電平有效輸出:ctrl_1s倒計時個位上數字ctrl_10s倒計時十位上數字blu,yel,red各個燈狀態(tài)框圖說明:狀態(tài)機的輸入,只有時鐘信號clk和復位信號reset.輸出為數碼管十位和個位的二進制顯示狀態(tài)以及三個燈的顏色顯示(blu,yel,red,分別是綠黃紅燈,“1”表示燈亮,“0”表示滅)。輸入clk的頻率很大,需要通過計數器對其進行分頻。首先計數產生一個1Hz的輸出,通過該輸出再次循環(huán)計數,產生周期為130的計數變量,從而控制各個燈的亮滅。而控制黃燈閃爍的分頻,為方便起見,仍以1s為單位,每秒鐘改變一次。用if嵌套語句來控制三燈亮與滅,同時間接地進行倒計時的過程,輸出個位和十位上的數,直接用兩個七段譯碼顯示倒計時數。Rst信號是清零用的,為“1”時,三個信號燈及循環(huán)變量k復位置“0”。流程圖開始開始輸入50MHz輸入50MHzclk1:1Hzclk1:1Hz循環(huán)變量k計數循環(huán)變量k計數70≤70≤k≤12960≤k60≤k≤69blu=1yel=~yelyel=~yelred=10≤red=10≤k≤59圖四顯示輸出顯示輸出3.時序說明:整段程序共有四個狀態(tài):初始狀態(tài)、綠燈狀態(tài)、黃燈狀態(tài)、紅燈狀態(tài)。如果有rst的“1”狀態(tài),則要進行清零,恢復到初始狀態(tài);這是在控制模塊的計數器會清零,倒計時不再進行,三個燈都是滅的狀態(tài),Rst為“1”狀態(tài)跳轉為初始狀態(tài)的,等待著清零結束,開始工作;此時七段譯碼也不會顯示。清零結束后,系統(tǒng)開始正常工作。首先是分頻時鐘開始工作,此時循環(huán)變量開始循環(huán),綠燈亮60s,譯碼器開始顯示倒計時的輸出,直到k=70。當循環(huán)變量k<=69時,黃燈閃爍10s,同時譯碼倒計時,直到k=60;當循環(huán)變量k<=59時,紅燈亮,同時譯碼倒計時直到k=0。至此一個周期已經完成,沿此過程循環(huán)進行,直到reset信號的出現(xiàn)。初始初始K=K-1K=K-1綠燈狀態(tài)綠燈狀態(tài)K≤69K≤69K<0使K=129K<0使K=129K=K-1黃燈狀態(tài)紅燈狀態(tài)K=K-1黃燈狀態(tài)紅燈狀態(tài)K=K-1KK=K-1K≤59圖二4.模塊設計框圖、相關時序本程序分為三個模塊,頂層模塊、控制模塊、譯碼模塊,各模塊的設計框圖以及相關時序說明如下:頂層及控制模塊框圖頂層控制頂層控制譯碼顯示塊分頻譯碼顯示塊分頻圖三輸入:clk全局時鐘信號,50MHzrst全局復位端,高電平有效輸出:led1個位七段譯碼led10十位七段譯碼時序說明:加上時鐘信號之后,首先用reset清零,然后分頻模塊會分頻產生分頻時鐘clk1,根據分頻時鐘的高與低,進而進行變量循環(huán),然后會控制3個狀態(tài)之間的跳轉,譯碼顯示模塊會同步通過數碼管來顯示倒計時數;燈控信號blu,yel,red同時輸出對交通燈的控制。分頻模塊:輸入50MHz的信號,rst為“1”時,計數器j置“0”,并在以后每經歷一個系統(tǒng)時鐘周期時加1,知道k=49999999時,clk1=~clk1,同時k=0.到此分頻完成。(在實際代碼編寫中,為了代碼的精簡,此模塊已經集成入頂層及控制模塊)J=49999999J=49999999計數器顯示計數clk50MHz計數器顯示計數clk50MHzclk=~clkrstclk=~clkrst圖四譯碼顯示模塊:輸入端口:din_1s顯示器個位數據,由控制模塊輸入din_10s顯示器十位數據,由控制模塊輸入輸出端口:led_data_1s顯示器個位數據的譯碼led_data_10s顯示器十位數據的譯碼時序說明:此模塊接受主模塊輸出的個位和十位的數值控制,并間接受(系統(tǒng)時鐘)clk(50MHz)和(全局復位)rst,及分頻時鐘clk1的控制,均為上升沿觸發(fā),當rst為高電平時,電路復位,重新開始工作。當rst為低電平時,電路正常。表1仿真結果信號解釋說明信號解釋備注clk系統(tǒng)時鐘,50MHz為了方便,這里取2nsblu,yel,red最終三燈狀態(tài)分別綠紅燈,“1”為亮“0”為滅k循環(huán)計數變量用以狀態(tài)判斷控制led10倒計時十位七段譯碼數碼管十位顯示led1倒計時個位七段譯碼數碼管個位顯示out1倒計時個位上的數字控制模塊的輸出out10倒計時十位上的數字控制模塊的輸出rst系統(tǒng)控制變量高電平有效上圖中blu,yel,red,三個信號反映的綠黃紅交通燈的狀態(tài),其中包括綠燈亮60秒,黃燈以2HZ為周期閃爍,紅燈亮60s,總周期為130s。上圖為循環(huán)控制變量的值隨分頻后信號從129到0的循環(huán)計數。綜合結果:頂層及控制,分頻模塊的綜合RTL級電路如圖:譯碼顯示模塊的綜合如下:RTL級門級代碼及注釋此為頂層及控制模塊代碼:`include"./decode.v"modulebulb(clk,rst,red,blu,yel,led1,led10);inputclk,rst;outputblu,yel,red,led1,led10;regred,yel,blu;wire[6:0]led1; wire[6:0]led10;reg[3:0]out10,out1;reg[5:0]j;reg[7:0]k;//j,kregclk1;//initialbegin k='d129; blu<=0; yel<=0; red<=0; //j=0; //clk1<=0;end//******************************************//這是分頻部分功能實現(xiàn)//**************??**************************always@(posedgeclkorposedgerst)begin if(rst) begin clk1<=0; j<=0; end else if(j==4)// begin j<=0; clk1<=~clk1; end else begin j<=j+1; endendalways@(posedgeclk1) begin if(k=='d0)k='d129; elsek=k-1; end //****************************************************//此為控制部分//**************??**************************always@(posedgeclk1)if(!rst)//??res???1???????begin if(k>='d70&&k<='d129) begin red<=0; blu<=1; out1=(k-70)%10; out10=(k-70-out1)/10; end elseif(k>='d60&&k<='d69) begin yel<=~yel;//黃燈閃爍 blu<=0; out1=(k-60)%10; out10=(k-60-out1)/10; end else red<=1; //yel<=0; out1=k%10; out10=(k-out1)/10;endelse begin blu<=0; yel<=0; red<=0;enddecoded(.din_1s(out1),.din_10s(out10),.led_data_1s(led1),.led_data_10s(led10));Endmodule以下是譯碼及顯示模塊代碼:moduledecode( din_1s,//個位輸入 din_10s,//十位輸入 led_data_1s,//數碼管個位輸出 led_data_10s//數碼管十位輸出 );inputdin_1s;inputdin_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@(din_1s)begincase(din_1s)0:led_data_1s=7'b0001000;1:led_data_1s=7'b1101101;2:led_data_1s=7'b0100010;3:led_data_1s=7'b0100100;4:led_data_1s=7'b1000101;5:led_data_1s=7'b0010100;6:led_data_1s=7'b0010000;7:led_data_1s=7'b0101101;8:led_data_1s=7'b0000000;9:led_data_1s=7'b0000100;default:led_data_1s=7'b1111111;endcaseendalways@(din_10s)begincase(din_10s)0:led_data_10s=7'b0001000;1:led_data_10s=7'b1101101;2:led_data_10s=7'b0100010;3:led_data_10s=7'b0100100;4:led_data_10s=7'b1000101;5:led_data_10s=7'b0010100;6:led_data_10s=7'b0010000;7:led_data_10s=7'b0101101;8:led_data_10s=7'b0000000;9:led_data_10s=7'b0000100;default:led_data_10s=7'b111

溫馨提示

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

評論

0/150

提交評論