LoginSignup
2
0

More than 1 year has passed since last update.

SystemVerilogでスタックトレースをログに出力

Posted at

SystemVerilogでの検証中にある関数がどこから呼ばれているかを知りたいことは割と頻繁にあると思います。
言語の標準機能ではこれを表示させる方法は無いのですが、実はデファクトスタンダードになっている$stacktraceというコマンドがあり、この機能を使うことで関数呼び出しの順番をログに表示させることができます。

function void fa(); 
  fb(); 
endfunction

function void fb();
  $display("Going to print stack trace");
  $stacktrace; 
endfunction

module topmd(); 
  initial begin 
    fa(); 
  end 
endmodule

以下はVCSのログです。出力結果はシミュレータによって少しずつ異なりますが、どれも同等の情報が出力されます。

Compiler version S-2021.09; Runtime version S-2021.09;  Oct 19 21:42 2022 
Going to print stack trace 
#0 in fb at testbench.sv:7 
#1 in fa at testbench.sv:2 
#2 in topmd at testbench.sv:12 
           V C S   S i m u l a t i o n   R e p o r t  
Time: 0 ns

Questa, Xcelium, VCSで動作することを確認しています。

注意点ですが、本機能はあくまでログにスタックトレースを表示する機能であって、文字列として結果を返す関数ではないです。なのでSystemVerilogのプログラム中で結果を文字列として受け取ってuvm_infoに渡して、、、などという使いかたはできません。

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0