ModelSim 仿真 (vlib+vlog/vcom+vsim -c)
fpga_msim_simRun headless ModelSim compile and simulation for Verilog/SV/VHDL designs with testbenches, detect errors from transcript output, and optionally produce VCD or coverage for assertions.
Instructions
用 ModelSim 头less 编译(Verilog/SV→vlog,VHDL→vcom)并运行(vsim -c -do)一个设计(含 testbench)。不信退出码:以 transcript 的 ** Error/Fatal 与 'Errors: N' 判定 ok($fatal 时 vsim 仍退 0)。可出 VCD 供 fpga_assert 判定;可选 coverage 返回结构化覆盖率(分支/语句/条件/翻转 %)。默认紧凑摘要 + detail:'full' + 按输入 hash 缓存。VHDL 是相对 fpga_sim(iverilog) 的增量能力。
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| lib | No | 工作库名,默认 work | |
| top | Yes | 顶层模块/实体名(通常是零端口 testbench) | |
| uvm | No | 是否按 UVM 测试编译/运行,默认 false。开启=用预编译 mtiUvm 库(无需 gcc/DPI):编译加 -sv +incdir+<uvm src> -L mtiUvm,vsim 加 -L mtiUvm;解析 UVM Report Summary,**UVM_ERROR/UVM_FATAL>0 即 ok=false**(ModelSim 退出码/Errors 仍可能为 0,反幻觉)。返回 uvm{info,warning,error,fatal}。 | |
| vcd | No | 是否生成 VCD(经 do-file: vcd file + vcd add -r /*),默认 false。开启时自动加 -voptargs=+acc 保留信号可见性(否则 vopt 优化掉信号,VCD 为空)。 | |
| host | No | 远程执行设备 id(pango-mcp.config.json 的 hosts,需配 hosts.<id>.modelsim.home;省略=本机)。远程时源文件推到该设备编译+仿真,产物(VCD/coverage ucdb)拉回本地镜像供 fpga_assert。 | |
| wave | No | 仿真后把 VCD 渲染成波形图(SVG+HTML),默认 false。**自动启用 VCD**(含 +acc 保信号);产出见 artifacts.waveSvg/waveHtml。一步出图给用户看,免再调 fpga_wave。 | |
| cache | No | 源文件+选项未变时复用上次摘要,默认 true;false 强制重跑 | |
| detail | No | 返回粒度,默认 summary(省 token);full 含完整 transcript | |
| runArg | No | vsim run 参数,默认 '-all'(可为 '1us' 等定长) | |
| libDirs | No | vlog 库搜索目录(相对 workdir 或绝对),经 -y +libext 让 vlog 按需自动解析设计实例化到的厂商原语仿真模型(如 Pango arch/.../verilog/fm_lib/simulation 或 gtp_lib 所在目录),无需手列每个 GTP_*.v。 | |
| sources | No | 相对 workdir 或绝对的源文件;省略=workdir 下所有 .v/.sv/.vhd(排除 . 与 _ 前缀) | |
| uvmTest | No | UVM 测试名,传给 +UVM_TESTNAME=<名>(顶层需 run_test())。省略则由 TB 的 run_test("...") 决定。 | |
| vcdPath | No | VCD 输出路径(相对 workdir 或绝对);vcd=true 时默认 ._fpga_msim/sim.vcd | |
| workdir | Yes | 工作目录绝对路径(HDL 源所在;编译产物隔离在 ._fpga_msim/) | |
| coverage | No | 是否收集代码覆盖率(分支/条件/语句/翻转),默认 false。开启=编译加 -cover bcst + vsim -coverage -onfinish stop + 自动 +cover;run 后 coverage report/save,返回结构化 coverage{total,metrics{branch/statement/condition/toggle:{bins,hits,misses,pct}}} + artifacts.coverageUcdb。 | |
| fileList | No | vlog 文件清单(.f)路径(相对 workdir 或绝对),经 -F 读入(清单内相对路径相对清单所在目录解析)。用于含 IP 的仿真:直接喂 PDS 生成的/随 PDS 的 IP 仿真清单(如 PCIe filelist_pciegen*_gtp.f)。加密 IP(.vp/.svp,IEEE-1735 含 Mentor key)由 vlog 原生解密,无需走 PDS 仿真渠道。 | |
| vcomArgs | No | 追加给 vcom 的参数,如 -2008 | |
| vlogArgs | No | 追加给 vlog 的参数,如 +define+X、-timescale 1ns/1ps | |
| vsimArgs | No | 追加给 vsim 的参数,如 -gG=1、+UVM_TESTNAME=... | |
| waveOpen | No | wave 出图后用默认浏览器弹给用户看(本机),默认 false | |
| assertions | No | 一步内做声明式断言(同 fpga_assert):log_*/vcd_*。**任一 vcd_* 自动启用 VCD**;断言失败则整体 ok=false(断言即规格)。结果在 assert{passed,failed,results}。免再单独调 fpga_assert。 | |
| timeoutSec | No | 超时秒数,默认 120 | |
| doBeforeRun | No | run 前注入的额外 Tcl(如 force/add wave/coverage 配置) | |
| waveSignals | No | wave 只画这些信号(省略=全部,上限 40) |