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

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

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

`timescale 1ns/1ns

module seq_circuit(
      input                A   ,
      input                clk ,
      input                rst_n,
 
      output   wire        Y   
);

//状态定义
parameter S0 = 2'd0;
parameter S1 = 2'd1;
parameter S2 = 2'd2;
parameter S3 = 2'd3;

//状态寄存器定义
reg [1:0]curr_state;
reg [1:0]next_state;


//状态输出寄存器
reg Y_reg;
//组合逻辑描述状态转移条件
always@(*)begin
    case(curr_state)
        S0: next_state <= A? S3:S1;
        S1: next_state <= A? S0:S2;
        S2: next_state <= A? S1:S3;
        S3: next_state <= A? S2:S0;
        default: next_state <= S0;
    endcase
end

//时序逻辑实现状态转移
always@(posedge clk or negedge rst_n)begin
    if(!rst_n)
        curr_state <= S0;
    else
        curr_state <= next_state;
end 

//组合逻辑描述输出
always@(*)begin
    if(!rst_n)
        Y_reg <= 0;
    else if(curr_state == S3)
        Y_reg <= 1;
    else    
        Y_reg <= 0;
end

assign Y = Y_reg;
endmodule

全部评论

相关推荐

1 收藏 评论
分享
牛客网
牛客企业服务