我正在开发一个高级模拟器,它用C++编写,用于一些用System Verilog编写的硬件。
System Verilog代码包含许多仅包含逻辑(即没有耗时操作,没有触发器)的函数。我想在我的C++模拟器中重复使用这些代码。
有没有办法通过以下方式在C++(或可以轻松链接到C ++的C)中重复使用这些函数:
- 在编译之前将System Verilog转换为C / C ++?
- 将System Verilog编译为可由C / C ++调用的函数?
- 还有其他方法吗?
我正在开发一个高级模拟器,它用C++编写,用于一些用System Verilog编写的硬件。
System Verilog代码包含许多仅包含逻辑(即没有耗时操作,没有触发器)的函数。我想在我的C++模拟器中重复使用这些代码。
有没有办法通过以下方式在C++(或可以轻松链接到C ++的C)中重复使用这些函数:
如果您有底层的SV/Verilog模拟器(例如免费的Icarus/CVC),那么您可以使用DPI。否则,您可以尝试使用Verilator - 我猜它更适用于Verilog/V2K而不是SV,也许您可以将SV代码映射到Verilog?
关于verilator和DPI,您可能想看一下我如何评估它:
"...为了练习使用系统Verilog DPI和Verilog DUT进行cpp(c++)验证工作,我决定下载verilator并进行一些自学练习。
首先,我安装了软件。在debian机器上,这非常简单: apt-get install verilator..." http://bknpk.ddns.net/my_web/SystemC_MyFirst/verilator_my_first.html
Verilator是您目的的一款很棒的工具。基本上,Verilator可以将您的设计编译成一个C++类,该类是您的顶层模块的表示。然后,您可以通过在自定义的C++代码中驱动和刺激C++类来模拟设计。
Verilator还支持DPI接口,这意味着您可以将Verilog函数/任务导出为C++函数,并导入C++函数以在Verilog代码中使用。