题解 | #根据状态转移表实现时序电路#

根据状态转移表实现时序电路

https://www.nowcoder.com/practice/455c911bee0741bf8544a75d958425f7

`timescale 1ns/1ns

module seq_circuit(
      input                A   ,
      input                clk ,
      input                rst_n,
 
      output   wire        Y   
);
    parameter st_0 = 2'b00;
    parameter st_1 = 2'b01;
    parameter st_2 = 2'b10;
    parameter st_3 = 2'b11;

    reg [1:0] st_cur;
    reg [1:0] st_next;
    always @(posedge clk or negedge rst_n) begin
        if (!rst_n) begin
            st_cur <= 2'b00;
            st_next <= 2'b00;
        end
        else begin
            st_cur <= st_next;
        end
    end
    
    always @(*) begin//这里不能用上升沿时序,这里是组合逻辑,状态由输入和上一个状态决定
        if (!rst_n) begin
            st_next <= 2'b00;
            
        end
        else if (A==0) begin
            case(st_cur)
                2'b00 : begin st_next <= 2'b01; end
                2'b01 : begin st_next <= 2'b10; end
                2'b10 : begin st_next <= 2'b11; end
                2'b11 : begin st_next <= 2'b00; end
                default : begin st_next <= 2'b00; end
            endcase
        end
        else if (A==1) begin
            case(st_cur)
                2'b00 : begin st_next <= 2'b11; end
                2'b01 : begin st_next <= 2'b00; end
                2'b10 : begin st_next <= 2'b01; end
                2'b11 : begin st_next <= 2'b10; end
                default : begin st_next <= 2'b00; end
            endcase
        end
    end
    assign Y = (st_cur == 2'b11);





endmodule

全部评论

相关推荐

面了100年面试不知...:被割穿了才想起来捞人了
投递哔哩哔哩等公司6个岗位
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务