久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 6738|回復: 5
收起左側

Quartus II Verilog HDL語言Max10OC簡易交通燈設計 初學者的小腳丫

[復制鏈接]
ID:828188 發表于 2020-10-28 20:11 | 顯示全部樓層 |閱讀模式
仿真圖片.png
之前數電設計時做的簡易狀態燈,實現簡單,缺點:由于雙閃黃燈沒有加狀態,所以在切換狀態時下一個狀態不固定。

在十字路口的兩個方向上格設一組紅燈、綠燈、黃燈。設南北為為主路、東西方向為支路。當出現大霧天時可以設置兩路交通燈皆為黃燈模式。

  • 設計要求
  • 交通燈主路上綠燈持續22s,黃燈4s,紅燈16s;交通燈支路上綠燈持續時間12s,黃燈4s,紅燈26s。
  • 出現大霧天時,倒計時停止,各方向均為黃燈

  • 設計方案選擇
    • 方案選擇

本設計利用Verilog HDL 語言,對一個十字路口的 交通信號燈進行控制,可控制3個路口的紅、黃、綠三盞燈按特定規律進行變化

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








    • 方案優缺點

采用Verilog HDL語言進行設計屬于頂層設計,不需要耗費大量時間去完成底層設計工作,使用代碼完成功能描述會自動分配最優搭器件搭配方式。

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

因為是硬件進行操作,所以會存在延遲現象,經測試,切換轉態時會延遲1s。

  • 軟件設計及器件選擇

4.1軟件選擇

軟件方面采用Quartus II對Verilog HDL 語言進行實現

首先進行分頻處理,因為小腳丫的處理頻率是12MHZ,分頻使達到我們需要1HZ的頻率。


reg clk_1Hz;
reg [23:0] cnt;              //產生 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
其次進行三段式分態:
1.同步時序狀態轉移
reg [7:0] timecnt;
reg [1:0] c_state,n_state;            
reg    flag;                                                         //啟動暫停標志            
//同步狀態轉移
always @(posedge clk_1Hz or negedge rst_n_in)
    if(!rst_n_in)
        c_state <= S1;
    else
        c_state <= n_state;

2.組合邏輯狀態轉移
//判斷轉移條件
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

//產生標志信號(霧天黃燈)
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時切換狀態
                end
            end
            S2: begin
                led_master <= YELLOW;
                led_slave <= RED;
                if(timecnt==0) begin
                    timecnt <= 8'h03;              //S2時的初態值
                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模塊進行對數碼管的操作
//segment模塊進行對數碼管的操作,體現了模塊思想。

module Segment_led
(
input  [3:0] seg_data_1,  //四位輸入數據信號
input  [3:0] seg_data_2,  //四位輸入數據信號
output [8:0] segment_led_1,  //數碼管1,MSB~LSB = SEG,DP,G,F,E,D,C,B,A
output [8:0] segment_led_2   //數碼管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開發板,具體參數為:

· 核心器件 Altera MAX10 10M02S153I7G
· 1 路MicroUSB接口
· 2 位7段數碼管
· 2 個RGB三色LED
· 4 路撥碼開關
· 4 路按鍵
· 8 路用戶LED
· 36 個用戶可擴展I/O

結論
5.1 問題分析

將代碼綜合下載到版上,有如下四種狀態和雙黃燈倒計時停止打的特殊狀態

狀態1 主綠燈  從紅燈 倒計時

狀態2 主黃燈 從紅燈

狀態3 主紅燈 從綠燈

狀態4 主紅燈 從黃燈

特殊狀態:雙黃燈閃爍 數碼管顯示00 停止倒計時

綜上小腳丫展示的四個狀態與預設邏輯狀態相符,運行過程中也確實存在1s延遲情況。當使用暫停按鈕達到雙黃燈模式時缺乏下一個狀態,無法自動轉移轉態。所以我們采用復位措施使其重新循環。

5.2心得體會

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


51hei.png

全部資料51hei下載地址:
簡易交通信號燈.zip (3.23 MB, 下載次數: 55)

評分

參與人數 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

回復

使用道具 舉報

ID:430492 發表于 2020-10-30 15:12 | 顯示全部樓層
板子是網上買的嗎?還是自己做的?
回復

使用道具 舉報

ID:828188 發表于 2020-10-30 20:11 | 顯示全部樓層
cooleaf 發表于 2020-10-30 15:12
板子是網上買的嗎?還是自己做的?

網上買的小腳丫開發板,師傅推薦的
回復

使用道具 舉報

ID:945161 發表于 2021-6-26 16:28 | 顯示全部樓層
應該怎么把它們整在一起 我弄出來有很多錯誤
回復

使用道具 舉報

ID:828188 發表于 2021-12-11 18:06 | 顯示全部樓層
新我 發表于 2021-6-26 16:28
應該怎么把它們整在一起 我弄出來有很多錯誤

你的仿真信號編寫了嗎?有問題的話聯系我
回復

使用道具 舉報

ID:991119 發表于 2021-12-12 08:29 來自手機 | 顯示全部樓層
這里面有管腳分配嗎?
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 中国三级黄色录像 | 不卡一区二区在线观看 | 国产欧美一区二区三区久久人妖 | 久草视频在线播放 | 亚洲欧美综合精品另类天天更新 | 欧美亚洲国语精品一区二区 | 欧美偷偷 | 九色国产 | 久草日韩| 成人在线观看免费视频 | 亚洲综合视频 | 久久成人18免费网站 | 人和拘一级毛片c | 国产性色视频 | 99热这里都是精品 | 毛片一级片 | 亚洲美女视频 | 日日射夜夜骑 | 精品一区二区三区视频在线观看 | 一本一道久久a久久精品蜜桃 | 欧美日韩在线免费 | 天天久久| 成人午夜在线 | av在线免费不卡 | 四虎影院欧美 | 日韩国产中文字幕 | 国产xxxx搡xxxxx搡麻豆 | 日本 欧美 三级 高清 视频 | 欧美成人h版在线观看 | 精品视频一区二区三区在线观看 | 国产亚洲人成a在线v网站 | 国产精品国产成人国产三级 | 成人一区av| 91国自产 | 欧美亚洲日本 | 久久久www| 在线一级片| 久久一视频 | 1区2区3区视频 | 欧洲视频一区二区 | 人人玩人人添人人澡欧美 |