interi 发表于 2010-6-26 01:21:17

状态机为什么要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有什么用?

HANG 发表于 2010-6-26 02:26:38

作为一个传递参数的信号而已,表示下一个状态

ngtim 发表于 2010-6-26 02:45:03

应该是为了把寄存器输入和输出分开表示.

HDL 发表于 2010-6-26 03:39:39

因为这是硬件, 不是软件.

ngtim 发表于 2010-6-26 05:05:32

第一种是两段示状态机,可以实现组合逻辑和时序逻辑的分离。第二种是一段式。这是不同的代码风格,在硬件实现的时候会有不同,一般推荐两段式。

FFT 发表于 2010-6-26 06:12:08

也不是很明白,可能是在判断输入的同时输出吧,帮你顶了,高手讲讲!

inter 发表于 2010-6-26 07:50:57

其实这些都是 代码规范的问题, 好的状态转移写法会有好的综合效果<br>
<br>
FSM 的 current state 和 next state 都是对应的状态的转移, 在书写上会让人易懂. 而且,这些写可以做到 硬件已熟记于心, 所以, 很多资料都是推荐这么做的!<br>
<br>
另外,至于说N段式写法, 都是个规范. 你不想遵守那就自己慢慢写吧

longt 发表于 2010-6-26 09:20:40

状态机嘛,就是循环着来的<br>
这次执行完了后,同时也就决定了下一次的状态,如果没有那个next_state,下一次要执行什么,怎么才能传出去呢

Sunlife 发表于 2015-4-7 11:07:38

这次执行完了后,同时也就决定了下一次的状态,如果没有那个next_state,下一次要执行什么,怎么才能传出去呢
页: [1]
查看完整版本: 状态机为什么要next_state这个东西?