题解 | #交通灯#
交通灯
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
简单易懂的代码,看一看