题解 | #交通灯#
交通灯
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
);
localparam IDLE=3, light_green=0, light_yellow=1, light_red=2;
reg [1:0] n_state,c_state;
reg [5:0] cnt;
always@(posedge clk or negedge rst_n) begin
if(~rst_n) c_state <= IDLE;
else c_state <= n_state;
end
always@(*)(1444584) begin
if(~rst_n) begin
green = 0;
yellow = 0;
red = 0;
n_state = IDLE;
end
case(c_state)
IDLE: begin
green = 0;
yellow = 0;
red = 0;
n_state = (cnt=='d8)? light_red : n_state;
end
light_green: begin
green = 1;
yellow = 0;
red = 0;
n_state = (cnt=='d1)? light_red : n_state;
end
light_yellow: begin
yellow = 1;
green = 0;
red = 0;
n_state = (cnt=='d1)? light_green : n_state;
end
light_red: begin
red = 1;
green = 0;
yellow = 0;
n_state = (cnt=='d1)? light_yellow : n_state;
end
default: begin
green = 0;
yellow = 0;
red = 0;
n_state = IDLE;
end
endcase
end
always@(posedge clk or negedge rst_n) begin
if(~rst_n) cnt <= 'd10;
else case(c_state)
IDLE : cnt <= (cnt=='d8)? 'd10 : cnt-1;
light_green : cnt <= (pass_request && (cnt>'d10))? 'd10 :
(cnt=='d1)? 'd10 : cnt-1;
light_yellow: cnt <= (cnt=='d1)? 'd60 : cnt-1;
light_red : cnt <= (cnt=='d1)? 'd5 : cnt-1;
endcase
end
assign clock = cnt;
endmodule
简单易懂的代码,看一看

查看5道真题和解析