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

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

https://www.nowcoder.com/practice/e405fe8975e844c3ab843d72f168f9f4

`timescale 1ns/1ns

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

parameter S0 = 2'b00;
parameter S1 = 2'b01;
parameter S2 = 2'b10;
parameter S3 = 2'b11;


reg Y_reg;
reg [1:0] current_state;
reg [1:0] next_state;
assign Y = Y_reg;

always@(posedge clk or negedge rst_n)
if(!rst_n)begin
    current_state <=  S0;
    Y_reg <= 0;
end
else begin
    current_state <=  next_state;
end


// 状态转移逻辑
always @(*) begin
    case (current_state)
        S0: next_state = (C) ? S1 : S0;
        S1: next_state = (C) ? S1 : S3;
        S2: next_state = (C) ? S2 : S0;
        S3: next_state = (C) ? S2 : S3;
        default: next_state = S0;
    endcase
end

// 输出逻辑
always @(*) begin
    case (current_state)
        S0: Y_reg = 0;
        S1: Y_reg = 0;
        S2: Y_reg = (C) ? 1 : 0;
        S3: Y_reg = 1;
        default: Y_reg = 0;
    endcase
end



endmodule

全部评论

相关推荐

认真搞学习:这么良心的老板真少见
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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