我的测试台使用在 modelsim 包 (init_signal_spy) 中定义的函数。所以我不能将此测试台与不同于 ModelSims vsim 的模拟器一起使用,例如 Candence 的 ncsim。但是在 cadence 包中有一个等效的 ncsim (nc_mirror) 功能。解决方案是我需要有两个不同的测试平台。
但我只想使用一个。一种解决方案可能是,仅在设置了某些常量时才定义包。但我不知道这是否可能。
使来自不同供应商的专有功能在测试台中显示相同的一般方法是使用包装程序包,将功能转换为您定义的功能接口。
要同时支持 ModelSim 和 NCSim,您需要创建三个文件:
该package wrap
接口在“wrap.vhd”中定义,因此具有通用的函数接口,独立于模拟器。然后package body wrap
在“wrap_modelsim.vhd”和“wrap_ncsim.vhd”中定义,具体实现取决于模拟器。
编译时,仅使用适当的包体文件,具体取决于模拟器。
测试台然后use work.wrap
打包,可以通过wrap.{function}
.
几年前,我们为此目的开发了一个小包装。我刚刚上传了一份相同的@http: //verifnews.org/publications/papers/
感谢 Jim 让我们了解此线程的最新信息。
斯里尼,阿吉萨
还有一个使用独立于工具的通用Systemverilog 绑定描述的解决方案。这将帮助您避免使用专有的init_signal_spy!请参阅 Dave Rich 的好论文,解释如何在 UVM http://events.dvcon.org/2012/proceedings/papers/01P_3.pdf中使用 BIND
如果您不使用 UVM,那么您必须记住 UVM 只是 systemverilog 中的一个库,因此您也可以使用绑定概念,而不必使用示例中的驱动程序类。
基本上,本文展示了连接 DUT 或 DUT 的子模块和测试台的不同方法。
它提供了 3 个不错的选择 1) 虚拟接口 2) 抽象类 3) 使用虚拟接口或抽象类进行绑定
当然,此解决方案仅适用于避免专有的“信号间谍”功能。如果您有兴趣与其他工具功能(如可视化流、文件读取)进行一般兼容,那么您需要包装这些功能,以便根据您使用的工具(使用定义)选择正确的工具调用,如上所述。