大二數字電路的課程設計中,有一份平常做業使用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