在我的 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 快得多。但是,这个问题迫使我继续评论这个库以进行预合成并将其放回合成后?
是否可以使用条件包含之类的东西?
注意:我更喜欢保留未使用的位,因此添加属性以避免修剪对我来说很好。