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

在合成前/合成后使用ModelSim模拟VHDL设计时有条件地使用库,vhdl,fpga,modelsim,synplify,Vhdl,Fpga,Modelsim,Synplify,在我的VHDL设计中,有一个16位std_逻辑_向量。位置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(9

在我的VHDL设计中,有一个16位std_逻辑_向量。位置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.
正如合成器所建议的,我添加了必需的属性,并且能够消除这些警告。要添加这些属性,我必须包括Synplify库:

library synplify;
在文件顶部,然后按如下方式定义属性:

ATTRIBUTE SYN_PRESERVE : BOOLEAN;
ATTRIBUTE SYN_PRESERVE OF MYREG : SIGNAL IS TRUE;
如果我尝试在合成后运行ModelSim,一切都很好。但是,当我尝试在预合成上运行ModelSim时,它给出了错误:

** Error: .../DATAGEN.vhd(20): (vcom-1598) Library "synplify" not found.
我相信这个问题是因为预合成模拟不应该使用这个库。事实上,如果我去掉这个,一切都会正常。我之所以想继续使用预合成模拟,是因为它比后合成快得多。然而,这个问题迫使我不断地评论这个库进行预合成,并将其放回后合成

是否可以使用条件包含之类的内容

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

是否可以使用条件包含之类的内容

即将发布的VHDL-2019标准支持条件编译,一些模拟器(如RivieraPro)已经开始支持条件编译。有了这样的支持,你可以做以下事情

`if INCLUDE_SYNPLIFY = "true" then
  library synplify;
`end if
我认为ModelSim还没有这个功能,但您可以做的只是用vlib定义一个synplify库,并在调用vsim时包含它。如果正在使用,只需将以下内容添加到运行脚本

prj.add_library("synplify")

librarysynplify根本不需要。我同意不需要这个库,但应该可以将它保留在文件中。您是否将其作为额外的外部库添加到vsim命令中?@DonFusili:我将尝试在vsim命令中包含synplify。谢谢。使用库逻辑名称synplify显示所有use子句或所选名称。如果没有这些,library子句只会使库逻辑名称可见。属性声明和属性规范不依赖于library子句。保存一个输出未被使用的触发器似乎也没什么用处。RivieraPro只是一个充满bug的程序。我的公司购买了一年的许可证,我们发现了容易出现的漏洞。他们的代码就是不一致。他们的支持很糟糕,忽略了所有的bug。即使在波浪中搜索一个值,也会产生误判。