交通灯控制系统

一.实验目的
设计一个用于十字路口的交通灯控制器,能显示十字路口东西、南北两个方向的红、黄、绿的指示状态;
具有倒计时的功能,用两组数码管作为东西和南北方向的倒计时显示,主干道直行(绿灯)60秒后,左转(绿灯)40秒;支干道直行(绿灯)45秒后,左转(绿灯)30秒,在每次绿灯变成红灯的转换过程中,要亮黄灯5秒作为过渡。黄灯每秒闪亮一次。
只考虑直行和左转车辆控制信号灯,右转车辆不受信号灯控制, 南北向车辆与东西向车辆交替方向,同方向等待车辆应先方向直行车辆而后放行左转车辆。
二.实验代码
主代码

module traffic_fsm (lights, clk, rst);
input clk, rst;
output [5:0] lights;
wire clk, rst;
reg [5:0] lights;

// define reg
reg [2:0] curr_st;
reg [2:0] next_st;
reg [3:0] count;
// define state
parameter s0 = 3'b000;
parameter s1 = 3'b001;
parameter s2 = 3'b010;
parameter s3 = 3'b011;
parameter s4 = 3'b100;
parameter s5 = 3'b101;
// define lights
parameter light0 = 6'b100_001;
parameter light1 = 6'b100_010;
parameter light2 = 6'b100_100;
parameter light3 = 6'b001_100;
parameter light4 = 6'b010_100;
parameter light5 = 6'b100_100;
// define time delay
parameter delay5 = 5;
parameter delay1 = 1;

// 产生一个可能的状态变化
always @ (posedge clk or negedge rst) begin
  if (!rst) begin
             curr_st <= s0;
             count <= 0;
           end
  else      

// curr_st = next_st;
begin
if (curr_st == s0 | curr_st == s3)
if (count < delay5 - 1)
count <= count + 1;
else begin
curr_st <= next_st;
count <= 0;
end
else if (curr_st == s1 | curr_st == s2 | curr_st == s4 | curr_st == s5) begin
curr_st <= next_st;
count <= 0;
end
end
end
// 产生下一个状态的组合逻辑
always @ (curr_st) begin
case (curr_st)
s0:
next_st <= s1;
s1:
next_st <= s2;
s2:
next_st <= s3;
s3:
next_st <= s4;
s4:
next_st <= s5;
s5:
next_st <= s0;
default: begin
next_st <= s0;
end
endcase
end
// 产生输出lights的组合逻辑
always @ (posedge clk or negedge rst) begin
if (!rst) lights = light0;
else
case (curr_st)
s0: lights = light0;
s1: lights = light1;
s2: lights = light2;
s3: lights = light3;
s4: lights = light4;
s5: lights = light5;
default: lights = light0;
endcase
end
endmodule

                              测试文件代码(代码二)

// testbench of ‘traffic_fsm’
module traffic_fsm_tb;
reg clk, rst;
wire [5:0] lights;
traffic_fsm u1 (.lights(lights), .clk(clk), .rst(rst));
initial begin
clk = 0;
rst = 0;
#10 rst = 1;
#80 rst = 0;
#20 rst = 1;
end
always #5 clk = ~clk;
endmodule

三.实验相关图片
1. 代码运行波形图
请添加图片描述
2. 代码运行逻辑图请添加图片描述
3. 代码运行引脚图请添加图片描述
四.交通灯控制系统
在这里插入图片描述
五.实验结果
完成了课题设置,设计了解了相关的设计代码,自我知识的能力得到了扩充,一门有意义、有效果的课程。

                                                      具体操作视频链接如下

modsim或quartus交通灯设计实验(视频详解)

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值