標題: Quartus II Verilog HDL語言Max10OC簡易交通燈設計 初學者的小腳丫 [打印本頁]
作者: 1748736612 時間: 2020-10-28 20:11
標題: Quartus II Verilog HDL語言Max10OC簡易交通燈設計 初學者的小腳丫
仿真圖片.png (107.25 KB, 下載次數(shù): 96)
下載附件
2020-10-28 20:06 上傳
之前數(shù)電設計時做的簡易狀態(tài)燈,實現(xiàn)簡單,缺點:由于雙閃黃燈沒有加狀態(tài),所以在切換狀態(tài)時下一個狀態(tài)不固定。
在十字路口的兩個方向上格設一組紅燈、綠燈、黃燈。設南北為為主路、東西方向為支路。當出現(xiàn)大霧天時可以設置兩路交通燈皆為黃燈模式。
- 交通燈主路上綠燈持續(xù)22s,黃燈4s,紅燈16s;交通燈支路上綠燈持續(xù)時間12s,黃燈4s,紅燈26s。
- 出現(xiàn)大霧天時,倒計時停止,各方向均為黃燈
本設計利用Verilog HDL 語言,對一個十字路口的 交通信號燈進行控制,可控制3個路口的紅、黃、綠三盞燈按特定規(guī)律進行變化
該交通控制燈分別分為為南北方向的主路和東西方向的支路。兩條路的紅綠燈時間是不一致的——交通燈主路上綠燈持續(xù)22s,黃燈4s,紅燈16s;交通燈支路上綠燈持續(xù)時間12s,黃燈4s,紅燈26s。持續(xù)期間各燈顯示時間如主路綠燈自21s開始,于0s結(jié)束。采用分步模板的方式編寫代碼進行功能實現(xiàn)。以下為狀態(tài)轉(zhuǎn)移圖:

采用Verilog HDL語言進行設計屬于頂層設計,不需要耗費大量時間去完成底層設計工作,使用代碼完成功能描述會自動分配最優(yōu)搭器件搭配方式。
由于僅使用一塊小腳丫,所以僅選擇主路顯示時間倒計時,支路采用亮燈模式不具體化時間。
因為是硬件進行操作,所以會存在延遲現(xiàn)象,經(jīng)測試,切換轉(zhuǎn)態(tài)時會延遲1s。
4.1軟件選擇
軟件方面采用Quartus II對Verilog HDL 語言進行實現(xiàn)
首先進行分頻處理,因為小腳丫的處理頻率是12MHZ,分頻使達到我們需要1HZ的頻率。
reg clk_1Hz;
reg [23:0] cnt; //產(chǎn)生 1Hz 信號
always @(posedge clk_in or negedge rst_n_in)
begin
if(!rst_n_in) begin
cnt <= 0;
clk_1Hz <= 0;
end else if(cnt == 24'd5_999_999) begin
cnt<=0;
clk_1Hz <= ~clk_1Hz;
end else cnt<=cnt+1'b1;
end
其次進行三段式分態(tài):
1.同步時序狀態(tài)轉(zhuǎn)移
reg [7:0] timecnt;
reg [1:0] c_state,n_state;
reg flag; //啟動暫停標志
//同步狀態(tài)轉(zhuǎn)移
always @(posedge clk_1Hz or negedge rst_n_in)
if(!rst_n_in)
c_state <= S1;
else
c_state <= n_state;
2.組合邏輯狀態(tài)轉(zhuǎn)移
//判斷轉(zhuǎn)移條件
always @(c_state or timecnt)
if(!rst_n_in)begin
n_state = S1;
end else begin
case(c_state)
S1: if(!timecnt) n_state = S2; else n_state = S1;
S2: if(!timecnt) n_state = S3; else n_state = S2;
S3: if(!timecnt) n_state = S4; else n_state = S3;
S4: if(!timecnt) n_state = S1; else n_state = S4;
default:n_state = S1;
endcase
end
//產(chǎn)生標志信號(霧天黃燈)
always @(posedge clk_1Hz or negedge rst_n_in)
begin
if(!rst_n_in)
flag = 1'b1;
else if(!key)
begin
flag = ~flag;
end
else
begin
flag = flag;
end
end
3.同步邏輯輸出
//同步邏輯輸出
always @(posedge clk_1Hz or negedge rst_n_in) begin
if(!rst_n_in)begin
timecnt <= 8'h21; //初始值
led_master <= GREEN;
led_slave <= RED;
end
else if(flag)
begin
case(n_state)
S1: begin
led_master <= GREEN;
led_slave <= RED;
if(timecnt==0) begin
timecnt <= 8'h21;
end else begin
if(timecnt[3:0]==0) begin //個位為0十位減一
timecnt[7:4] <= timecnt[7:4] - 1'b1;
timecnt[3:0] <= 4'd9;
end else timecnt[3:0] <= timecnt[3:0] - 1'b1; //個位減一,為0時切換狀態(tài)
end
end
S2: begin
led_master <= YELLOW;
led_slave <= RED;
if(timecnt==0) begin
timecnt <= 8'h03; //S2時的初態(tài)值
end else begin
if(timecnt[3:0]==0) begin
timecnt[7:4] <= timecnt[7:4] - 1'b1;
timecnt[3:0] <= 4'd9;
end else timecnt[3:0] <= timecnt[3:0] - 1'b1;
end
end
S3: begin
led_master <= RED;
led_slave <= GREEN;
if(timecnt==0) begin
timecnt <= 8'h15;
end else begin
if(timecnt[3:0]==0) begin
timecnt[7:4] <= timecnt[7:4] - 1'b1;
timecnt[3:0] <= 4'd9;
end else timecnt[3:0] <= timecnt[3:0] - 1'b1;
end
end
S4: begin
led_master <= RED;
led_slave <= YELLOW;
if(timecnt==0) begin
timecnt <= 8'h03;
end else begin
if(timecnt[3:0]==0) begin
timecnt[7:4] <= timecnt[7:4] - 1'b1;
timecnt[3:0] <= 4'd9;
end else timecnt[3:0] <= timecnt[3:0] - 1'b1;
end
end
default:;
endcase
end
else begin
timecnt<=0;
led_master <= YELLOW;
led_slave <= YELLOW;
end
end
最后使用segment模塊進行對數(shù)碼管的操作
//segment模塊進行對數(shù)碼管的操作,體現(xiàn)了模塊思想。
module Segment_led
(
input [3:0] seg_data_1, //四位輸入數(shù)據(jù)信號
input [3:0] seg_data_2, //四位輸入數(shù)據(jù)信號
output [8:0] segment_led_1, //數(shù)碼管1,MSB~LSB = SEG,DP,G,F,E,D,C,B,A
output [8:0] segment_led_2 //數(shù)碼管2,MSB~LSB = SEG,DP,G,F,E,D,C,B,A
);
reg[8:0] seg [9:0];
initial
begin
seg[0] = 9'h3f; // 0
seg[1] = 9'h06; // 1
seg[2] = 9'h5b; // 2
seg[3] = 9'h4f; // 3
seg[4] = 9'h66; // 4
seg[5] = 9'h6d; // 5
seg[6] = 9'h7d; // 6
seg[7] = 9'h07; // 7
seg[8] = 9'h7f; // 8
seg[9] = 9'h6f; // 9
end
assign segment_led_1 = seg[seg_data_1];
assign segment_led_2 = seg[seg_data_2];
endmodule
4.2 硬件選擇
硬件方面采用小腳丫STEP FPGA MAX 10開發(fā)板,具體參數(shù)為:
· 核心器件 Altera MAX10 10M02S153I7G
· 1 路MicroUSB接口
· 2 位7段數(shù)碼管
· 2 個RGB三色LED
· 4 路撥碼開關(guān)
· 4 路按鍵
· 8 路用戶LED
· 36 個用戶可擴展I/O
結(jié)論
5.1 問題分析
將代碼綜合下載到版上,有如下四種狀態(tài)和雙黃燈倒計時停止打的特殊狀態(tài)

狀態(tài)1 主綠燈 從紅燈 倒計時

狀態(tài)2 主黃燈 從紅燈

狀態(tài)3 主紅燈 從綠燈

狀態(tài)4 主紅燈 從黃燈

特殊狀態(tài):雙黃燈閃爍 數(shù)碼管顯示00 停止倒計時
綜上小腳丫展示的四個狀態(tài)與預設邏輯狀態(tài)相符,運行過程中也確實存在1s延遲情況。當使用暫停按鈕達到雙黃燈模式時缺乏下一個狀態(tài),無法自動轉(zhuǎn)移轉(zhuǎn)態(tài)。所以我們采用復位措施使其重新循環(huán)。
5.2心得體會
通過這次設計,加強我們動手、思考和解決問題的能力。在準備期間,我們小組在B站上進行視頻學習和上網(wǎng)查閱資料進行軟硬件了解數(shù)字電子技術(shù)是一門實踐性很強的,而數(shù)電設計是實踐環(huán)節(jié)的重要組成部分,它給我們提供了一個理論聯(lián)系實際、檢驗知識、加深認識、開拓思維、汲取新知識的機會。數(shù)電的內(nèi)容雖然只是一個簡單的數(shù)字系統(tǒng),但在思考問題、提出問題、解決疑難、排除障礙的過程中,卻能達到升華所學知識、訓練綜合、創(chuàng)新能力及團隊合作能力之目的。在完成的過程中,可以學到QUARTUSII軟件的使用方法,并且掌握狀態(tài)機的設計方法及利用數(shù)字電路實現(xiàn)自動控制的思路和方法。
51hei.png (4.3 KB, 下載次數(shù): 84)
下載附件
2020-10-28 22:50 上傳
全部資料51hei下載地址:
簡易交通信號燈.zip
(3.23 MB, 下載次數(shù): 55)
2020-10-28 20:08 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
作者: cooleaf 時間: 2020-10-30 15:12
板子是網(wǎng)上買的嗎?還是自己做的?
作者: 1748736612 時間: 2020-10-30 20:11
網(wǎng)上買的小腳丫開發(fā)板,師傅推薦的
作者: 新我 時間: 2021-6-26 16:28
應該怎么把它們整在一起 我弄出來有很多錯誤
作者: 1748736612 時間: 2021-12-11 18:06
你的仿真信號編寫了嗎?有問題的話聯(lián)系我
作者: erpang 時間: 2021-12-12 08:29
這里面有管腳分配嗎?
歡迎光臨 (http://www.torrancerestoration.com/bbs/) |
Powered by Discuz! X3.1 |