如果两个模拟器都需要使用自己的软件包,有没有办法将一个测试平台用于不同的模拟器?

时间:2014-07-03 09:03:48

标签: vhdl modelsim cadence

我的测试平台使用在modelsim包(init_signal_spy)中定义的函数。所以我不能将这个测试平台用于与ModelSims vsim不同的模拟器,例如Candence的ncsim。但是在cadence包中有一个与ncsim(nc_mirror)等效的函数。解决方案是我需要有两个不同的测试平台。

但我只想使用一个。 一种解决方案可能是,仅在设置了某个常量时才定义包。但我不知道这是否可能。

3 个答案:

答案 0 :(得分:5)

使不同供应商的专有功能在测试平台上显示相同的一般方法是使用包装程序包将函数转换为您定义的函数接口。

要同时支持ModelSim和NCSim,您需要创建三个文件:

  • wrap.vhd
  • wrap_modelsim.vhd
  • wrap_ncsim.vhd

package wrap接口在“wrap.vhd”中定义,因此具有函数的公共接口,独立于模拟器。然后在“wrap_modelsim.vhd”和“wrap_ncsim.vhd”中定义package body wrap,其实现取决于模拟器。

编译时,仅使用相应的包体文件,具体取决于模拟器。

测试平台然后是use work.wrap包,并且可以通过wrap.{function}访问转换后的函数。

答案 1 :(得分:2)

几年前,我们为此目的开发了一个小包装。我刚刚上传了同一个@ http://verifnews.org/publications/papers/

的副本

感谢Jim让我们更新了这个主题。

Srini,Ajeetha

答案 2 :(得分:-2)

还有一个使用一般工具独立的 Systemverilog bind 描述的解决方案。这将帮助您避免使用专有的 init_signal_spy !!请参阅Dave Rich的优秀论文,了解如何在UVM中使用BIND http://events.dvcon.org/2012/proceedings/papers/01P_3.pdf

如果你没有使用UVM,那么你必须记住,UVM只是systemverilog中的一个库,所以你也可以使用bind概念,而不必使用示例中的驱动程序类。

基本上,本文介绍了将DUT或DUT的子模块与测试平台连接起来的不同方法。

它提供3个不错的选择 1)虚拟接口 2)抽象类 3)使用虚拟接口或抽象类绑定

当然这个解决方案只能避免专有的信号间谍"功能即可。如果您对与一般兼容感兴趣与其他工具功能(如可视化流,文件读取),那么您需要包装这些函数,以便根据您使用的工具选择正确的工具调用(使用定义),as commented above

相关问题