交通燈設(shè)計(jì):
1、設(shè)計(jì)原理
(1)對項(xiàng)目進(jìn)行模塊劃分、對各模塊的功能及其端口進(jìn)行說明。
①分頻器部分
降低實(shí)驗(yàn)板固有頻率,分出頻率用來計(jì)數(shù)和數(shù)碼管動態(tài)掃描。
②狀態(tài)機(jī)部分
0,1,2,3四個基礎(chǔ)狀態(tài)以及進(jìn)一步完善后的檢修和行人通行狀態(tài)。
③LED燈與數(shù)碼管顯示部分
LED燈模擬東西南北方向交通燈的狀況,數(shù)碼管顯示當(dāng)前狀態(tài)剩余時間。
2、設(shè)計(jì)源文件
①主模塊
`timescale 1ns / 1ps
module jiaotong(
input clk_100MHZ,
input rst,
input stby,//檢修
output [7:0]dsmg, //數(shù)碼管段選
output reg [1:0]wsmg, //數(shù)碼管位選
output reg [5:0]led //led燈:J3 J2 K2(東西紅黃綠),K1 H6 H5(南北紅黃綠)
);
wire clk_1Hz;
wire clk_400Hz;
fenpin u1(clk_100MHZ,32'd50000000,clk_1Hz);
fenpin u2(clk_100MHZ,32'd125000,clk_400Hz);
integer second;
integer shijian; //秒數(shù)計(jì)數(shù)上限
reg [2:0]state; //狀態(tài)
always @(state) //狀態(tài)定義
begin
case (state)
0:begin led=6'b001100;shijian=40; end //state=0:001100,東西綠燈亮,南北紅燈亮,40s
1:begin led=6'b010100;shijian=5; end //state=1:010100,東西黃燈亮,南北紅燈亮, 5s
2:begin led=6'b100001;shijian=40; end
3:begin led=6'b100010;shijian=5; end
4:begin led=6'b010010;end //state=4:010010,東西黃燈亮,南北黃燈亮
5:begin led=6'b000000;shijian=3;end //state=5:000000,燈滅,延時3s
endcase
end
always @(posedge clk_1Hz )
begin
begin
if( rst == 1)
begin
second = 0;
state = 0;
end
else if (rst == 0 && stby == 1)
state = 4;
else if (rst == 0 && stby==0 && state == 4 )
second = 0;
end
if (state != 4)
second = second + 1;
if (shijian == second)
second = 0;
if (second==0)
begin
case (state)
0,1,2 : state <= state +1 ; //狀態(tài)轉(zhuǎn)換0-1-2-3-4-5-0
3 : state <= 0;
4 : state <= 5;
5 : state <= 0;
endcase
end
end
reg [2:0]wei;
reg [3:0]num;
shumaguang u3(num,dsmg);
//數(shù)碼管顯示
always @(posedge clk_400Hz)
begin
if(!wei)
wsmg=8'b00000001;
else
wsmg = wsmg << 1;
case(wei)
0:num=(shijian-second)%10; //數(shù)碼管個位
1:num=(shijian-second)/10; //數(shù)碼管十位
2:num=10;
3:num=10;
4:num=10;
5:num=10;
6:num=10;
7:num=10;
endcase
wei = wei + 1'b1;
end
endmodule
②分頻器模塊
module fenpin(
input clk_100MHZ,
input[31:0] div,
output reg clk_Hz
);
integer clk_cnt; //計(jì)數(shù)器的值
always @(posedge clk_100MHZ)
begin
if(clk_cnt==div)//判斷計(jì)數(shù)器的值是否計(jì)數(shù)到div
begin
clk_cnt <= 1'b0;
clk_Hz <= ~clk_Hz;end //如果計(jì)數(shù)到div,計(jì)數(shù)器的值清零,同時clk_Hz的電平翻轉(zhuǎn)一次,即分頻后頻率100MHz/div/2
else
clk_cnt <= clk_cnt + 1'b1;//計(jì)數(shù)沒有到div,計(jì)數(shù)值加1
end
endmodule
③數(shù)碼管模塊
module shumaguang(
input [3:0]num,
output reg [7:0]dsmg
);
always @(*)
case (num)
0:dsmg <= 8'b00111111;
1:dsmg <= 8'b00000110;
2:dsmg <= 8'b01011011;
3:dsmg <= 8'b01001111;
4:dsmg <= 8'b01100110;
5:dsmg <= 8'b01101101;
6:dsmg <= 8'b01111101;
7:dsmg <= 8'b00000111;
8:dsmg <= 8'b01111111;
9:dsmg <= 8'b01101111;
10:dsmg <= 0;
endcase
endmodule
3、仿真測試文件文章來源:http://www.zghlxwxcb.cn/news/detail-521828.html
`timescale 1ns / 1ps
module sim_jiaotongdeng( );
reg clk;
reg rst;
reg stby;//檢修
wire[5:0]led;
jiaotong a1(.clk_100MHZ(clk),.rst(rst),.stby(stby),.led(led));
parameter PERIOD = 10; //固定計(jì)數(shù)周期
always begin
clk = 0;
#(PERIOD/2) clk = 1;
#(PERIOD/2);
end
initial begin
clk = 0;
rst = 1;
stby = 0;
#100;
rst = 0;
#100; //延時
stby = 1;
end
endmodule
仿真結(jié)果
實(shí)驗(yàn)板部分結(jié)果文章來源地址http://www.zghlxwxcb.cn/news/detail-521828.html
到了這里,關(guān)于【FPGA】EDA技術(shù)綜合設(shè)計(jì) 交通燈設(shè)計(jì)的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!