目前我使用这种方式,当发生运行时错误时,vcs将打印调用堆栈。其效率非常低。有更好的办法吗?
function void anyFunctionIWouldLikeToSeeCallStack();
uvm_object a;
// a == null
a.print();
endfunction;
Cadence incisive (ncsim) 有一个可以调用的 $stacktrace 系统任务。 如果其他供应商也有类似的东西,我不会感到惊讶。
在 VCS 中,它是
$stack()
但它只有大约 8 层堆栈,我认为这是不可配置的
这是模拟器在设置断点时通常提供的东西。到达某个断点后,您的模拟将停止,您将能够运行模拟器特定命令来打印调用堆栈,或者您将在某个 GUI 窗口中显示调用堆栈。
您必须在 VCS 文档中查找具体是如何完成的。
在 RivieraPro 中,命令是 $callstack()。您可以传递一些选项来配置输出。
查看文档: R-PRO:用户指南 | SystemVerilog 仿真 | SystemVerilog 非标准扩展 | $callstack系统函数
在VCS中,您可以使用$stack()或$psstack()(返回字符串)。可以使用
-frames <num>
配置深度。
有关更多信息,[VCS][文档][VCS® MX/VCS MXi™ 用户指南]Verilog 编译器指令和系统任务’
的扩展