この段階で、サブプログラム呼び出しをステップスルーして、get_value
/set_value
オプションを使用してサブプログラム内の自動変数およびスタティック変数にアクセスできるようになりました。
現在のところ、これらの変数にはサブプログラムが呼び出しスタックの一番上にある場合にのみアクセスできます。
次のオプションを使用すると、呼び出しスタックのどのレベルの変数にもアクセスできます。
Call Stacks ウィンドウ
Call Stacks ウィンドウには、現在のシミュレーション時間でサブプログラム内で待機中の VHDL/Verilog プロセスすべての HDL スコープが表示されます。これは get_stacks
Tcl コマンドに類似しています。
デフォルトでは、Call
Stacks ウィンドウでシミュレーションが停止する箇所 (サブプログラム内) のプロセスが選択されますが、サブプログラムで待機中のどのプロセスでも選択できます。Call Stack ウィンドウでプロセスを選択するのは、Scope ウィンドウからプロセス スコープを選択したり、current_scope
Tcl コマンドを使用したりするのと同じことです。Call Stacks ウィンドウでプロセスを選択すると、アップデートされたプロセスが Scope ウィンドウ、Objects ウィンドウ、Stack
Frames ウィンドウ、および Locals タブに表示されます。Call Stacks ウィンドウには、プロセス名と選択したプロセスの絶対パスとそのタイプが表示されます。
Stack Frames ウィンドウ
Stack Frames ウィンドウには、サブプログラム内で待機中の現在の HDL プロセスとその呼び出しスタック内のサブプログラムが表示されます。これは report_frames
および current_frame
Tcl コマンドに類似しています。[Stack Frames] ウィンドウには、現在の階層の最も最近のサブプログラムが一番上に、次に呼び出し元のサブプログラムが表示されます。呼び出し元の HDL プロセスは一番下に表示されます。その他のフレームを現在のフレームとして選択することもできます。これは、current_frame –set
<selected_frame_index>
Tcl コマンドでも設定できます。Objects ウィンドウの Locals タブには、サブプログラムのフレーム選択に従い、選択したサブプログラム フレームに対してローカルのスタティックおよび自動変数が表示されます。Stack Frames ウィンドウには、フレーム数、サブプログラム/プロセス名、ソース ファイル、選択した HDL プロセス、の現在の行が表示されます。
Objects ウィンドウの Locals タブ
Objects ウィンドウの Locals タブには、現在実行中 (または選択された) サブプログラムのローカルのスタティックおよび自動変数の名前、値、およびタイプが表示されます。これは get_objects –local
Tcl コマンドに類似しています。このウィンドウは、Stack Frames ウィンドウで選択したフレームに従って表示されます。各変数/引数に対して、Locals タブに名前、値、タイプが表示されます。
ダイナミック型を使用したデバッグ
SystemVerilog には、クラス、動的配列、キュー、連想配列などのダイナミック型があり、Vivado シミュレータでサポートされています。Vivado では、ダイナミック型変数をプローブできます。次に例を示します。
module top();
int dynamicArray[];
byte queue[$];
initial
begin
dynamicArray = new[3];
dynamicArray = '{10, 20, 30};
queue.push_back(8'hab);
queue.push_back(8'hff);
#10;
dynamicArray = new[5](dynamicArray);
$display(queue.pop_front());
end
endmodule
ダイナミック型変数は、次を使用してプローブできます (次の図を参照)。
- Objects ウィンドウ
-
Tcl
Console ウィンドウで
get_value
およびreport_value
コマンドを使用。 -
Sources ウィンドウのツール ヒント図 4. ダイナミック型のプローブ
注記: ダイナミック型は、波形のトレース (add_wave
) または波形データベースの作成 (log_wave
) ではサポートされません。