状态机为什么要next_state这个东西?
本帖最后由 fpgaw 于 2010-11-18 16:22 编辑状态机为什么要next_state这个东西?
比如一般是这样写的:
always @(state)
case(state)
S0 : next_state <= S1;
S1 : next_state <= S0;
endcase
always @(posedge clk)
begin
...
...
state <= next_state;
end
然而,这样写为什么不行呢?
always @(posedge clk)
case(state)
S0 : state <= S1;
S1 : state <= S0;
endcase
always @(posedge clk)
begin
...
...
end
中间的next_state有什么用? 作为一个传递参数的信号而已,表示下一个状态 应该是为了把寄存器输入和输出分开表示. 因为这是硬件, 不是软件. 第一种是两段示状态机,可以实现组合逻辑和时序逻辑的分离。第二种是一段式。这是不同的代码风格,在硬件实现的时候会有不同,一般推荐两段式。 也不是很明白,可能是在判断输入的同时输出吧,帮你顶了,高手讲讲! 其实这些都是 代码规范的问题, 好的状态转移写法会有好的综合效果<br>
<br>
FSM 的 current state 和 next state 都是对应的状态的转移, 在书写上会让人易懂. 而且,这些写可以做到 硬件已熟记于心, 所以, 很多资料都是推荐这么做的!<br>
<br>
另外,至于说N段式写法, 都是个规范. 你不想遵守那就自己慢慢写吧 状态机嘛,就是循环着来的<br>
这次执行完了后,同时也就决定了下一次的状态,如果没有那个next_state,下一次要执行什么,怎么才能传出去呢 这次执行完了后,同时也就决定了下一次的状态,如果没有那个next_state,下一次要执行什么,怎么才能传出去呢
页:
[1]