题解 | #交通灯#

交通灯

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

简单易懂的代码,看一看

全部评论

相关推荐

起一个响亮的名字吧xzx:学习 c++
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务