对于VHDL中的FSM,1,2或3过程意味着什么?

VHD*_*ict 7 coding-style vhdl fsm

关于如何在VHDL中编码有限状态机(FSM)似乎存在很多争议.人们谈论1流程,2流程或3流程FSM,好像每个人都知道它的含义以及每个流程的作用.但是,我一直无法找到准确的定义,而且存在的例子似乎是矛盾的.

这是一个客观问题:每个FSM风格(1个流程,2个流程,3个流程)的代码有何不同?我知道有一个个人偏好的组成部分,但当然可以客观地回答这个问题并列出每种方法的优点.

谢谢,

eta*_*nae 1

据我所知,FSM有4种类型。MealyMooreMedvedev注册输出在注册输出中,您最多可以有 4 个进程(您可以在此处找到示例)。在 Medvedev 中,可以有 1 或 2 个。在其他情况下,可以有 1 或 2 个用于状态机的进程,以及 1 个用于输出的进程,可以与组合进程合并。

假设这个 FSM:

有限状态机 在此输入图像描述

单进程 FSM VHDL 代码为:

FSM_FF: process (CLK, RESET)
begin
    if RESET='1' then
        STATE <= START;
    elsif CLK'event and CLK='1' then
        case STATE is
        when START =>
            if X=GO_MID then
                STATE <= MIDDLE;
            end if;
        when MIDDLE =>
            if X=GO_STOP then
                STATE <= STOP;
            end if;
        when STOP =>
            if X=GO_START then
                STATE <= START;
            end if;
        when others => STATE <= START;
        end case;
    end if;
end process FSM_FF;
Run Code Online (Sandbox Code Playgroud)

两进程 FSM VHDL 代码:

FSM_LOGIC: process( STATE, X)
begin
    case STATE is
    when START =>
        if X=GO_MID then
            NEXT_STATE <= MIDDLE;
        end if ;
    when MIDDLE =>
        ...
    when others => NEXT_STATE <= START;
    end case;
end process FSM_LOGIC;
---------------------------------------------
FSM_FF: process(CLK, RESET)
begin
    if RESET='1' then
        STATE <= START;
    elsif CLK'event and CLK='1' then
        STATE <= NEXT_STATE;
    end if;
end process FSM_FF;
Run Code Online (Sandbox Code Playgroud)

您应该使用哪一个?

根据詹森的说法,

这取决于很多事情。您需要 Moore 机器还是 Mealy 机器?接收输出信号的下游逻辑是同步的还是组合的?它还取决于您喜欢哪种编码风格。

Saheb Zamani教授从三个方面比较了1-Process和2-Process(幻灯片86):

  • 结构和可读性:从硬件角度来看,组合元素和顺序元素是两个不同的东西,因此分离的设计更接近硬件。另一方面,图形 FSM(没有输出方程)更像是 1 过程而不是 2 过程描述。
  • 模拟:由于可以访问中间信号,因此使用两个状态过程更容易进行错误检测。
  • 综合:2个状态过程可以导致更小的通用网表,从而获得更好的综合结果(取决于合成器,但一般来说,它更接近硬件)

PS我找不到这些链接的原始来源,所以我只是添加了我使用的来源。但这一个更全面,并且还包括一些示例。