【问题标题】:What does 1-, 2-, or 3-process mean for an FSM in VHDL?对于 VHDL 中的 FSM,1、2 或 3 进程意味着什么?
【发布时间】:2014-12-24 11:19:21
【问题描述】:

关于如何在 VHDL 中编写有限状态机 (FSM) 似乎存在相当多的争论。人们谈论 1 进程、2 进程或 3 进程 FSM,就好像每个人都确切地知道它的含义以及每个进程的作用。然而,我一直无法找到一个准确的定义,而且存在的例子似乎是矛盾的。

这是一个客观的问题:每种 FSM 样式(1-进程、2-进程、3-进程)在代码方面有什么区别?我知道其中有个人偏好的一部分,但当然可以客观地回答问题并列出每种方法的优点。

谢谢,

【问题讨论】:

  • Xilinx 的 XST PDF 显示了 1,2 和 3 进程 FSM 的示例(奇怪的是,只有 2 进程的两个变体之一)。这部分是 Mealy-Moore 问题,很大程度上是个人偏好或死记硬背。有分析倾向的人可能会注意敏感性列表中存在的元素的含义。
  • @DavidKoontz 2 进程 FSM 的第二个变体是什么?状态寄存器一个进程,其他所有进程另一个进程?
  • XST pdf 是一个很好的参考,谢谢。 @DavidKoontz
  • XST 可以在XST User Guide UG627 v12.4 找到,相关章节是第 217 页的“FSM HDL 编码技术”。
  • 只是关于更新敏感列表的说明:编辑器(emacs、eclipse、..)应该注意这一点。恕我直言

标签: coding-style vhdl fsm


【解决方案1】:

据我所知,FSM 有 4 种类型。 MealyMooreMedvedev注册输出。在注册输出中,您最多可以有 4 个进程(您可以找到一个示例 here)。在梅德韦杰夫中,可以有 1 个或 2 个。在其他情况下,状态机可以有 1 个或 2 个进程,可以与组合过程合并的输出有 1 个进程。

假设这个 FSM:

One-Process 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;

双进程 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;

你应该使用哪一个?

根据Jensen

这取决于很多事情。你需要摩尔机还是 打粉机?是接收到输出信号的下游逻辑 同步还是组合?它还取决于哪种编码风格 你喜欢。

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

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

附:我找不到这些链接的原始来源,所以我只是添加了我使用的来源。但this one 更全面,也包含一些示例。

【讨论】:

  • Green, Christian,“分析和实施 SDRAM 和 SGRAM 控制器”,EDN,1998 年 2 月 2 日,第 155 页:edn.com/…
【解决方案2】:

我只知道 eta32carinae 的答案中显示的一和二进程状态机设计。然而,作为一名经验丰富的电子工程师,我不得不说,经验往往会将您推向单一流程解决方案(这是 SW 工程师的首选)。根据我的经验,只有毕业生和学者使用多进程 FSM 风格。

多进程 FSM 实现存在几个问题,主要是:

  1. 在您的设计中很容易意外推断出闩锁。你几乎从不想要那样。
  2. 跨进程的逻辑分布使得跟踪正在发生的事情变得更加困难,这使得代码更难理解、调试和维护。这一点非常重要,因为您将来某个时候会回来修复或修改您的代码,或者更糟糕的是,其他可怜的开发人员将不得不这样做。
  3. 当您通常需要 Moore 机器时,很容易获得 Mealy 机器。如果您需要 Mealy 机器,请为 Mealy 信号设置一个单独的组合过程,以突出这一事实,因为 Mealy 机器可能会导致无法预料的时序收敛问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-10-12
    • 2015-07-30
    • 2018-04-21
    • 1970-01-01
    • 2022-01-06
    • 1970-01-01
    • 1970-01-01
    • 2015-12-11
    相关资源
    最近更新 更多