Vivado交通灯verilog代码basys3开发板

名称:交通灯控制器Basys3开发板红绿灯数码管倒计时verilog

软件:VIVADO

语言:Verilog

代码功能:

交通灯是一种交通设施,用于控制机动车、非机动车和行人的通行。交通灯通常设置在道路交叉口、人行横道等交通要道上,通过红、黄、绿三种颜色的交替闪烁来指挥交通,保证交通的秩序,防止交通事故的发生。红灯表示停止,绿灯表示通行,黄灯表示准备停止。交通灯的发明改变了城市交通的面貌,提高了交通效率,保障了行人和车辆的安全。

交通灯控制器

实现一个十字路口交通灯,每条路有红绿黄三色信号灯,使用数码管显示倒计时。

本代码可通过代码参数修改通行时间

本代码已在Basys3开发板验证,开发板如下,其他开发板可以修改管脚适配:

basys3开发板.png

代码下载:交通灯控制器Basys3开发板红绿灯数码管倒计时verilog

工程文件

db0e6be1-a6d9-4cb1-b78e-81e7a8d52d8c.png

程序文件

ab2fc90e-97a9-41df-894d-a78ac3f7a6a3.png

RTL图

3e349725-8b62-4d08-8130-c76367010d91.png

管脚分配

9b31f06e-3da8-4620-bbcb-39e0d1b2a1aa.png

testbench

565be07f-7882-4757-9cbe-e59a24944c11.png

仿真图

fbd09bc4-63e6-4ed5-9f1f-7e6faef6074a.png

30de19bf-d844-48d0-9a4e-f25a34a787ba.png

部分代码展示:

/*
红->绿 绿->黄 黄->红
1、红--计时main_red_times------------------------绿--计时main_green_times---main_yellow_times黄灯---------------红
2、绿--计时branch_green_times---branch_yellow_times黄灯--------------------红--计时branch_reg_times-------------------绿
*/
//控制模块
module led(
input clk_1Hz,
input [7:0] main_green_time,
input [7:0] main_yellow_time,
input [7:0] branch_green_time,
input [7:0] branch_yellow_time,
output reg main_red,//主路灯
output reg main_green,//
output reg main_yellow,//
output reg branch_red,//支路灯
output reg branch_green,//
output reg branch_yellow,
output reg [7:0] main_green_BCD,
output reg [7:0] main_yellow_BCD,
output reg [7:0] main_red_BCD,
output reg [7:0] branch_green_BCD,
output reg [7:0] branch_yellow_BCD,
output reg [7:0] branch_red_BCD
);
//
parameter main_green_state=3'd0;//红绿
parameter main_yellow_state=3'd1;//红黄
parameter main_red_state=3'd2;//红红
parameter branch_green_state=3'd3;//绿红
parameter branch_yellow_state=3'd4;//黄红
parameter branch_red_state=3'd5;//红红
//定义路口个灯持续时间,修改此处时间
//主路绿灯+主路黄灯=支路红灯时间
//支路绿灯+支路黄灯=主路红灯时间
reg [2:0] state=3'd0;
reg [7:0] main_green_cnt=8'd1;
reg [7:0] main_yellow_cnt=8'd1;
reg [7:0] branch_green_cnt=8'd1;
reg [7:0] branch_yellow_cnt=8'd1;
//主路绿灯+主路黄灯=支路红灯时间
//支路绿灯+支路黄灯=主路红灯时间
always@(posedge clk_1Hz)
case(state)
main_green_state://红绿
if(main_green_cnt<main_green_time) begin//主路绿灯
state<=main_green_state;
main_green_cnt<=main_green_cnt+'d1;
end
else begin
state<=main_yellow_state;//计数到后到下一状态
main_green_cnt<='d1;
end
main_yellow_state://红黄   
   if(main_yellow_cnt<main_yellow_time) begin//主路黄灯
state<=main_yellow_state;
        main_yellow_cnt<=main_yellow_cnt+'d1;
end
else begin
state<=branch_green_state;//计数到后到下一状态
        main_yellow_cnt<='d1;
end
main_red_state://红红
    state<=branch_green_state;
   branch_green_state://绿红
if(branch_green_cnt<branch_green_time) begin//支路绿灯
state<=branch_green_state;
branch_green_cnt<=branch_green_cnt+'d1;
end
else begin
state<=branch_yellow_state;//计数到后到下一状态
branch_green_cnt<='d1;
end    
   branch_yellow_state://黄红
   if(branch_yellow_cnt<branch_yellow_time) begin//支路3s黄灯
state<=branch_yellow_state;
      branch_yellow_cnt<=branch_yellow_cnt+'d1;
end
else begin
state<=main_green_state;//计数到后到下一状态
      branch_yellow_cnt<='d1;
end
   branch_red_state://红红
         state<=main_green_state ;
default:state<=main_green_state;
endcase
//交通灯状态控制,state为相应状态时亮相应灯
always@(posedge clk_1Hz )
begin
if(state==main_green_state)
main_green<=1;
else
main_green<=0;
if(state==main_yellow_state )
main_yellow<=1;
else
main_yellow<=0;
if(state==branch_green_state | state==branch_yellow_state)
main_red<=1;
else
main_red<=0;
end
//交通灯状态控制,state为相应状态时亮相应灯
always@(posedge clk_1Hz )
begin
if(state==branch_green_state)
branch_green<=1;
else
branch_green<=0;
if(state==branch_yellow_state )
branch_yellow<=1;
else
branch_yellow<=0;
if(state==main_green_state | state==main_yellow_state)
branch_red<=1;
else
branch_red<=0;
end
//计数
//主路绿灯+主路黄灯=支路红灯时间
//支路绿灯+支路黄灯=主路红灯时间
//采用BCD码计数
always@(posedge clk_1Hz )//
begin
if(state==branch_green_state)
main_red_BCD<=branch_green_cnt;
else if(state==branch_yellow_state)
main_red_BCD<=branch_yellow_cnt+branch_green_time;//支路绿灯+支路黄灯=主路红灯时间
else
   main_red_BCD<='d0;
if(state==main_green_state)
branch_red_BCD<=main_green_cnt;
else if(state==main_yellow_state)
branch_red_BCD<=main_yellow_cnt+main_green_time;//主路绿灯+主路黄灯=支路红灯时间
else
   branch_red_BCD<='d0;
 main_green_BCD<=main_green_cnt;
 main_yellow_BCD<=main_yellow_cnt;
 branch_green_BCD<=branch_green_cnt;
 branch_yellow_BCD<=branch_yellow_cnt;
end
endmodule

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值