就是把上一个里面对reset边沿的判断挪到 always@(*)里面处理
module top_module(
input clk,
input in,
input reset,
output out); //
reg [3:0] state, next_state;
parameter A = 4'b0001;
parameter B = 4'b0010;
parameter C = 4'b0100;
parameter D = 4'b1000;
// State transition logic
always @(*) begin
next_state = A;
if(reset) begin
next_state = A;
end else begin
case (state)
A: begin
if(in)
next_state = B;
else
next_state = A;
end
B: begin
if(in)
next_state = B;
else
next_state = C;
end
C: begin
if(in)
next_state = D;
else
next_state = A;
end
D: begin
if(in)
next_state = B;
else
next_state = C;
end
default: begin
next_state = A;
end
endcase
end
end
// State flip-flops with synchronous reset
always @(posedge clk) begin
if(reset)
state = A;
else
state = next_state;
end
// Output logic
always @(*) begin
if(state == D)
out = 1;
else
out = 0;
end
endmodule