VCS 仿真配置

环境变量

您应该确保提前定义了以下几个环境变量:

  • VCS_HOME:VCS 安装的主路径。

  • VERDI_HOME :Verdi安装的主路径。

  • $VCS_HOME/bin$VERDI_HOME/bin 添加到你的 PATH 中。

将以下路径添加到 LD_LIBRARY_PATH 变量的前部以启用 PLI 功能。

export LD_LIBRARY_PATH=$VERDI_HOME/share/PLI/VCS/LINUX64:$LD_LIBRARY_PATH
export LD_LIBRARY_PATH=$VERDI_HOME/share/PLI/IUS/LINUX64:$LD_LIBRARY_PATH
export LD_LIBRARY_PATH=$VERDI_HOME/share/PLI/lib/LINUX64:$LD_LIBRARY_PATH
export LD_LIBRARY_PATH=$VERDI_HOME/share/PLI/Ius/LINUX64:$LD_LIBRARY_PATH
export LD_LIBRARY_PATH=$VERDI_HOME/share/PLI/MODELSIM/LINUX64:$LD_LIBRARY_PATH

如果您遇到 Compilation of SharedMemIface.cpp failed 错误,请确保您已正确安装 C++ boost 库。头文件和库文件路径应分别添加到 CPLUS_INCLUDE_PATHLIBRARY_PATHLD_LIBRARY_PATH 中。

用户定义的环境设置

有时需要 VCS 环境设置文件 synopsys_sim.setup 来运行 VCS 仿真。此外,您可能希望在 VCS 开始编译之前运行一些脚本或代码来设置环境。您可以通过 withVCSSimSetup 来完成此操作。

val simConfig = SimConfig
  .withVCS
  .withVCSSimSetup(
    setupFile = "~/work/myproj/sim/synopsys_sim.setup",
    beforeAnalysis = () => { // this code block will be run before VCS analysis step.
      "pwd".!
      println("Hello, VCS")
    }
  )

此方法将您自己的 synopsys_sim.setup 文件复制到 workspacePath (默认为 simWorkspace )目录下的VCS工作目录,并运行脚本。

VCS 标志

VCS 后台遵循三步编译流程:

  1. 分析步骤:使用 vlogan``vhdlan``分析HDL模型。

  2. 实例细化步骤:使用 vcs 细化模型并生成可执行的硬件模型。

  3. 仿真步骤:运行仿真。

在每个步骤中,用户可以通过 VCSFlags 传递一些特定的标志,以启用一些功能,例如 SDF 反注释或多线程。

VCSFlags 采用三个参数,

名称

类型

描述

compileFlags

List[String]

传递标志到 vloganvhdlan

elaborateFlags

List[String]

传递标志到 vcs

runFlags

List[String]

传递标志给可执行硬件模型。

例如,您将 -kdb 标志传递给编译步骤和细化步骤,以进行 Verdi 调试,

val flags = VCSFlags(
    compileFlags = List("-kdb"),
    elaborateFlags = List("-kdb")
)

val config =
  SimConfig
    .withVCS(flags)
    .withFSDBWave
    .workspacePath("tb")
    .compile(UIntAdder(8))

...

波形生成

VCS 后端可以生成三种波形格式:VCDVPD``FSDB``(需要 Verdi)。

您可以通过 SpinalSimConfig 的以下方法启用它们,

方法

描述

withWave

生成 VCD 波形。

withVPDWave

生成 VPD 波形。

withFSDBWave

生成 FSDB 波形。

此外,您可以使用 withWaveDepth(depth: Int) 来控制波形文件记录的深度。

Blackbox 仿真

有时,您希望将 IP 供应商为您提供的一些 Verilog/VHDL 格式的设计实体集成到您的 SpinalHDL 设计中。可以通过以下两种方式完成:

  1. Blackbox 定义中,使用 addRTLPath(path: String) 将外部 Verilog/VHDL 文件分配给该黑盒。

  2. 使用 SpinalReportmergeRTLSource(fileName: String=null) 方法。