题解 | 根据状态转移图实现时序电路
根据状态转移图实现时序电路
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