如果我明确说明状态保持不变,那么在状态机过程中会有区别吗?

时间:2013-11-27 15:23:02

标签: vhdl

在控制状态机的过程中,当状态保持不变时,如果明确声明状态信号与其具有相同的值,是否存在差异?在下面的示例中,流程中的两行是否需要注释?

--CLK and RST are input signals
type state_machine_states is
  (
  st_idle, st_1
  );
signal sm : state_machine_states ;
signal next_state : std_logic;

begin

--assume that there is some logic which deals with the next_state signal

states_proc: process (RST, CLK)
begin
  if (RST = '1')
    sm <= 'st_idle'
  elsif rising_edge(CLK) then
    case sm is
      when st_idle =>
        if (next_state = '1') then
          sm <= st_1;
        else               --Are these two lines needed, and is there
          sm <= st_idle    --any difference if they are written or not?
        end if;
      when st_1 =>
        sm <= st_idle;
    end case;
  end if;
end process;

3 个答案:

答案 0 :(得分:3)

大多数现代工具都可以。如果你在组合过程中省略了else,那么你将推断一个锁存器。但是在一个定时的过程中你不会。

它将此视为驱动寄存器的启用。当未驱动启用时,输入不会输出到输出。

答案 1 :(得分:1)

当使用else语句时,或者通常在覆盖每个代码路径时,则避免使用锁存器

更新:当省略else时,使用latch作为内存

答案 2 :(得分:0)

与原始问题一起显示的代码不适用于FSM实施。您正在查看 sm 下一个州以确定 sm 应该是什么,这没有意义。必须在 ANY 状态机中执行以下操作:

1)查看当前状态输入以确定下一个状态应该是什么。这必须是注册

2)查看当前状态以确定输出应该是什么(Moore案例)。这应该 NOT BE REGISTERED ,除非需要特殊条件(例如,无干扰输出或流水线结构 - 例如,参见“硬件中的有限状态机:理论与设计”(使用VHDL和SystemVerilog的)“)。