Icarus Verilogとgtkwaveをインストール

更新日 2020-06-15 (月) 16:45:21

Verilog HDLの学習用に Icarus Verilogは、オープンソースのVerilogコンパイラ&シミュレータとgtkwaveは波形ビューワをUbuntu 18.04LTS DeskTopにインストール

Ubuntuの設定

最小構成でインストール

VNCのインストール

$ sudo apt install vino

OS再起動すると設定の「共有」の個所に「画面共有」が表示する。

VNCサーバInst1.png

VNCサーバInst2.png

Windowsからの接続のため暗号化しない設定

$ sudo DISPLAY=:0 gsettings set org.gnome.Vino require-encryption false

以下のような設定をしてOS再起動した。不要かもしれない

$ nmcli connection show

NAME        UUID                                  TYPE      DEVICE

有線接続 1  ba688a1f-889f-30a0-b947-ed395181dc52  ethernet  enp5s0
$ dconf write /org/gnome/settings-daemon/plugins/sharing/vino-server/enabled-connections "['ba688a1f-889f-30a0-b947-ed395181dc52']"
$ dconf read  /org/gnome/settings-daemon/plugins/sharing/vino-server/enabled-connections

['ba688a1f-889f-30a0-b947-ed395181dc52']
$ ss -lnt | grep 5900

LISTEN   0         5                   0.0.0.0:5900             0.0.0.0:* 

LISTEN   0         5                      [::]:5900                [::]:*

SSHのインストール

$ sudo apt install -y openssh-server
$ sudo systemctl enable ssh
$ sudo systemctl restart ssh

Icarus Verilogとgtkwaveのインストール

インストール

# sudo apt-get install iverilog gtkwave
パッケージリストを読み込んでいます... 完了
(略)
mime-support (3.60ubuntu1) のトリガを処理しています ...
desktop-file-utils (0.23-1ubuntu3.18.04.2) のトリガを処理しています ...
libc-bin (2.27-3ubuntu1) のトリガを処理しています ...

Icarus Verilog使用方法

コンパイル

  • iverilog -o 出力実行ファイル名 -s [ベンチのトップモジュール名]Verilogソースコードファイル名
$ iverilog -o and2 -s and2_testbench *.v

シミュレーション方法

これを実行すると波形ファイルが出来る

  • vvp 実行ファイル名

サンプルを作成してみる

必要なファイル

  • モジュールファイル:1モジュールを1ファイルで記述が良い(複数モジュールを記述するも可能)。拡張子は「.v」にする
  • テストベンチ(Verilog-HDLファイル):設計した回路(DUT)を検証するために必要な信号(DUTに与える信号)を生成したり検証を効率よく行うための結果表示などの方法を記述
  • wire(ネット型)信号:配線として使用。値を保持しない。配線を意味する。値を入れるには、「assign」による継続的代入がある。
    • ネットへの代入  : =
  • reg(レジスタ型)信号:フリップフロップの出力として使用。値を保持する。値を入れるには、「always」による代入がある。
    • レジスタへの代入 : <=

2入力AND回路

2つの方法で作成してみる

$ mkdir -p icarus_files/and2-1
$ cd icarus_files/and2-1

回路構成

''and2.v''  (拡張子は「.v」)
  • その1
/* AND2 */

module AND2 ( A, B, X );

/* モジュールの入出力端子を設定 */
      input A, B;
      output X;

/* モジュール内部の信号名を設定 */
/*  wire は
      wire IA;
      wire IB;

/* 回路動作を設定 */
      assign IA = A;
      assign IB = B;
      assign X = IA & IB;  /* ANDを実行 */

endmodule
  • その2
/* AND2 */

module AND2 ( A, B, X );

      input A, B;
      output X;

      and AAA (X, A, B);

endmodule

ベンチ内容(シミュレーション内容)

その1,その2とも同じ内容でOK

テストベンチではテスト入力として使う信号のデータ型をレジスタ宣言(reg 宣言)し、反対に検証対象の出力ポートに接続するテストベンチで値を与えない信号のデータ型はワイヤー宣言(wire宣言)する。

and2_testbench.v (拡張子は「.v」)

/* AND2 テストベンチ */

/* 単位時間を10ナノ秒に設定 timescale<1タイムスケールあたりの実時間>/ <丸めの精度>*/
/*timescale の記述は、通常はテストベンチにのみに記述*/
`timescale 1ns/1ps

module and2_testbench;

/* 入力は:reg  出力は:wire */
reg a, b;
wire out;

/*回路のインスタンス化する。 AND2 ⇒ bbb*/
AND2 bbb (a, b, out);

/*シミュレーションの開始宣言*/
initial begin
/*シミュレーション出力ファイルの指定*/
      $dumpfile("wave.vcd");
/*VCDファイルに出力するダンプを取る対象を指定する。0: 全階層の全変数 (ポート、ネット、変数など) */
      $dumpvars(0, and2_testbench);
/*コンパイル時に表示する内容を指定 */
/*下の例は時間ごとに a, b, outをバイナリで表示する */
      $monitor ("%t: a = %b, b = %b, out = %b", $time, a, b, out);

/*入力信号をバイナリで指定timescaleが 1ns/なので #100で100nsごとに値変化させている*/
             a = 0; b = 0;
      #100   a = 1;
      #100   a = 0; b = 1;
      #100   a = 1;
      #100   a = 0; b = 0;
      #100   $finish;   /*シミュレーションが終了すること指定*/
end

endmodule

コンパイル

$ iverilog -o and2 -s and2_testbench *.v

「and2」という実行形式が出来る

$ ls -l
合計 16
-rwxr-xr-x 1 okada okada 2317  6月 15 14:53 and2    ← これ
-rw-rw-r-- 1 okada okada  361  6月 15 14:53 and2.v
-rw-rw-r-- 1 okada okada  492  6月 15 14:49 and2.v~
-rw-rw-r-- 1 okada okada 1133  6月 15 14:50 and2_testbench.v

シミュレーション波形生成

$ vvp and2
VCD info: dumpfile wave.vcd opened for output.
                   0: a = 0, b = 0, out = 0
                 100: a = 1, b = 0, out = 0
                 200: a = 0, b = 1, out = 0
                 300: a = 1, b = 1, out = 1
                 400: a = 0, b = 0, out = 0

「wave.vcd」というファイルが出来る

$ ls -l
合計 20
-rwxr-xr-x 1 okada okada 2317  6月 15 14:53 and2
-rw-rw-r-- 1 okada okada  361  6月 15 14:53 and2.v
-rw-rw-r-- 1 okada okada  492  6月 15 14:49 and2.v~
-rw-rw-r-- 1 okada okada 1133  6月 15 14:50 and2_testbench.v
-rw-rw-r-- 1 okada okada  464  6月 15 14:54 wave.vcd  ← これ

GTKWaveで表示

and_gtkwave1.png

and_gtkwave2.png

and_gtkwave3.png

and_gtkwave4.png

参考


添付ファイル: fileVNCサーバInst2.png 6件 [詳細] fileVNCサーバInst1.png 6件 [詳細] fileand_gtkwave4.png 6件 [詳細] fileand_gtkwave3.png 7件 [詳細] fileand_gtkwave2.png 6件 [詳細] fileand_gtkwave1.png 7件 [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2020-06-15 (月) 16:45:21 (25d)