我有这个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;

我的问题是:如果我想要最小灵敏度列表,那么必须在灵敏度列表中写入以下哪个信号?

#1楼 票数:6 已采纳

您必须在灵敏度列表中包括所有已读取的信号,而不是过程的计时部分。

您异步读取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仅用于该过程的计时部分,它本身可以确定另一个信号的状态。

这就是您期望注册的内容。 当时钟上升/下降时对输入进行采样,然后将其存储并传播到输出。 在时钟边沿之间,输入信号可以(并且经常会)改变,但很快会稳定为有效的逻辑状态。

#2楼 票数:1

Sigasi在编写代码时检查不完整的敏感性列表 它还提供了快速修复功能,可以自动将丢失的信号添加到列表中。 这样,您就不必再为此担心。

  ask by user4454617 translate from so

未解决问题?本站智能推荐:

1回复

VHDL中的灵敏度列表

来自此处的代码: http : //esd.cs.ucr.edu/labs/tutorial/latch.vhd 为什么“ data_in”需要在灵敏度列表中? 我知道流程需要它进行分配,但是流程基于启用输入起作用。 谢谢
1回复

灵敏度列表VHDL过程

我正在尝试使用Peter Ashenden的书“ VHDL设计师指南”来学习VHDL,但似乎并不能动摇我错过了与灵敏度列表相关的基本项目的感觉。 例如,一个问题是“编写一个代表简单ALU的模型,该模型具有整数输入和输出,以及位类型的函数选择输入。如果函数select为'0',则ALU输出应
1回复

VHDL流程与灵敏度列表的混淆

我正在通过在线阅读书籍(自由范围VHDL)来学习VHDL,并通过Xilinx ISE Webpack 14.7在我的Nexsys2上实现示例。 我正在重新阅读Free Range VHDL文本,目前正在讨论过程的这一章中。 我对流程是什么以及流程如何有深刻的了解,但是我实现了一个示例,但我不
2回复

灵敏度列表未更改时,将激活VHDL流程

不变的情况下,流程2保持激活状态。 我有一块板来测试我的代码,翻转时钟(将时钟设置为按钮)时状态会改变。 在我的代码中,仅当我翻转Qin时状态才会改变。 因此,它没有按照我希望的那样做,我花了很多时间试图找出导致问题的原因,但我做不到。 请帮忙。 这是测试平台图TESTBENCH
2回复

使用Sigasi编辑器的VHDL中的灵敏度列表不完整

当前,我尝试发展我的VHDL技能,因此我使用Sigasi Eclipse插件来编写一些VHDL代码。 Sigasi是一个很棒的工具,但是有一件事让我感到困扰。 不断地,Sigasi会在过程定义中抛出有关灵敏度列表不完整的警告,从我的观点来看,这是不合理的。 一个示例是具有相应体系结构的以下
4回复

何时必须将信号插入到过程的灵敏度列表中

当架构中声明的信号必须插入到进程的敏感列表中时,我感到很困惑。 在任何情况下都可以遵循一般法律吗? 当我必须在过程灵敏度列表中包含信号时,我真的很难理解。
1回复

HDL合成抱怨灵敏度列表中缺少信号

您好,我有一个简单的VHDL流程(从MyHDL代码生成): 原始MyHDL代码: 在仿真中,它可以完美地运行(ISIM和MyHDL模拟器都可以),但是当我尝试将其综合到Spartan 6中时,会发出以下警告:clken应该在过程的灵敏度列表中sclidlevalue应该在过程的灵
3回复

是否存在与Verilog的@(*)等效的VHDL,即自动过程灵敏度列表

更新组合过程很容易,忘记更新灵敏度列表。 在Verilog中,引入了@(*)来表示灵敏度列表是在此过程中使用的。 VHDL中有等价的吗?