【FPGA】Verilog實現交通訊號燈

大二數字電路的課程設計中,有一份平常做業使用Xilinx FPGA實現簡易交通訊號燈,但很惋惜當時時間有限,沒能最終完成。正好在這一學期選修SOPC設計課程,一樣採用了Xilinx FPGA,故打算從新完成交通訊號燈的相關內容。框架

本項目採用Digilent公司生產的BASYS3開發板,基於Xilinx FPGA,該板子目前能夠在馬雲家買到,不過價格偏貴,在校學生可在digilent官網申請以更低價格買入。編輯器

大體的框架以下,只是個構思,還很不完善,後續會進行修改。好比如今我目前並無把計時功能徹底從State模塊中摘出來,只是用Timer實例化了一個1s計時器在裏面,而且用count計數。ide

 

下面是State部分的代碼,目前還有不少須要修改完善的地方,好比後續會將State中的count計數也摘出來。註釋部分因爲Vivado自帶編輯器過於磕磣(沒有辦法字體回退),而我又很不喜歡微軟雅黑和宋體,因此只好用個人工地英語寫一點註釋了。字體

module BASYS_BIGPROJECT_State(
input clk,
output reg[1:0]state,
output reg[3:0]count
    );
wire clk_1;
Freq_divider #(27)clk_1s(clk,0,,clk_1);
always@(posedge clk_1)
begin
    count <= count + 1;
end

//green led for 4s, yellow led for 2s
always@(posedge clk)
begin
    case(state)
    2'b00:begin //main red, branch green
        if(count<4) begin
            state <= 2'b00;
        end
        else begin
            state <= 2'b01;
            count = 3'b000;
        end
    end
    2'b01:begin //main red, branch yellow
        if(count<2) begin
            state <= 2'b01;
        end
        else begin
            state <= 2'b11;
            count = 3'b000;
        end
    end
    2'b11:begin //main green, branch red
        if(count<4) begin
            state <= 2'b11;
        end
        else begin 
            state <= 2'b10;
            count = 3'b000;
        end
    end
    2'b10:begin //main yellow, branch red
        if(count<2) begin
            state <= 2'b10;
        end
        else begin
            state <= 2'b00;
            count = 3'b000;
        end
    end
    endcase
end
endmodule
相關文章
相關標籤/搜索