三always块大多用于同步Mealy状态机,两个时序always块分别用来描述现态逻辑和对输出赋值,组合always块用于产生下一状态。这种方式的状态机也是
寄存器输出,输出无毛刺,并且代码比单always块清晰一度,但是面积大于双always块。随着芯片资源和速度的提高,目前这种方式得到了广泛应用。
//构成状态跳转环
always @ (posedge clk or negedge rst_n)
current_state <= next_state;
//完成状态机的内部逻辑
always @ (current_state or ...) begin
case(current_state)
S1:next_state = S2;
S2:next_state = S1;
default:...
endcase
end
//完成状态机的外部逻辑
always @ (current_state or ...) begin
case(current_state)
S1:
S2:
default:..
endcase
end
寄存器输出,输出无毛刺,并且代码比单always块清晰一度,但是面积大于双always块。随着芯片资源和速度的提高,目前这种方式得到了广泛应用。
//构成状态跳转环
always @ (posedge clk or negedge rst_n)
current_state <= next_state;
//完成状态机的内部逻辑
always @ (current_state or ...) begin
case(current_state)
S1:next_state = S2;
S2:next_state = S1;
default:...
endcase
end
//完成状态机的外部逻辑
always @ (current_state or ...) begin
case(current_state)
S1:
S2:
default:..
endcase
end