【问题标题】:Minimal sensitivity list in VHDLVHDL 中的最小灵敏度列表
【发布时间】:2015-01-16 15:33:03
【问题描述】:

我有这个 VHDL 代码:

  entity Element is port(
   clk, D, E, F, G: in std_logic;
   Qout: out std_logic);
   end Element;

   architecture beh of Element is
   signal Qint: std_logic;
   begin

    process(...)
       variable sel: std_logic_vector(1 downto 0);
    begin
       if D='1' then
          Qint<= '0';
       elsif E='1' then
          Qint<= '1';
       elsif rising_edge(clk) then
          sel:=F&G;
          case sel is
            when "00"=> Qint<= not Qint;
            when "01"=> Qint<= not Qint;
            when "10"=> Qint<= '0';
            when "11"=> Qint<= Qint;
            when others=> null;
          end case;
       end if;
    end process;

   Qout<= Qint;

   end beh;

我的问题是:如果我想要 MINIMAL 敏感度列表,我必须在敏感度列表中写入哪些信号?

【问题讨论】:

    标签: vhdl


    【解决方案1】:

    您必须在敏感度列表中包含所有读取的信号,而不是在您的过程的时钟部分内。

    您异步读取 D 和 E。您将 clk 作为寄存器的一部分读取。因此,您必须包含它们。

    process (D, E, clk)
    begin
    end process;
    

    注意:在 VHDL-2008 中,最小敏感度列表是

    process (all)
    begin
    end process;
    

    编辑:关于一般敏感度列表的更多信息。

    VHDL 中的仿真是在确定性循环中完成的。对于每个信号分配,所有相关信号也必须更新,因为这就是硬件中发生的事情。

    模拟器(例如 modelsim、isim)将逐步检查您的 HDL,确定所有信号变化,然后确定哪些其他信号依赖于这些变化。然后模拟第二组变化并找到另一组相关信号,依此类推。模拟一直持续到 a) 达到稳定状态或 b) 达到最大迭代次数。

    现在,由于设计规模庞大,需要重新评估 每个 信号分配的每个 流程,复杂性爆炸。为防止这种情况发生,每个进程仅在其敏感度列表中的信号更改 时才会重新评估。过去,软件无法自动检测给定进程需要监听(或可能忽略)的所有信号,因此用户必须通过敏感度列表向工具提供提示。

    如今,借助 VHDL-2008,软件变得如此智能,CPU 变得如此快速,以至于仿真软件可以简单地分析所有 HDL 并自行确定依赖关系。

    现在,为什么Qint不在敏感列表中?因为Qint 的变化在clk 的下一个上升沿之前不会传播到其他信号。它仅在clk 的边缘精确采样。

    因此,Qint 仅用于进程的时钟部分,它本身确实确定另一个信号的状态。

    这就是您对寄存器的期望。当时钟上升/下降时对输入进行采样,然后存储并传播到输出。在时钟边沿之间,输入信号可以(并且经常会)发生变化,但会迅速稳定到有效的逻辑状态。

    【讨论】:

    • Qint 是在进程的 clocked 部分中读取的,因此 Qint 的更新不需要重新评估进程。
    【解决方案2】:

    Sigasi checks for incomplete sensitivity lists 在您编码时。它还提供了一个快速修复来自动将丢失的信号添加到列表中。这样您就不必再担心这个问题了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多