题解 | #交通灯#
交通灯
https://www.nowcoder.com/practice/b5ae79ff08804b61ad61f749eaf157ba
`timescale 1ns/1ns
module triffic_light
(
input rst_n, //异位复位信号,低电平有效
input clk, //时钟信号
input pass_request,
output wire[7:0]clock,
output reg red,
output reg yellow,
output reg green
);
reg[7:0]cnt0;
reg[1:0]cs,ns;
parameter Idle=0,Red=1,Yellow=2,Green=3;
always@(posedge clk or negedge rst_n)begin
if(!rst_n)cnt0<=8'd10;
else if(cs==Idle & cnt0==8'd8)cnt0<=8'd10;
else if(cs==Red & cnt0==8'd1)cnt0<=8'd5;
else if(cs==Yellow & cnt0==8'd1)cnt0<=8'd60;
else if(cs==Green & pass_request & cnt0>8'd10)cnt0<=8'd10;
else if(cs==Green & cnt0==8'd1)cnt0<=8'd10;
else cnt0<=cnt0-1;
end
always@(posedge clk or negedge rst_n)begin
if(!rst_n)cs<=Idle;
else cs<=ns;
end
always@(*)begin
if(!rst_n)ns=Idle;
else begin
case(cs)
Idle:begin
if(cnt0==8'd8)ns=Red;
else ns=ns;
end
Red:begin
if(cnt0==8'd1)ns=Yellow;
else ns=ns;
end
Yellow:begin
if(cnt0==8'd1)ns=Green;
else ns=ns;
end
Green:begin
if(cnt0==8'd1)ns=Red;
else ns=ns;
end
endcase
end
end
always@(posedge clk or negedge rst_n)begin
if(!rst_n)begin
red<=0;
yellow<=0;
green<=0;
end
else begin
case(ns)
Idle:begin
red<=0;
yellow<=0;
green<=0;
end
Red:begin
red<=1;
yellow<=0;
green<=0;
end
Yellow:begin
red<=0;
yellow<=1;
green<=0;
end
Green:begin
red<=0;
yellow<=0;
green<=1;
end
endcase
end
end
assign clock=cnt0;
endmodule
vivo公司福利 698人发布