この記事では、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 を活用しながら、色々なメニューを試したり、マニュアルを参照したりすることで、それらを学んでいきましょう。
東工大 吉瀬謙二