名称:交通灯控制器设计Verilog代码Basys3开发板vivado软件
软件:VIVADO
语言:Verilog
代码功能:
交通灯控制器
1.设计要求
分两个方向(1、2),每个方向各有红绿黄(RGY)三个交通灯。有自动、手动两种控制方式。
在自动方式下,控制器的状态转移表为:
状态 亮灯 停留时间
S0 R1,G2 2秒
S1 R1,Y2 1秒
S2 G1,R2 2秒
S3 Y1,R2 1秒
在手动方式下,按下K0~K3时直接进入对应序号的状态,随后转入自动方式
FPGA代码Verilog/VHDL代码资源下载:www.hdlcode.com
本代码已在Basys3开发板验证,开发板如下,其他开发板可以修改管脚适配:
1. 工程文件
2. 程序文件
3. 程序编译
4. 管脚分配
5. Testbench
6. 仿真图
红绿灯自动变化
按键K0~K3控制状态变化
红绿灯自动变化
部分代码展示:
module traffic_light( input clk_100M, input key0,//按键按下高电平--BTNL input key1,//按键按下高电平--BTNR input key2,//按键按下高电平--BTNU input key3,//按键按下高电平--BTND output reg R1,///红1--LD0 output reg G1,//绿1--LD1 output reg Y1,//黄1--LD2 output reg R2,//红2--LD3 output reg G2,//绿2--LD4 output reg Y2//黄2--LD5 ); parameter count_second=32'd100_000_000;//100M时钟计数到100_000_000就是1s,仿真改小为100 reg [31:0] count=32'd0; always@(posedge clk_100M) if(key0 | key1 | key2 | key3) count<=32'd0;//有按键按下时重新计时 else if(count>=count_second)begin//100M时钟计数到count_second就是1s count<=32'd0; end else begin count<=count+32'd1;//计数 end //定义状态S0~S3 parameter S0=2'd0; parameter S1=2'd1; parameter S2=2'd2; parameter S3=2'd3; reg [1:0] state=S0; reg [1:0] count_s=2'd0; always@(posedge clk_100M) if(key0)begin state<=S0;//按键K0,进入S0状态 count_s<=0; end else if(key1)begin state<=S1;//按键K1,进入S1状态 count_s<=0; end else if(key2)begin state<=S2; //按键K2,进入S2状态 count_s<=0; end else if(key3)begin state<=S3;//按键K3,进入S3状态 count_s<=0; end else if(count==count_second)//1秒判断一次状态是否跳转 case(state) S0:begin if(count_s>=1)begin//0~1表2秒 count_s<=0; state<=S1;//到S1 end else begin count_s<=count_s+1; state<=S0;//S0保持2s