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

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

https://www.nowcoder.com/practice/455c911bee0741bf8544a75d958425f7?tpId=301&tqId=5000590&ru=/exam/oj&qru=/ta/verilog-start/question-ranking&sourceUrl=%2Fexam%2Foj%3Fpage%3D1%26tab%3DVerilog%25E7%25AF%2587%26topicId%3D301

`timescale 1ns/1ns

module seq_circuit(
      input                A   ,
      input                clk ,
      input                rst_n,
 
      output   wire        Y   
);
parameter ST0 = 2'b00;
parameter ST1 = 2'b01;
parameter ST2 = 2'b10;
parameter ST3 = 2'b11;

reg [1:0] state_c;
reg [1:0] state_n;
reg       r_y;

always@(posedge clk or negedge rst_n)begin
    if(!rst_n)begin
        state_c <= ST0;
    end
    else begin
        state_c <= state_n;
    end
end

always@(*)begin
    case(state_c)
        ST0:begin
            if(A==1'b0)begin
                state_n <= ST1;
            end
            else begin
                state_n <= ST3;
            end
        end
        ST1:begin
            if(A==1'b0)begin
                state_n <= ST2;
            end
            else begin
                state_n <= ST0;
            end
        end
        ST2:begin
            if(A==1'b0)begin
                state_n <= ST3;
            end
            else begin
                state_n <= ST1;
            end
        end
        ST3:begin
            if(A==1'b0)begin
                state_n <= ST0;
            end
            else begin
                state_n <= ST2;
            end
        end
    endcase
end

always@(*)begin
    case(state_c)
        ST0:begin
            r_y <= 1'b0;
        end
        ST1:begin
            r_y <= 1'b0;
        end
        ST2:begin
            r_y <= 1'b0;
        end
        ST3:begin
            r_y <= 1'b1;
        end
    endcase
end
assign Y = r_y;
endmodule

#23届找工作求助阵地##我的实习求职记录#
全部评论
经典状态机三段式
点赞 回复 分享
发布于 2023-02-28 17:34 陕西

相关推荐

评论
点赞
收藏
分享

创作者周榜

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