名称:智能交通灯系统设计Verilog代码Quartus仿真
软件:Quartus
语言:Verilog
代码功能:
智能交通灯系统设计
设计要求:
1、设计一个两路口智能交通灯系统。要求每条路口都有红、黄、绿三种灯,按照绿灯→黄灯→红灯等顺序循环照亮。一条路口亮绿灯或黄灯时,另一路口亮红灯。具体亮灯顺序如下:“A路口亮绿灯,同时B路口亮红灯60 s”→ “A路口亮黄灯,同时B路口亮红灯10 s” →“A路口亮红灯,同时B路口亮绿灯50 s”→ “A路口亮红灯,同时B路口亮黄灯10 s” →“A路口亮绿灯,同时B路口亮红灯60 s” →……
2、用数码管显示出每个路口对应指示灯显示的剩余时间;
3、设计中采用实验开发板上的50MHz晶振系统时钟作为基准,且设计成同步电路;
4、程序设计尽可能考虑模块化、参数化设计思想,并遵循基本的格式规范;
5、采用模块化设计方式,底层模块必须进行功能仿真。
FPGA代码Verilog/VHDL代码资源下载:www.hdlcode.com
演示视频:
设计文档:
1. 工程文件
2. 程序文件
3. 程序编译
4. RTL图
状态图
5. 仿真图
整体仿真图
分频模块仿真图
状态控制模块仿真
显示模块仿真
部分代码展示:
//状态控制模块
module state_control(
input clk_1Hz,//1Hz时钟
output [2:0] main_LEDs,//主干道红绿黄
output [2:0] branch_LEDs,//支干道红绿黄
output reg [7:0] main_number,//主干道倒计时
output reg [7:0] branch_number//支干道倒计时
);
//红灯60 黄灯10s 绿灯50s
reg red_M;//主干道红灯
reg green_M;//主干道绿灯
reg yellow_M;//主干道黄灯
reg red_B;//支干道红灯
reg green_B;//支干道绿灯
reg yellow_B;//支干道黄灯
assign main_LEDs ={red_M,green_M,yellow_M};
assign branch_LEDs={red_B,green_B,yellow_B};
reg [7:0] green_M_count;
reg [7:0] yellow_M_count;
reg [7:0] red_M_count;
reg [7:0] green_B_count;
reg [7:0] yellow_B_count;
reg [7:0] red_B_count;
reg [7:0] S0_count=1;
reg [7:0] S1_count=1;
reg [7:0] S2_count=1;
reg [7:0] S3_count=1;
reg [1:0] state=0;
parameter S0=2'd0;
parameter S1=2'd1;
parameter S2=2'd2;
parameter S3=2'd3;
//状态机控制
always@(posedge clk_1Hz)
case(state)
S0://主干道绿灯状态
if(S0_count<50) begin//绿灯50秒
state<=S0;
S0_count<=S0_count+1;//计数
end
else begin
state<=S1;//下一状态
S0_count<=1;
end
S1://主干道黄灯状态
if(S1_count<10) begin//黄灯10秒
state<=S1;
S1_count<=S1_count+1;//计数
end
else begin
state<=S2;//下一状态
S1_count<=1;
end
S2://支干道绿灯状态
if(S2_count<50) begin//绿灯50秒
state<=S2;
S2_count<=S2_count+1;//计数
end
else begin
state<=S3;//下一状态
S2_count<=1;
end
S3://支干道黄灯状态
if(S3_count<10) begin//黄灯10秒
state<=S3;
S3_count<=S3_count+1;//计数
end
else begin
state<=S0;//下一状态
S3_count<=1;
end
default:;
endcase
//主干道交通灯控制
always@(posedge clk_1Hz )
begin
if(state==S0)//主干道绿灯状态
green_M<=1;
else
green_M<=0;
if(state==S1 )//主干道黄灯状态
yellow_M<=1;
else
yellow_M<=0;
if(state==S2 | state==S3)//主干道红灯状态
red_M<=1;
else
red_M<=0;
end
//支干道交通灯控制
always@(posedge clk_1Hz )
begin
if(state==S2)//支干道绿灯状态
green_B<=1;
else
green_B<=0;
if(state==S3 )//支干道黄灯状态
yellow_B<=1;
else
yellow_B<=0;
if(state==S0 | state==S1)//支干道红灯状态
red_B<=1;
else
red_B<=0;
end
//支干道时间计数
always@(posedge clk_1Hz )
begin
green_M_count<=S0_count;//绿灯计数
yellow_M_count<=S1_count;//黄灯计数
//红灯计数
if(state==S2)//支干道绿灯状态
red_M_count<=S2_count;
else if(state==S3)//支干道黄灯状态
red_M_count<=S3_count+50;///绿灯+黄灯=红灯时间
else
red_M_count<=0;
end
点击链接获取代码文件:http://www.hdlcode.com/index.php?m=home&c=View&a=index&aid=599
511