波形ビューア GTKWave の導入と利用方法

この記事では、GTKWaveと呼ばれる波形ビューアの「導入方法」と「基本的な利用方法」をまとめます。波形ビューアを活用することで、効率的に、設計・実装したハードウェアの動作を確認できます。また、設計・実装したハードウェアが怪しい挙動をするときに、その原因を突き止める (デバッグする) ことができます。

ACRi ルームのコンピュータで GTKWave を起動してみる

ACRi ルームでログインするコンピュータ (例えば、vs001 や vs002) には GTKWave がインストールされています。ACRi ルームで作業するユーザがインストールする必要はありません。

ACRi ルームのコンピュータ (この例では vs300) にリモート デスクトップで接続して、ターミナル (Terminal) を起動してください。「Control キーと Alt キーを押しながら t を押す」とターミナルが起動します。この様子を次の図に示します。

ACRi ルームのコンピュータにリモート デスクトップで接続する方法については、こちらの記事を参考にしてください。

起動したターミナルで、which gtkwave というコマンドを入力すると、/usr/bin/gtkwave が出力されます。つまり、gtkwave が /usr/bin/ にインストールされていることを確認できます。インストールされていない場合には、何も表示されません。

which gtkwave というコマンドを入力して /usr/bin/gtkwave が出力されているターミナルの様子を次の図に示します。

gtkwave がインストールされていることを確認できました。 gtkwave というコマンドで、GTKWaveを立ち上げてみます。このコマンドを入力して起動した様子を次の図に示します。

ここでは、正しい起動を確認することが目的なので、GTKWave のウィンドウの右上の×をクリックして、GTKWave を終了しましょう。

Linux 環境への波形ビューア GTKWave の導入

ACRi ルームのコンピュータではなく、自分で管理しているコンピュータなどで GTKWave を使う場合には、GTKWave のインストールが必要になります。Ubuntu 22.04 の Linux システムに GTKWave をインストールする方法を説明します。

Ubuntu 22.04 の Linux システムに GTKWave をインストールには、ターミナルで、次のapt コマンドを実行します。sudo は、スーパーユーザーの特権レベルでコマンドを実行するために利用しています。

$ sudo apt -y install gtkwave

Ubuntu 20.04 のように、少し古い版のシステムであっても同様のコマンドでインストールできると思います。

インストールが終わったら、本当にファイルが格納されているか確認しましょう。先の ACRi ルームでの動作例と同様に、ターミナルで which gtkwave というコマンドを入力することで、/usr/bin/gtkwave と出力されます。これによって、gtkwave が /usr/bin/ にインストールされたことを確認できます。

もし、インストールがうまくいかない場合には、Ubuntu における apt を利用したパッケージ管理の方法を調べてみてください。

Windows 環境への Icarus Verilog と波形ビューア GTKWave の導入

Windows 10 のシステムに GTKWave をインストールする方法を説明します。Windows 11のシステムでも同様にインストールできると思います。

GTKWave のみをインストールする方法をありますが、ここでは、Icarus Verilog for Windows のサイトからダウンロードできるファイルを利用して、Icarus Verilog (iverilog) と GTKWave を一緒にインストールする方法を説明します。

まず、Icarus Verilog for Windows のサイトから最新のバイナリをダウンロードします。2024年1月の時点では、iverilog-v12-20220611-x64_setup.exe が最新版です。ダウンロードしたファイルを実行します。

上のウィンドウでライセンスを確認して、同意できるのであれば、I accept the agreement を選択して Next を押します。

上のウィンドウが表示されます。記載されているように、インストールするパスにスペースが入らないように注意しましょう。よく読んだら Next を押します。

インストールする項目を選択する画面が表示されるので、Full installation を選択し、Install MinGW dependencies と Install GTKWave にチェックを入れて(標準でこれらが選択されているので、特に設定を変更する必要はありません)、Next を押します。

上のウィンドウで、Create a desktop shortcut と Add executable folder to the user PATH にチェックを入れて、(標準でこれらが選択されているので、特に設定を変更する必要はありません)、Next を押します。

上の Ready to Install のウィンドウが表示されるので、Install を押します。インストールが始まります。インストールが終わると次のウィンドウが表示されます。

このウィンドウで Finish を押して、インストールを終了します。

デスクトップに、Icarus Verilogというショートカットアイコンが生成されるので、そのアイコンをダブルクリックして開きます。

開いたフォルダの中に、gtkwave というフォルダがあるので、それをダブルクリックで開きます。その中に、bin というフォルダがあるので、それをダブルクリックで開きます。その中に、gtkwave.exe という実行ファイルがあるので、それをダブルクリックで実行します。次の、GTKWaveのウィンドウが表示されれば、インストールは成功しています。

ここでは、正しい起動を確認することが目的なので、GTKWave のウィンドウの右上の×をクリックして、GTKWave を終了しましょう。

GTKWave の基本的な利用方法

GTKWave で利用する波形データを格納するサンプルファイルを準備しました。次の dump_test.txt というファイルをダウンロードして、dump_test.txt という名前で保存してください。

一般的には、GTKWave で表示する波形データを格納するファイルの拡張子は vcd です。ここでは、ダウンロードできるファイルの種類の制約から、拡張子 txt のファイルとしています。また、この波形データを格納するファイルは、Verilog HDL などのハードウェア記述言語で実装したハードウェアのシミュレーションによって生成します。

先に見た方法で、GTKWave を起動します。GTKWaveの左上のメニューの File をクリックして、 表示される Open New Tab を選択します。(Controlキーを押しながら、tのキーを押しても同じ動作になります。)

ファイルを選択するウィンドウが表示されるので、ここで、先に保存した dump_test.txt を選択して、「開く」または「Open」を押します。

上の図の様に、左上のウィンドウに m_top というモジュール名が表示されます。そのモジュール名の左に + というボックスが表示されています。そこをクリックして、下位の階層のモジュールを表示します。

上の図のように、m_top のモジュールに含まれるモジュールの m が表示されました。このモジュールのインスタンス名 m をクリックします。

上の図のように、左下のウィンドウに、モジュール m に含まれる r_s, w_clk, w_in, w_out が表示されます。

配線 w_clk をクリックすると、その配線が青色でハイライトされます。この状態で、左下の Append をクリックします。同様に、r_s をクリックしてハイライトして、左下の Append をクリックします。

上の図のように、Signals というウィンドウに w_clk と r_s が追加 (Append) されます。また、その右の Waves のウィンドウに、それらの信号の値が表示されます。

ウィンドウの上に並んでいるアイコンの左から4番目の Zoom Fit アイコン (上の図のアイコン) をクリックします。

上の図のように、表示している範囲が変わります。ダウンロードした dump_test.txt というファイルには、時刻 0 から 700nsec までの区間のデータが格納されています。このため、表示ウィンドウがこの区間にフィットするように調整されました。 Waves の左端が時刻 0 を、右端が時刻 700nsec になります。

表示している w_clk はクロック信号で、200, 300, 400, 500, 600, 700nsec の時刻で立ち上がりエッジ (値が 0 から 1 に推移する端、エッジ) になっています。

Signals の表示 r_s[3:0] から、r_s が 4 ビットの信号でありことがわかります。また、Waves の表示から、その初期値が 0 で、200ns から値が 8 になり、300ns から値が C になり、400ns から値がEになり、500nsから値がFになることがわかります。

Signals のウィンドウで r_s[3:0] をクリックすると、それがハイライトされます。この状態で、右クリックにより、メニューが現れます。メニューの一番上の Data Format を選択して、表示される Binary を選択してください。この選択している様子を次に示します。

この選択により、r_s の表示の形式が 2 進数に変わります。

上の画面のように、Waves のウィンドウの表示が変化します。r_s の値が 2 進数の表示で、0000, 1000, 1100, 1110, 1111 と変化することがわかります。

実は、このハードウェアには、 右にシフトする4ビットのシフトレジスタが含まれていて、その入力に 1 を設定しています。そのため、クロック信号の立ち上がりエッジで、レジスタ r_s の上位の 3 ビットの値で下位の 3 ビットを更新して、レジスタ r_s の最上位ビットを 1 で更新しています。

ここで利用した波形データは、次の Verilog HDL のコードのシミュレーションによって、得られたものです。

`timescale 1ns/100ps
module m_top();
  reg r_clk=0;
  initial #150 forever #50 r_clk = ~r_clk;
  wire w_out;
  reg r_in=1;
  m_main m (r_clk, r_in, w_out);
  initial #700 $finish;
  initial $dumpvars(0, m);
endmodule

module m_main (w_clk, w_in, w_out);
  input wire w_clk, w_in;
  output wire w_out;
  reg [3:0] r_s = 0;
  always@(posedge w_clk) r_s <= {w_in, r_s[3:1]};
  assign w_out = r_s[0];
endmodule

まとめ

この記事では、波形ビューア GTKWave の「導入方法」と「基本的な利用方法」について説明しました。

GTKWave を立ち上げたら、表示する波形が格納されているファイルを読み込みます。その後、適切なモジュールのインスタンスを選択して、そこに含まれる配線やレジスタから、波形として表示する信号を追加します。さらに、表示する時刻を選んだり、表示する範囲を調整したり、波形の表示形式 (2 進数、10 進数、16 進数など) を変更したりしながら、設計・実装したハードウェアの動作を把握していきます。

GTKWave には、ここで説明できなかった多くの便利な機能が実装されています。GTKWave を活用しながら、色々なメニューを試したり、マニュアルを参照したりすることで、それらを学んでいきましょう。

東工大 吉瀬謙二

タイトルとURLをコピーしました