verilog实现交通灯
时间: 2023-07-30 14:06:47 浏览: 55
下面是一个简单的 Verilog 实现交通灯的例子:
```verilog
module traffic_light(
input clk,
input reset,
output reg red,
output reg yellow,
output reg green
);
parameter RED_TIME = 20; // 红灯持续时间
parameter YELLOW_TIME = 5; // 黄灯持续时间
parameter GREEN_TIME = 15; // 绿灯持续时间
reg [3:0] state; // 状态寄存器
// 状态定义
parameter RED = 4'b0001;
parameter RED_YELLOW = 4'b0010;
parameter GREEN = 4'b0100;
parameter YELLOW = 4'b1000;
// 状态转换
always @(posedge clk, negedge reset) begin
if (reset) begin
state <= RED;
end else begin
case (state)
RED: begin
state <= RED_YELLOW;
red <= 1;
yellow <= 1'b0;
green <= 1'b0;
#RED_TIME;
end
RED_YELLOW: begin
state <= GREEN;
red <= 1;
yellow <= 1;
green <= 1'b0;
#YELLOW_TIME;
end
GREEN: begin
state <= YELLOW;
red <= 1'b0;
yellow <= 1;
green <= 1'b0;
#GREEN_TIME;
end
YELLOW: begin
state <= RED;
red <= 1;
yellow <= 1'b0;
green <= 1'b0;
#YELLOW_TIME;
end
default: state <= RED;
endcase
end
end
endmodule
```
这个例子中,使用了一个状态机实现了交通灯的状态转换。每个状态对应一个灯的亮灭状态,通过时间计数器控制状态之间的转换,从而实现交通灯的功能。