首页 > 解决方案 > 在 Pre-Synthesis / Post-Synthesis 中使用 ModelSim 模拟 VHDL 设计时有条件地使用库

问题描述

在我的 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;

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

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

我相信问题是因为 Pre-Synthesis 模拟不应该使用这个库。事实上,如果我删除它一切正常。我想继续使用 Pre-Synthesis 模拟的原因是它比 Post-Synthesis 快得多。但是,这个问题迫使我继续评论这个库以进行预合成并将其放回合成后?

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

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

标签: vhdlfpgamodelsimsynplify

解决方案


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

即将推出的 VHDL-2019 标准支持条件编译,一些模拟器,例如 RivieraPro,已经开始支持它。有了这样的支持,你可以做类似的事情

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

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

prj.add_library("synplify")

推荐阅读