找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 6847|回復(fù): 5
打印 上一主題 下一主題
收起左側(cè)

Quartus II Verilog HDL語(yǔ)言Max10OC簡(jiǎn)易交通燈設(shè)計(jì) 初學(xué)者的小腳丫

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:828188 發(fā)表于 2020-10-28 20:11 | 只看該作者 |只看大圖 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式

之前數(shù)電設(shè)計(jì)時(shí)做的簡(jiǎn)易狀態(tài)燈,實(shí)現(xiàn)簡(jiǎn)單,缺點(diǎn):由于雙閃黃燈沒有加狀態(tài),所以在切換狀態(tài)時(shí)下一個(gè)狀態(tài)不固定。

在十字路口的兩個(gè)方向上格設(shè)一組紅燈、綠燈、黃燈。設(shè)南北為為主路、東西方向?yàn)橹贰.?dāng)出現(xiàn)大霧天時(shí)可以設(shè)置兩路交通燈皆為黃燈模式。

  • 設(shè)計(jì)要求
  • 交通燈主路上綠燈持續(xù)22s,黃燈4s,紅燈16s;交通燈支路上綠燈持續(xù)時(shí)間12s,黃燈4s,紅燈26s。
  • 出現(xiàn)大霧天時(shí),倒計(jì)時(shí)停止,各方向均為黃燈

  • 設(shè)計(jì)方案選擇
    • 方案選擇

本設(shè)計(jì)利用Verilog HDL 語(yǔ)言,對(duì)一個(gè)十字路口的 交通信號(hào)燈進(jìn)行控制,可控制3個(gè)路口的紅、黃、綠三盞燈按特定規(guī)律進(jìn)行變化

該交通控制燈分別分為為南北方向的主路和東西方向的支路。兩條路的紅綠燈時(shí)間是不一致的——交通燈主路上綠燈持續(xù)22s,黃燈4s,紅燈16s;交通燈支路上綠燈持續(xù)時(shí)間12s,黃燈4s,紅燈26s。持續(xù)期間各燈顯示時(shí)間如主路綠燈自21s開始,于0s結(jié)束。采用分步模板的方式編寫代碼進(jìn)行功能實(shí)現(xiàn)。以下為狀態(tài)轉(zhuǎn)移圖:








    • 方案優(yōu)缺點(diǎn)

采用Verilog HDL語(yǔ)言進(jìn)行設(shè)計(jì)屬于頂層設(shè)計(jì),不需要耗費(fèi)大量時(shí)間去完成底層設(shè)計(jì)工作,使用代碼完成功能描述會(huì)自動(dòng)分配最優(yōu)搭器件搭配方式。

由于僅使用一塊小腳丫,所以僅選擇主路顯示時(shí)間倒計(jì)時(shí),支路采用亮燈模式不具體化時(shí)間。

因?yàn)槭怯布M(jìn)行操作,所以會(huì)存在延遲現(xiàn)象,經(jīng)測(cè)試,切換轉(zhuǎn)態(tài)時(shí)會(huì)延遲1s。

  • 軟件設(shè)計(jì)及器件選擇

4.1軟件選擇

軟件方面采用Quartus II對(duì)Verilog HDL 語(yǔ)言進(jìn)行實(shí)現(xiàn)

首先進(jìn)行分頻處理,因?yàn)樾∧_丫的處理頻率是12MHZ,分頻使達(dá)到我們需要1HZ的頻率。


reg clk_1Hz;
reg [23:0] cnt;              //產(chǎn)生 1Hz 信號(hào)
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
其次進(jìn)行三段式分態(tài):
1.同步時(shí)序狀態(tài)轉(zhuǎn)移
reg [7:0] timecnt;
reg [1:0] c_state,n_state;            
reg    flag;                                                         //啟動(dòng)暫停標(biāo)志            
//同步狀態(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)生標(biāo)志信號(hào)(霧天黃燈)
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              //個(gè)位為0十位減一
                        timecnt[7:4] <= timecnt[7:4] - 1'b1;
                        timecnt[3:0] <= 4'd9;
                    end else timecnt[3:0] <= timecnt[3:0] - 1'b1;              //個(gè)位減一,為0時(shí)切換狀態(tài)
                end
            end
            S2: begin
                led_master <= YELLOW;
                led_slave <= RED;
                if(timecnt==0) begin
                    timecnt <= 8'h03;              //S2時(shí)的初態(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模塊進(jìn)行對(duì)數(shù)碼管的操作
//segment模塊進(jìn)行對(duì)數(shù)碼管的操作,體現(xiàn)了模塊思想。

module Segment_led
(
input  [3:0] seg_data_1,  //四位輸入數(shù)據(jù)信號(hào)
input  [3:0] seg_data_2,  //四位輸入數(shù)據(jù)信號(hào)
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 個(gè)RGB三色LED
· 4 路撥碼開關(guān)
· 4 路按鍵
· 8 路用戶LED
· 36 個(gè)用戶可擴(kuò)展I/O

結(jié)論
5.1 問題分析

將代碼綜合下載到版上,有如下四種狀態(tài)和雙黃燈倒計(jì)時(shí)停止打的特殊狀態(tài)

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

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

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

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

特殊狀態(tài):雙黃燈閃爍 數(shù)碼管顯示00 停止倒計(jì)時(shí)

綜上小腳丫展示的四個(gè)狀態(tài)與預(yù)設(shè)邏輯狀態(tài)相符,運(yùn)行過程中也確實(shí)存在1s延遲情況。當(dāng)使用暫停按鈕達(dá)到雙黃燈模式時(shí)缺乏下一個(gè)狀態(tài),無(wú)法自動(dòng)轉(zhuǎn)移轉(zhuǎn)態(tài)。所以我們采用復(fù)位措施使其重新循環(huán)。

5.2心得體會(huì)

通過這次設(shè)計(jì),加強(qiáng)我們動(dòng)手、思考和解決問題的能力。在準(zhǔn)備期間,我們小組在B站上進(jìn)行視頻學(xué)習(xí)和上網(wǎng)查閱資料進(jìn)行軟硬件了解數(shù)字電子技術(shù)是一門實(shí)踐性很強(qiáng)的,而數(shù)電設(shè)計(jì)是實(shí)踐環(huán)節(jié)的重要組成部分,它給我們提供了一個(gè)理論聯(lián)系實(shí)際、檢驗(yàn)知識(shí)、加深認(rèn)識(shí)、開拓思維、汲取新知識(shí)的機(jī)會(huì)。數(shù)電的內(nèi)容雖然只是一個(gè)簡(jiǎn)單的數(shù)字系統(tǒng),但在思考問題、提出問題、解決疑難、排除障礙的過程中,卻能達(dá)到升華所學(xué)知識(shí)、訓(xùn)練綜合、創(chuàng)新能力及團(tuán)隊(duì)合作能力之目的。在完成的過程中,可以學(xué)到QUARTUSII軟件的使用方法,并且掌握狀態(tài)機(jī)的設(shè)計(jì)方法及利用數(shù)字電路實(shí)現(xiàn)自動(dòng)控制的思路和方法。




全部資料51hei下載地址:
簡(jiǎn)易交通信號(hào)燈.zip (3.23 MB, 下載次數(shù): 55)

評(píng)分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評(píng)分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:430492 發(fā)表于 2020-10-30 15:12 | 只看該作者
板子是網(wǎng)上買的嗎?還是自己做的?
回復(fù)

使用道具 舉報(bào)

板凳
ID:828188 發(fā)表于 2020-10-30 20:11 | 只看該作者
cooleaf 發(fā)表于 2020-10-30 15:12
板子是網(wǎng)上買的嗎?還是自己做的?

網(wǎng)上買的小腳丫開發(fā)板,師傅推薦的
回復(fù)

使用道具 舉報(bào)

地板
ID:945161 發(fā)表于 2021-6-26 16:28 | 只看該作者
應(yīng)該怎么把它們整在一起 我弄出來(lái)有很多錯(cuò)誤
回復(fù)

使用道具 舉報(bào)

5#
ID:828188 發(fā)表于 2021-12-11 18:06 | 只看該作者
新我 發(fā)表于 2021-6-26 16:28
應(yīng)該怎么把它們整在一起 我弄出來(lái)有很多錯(cuò)誤

你的仿真信號(hào)編寫了嗎?有問題的話聯(lián)系我
回復(fù)

使用道具 舉報(bào)

6#
ID:991119 發(fā)表于 2021-12-12 08:29 來(lái)自手機(jī) | 只看該作者
這里面有管腳分配嗎?
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表