ModelSim 和 SignalTap 显示的信号电平不同

ModelSim and SignalTap do not show the same signal level

我确实有以下信号:

signal sl_dac_busy      : std_logic := '1';

当我运行ModelSim仿真时,在reset状态的信号电平显示为High Level而仿真使用 SignalTap 显示具有 Low Level 的相同信号(也处于复位状态)。

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

谢谢!

在评论中与 Russel 讨论后,我发现我的 original and accepted 回答中的某些观点是错误的。当然,Quartus-II支持flip-flops的初始高值power-up,,实际Altera FPGA 上的映射导致 ModelSim 和 SignalTap 之间存在差异。

所有 Altera FPGA(自 2016 年起)上的可编程 flip-flops 只能初始化为零,如第 11 节 Quartus Prime Pro Edition Handbook Volume 1: Design and Synthesis 中所述:"Recommended HDL Coding Styles":

Registers in the device core always power up to a low (0) logic level on all Altera devices.

通过反转 flip-flop (FF) 数据输入和输出,然后将 FF 初始化为低而不是高,在 Altera FPGA 上模拟高 (1) 逻辑电平的初始值,如第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 输入端的反相器。在 power-up 之后,FF 本身被初始化为低电平,但由于事后 Q 输出的否定,它表现为实体 [=14= 的输出 Q 的高电平初始化].在 run-time 期间,FF 将取反的输入存储在上升 clock-edge 处,在输出端再次取反。

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