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_PATH、 LIBRARY_PATH 和 LD_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 后台遵循三步编译流程:
- 分析步骤:使用 - vlogan和 ``vhdlan``分析HDL模型。
- 实例细化步骤:使用 - vcs细化模型并生成可执行的硬件模型。
- 仿真步骤:运行仿真。 
在每个步骤中,用户可以通过 VCSFlags 传递一些特定的标志,以启用一些功能,例如 SDF 反注释或多线程。
VCSFlags 采用三个参数,
| 名称 | 类型 | 描述 | 
|---|---|---|
| 
 | 
 | 传递标志到  | 
| 
 | 
 | 传递标志到  | 
| 
 | 
 | 传递标志给可执行硬件模型。 | 
例如,您将 -kdb 标志传递给编译步骤和细化步骤,以进行 Verdi 调试,
val flags = VCSFlags(
    compileFlags = List("-kdb"),
    elaborateFlags = List("-kdb")
)
val config =
  SimConfig
    .withVCS(flags)
    .withFSDBWave
    .workspacePath("tb")
    .compile(UIntAdder(8))
...
波形生成
VCS 后端可以生成三种波形格式:VCD、VPD 和 ``FSDB``(需要 Verdi)。
您可以通过 SpinalSimConfig 的以下方法启用它们,
| 方法 | 描述 | 
|---|---|
| 
 | 生成  | 
| 
 | 生成  | 
| 
 | 生成  | 
此外,您可以使用 withWaveDepth(depth: Int) 来控制波形文件记录的深度。
Blackbox 仿真
Sometimes, IP vendors will provide you with some design entities in Verilog/VHDL format and you want to integrate them into your SpinalHDL design. The integration can done by following two ways:
- 在 - Blackbox定义中,使用- addRTLPath(path: String)将外部 Verilog/VHDL 文件分配给该黑盒。
- 使用 - SpinalReport的- mergeRTLSource(fileName: String=null)方法。