verilog課程設(shè)計-交通燈.doc
《verilog課程設(shè)計-交通燈.doc》由會員分享,可在線閱讀,更多相關(guān)《verilog課程設(shè)計-交通燈.doc(10頁珍藏版)》請在裝配圖網(wǎng)上搜索。
成 績 評卷人 姓 名 學 號 課 程 論 文 論文題目 基于DE2的交通燈設(shè)計 完成時間 課程名稱 Verilog語言設(shè)計 任課老師 專 業(yè) 年 級 1. 交通信號控制器設(shè)計要求與思路 1.1設(shè)計背景 FPGA是一種用戶根據(jù)各自需要而自行構(gòu)造邏輯功能的數(shù)字集成電路,其種類很多,內(nèi)部結(jié)構(gòu)也不同,但共同的特點是體積小、使用方便。本文介紹了用VerilogHDL語言設(shè)計交通燈控制器的方法,并在QuartusII系統(tǒng)對FPGA芯片進行編譯下載,由于生成的是集成化的數(shù)字電路,沒有傳統(tǒng)設(shè)計中的接線問題,所以故障率低、可靠性高,而且體積非常小。本文通過EDA設(shè)計,利用VerilogHDL語言模擬仿真交通燈控制電路。 1.2設(shè)計要求 根據(jù)交通燈控制器要實現(xiàn)的功能,考慮用兩個并行執(zhí)行的always語句來分別控制A方向和B方向的3盞燈。這兩個always語句使用同一個時鐘信號,以進行同步,也就是說,兩個進程的敏感信號是同一個。每個always語句控制一個方向的3種燈按如下順序點亮,并往復(fù)循環(huán):綠燈----黃燈----紅燈,每種燈亮的時間采用一個減法計數(shù)器進行計數(shù),計數(shù)器用同步預(yù)置數(shù)法設(shè)計,這樣只需改變預(yù)置數(shù)據(jù),就能改變計數(shù)器的模,因此每個方向只要一個計數(shù)器進行預(yù)置數(shù)就可以。為便于顯示燈亮的時間,計數(shù)器的輸出均采用BCD碼,顯示由4個數(shù)碼管來完成,A方向和B方向各用兩個數(shù)碼管。設(shè)定A方向紅燈、黃燈、綠燈亮的時間分別為:35s、5s、35s,B方向的紅燈、黃燈、綠燈亮的時間分別為:35s、5s、35s。假如要改變這些時間,只需要改變計數(shù)器的預(yù)置數(shù)即可。 1.3設(shè)計思路 兩個方向各種燈亮的時間能夠進行設(shè)置和修改,此外,假設(shè)B方向是主干道,車流量大,因此B方向通行的時間應(yīng)該比A方向長。交通燈控制器的狀態(tài)轉(zhuǎn)換表見下表。表中,1表示燈亮,0表示燈不亮。A方向和B方向的紅黃綠分別用R1、Y1、G1、R2、Y2、G2來表示。 交通燈控制器狀態(tài)轉(zhuǎn)換表 從狀態(tài)表中可以看出,每個方向3盞燈依次按如下順序點亮,并不斷循環(huán): 綠燈----黃燈----紅燈,并且每個方向紅燈亮的時間應(yīng)該與另一個方向綠燈、黃燈亮的時間相等。黃燈所起的作用是用來在綠燈后進行緩沖,以提醒行人該方向馬上要禁行了。在使能控制信號(EN)控制時系統(tǒng)工作,并且要求有兩個控制輸入信號:即復(fù)位信號(Reset)和備用模式設(shè)置信號(Standby),在復(fù)位信號控制時,兩個方向均為紅燈,在備用模式設(shè)置信號控制時,兩個方向均為黃燈。 1.4系統(tǒng)設(shè)計框圖 AL AR AY AG 系統(tǒng)采用的時鐘頻率為10KHZ,經(jīng)分頻為1HZ后送入控制計時電路,同時送入控制計時電路的還有控制信號M2M1M0以及復(fù)位信號RST,控制交通燈的運行狀態(tài)。經(jīng)處理后輸出LED燈以及數(shù)碼管顯示電路的控制信號,從而完成整個電路的控制與實現(xiàn)。 A組信號燈 控制計時電路 分頻clk1 時鐘CLK10K 分頻CLK1 復(fù)位RST M2 M1 M0 BL BR BY BG B組信號燈 復(fù)位RST 數(shù)碼管顯示電路 復(fù)位RST 時鐘CLK10K 圖1 系統(tǒng)設(shè)計示意圖 2.交通信號控制器具體模塊設(shè)計 2.1時鐘分頻模塊設(shè)計 系統(tǒng)的時鐘輸入為10KHZ的脈沖,而系統(tǒng)時鐘計時模塊需要1HZ的脈沖。分頻模塊主要為系統(tǒng)提供所需的時鐘計時脈沖。該模塊將10KHZ的脈沖信號進行分頻,產(chǎn)生1S的方波(占空比為50%),作為系統(tǒng)時鐘計時信號。計時模塊用來設(shè)定路口計時器的初值,并為掃描顯示譯碼模塊提供倒計時時間。 表1 I/O管腳描述 名稱 方向 位寬 功能 Clk10K input 1 系統(tǒng)時鐘(10KHZ) RST input 1 復(fù)位信號(高電平有效) Clk1 output 1 分頻后時鐘信號(1HZ) Verilog HDL源代碼如下: module fenpin(clk10k,rst,clk1); //將10K的頻率分頻為1 input clk10k,rst; output clk1; reg [7:0]j; reg clk1; always@(posedge clk10k or posedge rst) if(rst)begin clk1<=0; j<=0; end else if(j==9999)begin j<=0; clk1<=~clk1; end else j<=j+1; Endmodule 2.2控制模塊設(shè)計 Verilog HDL源代碼如下: module control(EN_in,SW1,RST,Red1,Red2,Yellow1,Yellow2,Green1,Green2); output Red1; output Red2; output Yellow1; output Yellow2; output Green1; output Green2; input [1:0] EN_in; input SW1; input RST; reg Red1,Red2,Yellow1,Yellow2,Green1,Green2,D_out; always @(EN_in,RST,SW1) begin if(SW1==0||RST==0) {Red1,Red2,Yellow1,Yellow2,Green1,Green2}=6b0; else begin case(EN_in) 2b00 : {Red1,Red2,Yellow1,Yellow2,Green1,Green2}=6b010010; 2b01 : {Red1,Red2,Yellow1,Yellow2,Green1,Green2}=6b011000; 2b10 : {Red1,Red2,Yellow1,Yellow2,Green1,Green2}=6b100001; 2b11 : {Red1,Red2,Yellow1,Yellow2,Green1,Green2}=6b100100; default : {Red1,Red2,Yellow1,Yellow2,Green1,Green2}=6b0; endcase end end Endmodule 2.3倒計時選擇模塊 Verilog HDL源代碼如下: module counter55(C_CLK,RST,C_EN,D_OUT1,D_OUT0,C_out); output C_out; output [3:0] D_OUT1; output [3:0] D_OUT0; input C_CLK; input RST; input C_EN; reg [3:0] D_OUT1; reg [3:0] D_OUT0; reg C_out; reg [3:0] CData1; reg [3:0] CData0; reg [7:0] DATA; always @(posedge C_CLK) begin if(RST==0||C_EN==0) begin C_out <= 1b0; CData1 <= 4b0000; CData0 <= 4b0000; end else begin if(CData0 == 4b0101 && CData1 == 4b0101) begin CData1 <= 4b0000; CData0 <= 4b0000; C_out = 1b1; end else if(CData0 != 4b1001) begin CData0 <= CData0 + 1; C_out <= 1b0; end else if(CData0 == 4b1001 && CData1 != 4b0110) begin CData1 <= CData1 + 1; CData0 <= 4b0000; C_out <= 1b0; end else begin CData1 <= 4b0000; CData0 <= 4b0000; C_out = 1b1; end end end always begin DATA <= 8b01010101-((CData1<<4)+CData0); if(((DATA>>4)&4b1111)>4b0101) D_OUT1 <= (DATA>>4)&4b1111-4b1111; else D_OUT1 <= (DATA>>4)&4b1111; if((DATA&4b1111)>4b1001) D_OUT0 <= (DATA&4b1111)-4b0110; else D_OUT0 <= DATA&4b1111; end endmodule 2.4 倒計時數(shù)碼管的動態(tài)顯示 Verilog HDL源代碼如下: module dispselect(CLK,D_OUT); output [1:0] D_OUT; input CLK; reg [1:0] D_OUT; always @(posedge CLK) begin if(D_OUT < 2b10) D_OUT <= D_OUT + 2b01; else D_OUT <= 2b01; end endmodule 2.5掃描顯示譯碼模塊設(shè)計 Verilog HDL源代碼如下: module dispdecoder (data_in,data_out); input [3:0]data_in; output [6:0] data_out; reg [6:0] r_seg; assign data_out = r_seg; always @(*) begin case(data_in) 4d0: r_seg = 7b0000001; 4d1: r_seg = 7b1001111; 4d2: r_seg = 7b0010010; 4d3: r_seg = 7b0000110; 4d4: r_seg = 7b1001100; 4d5: r_seg = 7b0100100; 4d6: r_seg = 7b0100000; 4d7: r_seg = 7b0001111; 4d8: r_seg = 7b0000000; 4d9: r_seg = 7b0000100; 4d10: r_seg = 7b0001000; default r_seg = 7b1111111; endcase end Endmodule 2.5.頂層文件設(shè)計 Verilog HDL源代碼如下: module jtd( Reset, SW, CLK, Red1, Red2, Yellow1, Yellow2, Green1, Green2, SEG_Data1, SEG_Data2, SEG_Data3, SEG_Data4, //SEG_Sel ); input Reset; input SW; input CLK; output Red1; output Red2; output Yellow1; output Yellow2; output Green1; output Green2; output [6:0] SEG_Data1; output [6:0] SEG_Data2; output [6:0] SEG_Data3; output [6:0] SEG_Data4; //output [1:0] SEG_Sel; wire SYNTHESIZED_WIRE_0; wire SYNTHESIZED_WIRE_1; wire SYNTHESIZED_WIRE_19; wire SYNTHESIZED_WIRE_3; wire SYNTHESIZED_WIRE_20; wire [1:0] SYNTHESIZED_WIRE_21; wire SYNTHESIZED_WIRE_7; wire [3:0] SYNTHESIZED_WIRE_9; wire [3:0] SYNTHESIZED_WIRE_10; wire [3:0] SYNTHESIZED_WIRE_11; wire [3:0] SYNTHESIZED_WIRE_12; //wire [3:0] SYNTHESIZED_WIRE_14; wire [3:0] SYNTHESIZED_WIRE_15; wire [3:0] SYNTHESIZED_WIRE_16; //wire [1:0] SYNTHESIZED_WIRE_17; //assign SEG_Sel = SYNTHESIZED_WIRE_17; scan b2v_inst(.EN_in1(SYNTHESIZED_WIRE_0), .EN_in0(SYNTHESIZED_WIRE_1),.sdata(SYNTHESIZED_WIRE_21)); counter05 b2v_inst1(.C_CLK(SYNTHESIZED_WIRE_19), .RST(Reset),.C_EN(SYNTHESIZED_WIRE_3),.C_out(SYNTHESIZED_WIRE_1),.D_OUT0(SYNTHESIZED_WIRE_11),.D_OUT1(SYNTHESIZED_WIRE_12)); fdiv1hz b2v_inst11(.clk_in(SYNTHESIZED_WIRE_20), .clk_out(SYNTHESIZED_WIRE_19)); fdiv1khz b2v_inst12(.clk_in(CLK), .clk_out(SYNTHESIZED_WIRE_20)); control b2v_inst14(.SW1(SW), .RST(Reset),.EN_in(SYNTHESIZED_WIRE_21),.Red1(Red1),.Red2(Red2),.Yellow1(Yellow1),.Yellow2(Yellow2),.Green1(Green1),.Green2(Green2)); counter55 b2v_inst2(.C_CLK(SYNTHESIZED_WIRE_19), .RST(Reset),.C_EN(SYNTHESIZED_WIRE_7),.C_out(SYNTHESIZED_WIRE_0),.D_OUT0(SYNTHESIZED_WIRE_9),.D_OUT1(SYNTHESIZED_WIRE_10)); countersel b2v_inst3(.D_IN(SYNTHESIZED_WIRE_21), .D_OUT1(SYNTHESIZED_WIRE_7),.D_OUT0(SYNTHESIZED_WIRE_3)); datamux b2v_inst6(.D_IN0(SYNTHESIZED_WIRE_9), .D_IN1(SYNTHESIZED_WIRE_10),.D_IN2(SYNTHESIZED_WIRE_11),.D_IN3(SYNTHESIZED_WIRE_12),.SEL(SYNTHESIZED_WIRE_21),.D_OUT0(SYNTHESIZED_WIRE_15),.D_OUT1(SYNTHESIZED_WIRE_16)); //dispdecoder b2v_inst7(.data_in(SYNTHESIZED_WIRE_14), //.data_out(SEG_Data)); //dispmux b2v_inst8(.D_IN0(SYNTHESIZED_WIRE_15), //.D_IN1(SYNTHESIZED_WIRE_16),.SEL(SYNTHESIZED_WIRE_17),.D_OUT(SYNTHESIZED_WIRE_14)); //dispselect b2v_inst9(.CLK(SYNTHESIZED_WIRE_20), //.D_OUT(SYNTHESIZED_WIRE_17)); dispdecoder u0(.data_in(SYNTHESIZED_WIRE_11), .data_out(SEG_Data2)); dispdecoder u1(.data_in(SYNTHESIZED_WIRE_12), .data_out(SEG_Data1)); dispdecoder u2(.data_in(SYNTHESIZED_WIRE_9), .data_out(SEG_Data4)); dispdecoder u3(.data_in(SYNTHESIZED_WIRE_10), .data_out(SEG_Data3)); endmodule 3 小結(jié) 再一次的體驗到了細心對一個編程者的重要性和程序的規(guī)范性對于程序的重要。verilogHDL設(shè)計語言是一門很好的硬件描述語言,可以直白的描述實際的電路,實際的系統(tǒng)模型,易懂而且易于實現(xiàn),我覺得在以后多加練習,可以對以后的學習和工作帶來莫大的幫助。這次的課程設(shè)計就是對我們的一次考核,也可以說是一次考驗,平時做題目比較簡單,而這次課程設(shè)計綜合考核了我們的學習結(jié)果。課程設(shè)計培養(yǎng)了學生綜合運用所學知識,發(fā)現(xiàn),提出,分析和解決實際問題,鍛煉實踐能力的重要環(huán)節(jié),是對學生實際工作能力的具體訓練和考察過程。然而從理論到實踐,我在做課程設(shè)計的時間里,我明白了想學好它要重在實踐,要通過不斷的實際操作才能更好地學習它,但是學到了很多的的東西,同時不僅可以鞏固了以前所學過的知識,而且學到了很多在書本上所沒有學到過的知識。只有理論知識是遠遠不夠的,只有把所學的理論知識與實踐相結(jié)合起來,從理論中得出結(jié)論,從而提高自己的實際動手能力和獨立思考的能力。在設(shè)計的過程中遇到問題,可以說得是困難重重,遇到了各種各樣的問題,同時在設(shè)計的過程中發(fā)現(xiàn)了自己的不足之處,對以前所學過的知解得不夠深刻,掌握得不夠牢固,在邊編學程序的過程中我?guī)缀跏侵匦聫?fù)習課本上的知識,但這還是沒能讓我完成這次課程設(shè)計,通過詢問同學、到網(wǎng)上查詢資料慢慢的完善這次作業(yè)才勉強完成。 10- 1.請仔細閱讀文檔,確保文檔完整性,對于不預(yù)覽、不比對內(nèi)容而直接下載帶來的問題本站不予受理。
- 2.下載的文檔,不會出現(xiàn)我們的網(wǎng)址水印。
- 3、該文檔所得收入(下載+內(nèi)容+預(yù)覽)歸上傳者、原創(chuàng)作者;如果您是本文檔原作者,請點此認領(lǐng)!既往收益都歸您。
下載文檔到電腦,查找使用更方便
9.9 積分
下載 |
- 配套講稿:
如PPT文件的首頁顯示word圖標,表示該PPT已包含配套word講稿。雙擊word圖標可打開word文檔。
- 特殊限制:
部分文檔作品中含有的國旗、國徽等圖片,僅作為作品整體效果示例展示,禁止商用。設(shè)計者僅對作品中獨創(chuàng)性部分享有著作權(quán)。
- 關(guān) 鍵 詞:
- verilog 課程設(shè)計 交通燈
鏈接地址:http://m.jqnhouse.com/p-6647645.html