【问题标题】:ModelSim and SignalTap do not show the same signal levelModelSim 和 SignalTap 不显示相同的信号电平
【发布时间】:2016-01-11 02:00:28
【问题描述】:

我确实有以下信号:

signal sl_dac_busy      : std_logic := '1';

当我运行 ModelSim 仿真时,reset state 中的信号电平显示为 High Level,而使用 SignalTap 的仿真显示相同的信号为 Low级别(也处于重置状态)。

不同信号电平的可能原因是什么?我需要为此信号设置一个(额外的)初始值还是...?

谢谢!

【问题讨论】:

  • 仅寄存器支持分配信号值,如果为 FPGA 运行综合。否则在架构主体中使用常量或赋值。
  • 我已经更正了我的答案,因为实际原因是另一个原因。我在我的设计中也看到了这种倒置的行为,但直到现在才彻底调查。

标签: vhdl modelsim


【解决方案1】:

在 cmets 中与 Russel 讨论后,我发现我的 original and accepted 答案中的某些点是错误的。当然,Quartus-II 支持上电后触发器的初始高值,但是,Altera FPGA 上的实际映射导致 ModelSim 和 SignalTap 之间存在差异。

所有 Altera FPGA(截至 2016 年)上的可编程触发器只能初始化为零,如第 11 节“推荐的 HDL 编码样式”中的Quartus Prime Pro Edition Handbook Volume 1: Design and Synthesis 所述:

器件内核中的寄存器在所有 Altera 器件上总是上电到低 (0) 逻辑电平。

在 Altera FPGA 上通过反转触发器 (FF) 数据输入和输出来模拟高 (1) 逻辑电平的初始值,然后将 FF 初始化为低而不是高,如第 11 节所述。因此,这个FF的描述:

library ieee;
use ieee.std_logic_1164.all;
entity FF_init1 is
port (D, CLK : in  std_logic;
      Q      : out std_logic);
end FF_init1;
architecture rtl of FF_init1 is
  signal FF : std_logic := '1';
begin
  FF <= D when rising_edge(CLK);
  Q  <= FF;
end rtl;

将像这样映射:

不要忽略 FF 的 D 输入上的反相器。上电后,FF 本身被初始化为低电平,但由于战后Q 输出的否定,它表现为实体FF_init1 的输出Q 的高电平初始化。在运行期间,FF 在时钟上升沿存储取反的输入,在输出处再次取反。

输出端的反相器可能会合并到后续逻辑中,因此,您不能总是在输出反相器之后连接 SignalTap。通常,您只能将 SignalTap 连接到 FF 输出本身,但这条线的逻辑电平与 ModelSim 中 FF 的信号值相反。

【讨论】:

  • 只是对您上面的 Verilog 评论的评论...您分配的那些初始化值不仅用于模拟。比特流使用这些将 FPGA 初始化为已知状态,这在对 FPGA 进行编程时非常方便。
  • @Russell 我没有写任何关于 Verilog 的文章。不,Quartus-II 忽略 VHDL 信号的初始值,因为 Altera FPGA (!) 上的触发器总是在上电时初始化为零。与此相反,Xilinx FPGA 上的触发器还支持上电至一个。
  • 你说得对,我指的是 VHDL,而不是 Verilog……但我很确定你误会了 Altera FPGA 在上电时总是初始化为零。据我所知,所有基于 LUT 的 FPGA 都可以通过比特流进行初始化。你能指出一些 Altera 文献另有说明吗?
  • @Russell 看看这个Cyclone 5 Datasheet。如果此链接不起作用,请导航至 Altera 网站上的 Cyclone 5 Datasheet 并输入搜索词“register power-up”。上面提到的非门推回只适用于支持异步集合。
  • 看了文献,看来我对寄存器如何初始化的实际过程有误。我假设比特流能够将所有寄存器初始化为非零状态,但这不是 Altera 的做法。他们做他们的非门推回事情,这是出于所有意图和目的实现相同的事情。因此,您仍然可以在 Altera FPGA 中安全地初始化非零值,只是比在 Lattice 或 Xilinx FPGA 上执行此操作要复杂一些。
猜你喜欢
  • 1970-01-01
  • 2018-07-12
  • 1970-01-01
  • 1970-01-01
  • 2015-02-14
  • 1970-01-01
  • 1970-01-01
  • 2023-03-12
  • 1970-01-01
相关资源
最近更新 更多