仿真器的具体细节

SpinalHDL 如何使用 Verilator 后端进行硬件仿真

  1. SpinalHDL 在后台生成 DUT 的 Verilog 等效硬件模型,然后使用 Verilator 将其转换为 C++ 的周期精确模型。

  2. C++ 模型被编译为共享对象 (.so),该对象通过 JNI-FFI 绑定到 Scala。

  3. 通过提供多线程仿真API来抽象原始的Verilator API。

优点:

  • 由于Verilator后端使用编译的C++仿真模型,因此与大多数其他商业和免费模拟器相比,仿真速度很快。

限制:

  • Verilator 仅接受可综合的 Verilog/System Verilog 代码。因此,在仿真中使用了包含不可综合语句的 Verilog 黑盒组件时必须特别小心。

  • VHDL 黑盒无法模拟。

  • 由于需要编译和链接生成的 C++ 模型,仿真的启动过程很慢。存在对增量编译和链接的一些支持,这可以在构建第一个仿真模型后为后续模型仿真提供加速。

SpinalHDL 如何使用 GHDL/Icarus Verilog 后端进行硬件仿真

  1. 根据所选仿真器,SpinalHDL 生成 DUT 的 Verilog 或 VHDL 硬件模型。

  2. HDL 模型加载到仿真器中。

  3. 仿真器和JVM之间的通信是通过共享内存建立的。使用 VPI 向模拟器发出命令。

优点:

  • GHDL 和 Icarus Verilog 都可以接受不可综合的 HDL 代码。

  • 与 Verilator 相比,仿真启动过程要快得多。

限制:

  • GHDL 仅接受 VHDL 代码。因此,该仿真器只能使用 VHDL 黑盒。

  • Icarus Verilog 仅接受 Verilog 代码。因此,该仿真器只能使用 Verilog 黑盒。

  • 与 Verilator 相比,仿真速度大约慢一个数量级。

最后,由于原生 Verilator API 相当粗糙,SpinalHDL 通过提供单线程和多线程仿真 API 对其进行抽象,以帮助用户构建测试平台实现。

SpinalHDL 如何使用 Synopsys VCS 后端进行硬件仿真

  1. SpinalHDL 生成 DUT 的 Verilog/VHDL(取决于您的选择)硬件模型。

  2. HDL 模型加载到仿真器中。

  3. 仿真器和JVM之间的通信是通过共享内存建立的。使用 VPI 向模拟器发出命令。

优点:

  • 支持SystemVerilog/Verilog/VHDL的所有语言特性。

  • 支持加密IP。

  • 支持 FSDB 波形格式存储。

  • 编译和仿真的性能好。

限制:

  • Synopsys VCS 是一款 商用 仿真工具。它是闭源的并且不是免费的。您必须拥有许可证才能 合法 使用它。

在使用 VCS 作为仿真后台之前,请确保您已将系统环境检查为 VCS 环境

SpinalHDL 如何使用 Xilinx XSim 后端进行硬件仿真

  1. SpinalHDL 生成 DUT 的 Verilog/VHDL(取决于您的选择)硬件模型。

  2. HDL 模型加载到仿真器中。

  3. 仿真器和JVM之间的通信是通过共享内存建立的。命令使用 XSI 发送到仿真器。

优点:

  • 支持 Xilinx 内置原语和IP核。

限制:

  • Xilinx XSim 是与 Vivado 一起安装的 商用 工具。它是闭源的,并受许可条款的使用。您必须拥有许可证才能 合法 使用它。

  • 2019.1 之前的 Vivado 版本无法正常工作。

在使用 XSim 作为仿真后台之前,请确保您已完成以下步骤。 1. 定义 VIVADO_HOME 环境变量以指定 vivado 所在的位置。例如, export VIVADO_HOME=/d/Xilinx/Vivado/2022.1 (在 MSYS2 下)。 2.确保两个vivado路径在PATH内。对于 Windows MSYS2 用户,运行 shell 命令,如 export PATH=$PATH:$VIVADO_HOME/bin:$VIVADO_HOME/lib/win64.o 。对于 Linux 用户,只需用 source 执行位于 VIVADO_HOME 的 settings64.sh 文件。

性能

当需要高性能仿真时,应使用Verilator作为后台。在像 Murax 这样的小型 SoC 上,英特尔® 酷睿™ i7-4720HQ 能够每秒模拟 120 万个时钟周期。然而,当 DUT 很简单并且需要仿真最多几千个时钟周期时,使用 GHDL 或 Icarus Verilog 可以产生更好的结果,因为它们的仿真负载开销较低。