它对我使用 vcs 的方式是调用一个导出的函数,该函数将依次调用 $stack。在此示例中,它适用于“默认”和“纯”绑定。
import "DPI-C" context function void testStack();
export "DPI-C" function printStack;
function void printStack;
$display("====%m=====");
$stack;
endfunction
module dpis;
sub sub();
endmodule // dpis
module sub;
initial
testStack();
endmodule // sub
class Test;
function void test;
testStack();
endfunction // test
endclass // Abc
program abc;
Test a = new;
initial
a.test();
endprogram // abc
和'c':
#include <svdpi.h>
extern void pringStack();
void testStack() {
svScope scope;
scope = svGetScopeFromName("$unit");
svSetScope(scope);
printStack();
}
结果如下所示:
====$unit::printStack=====
#0 in printStack at dpis.sv:9
#1 in DPI function
#2 in dpis.sub
====$unit::printStack=====
#0 in printStack at dpis.sv:9
#1 in DPI function
#2 in <protected code>
#3 in abc at dpis.sv:30
#4 in abc
因此,它以模块实例路径或文件/行号的形式提供了有关位置的一些信息。