在控制状态机的过程中,当状态保持不变时,如果明确声明状态信号与其具有相同的值,是否存在差异?在下面的示例中,流程中的两行是否需要注释?
--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;
答案 0 :(得分:3)
大多数现代工具都可以。如果你在组合过程中省略了else,那么你将推断一个锁存器。但是在一个定时的过程中你不会。
它将此视为驱动寄存器的启用。当未驱动启用时,输入不会输出到输出。
答案 1 :(得分:1)
当使用else语句时,或者通常在覆盖每个代码路径时,则避免使用锁存器
更新:当省略else时,使用latch作为内存
答案 2 :(得分:0)
与原始问题一起显示的代码不适用于FSM实施。您正在查看 sm 和下一个州以确定 sm 应该是什么,这没有意义。必须在 ANY 状态机中执行以下操作:
1)查看当前状态和输入以确定下一个状态应该是什么。这必须是注册。
2)查看当前状态以确定输出应该是什么(Moore案例)。这应该 NOT BE REGISTERED ,除非需要特殊条件(例如,无干扰输出或流水线结构 - 例如,参见“硬件中的有限状态机:理论与设计”(使用VHDL和SystemVerilog的)“)。