环境、编译与 QuestaSim 运行

返回 ALU 任务总览。

任务:让同一套源码可重复运行

本练习实际使用 QuestaSim-64 10.7c。机器上曾同时存在另一套 ModelSim;同名 vsim 命令不代表同一安装版本。编译日志要确认版本、Compiling module simple_alu 和最终测试摘要。配套代码在 ALU 仓库。

进入项目的 sim 目录后运行 run.bat。它调用 PowerShell 回归脚本;脚本优先选择本机 Questa 安装,解析每个种子的 PASS、FAIL 与覆盖率,并保留日志。若要在别的机器复用,请按实际安装位置调整可执行文件查找规则。

历史上直接运行 run.ps1 曾被 PowerShell 执行策略拦截,报 PSSecurityException。这与 SV 源码无关。可用 run.bat,或只对本次调用使用 powershell -ExecutionPolicy Bypass -File .\run.ps1;不必永久放宽整机策略。

任务:理解编译列表

当前编译顺序如下:

vlog -sv +incdir+../tb ../rtl/simple_alu.sv ../tb/alu_if.sv \
  ../tb/alu_assertions.sv ../tb/alu_pkg.sv ../tb/tb_top.sv

这里为阅读而换行;在 .do 中可写成一行。+incdir+../tb 只是 include 搜索目录,不会编译 DUT;../rtl/simple_alu.sv 才是独立源文件。package 内被 include 的类文件不再作为独立文件重复传给 vlog。成功编译不等于运行通过,更不能只靠旧 work 库中留下的模块。

.sv 单行注释用 //,.do 是 Tcl 脚本,单行注释用 #。

任务:处理 GUI 优化与文件操作

-novopt 禁用优化,在这版 Questa 中已弃用。GUI 的 Start Simulation 若提示 vsim-12110,检查主窗口是否启用优化;优化级别 -O4 不能代替总开关。调试可按需要用 +acc 保留可见性。Full optimization 只改变仿真模型的执行方式,不会修改 .sv 源码,也不会帮你修功能错误。

需要一次打开项目时,可用 File → Open 打开 .mpf,或用 Transcript 的 project open <工程文件>;但 GUI 的项目文件列表与 run.do 是两套配置。若源码窗口只读,先确认打开的是实际源文件还是查看窗口,确认保存到正确路径。此处不把一次未复现的 GUI 现象归因于唯一原因。

Transcript 清屏命令是 .main clear;它不结束仿真或删除文件。

任务:分清运行、停止和退出

  • SV 的 $finish:测试平台请求结束本轮仿真。
  • Questa 的 -onfinish stop:加载设计时设定结束行为,使 $finish 后返回控制而不退出整个程序。
  • quit -sim:卸载当前仿真,方便加载下一种子。
  • quit -f:退出 Questa 进程,适合批处理。运行结果从 Transcript、回归摘要与日志读取。

曾尝试在设计加载前单独执行 onfinish stop,Questa 报“只能在 elaboration 后使用”。当前脚本采用 vsim -onfinish stop ...,已实测可用。

排错次序

先查第一条编译/加载错误,再查实际命令和保存的文件;不要只看最后一条连带错误。