您能否将Modelsim测试平台与外部刺激相连接


10

我正在一个同时进行驱动程序软件和FPGA开发的团队中工作。FPGA仿真是在Modelsim中完成的,而驱动程序软件则是用C语言编写的。为了最大程度地降低集成风险,我希望能够在将产品两半投入硬件之前对其进行建模。

我知道Modelsim支持一个测试平台,该平台可以让您以文本文件的形式提供刺激,并带有输入的时间和值。我想知道Modelsim是否具有一种模式,该模式可以让您将管道连接到外部应用程序(例如我们的驱动程序),并运行某种分布式模拟,其中软件可以将值推入测试台,然后稍后观察结果。

我无法使用文本文件输入完成的技巧是使产品的两半相互作用。我需要让软件将值“写入”到FPGA模拟器中,读取结果,然后将新值写入到FPGA中,这取决于读取的结果。文本文件要求输入独立于输出。

我已经在StackExchange和google上进行了搜索,但是我无法提供一组关键字来缩小搜索范围,从而无法确定我要寻找的行为,或者确定它不存在。

Answers:


9

通过Unix命名管道对ModelSim仿真进行外部控制

摘要:在本文中,我们提出了一种通过外部程序控制ModelSim仿真的方法。ModelSim与外部程序之间的通信是通过使用命名管道(“ FIFOs”)来完成的,命名管道在每个应用程序中都显示为普通文件。使用FIFO与普通文件进行进程间通信(IPC)之间的主要区别在于,尝试写入FIFO的应用程序将暂停,直到另一个应用程序尝试从FIFO读取,反之亦然。这提高了IPC的可靠性。这种方法的主要优点是:1)由于仅使用通用文件操作,几乎可以使用任何编程语言编写外部应用程序;2)它使验证工程师能够以最少的重写来重复使用标准验证软件包;3)通过使多个被测设备(DUT)相互通信,可以创建更精确的最终系统仿真;和4)即使ModelSim的仿真引擎不是多线程的,也可以在单系统映像(SSI)群集或多处理器计算机上轻松提高整体仿真的性能。由于其针对行为VHDL的文件输入/输出(I / O)的实现,ModelSim无法直接读取或写入这些FIFO。使用ModelSim的外语接口(FLI)演示了解决此限制的方法。本文还显示了该方法的一个工作示例,该方法用于验证VHDL中的下一代浮点例程。具体来说,使用C ++编写的开源IEEE Compliance Checker软件包,

FIFO需要外部编程接口的问题在于,在数据可用之前,VHDL文件I / O无法正常处理阻塞。

不幸的是,该论文在网络上不可用。

模型Sim®外语接口版本5.6d,PDF 3.4 MB。

在Linux x86平台上使用ModelSim外语接口进行c – VHDL协同仿真和模拟器控制Andre Pool-fli@andrepool.com-版本1.5-创建于2012年11月,最后更新于2013年9月,PDF,320KB(从未提及FIFO) 。

在Linux x86平台(匹配的github代码存储库)上,使用ModelSim外语接口进行c – VHDL协同仿真和模拟器控制

使用ghdl中的VHPI外部函数调用还有更多开放源代码: master·texane / vhdl·GitHub上的vhdl / src / sim / ghdlex_mein

看起来像是Martin Strubel在GHDL_discuss列表上的更新:http : //www.section5.ch/downloads/ghdlex-0.051.tgz显示了fifo.c的日期为2014年4月14日。

根据定义,FLI会将您锁定到Modelsim,不确定其VHPI支持的状态(这是IEEE Std 1076-2008的一部分,VHDL LRM)。

通过提供速率缓冲,使用套接字或文件FIFO可使软件和硬件过程以不同的速率运行。如果您的软件系统的速度比硬件模拟的速度快几个数量级(通常是这样),则不一定总是如此。

我们正在努力为VHDL提供UNIX(POSIX)功能,请参见Public Domain VHDL软件包,其中包含指向早期论文SNUG的指针San Jose 2002 1用于VHDL测试平台的C / UNIX函数C / UNIX用于VHDL测试平台的函数以及一张幻灯片。在Unix管道和rsh上设置了其他注释。这显示了如何保持命名管道打开。所有的VHDL代码也可以下载。我认为这将是实现目标的最简单方法。

那么Modelsim固有的东西可以让您连接到管道吗?可能不是,在Windows下更是如此。能做到吗 是的,但这种方法并不适合胆小的人。您可以使一端或另一端死锁,或者可能都在等待数据可用性。

理论上,外部编程接口允许您为“管道”的一端或另一端生成子进程,这也意味着您可以使用共享内存模型在两端之间进行通信。


感谢您的精心研究答案!“外语接口”恰好是我需要的参考文档,我只是想不到!早期的融合我来了!
Cort Ammon 2014年

5

您可能想看看Cocotb。这是一个基于Python的协同仿真库,设计目标之一就是启用您描述的方法,轻松地仿真未修改的生产软件和RTL。

存储库中有一个示例,ping针对模拟运行未修改的命令,并提供了遍历代码的教程

对于用户空间驱动程序,配置实用程序等,您可以选择两个选项来运行未经修改的软件:

  1. 如果对设备的访问归结为几个功能(例如,读取和写入调用),则可以链接到仿真库,该库在执行对仿真的访问时会阻塞。这对于配置非常有效。

  2. 如果您的软件使用内存映射的IO并取消引用指针来访问设备,则情况会变得更加复杂-您必须创建一个共享内存区域,并设置保护位并捕获访问

如果使用网络,则可以使用TUN / TAP之类的虚拟接口(请参阅上面的教程),我怀疑USB传输或其他通用主机接口可能有类似的选项。

Cocotb可与各种模拟器和VHDL(通过VHPI)或Verilog / SystemVerilog设计(通过VPI)一起使用。不幸的是,Modelsim并没有实现VHPI,因此作为VHDL用户,您会被FLI所束缚,FLI几乎没有作为接口有用。您可以向Mentor抱怨,尝试说服他们实施行业标准接口,或者可以评估另一个支持VHPI的模拟器。

可悲的是,似乎工具供应商对VHDL市场并不特别感兴趣,从他们实现任何与VHDL相关的功能所需的时间来看...

免责声明:我是Cocotb开发人员。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.