如何在系统verilog中运行时显示调用堆栈?

问题描述 投票:0回答:5

目前我使用这种方式,当发生运行时错误时,vcs将打印调用堆栈。其效率非常低。有更好的办法吗?

function void anyFunctionIWouldLikeToSeeCallStack();
uvm_object a;
// a == null
a.print();
endfunction;
system-verilog
5个回答
2
投票

Cadence incisive (ncsim) 有一个可以调用的 $stacktrace 系统任务。 如果其他供应商也有类似的东西,我不会感到惊讶。


1
投票

在 VCS 中,它是

$stack()

但它只有大约 8 层堆栈,我认为这是不可配置的


0
投票

这是模拟器在设置断点时通常提供的东西。到达某个断点后,您的模拟将停止,您将能够运行模拟器特定命令来打印调用堆栈,或者您将在某个 GUI 窗口中显示调用堆栈。

您必须在 VCS 文档中查找具体是如何完成的。


0
投票

在 RivieraPro 中,命令是 $callstack()。您可以传递一些选项来配置输出。

查看文档: R-PRO:用户指南 | SystemVerilog 仿真 | SystemVerilog 非标准扩展 | $callstack系统函数


0
投票

在VCS中,您可以使用$stack()或$psstack()(返回字符串)。可以使用

-frames <num>
配置深度。

有关更多信息,[VCS][文档][VCS® MX/VCS MXi™ 用户指南]Verilog 编译器指令和系统任务’

PS:这是https://stackoverflow.com/a/43741171/8636058

的扩展
© www.soinside.com 2019 - 2024. All rights reserved.