是否可以将System Verilog函数编译成C或C++?

4

我正在开发一个高级模拟器,它用C++编写,用于一些用System Verilog编写的硬件。

System Verilog代码包含许多仅包含逻辑(即没有耗时操作,没有触发器)的函数。我想在我的C++模拟器中重复使用这些代码。

有没有办法通过以下方式在C++(或可以轻松链接到C ++的C)中重复使用这些函数:

  • 在编译之前将System Verilog转换为C / C ++?
  • 将System Verilog编译为可由C / C ++调用的函数?
  • 还有其他方法吗?
5个回答

3
通常这种集成是在另一个方向上完成的,也就是从Verilog调用C/C++例程。当然,这只适用于验证组件,显然不能合成。最可能实现你想要的环境是SystemC/Verilog协同仿真,但这意味着需要使用Verilog模拟器(你明确不想要),以及使用SystemC的C模型。
追求高性能的模拟器通常会生成C或本机代码。我不知道如何从VCS(我最熟悉的模拟器)生成的代码中提取特定函数,但可能可以通过其中一种开源模拟器来实现。任何商业(即有许可证的)模拟器都不太可能支持生成无需许可证即可运行的代码。我不确定你希望独立于模拟器使用Verilog函数的愿望是由许可证、运行时开销、工具安装负担还是其他原因驱动的。
我假设你不维护SystemVerilog例程,因此可能无法更改它们的实现方式。然而,如果可能的话,在C和Verilog中都需要功能时的一种常见策略是编写代码生成器,可以将单个定义转换为C和Verilog实现。
另一个更加晦涩的可能性是SystemC合成。它相对较新,我没有经验,但如果你可以使用这些工具并且它们适用于你的函数,那么它将允许你重用C实现,用于C模型、硬件仿真和合成。

2

快速搜索结果有 Verilog2C++Verilator。我没有使用过这些程序,你需要自己尝试。


1

如果您有底层的SV/Verilog模拟器(例如免费的Icarus/CVC),那么您可以使用DPI。否则,您可以尝试使用Verilator - 我猜它更适用于Verilog/V2K而不是SV,也许您可以将SV代码映射到Verilog?


什么是DPI?我可以访问一个完整的SV模拟器,但我不想将其作为我的模拟器的一部分运行。 - Nathan Fellman

0

关于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


0

Verilator是您目的的一款很棒的工具。基本上,Verilator可以将您的设计编译成一个C++类,该类是您的顶层模块的表示。然后,您可以通过在自定义的C++代码中驱动和刺激C++类来模拟设计。

Verilator还支持DPI接口,这意味着您可以将Verilog函数/任务导出为C++函数,并导入C++函数以在Verilog代码中使用。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接