这一篇在干嘛?

在动手敲第一条仿真命令之前,先把「地图」看清楚:QuestaSim 是什么、它的官方文档藏在哪里、设计为什么会被自动优化,以及最核心的几种仿真流程长什么样。这一篇不写代码,但后面的每一篇都建立在它讲的概念上。

QuestaSim 是什么

Questa SIM 是 Mentor Graphics(现西门子 EDA)推出的验证与仿真工具,支持 VHDL、Verilog、SystemVerilog、SystemC 以及混合语言设计。对于用安路 TD 做 FPGA 的同学来说,它最常用的角色是:在综合、布局布线之前跑行为级仿真(验证 RTL 逻辑对不对),以及在布线之后配合仿真模型跑后仿真(验证时序和网表)。

一个对我们很友好的设定:Questa SIM 自带的教程里,大多数实验都同时提供 Verilog 和 VHDL 两个版本的设计文件,所以不管你手上是哪种语言的 license,都能跟着做。两种版本无法完全一致的地方(比如行号、语法细节),教程会分别给出对应语言的说明——照着自己用的语言那一份走就行。

官方文档去哪找

Questa SIM 的文档同时提供 PDF 和 HTML 两种格式,入口都在软件的 Help 菜单里。完整清单如下:

Table 1-1. Documentation List

DocumentFormatHow to get it
Installation & Licensing GuidePDFHelp > PDF Bookcase
HTML and PDFHelp > InfoHub
Quick Guide (command and feature quick-reference)PDFHelp > PDF Bookcase and Help > InfoHub
TutorialPDFHelp > PDF Bookcase
HTML and PDFHelp > InfoHub
User's ManualPDFHelp > PDF Bookcase
HTML and PDFHelp > InfoHub
Command Reference ManualPDFHelp > PDF Bookcase
HTML and PDFHelp > InfoHub
Graphical User Interface (GUI) Reference ManualPDFHelp > PDF Bookcase
HTML and PDFHelp > InfoHub
Foreign Language Interface ManualPDFHelp > PDF Bookcase
HTMLHelp > InfoHub
OVL Checkers Manager User's GuidePDFHelp > PDF Bookcase
HTMLHelp > InfoHub
Power Aware Simulation User's ManualPDFHelp > PDF Bookcase
HTMLHelp > InfoHub
Command HelpASCIItype help [command name] at the prompt in the Transcript pane
Error message helpASCIItype veroor at the Transcript or shell prompt
Tcl Man Pages (Tcl manual)HTMLselect Help > Tcl Man Pages, or find contents.htm in \modeltech\docs\tcl_help_html
TechnotesHTMLavailable from the support site

日常最实用的两条

记不住命令参数时,直接在 Transcript 窗口的提示符后输入 help [command name](把命令名填进方括号),就能看到该命令的帮助;遇到报错想查含义,用 verror 加错误码查询即可。PDF 文档需要 Adobe Acrobat Reader 才能打开,Adobe 官网 www.adobe.com 可免费下载。

如果需要更进一步的官方支持(软件增强、技术支持、在线服务),Mentor Graphics 通过 SupportNet 站点提供:http://supportnet.mentor.com/about/ 。在有效维护期内,你可以搜索成千上万条技术方案、查阅文档或在线提交 Service Request;没有账号可以在 http://supportnet.mentor.com/user/register.cfm 注册;各客户支持中心的联系方式见 http://supportnet.mentor.com/contacts/supportcenters/

建议的阅读顺序

别被上面那张表吓到——初学者真正常用的其实只有三份:Tutorial(入门操作,本系列文章的蓝本)、Quick Guide(命令速查)和 User’s Manual(遇到具体问题时按章节查阅)。Reference Manual 等你开始写仿真脚本、需要查参数细节时再翻不迟。

开始之前:留给你的自由度

教程有意把一些细节留给你自己决定:怎么建目录、怎么复制文件、怎么在操作系统里执行程序。如果你是在 Questa SIM 的 GUI 里操作,那么所有平台的界面都是一致的,不用担心平台差异——这是初学者最省心的路径。

做法建议:每个实验单独建一个空目录,把用到的设计文件从安装目录的 examples 下拷进去,所有库文件和仿真产物都会生成在这个目录里,做完直接整目录删除,不留垃圾。这个习惯在后面两篇的实操里会一直沿用。

动手前必须懂的概念:设计优化(vopt)

在讲仿真流程之前,有一个概念绕不开:设计优化

默认情况下,QuestaSim 会对所有设计自动执行优化,目的是把仿真速度提到最高——某些 Verilog 设计相比不优化能快 10 倍。但天下没有免费的午餐:全局优化可能影响你能观察到的仿真结果,某些信号和进程可能变得不可见

这就带来一个权衡:

  • 想跑得快 → 保持默认优化;
  • 想在调试时看到更多内部信号 → 需要把特定模块的优化去掉。

执行全局优化的工具叫 vopt。什么时候该关哪部分优化,User’s Manual 里「Optimizing Designs with vopt」一章有完整讨论,命令语法细节则查 Reference Manual 里的 vopt 条目。

新手最常见的困惑

「我明明写了这个信号,为什么 Wave 窗口里找不到?」——十有八九不是你写错了,而是 vopt 优化把它优化掉了。先想到优化这层,再回去查代码,能少走很多弯路。

基本仿真流程(Basic Simulation Flow)

QuestaSim 里所有设计都要编译进一个库。最典型的一次仿真按下面四步走:

  1. 创建工作库(Creating the Working Library) 通常第一步是创建一个叫 work 的工作库——work 是编译器的默认库名,编译出来的设计单元默认都放进这里。可以把它理解为「你自己设计的编译产物的家」。

  2. 编译设计(Compiling Your Design) 建好库之后,把设计单元编译进去。QuestaSim 的库格式在所有支持的平台上是兼容的,也就是说编译一次之后,换平台仿真不需要重新编译。

  3. 加载仿真器并运行(Loading the Simulator and Running) 设计编译完后,对 Verilog 设计指定一个顶层模块(top-level module),对 VHDL 设计指定一个 configuration 或 entity/architecture 对,就可以启动仿真器加载设计。加载成功后仿真时间归零,执行 run 命令开始仿真。

  4. 调试结果(Debugging Your Results) 如果结果和预期不符,就进入 QuestaSim 的调试环境去定位问题——这是整个流程里最花时间、也最能体现工具价值的环节。

整体流程如下图所示:

Figure 2-1. Basic Simulation Flow - Overview Lab

对应到 FPGA 语境

这套「建库 → 编译 → 加载 → 运行」的逻辑和你在安路 TD 里综合、布线的思路类似:源码不会直接被仿真,而是先编译成中间产物(库里的设计单元),仿真器加载的是编译产物。理解了 work 库,后面手动敲 vlib / vlog 就不陌生了。

工程流程(Project Flow)

**工程(Project)**是一种组织机制,用来收纳正在设计或测试中的 HDL 设计。虽然 QuestaSim 不强制你用工程,但工程能明显降低和工具打交道的成本,尤其适合整理文件、指定仿真设置。

工程流程的步骤如下图:

Figure 2-2. Project Flow

和基本流程相比,有两个关键区别:

  • 不用手动建工作库——工程流程会自动帮你创建;
  • 工程是持久的——只要你不显式关闭它,每次启动 QuestaSim 它都会自动打开。

对初学者来说,这意味着用工程可以少记一条建库命令,也不容易因为「忘了建库」而卡在第一步。

多库流程(Multiple Library Flow)

QuestaSim 里的「库」有两种用法:

  1. 本地工作库(working library):存放你自己设计的编译版本,内容会随着你改代码、重新编译而变化;
  2. 资源库(resource library):通常是静态的,作为设计的「零件仓库」。你可以自己建资源库,也可能拿到别人给的——比如另一个设计团队或第三方(芯片厂商)提供的库。

编译时你要指定用到哪些资源库,并且要规定它们的搜索顺序。一个常见的组合是:门级设计和 testbench 编译进工作库,而设计引用的门级单元模型放在另一个独立的资源库里。

多库仿真的基本步骤如下图:

Figure 2-3. Multiple Library Flow

如果你用的是工程方式,上图第一步可以替换成两个动作:创建工程、把 testbench 加入工程。也就是说,工程和多库是可以叠加使用的。

后面能学到的调试工具

QuestaSim 提供了大量调试和分析工具,教程后续课程会覆盖其中若干:

  • 使用工程
  • 多库协同仿真
  • SystemC 仿真
  • 设置断点、单步执行源代码
  • 查看波形、测量时间
  • 探索设计的「物理」连接关系
  • 查看与初始化存储器
  • 用 Waveform Editor 生成激励
  • 分析仿真性能
  • 测试代码覆盖率
  • 波形对比
  • 用 PSL 断言调试
  • SystemVerilog 断言与 cover 指令
  • SystemVerilog DPI
  • 仿真自动化

不必现在全都记住,知道「这些事情 QuestaSim 都能干」就够了——后面的文章会挑其中最常用的逐个上手。

小结

  • QuestaSim 支持 VHDL / Verilog / SystemVerilog / SystemC 及混合语言,Verilog、VHDL 版本的教程实验都有配套设计。
  • 文档入口在 Help 菜单(PDF Bookcase / InfoHub),命令帮助用 help,错误码用 verror 查。
  • 默认的全局优化由 vopt 完成,提速明显但可能隐藏信号与进程,调试时按需关闭。
  • 三种流程一张图记牢:基本流程(手动建 work 库)、工程流程(自动建库、工程持久)、多库流程(工作库 + 资源库)。
  • 下一篇我们就沿着基本流程实操:从建 work 库开始,把一个计数器设计完整仿真跑通。
  • 给自己一个小目标:读完下一篇后,不看文章也能默写出「建库 → 编译 → 优化 → 加载 → 运行」五个环节各自对应的命令。

自测