• 博客园logo
  • 会员
  • 周边
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录

SOC/IP验证工程师

  • 博客园
  • 联系
  • 订阅
  • 管理

公告

View Post

利用vcs在verdi中显示force语句

编译选项:-debug_acc+all
运行选项:+fsdb+force
问题定位与结论

你使用的是 UVM_HDL_FORCE(UVM 后门 force),这类 force 不会出现在 RTL 的驱动链中,默认也不会被 FSDB 记录。要在 Verdi 中看到被 force/release 的时间段与值,仿真时必须开启 FSDB 的 force 记录选项,并确保编译/运行环境具备对 DUT 的读写访问权限。否则即使波形生成,Verdi 也看不到 force 标记或变化。

最小改动修复方案

编译阶段(VCS)

加入调试与 Verdi 中间文件选项:使用 -debug_access+all(允许读写/force 等后门操作)与 -kdb -lca(生成 Verdi 所需的 KDB 中间数据)。示例:vcs -full64 -sverilog -debug_access+all -kdb -lca -f filelist.f -o simv。

运行阶段(simv)

在仿真命令行加入 +fsdb+force,让 FSDB 记录 force/release 事件与时间区间。示例:./simv +fsdb+force。

波形生成(TB 中建议显式开启)

在 TB 加入 FSDB dump(确保被 force 的信号所在层次被 dump):

\(fsdbDumpfile("top_tb.fsdb"); \)fsdbDumpvars(0, tb_top); // 0 表示全层次;可按需改为具体层次
如需查看多维数组/存储器,补充:$fsdbDumpMDA();

打开波形(Verdi)

建议同时指定设计信息与波形:verdi -sv -f filelist.f -ssf top_tb.fsdb -dbdir simv.daidir &。如无 -dbdir,Verdi 可能找不到编译中间数据,影响信号解析与追踪。

快速自检清单

确认运行命令中包含 +fsdb+force;没有该开关,Verdi 不会显示 force 区间与标记。
确认编译包含 -debug_access+all;没有读写权限,后门 force 的信息无法被记录进 FSDB。
确认 TB 的 $fsdbDumpvars 覆盖了被 force 的信号所在层次(例如顶层或 DUT 实例)。
确认打开 Verdi 时加载了正确的 .fsdb 与 simv.daidir(用 -ssf 与 -dbdir)。
若仍无显示,可在仿真中手动触发一次 fsdbDumpflush,确保缓存落盘后再用 Verdi 打开波形。

进阶排查与批量导出

打开 delta 时刻查看:仿真加入 +fsdb+delta,在 Verdi 中展开具体时间点,核对 force 是否发生在你关注的时间点附近(有助于排查“值变了但看不到 force 标记”的错觉)。
批量导出 force 事件:使用 fsdbreport 从 FSDB 提取所有 force/release 记录到文本,便于交叉核对。示例(按你的实际路径与信号范围调整):fsdbreport -f top_tb.fsdb -bt 0 -et 10us -w 256 -of h -o force_report.txt;如需针对某信号:fsdbreport -f top_tb.fsdb -s "/tb_top/u_dut/sig" -bt 0 -et 10us -o sig_force.txt。

posted on 2025-12-03 19:53  SOC验证工程师  阅读(350)  评论(0)    收藏  举报

刷新页面返回顶部
 
博客园  ©  2004-2026
浙公网安备 33010602011771号 浙ICP备2021040463号-3