我是一名 Verilog 初学者,我正在尝试了解在常见 FPGA 平台上实现 FSM 的最佳方法。
我看过很多论文(例如,this)鼓励这样的
state
/next_state
风格:
always @(posedge clock)
state <= next_state;
always @(posedge clock)
[...some logic that sets next_state...]
我觉得这很令人困惑,因为它会插入一个额外的、不必要的时钟周期。例如,如果第二个
always
块在时钟 next_state
更新 N
,那么在时钟 N+1
,state
最初仍将具有其旧值,并且不保证已更新为 next_state
直到时钟N+2
。 (如有错误请指正。)
为什么这种风格被认为是最佳实践,因为它会导致在每次状态变化时插入额外的时钟周期?
如有错误请指正。
您链接到的论文没有推荐您的问题所述内容。
论文确实推荐了 2 个
always
块:
例如,请参阅部分:
- 两个始终阻止FSM风格(好风格)
always @(posedge clock)
state <= next_state;
always @(state or ...)
[...some logic that sets next_state...]