vhdl - 在 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 快得多。但是,这个问题迫使我继续评论这个库以进行预合成并将其放回合成后?
是否可以使用条件包含之类的东西?
注意:我更喜欢保留未使用的位,因此添加属性以避免修剪对我来说很好。
解决方案
是否可以使用条件包含之类的东西?
即将推出的 VHDL-2019 标准支持条件编译,一些模拟器,例如 RivieraPro,已经开始支持它。有了这样的支持,你可以做类似的事情
`if INCLUDE_SYNPLIFY = "true" then
library synplify;
`end if
我认为 ModelSim 还没有,但你可以做的就是用 vlib 定义一个 synplify 库,并在调用 vsim 时包含它。如果您使用的是VUnit,您只需将以下内容添加到您的运行脚本中
prj.add_library("synplify")
推荐阅读
- javascript - 获取服务工作者内部缓存响应的响应头
- c# - 更改 Mapsui Control 中的平移按钮
- jekyll - Jekyll 中多个系列文章的单一索引博客文章
- swift - 如何在 Swift 4 中更改 UIAlertController 的宽度?
- openssl - 如何在 AWS Lambda 上更新 OpenSSL 版本?
- r - 基于多列创建新列
- android - 后台线程如何定期更新UI
- reactjs - Redux 架构中的自定义 Websocket
- python - 用科学计数法为所有刻度标签着色
- jquery - Bootstrap 4 Carousel 检测上一张幻灯片