在合成前/合成后使用ModelSim模拟VHDL设计时有条件使用库

时间:2019-07-18 22:19:20

标签: vhdl fpga modelsim synplify

在我的VHDL设计中,有一个16位的std_logic_vector。当前未使用位置15中的位,并且合成器(SynplifyPro)发出警告,指出未使用该位并将被修剪:

@W:CL190 : DATAGEN.vhd(93) | Optimizing register bit MYREG(15) to a constant 0. To keep the instance, apply constraint syn_preserve=1 on the instance.
@W:CL260 : DATAGEN.vhd(93) | Pruning register bit 15 of MYREG(15 downto 0). If this is not the intended behavior, drive the input with valid values, or an input from the top level.

根据合成器的建议,我添加了required属性,并且能够摆脱这些警告。要添加这些属性,我必须包括Synplify库:

library synplify;

在文件顶部,然后按如下所示定义属性:

ATTRIBUTE SYN_PRESERVE : BOOLEAN;
ATTRIBUTE SYN_PRESERVE OF MYREG : SIGNAL IS TRUE;

如果我尝试在合成后运行ModelSim,那么一切都很好。但是,当我尝试在Pre-synthesis上运行ModelSim时,它给了我错误:

** Error: .../DATAGEN.vhd(20): (vcom-1598) Library "synplify" not found.

我相信问题是因为合成前模拟不应该使用此库。实际上,如果我删除此选项,一切正常。我之所以要继续使用“合成前”模拟,是因为它比“合成后”要快得多。但是,这个问题迫使我继续注释该库以进行合成前,并放回合成后?

是否可以使用条件包含之类的东西?

注意:我更喜欢保留未使用的位,因此添加属性以避免修剪对我来说很好。

1 个答案:

答案 0 :(得分:1)

  

是否可以使用条件包含之类的东西?

即将发布的VHDL-2019标准支持条件编译,并且某些模拟器(例如RivieraPro)已开始支持该编译。有了这样的支持,您可以做类似的事情

`if INCLUDE_SYNPLIFY = "true" then
  library synplify;
`end if

我认为ModelSim还没有,但是您可以做的只是用vlib定义一个synplify库,并在调用vsim时包括它。如果您使用的是VUnit,则只需将以下内容添加到您的运行脚本中

prj.add_library("synplify")