【问题标题】:Is it possible to compile System Verilog functions to C or C++?是否可以将 System Verilog 函数编译为 C 或 C++?
【发布时间】:2011-08-23 02:32:32
【问题描述】:

我为一些用 System Verilog 编写的硬件开发了一个用 C++ 编写的高级模拟器。

System Verilog 代码包括许多只包含逻辑的函数(即没有任何耗时,没有触发器)。我想在我的 C++ 模拟器中重用这段代码。

有没有什么方法可以通过以下方式在 C++(或 C,很容易链接到 C++)中重用这些函数:

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

【问题讨论】:

    标签: c++ c code-reuse verilog system-verilog


    【解决方案1】:

    通常这种集成是在另一个方向上完成的,这意味着从 Verilog 调用 C/C++ 例程。当然,这只对验证组件有意义,显然无法合成。最有可能实现您想要的环境是 SystemC/Verilog 联合仿真,但这意味着同时使用 Verilog 模拟器(您明确不想要)和使用 SystemC 的 C 模型。

    寻求高性能的模拟器通常会生成 C 或本机代码。我不知道有任何方法可以从 VCS(我最熟悉的模拟器)中生成的代码中提取特定功能,但可以使用其中一个开源模拟器来做到这一点。任何商业(即许可)模拟器都不太可能支持生成无需许可即可运行的代码。我不确定您是否希望使用独立于模拟器的 Verilog 功能是由许可、运行时开销、工具安装负担或完全其他因素驱动的。

    我假设您不维护 SystemVerilog 例程,因此可能无法更改它们的实现方式。但是,如果可能,当需要 C 和 Verilog 中的功能时,一种常见的策略是编写代码生成器,可以将单个定义转换为 C 和 Verilog 实现。

    另一个更深奥的可能性是 SystemC 综合。它相对较新,我没有使用它的经验,但如果您可以使用这些工具并且它们适用于您的功能,那么您可以将 C 实现重用于 C 模型、硬件仿真和综合。

    【讨论】:

      【解决方案2】:

      快速搜索带来了Verilog2C++Verilator。我没有使用过这些程序;你需要自己尝试一下。

      【讨论】:

        【解决方案3】:

        如果您有一个底层 SV/Verilog 模拟器(例如免费的 à la Icarus/CVC),那么您可以使用 DPI。其他人可以尝试 Verilator - 我猜它更像是 Verilog/V2K 而不是 SV,也许您可​​以将您的 SV 代码映射到 Verilog?

        【讨论】:

        • 什么是 DPI?我可以访问一个成熟的 SV 模拟器,但我不想将它作为我的模拟器的一部分运行。
        【解决方案4】:

        Verilator 是一款非常适合您的工具。基本上 Verilator 可以将您的设计编译为 C++ 类,该类代表您的顶级模块。然后,您可以通过在自定义 C++ 代码中驱动和刺激 C++ 类来模拟设计。

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

        【讨论】:

          【解决方案5】:

          关于验证器和 DPI,您可能想看看我是如何评估它的:

          "...为了练习cpp(c++)验证平台,使用系统verilog DPI,使用verilog DUT,我决定下载verilator并做一些自学练习。

          首先我安装了软件。这在 debian 机器上相当简单: apt-get 安装验证器..." http://bknpk.ddns.net/my_web/SystemC_MyFirst/verilator_my_first.html

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2019-08-05
            • 2017-09-27
            • 1970-01-01
            相关资源
            最近更新 更多