デジタル設計

オープンソースシミュレータIcarus Verilogをインストールする

sukaisu2050

Icarus Verilogは、Verilog HDLで記述されたデジタル回路をコンパイル・シミュレーションするためのオープンソースのツールです。
Windows用パッケージをインストールし、コマンドを解説します。

Icarus Verilog とは

Icarus Verilogとはオープンソース(GPLライセンス)の論理回路シミュレータです。
Verilog HDL で記述されたデジタル回路を論理シミュレーションすることができます。
LinuxやWindowsやMacOSなどに対応しています。

主な機能を示します。

  • Verilog記述のコンパイル
    RTL記述(Verilog-1995、2001、2005)を実行形式に変換します。
  • シミュレーション実行
    vvpコマンドでシミュレーションを実行します。
  • 波形出力機能
    $dumpfile、$dumpvars を使用してVCDファイルを出力します。
  • VPIサポート
    Verilog Procedural Interface(C言語連携)も可能です。
  • SystemVerilogサポート
    一部の記述に対応しています。

wikipediaに解説があります。

オープンソースですが個人で開発されているものです。
SystemVerilogやUVMといった比較的新しい機能のサポートは望めないでしょう。
また大規模なSoC検証や高度なデバッグ機能も望めないでしょう。

利用用途としては個人の学習用と考えたのがよさそうです。

  • 教育目的でのHDL学習
  • 小規模デジタル回路の検証
  • Verilogコードの検証・デバッグ
  • オープンソースツールとの連携

インストール手順

バイナリパッケージをダウンロードし、インストーラを実行するだけです。
フォルダ名に空白文字が許されないことだけ注意が必要です。

Windows用バイナリパッケージのダウンロード

こちらにWindows用のバイナリパッケージがあります。
Icarus VerilogとGTKWaveが含まれています。

インストーラを実行

ダウンロードしたインストーラーを起動します。

ライセンス表示

”I accept the agreement”を選択します。

ライセンス条項表示
ライセンス条項表示
注意事項

インストールフォルダ名に空白文字がないようにしなければならない。
と情報が表示されています。
設定は次のウィンドウで設定します。

Information
注意事項がひょうじされています
インストールファルダ設定

初期状態では C:\iverilog かもしれません。
私は C:\Apps\iverilog に変更しています。

インストールファルダ設定
インストールファルダ設定
コンポーネント選択

インストール不要なものがあればチェックを外します。
デフォルトのままでよいと思います。

コンポーネント選択
コンポーネント選択
メニューフォルダ名の設定

メニューフォルダ名の設定です。
デフォルトのままでよいと思います。

メニューフォルダ名の設定
メニューフォルダ名の設定
追加タスクの指定

デスクトップアイコンを作るか。PATHを設定するかの指定です。
デフォルトのままでよいと思います。

追加タスクの指定
追加タスクの指定
インストール設定完了

設定が完了しました。
Installを押すとインストールを開始します。

設定完了
インストール設定完了
インストール完了

しばらくするとインストールが完了し、完了を知らせるメッセージが表示され終了です。

インストール完了
インストール完了

環境確認

フォルダメニューを見ると二つのアイコンがあります。
「Icarus Verilog」でインストールフォルダを表示します。
「Icarus Verilog on the Web」でサイトを開こうとしますが、すでに存在しないサイトです。
この2つのアイコンはあまり用途がないと思われます。

メニュー
メニュー

メニューの「Icarus Verilog」で以下のようにインストールフォルダを表示します。
コマンドiverilogはbinにあります。
コマンドgtkwaveはgtkwave\binにあります。

インストール済みフォルダ
インストール済みフォルダ

PowerShellを起動してコマンドを確認します。
インストール時にPATHは設定されているはずなので、起動するはずです。
iverilog -v で以下のようにバージョンが表示されます。

iverilog起動
iverilog起動

コマンドgtkwaveでGTKWaveが起動します。

GTKwave起動
GTKwave起動

コマンドが見つからない場合は環境変数のPATHを確認しましょう。

環境変数
環境変数

サンプルで動作確認

インストールディレクトリの下にサンプルディレクトリsamplesがあります。
ディレクトリごとコピーして動作確認してみましょう。

hello.vlはinitial文で$displayを実行するだけの記述です。
iverilog -o hello hello.vl でhelloを作り、vvpで実行します。

コンパイルと実行(hello.vl)
コンパイルと実行(hello.vl)

lfsr16.vは線形フィードバックシフトレジスタ(LFSR)の記述と検証環境が記述されています。
実行すると5ビットのデータをログに出力し、vcdファイルも出力します。
このLFSRは16系列のデータを繰り返し出力しています。

実行結果(lsfr16)
実行結果(lsfr16)

以下にgtkwaveでvcdファイルを表示した例を示します。
値は16進で表示されていて、ログと対応しています。

lfsr16の波形出力
lfsr16の波形出力

sqrt.vlは平方根を求める回路と検証環境の記述です。
テストでは63の平方根を求めています。
63の平方根は7.937…です。整数部の7が求められています。

実行結果(sqrt.vl)
実行結果(sqrt)

sqrt-virtex.vはFPGA(Virtex系)向けに最適化された平方根演算回路と見られます。
-DSIMULATE=1は検証環境の制御用に使われているディレクティブの指定です。

実行結果(sqrt-virtex)1
実行結果(sqrt-virtex)1
実行結果(sqrt-virtex)2
実行結果(sqrt-virtex)2

正確な動作をしているかまでは確認していませんが、ひとまず実行できていることはわかりました。

コマンド解説

インストールされたコマンドを簡単に見ておきます。

iverilog\binにはIcarus Verilogの基本コマンドがインストールされています。

コマンド用途・説明
iverilog.exeVerilogコンパイラ。Verilog記述をvvpの実行形式に変換する
vvp.exevvp実行形式のシミュレーション実行コマンド
iverilog-vpi.exeVPIモジュールのビルド補助ツール。
C言語で書かれたものをWindowsのDLLに変換する

iverilog\gtkwave\binには波形ビュアーや波形変換に関するコマンドがインストールされています。

コマンド用途・説明
evcd2vcd.exeEVCD(Extended VCD)形式を通常の VCD に変換するツール。
EVCD は、信号方向(input/output)を含む詳細な VCD 拡張。
fst2vcd.exeFST(Fast Signal Trace)形式を VCD に変換。
GTKWave の高速波形形式を一般的な VCD に戻す。
fstminer.exeFST ファイル内の信号・構造を調査・解析するコマンドラインツール
ghwdump.exeGHW(GHDLで生成される波形)形式をテキスト形式で出力するツール。
GHDL用。
gtkwave.exeGTKWave のメイン波形ビューア。GUIツール。.vcd や .fst を表示できる。
lxt2miner.exeLXT2(古い圧縮波形形式)ファイル内の信号などを調査。
信号階層やサイズ情報などが取得可能。
lxt2vcd.exeLXT2 → VCD への変換。古い圧縮波形を通常VCD形式に展開。
rtlbrowse.exeRTL構造をGUIでブラウズするツール。
verilogのRTL階層を視覚的に探索する用途。
shmidcat.exeshm 形式(Cadence系の一部シミュレータが出力)波形ファイルを
連結するツール。
twinwave.exeGTKWave ベースのマルチパネル波形比較ツール。2つの波形を比較できるGUI。
vcd2fst.exeVCD → FST への変換。VCDを高速・軽量なFST形式に変換して
GTKWaveで効率的に閲覧可能に。
vcd2lxt.exeVCD → LXT への変換(旧圧縮波形形式への変換)。
vcd2lxt2.exeVCD → LXT2(改良版LXT)への変換。
vcd2vzt.exeVCD → VZT(Zlib圧縮された波形形式)への変換。
保存サイズを小さくする目的。
vermin.exeVerilog モジュール階層などの解析を行う静的コード解析ツール。
構造の可視化などに使用。
vzt2vcd.exeVZT → VCD への展開。
vztminer.exeVZT ファイルの構造・信号名などを解析して表示する。
xml2stems.exeXMLファイルから GTKWave の階層表示用の *.stemsファイルを
生成する補助ツール。

これらを把握しておく必要はありません。
しかし実際の業務では以下のようなことが考えられます。

  • 特定の波形フォーマットからVCDや電力測定用フォーマットに変換する。
  • ふたつの波形を比較して同じ動きをしているか、否かを判断する。

商用シミュレータを使うときも同じようにコマンド群を確認しておくと、便利なコマンドを見つけることができるかもしれません。

まとめと課題

Icarus Verilogは、軽量かつ無料で始められるVerilog HDLの開発・検証ツールです。
特に学習者や小規模開発に適しており、LinuxやWSL環境でも扱いやすいという利点があります。
今回Windows版バイナリをインストールしたことで、簡単にセットアップがすみました。

課題ですが解決しておきたいことが何点か残っています。
これらについては試行しながら解決する予定です。

  • コマンドライン操作なので、MinGWなどのGNUツールチェーンがないと不便。
  • WSL版をコンパイルしてインストールしたほうがよいか?

リンク

GitHub steveicarus/iverilog
 GitHubにある作者のIcarus Verilogのリポジトリ 

SOURCEFORGEのIcarus Verilogページ
 Tarで固められたソースコードの配布元

Icarus Verilog for Windows
 Windows用のバイナリパッケージの配布元。Icarus VerilogとGTKWaveが含まれる。

GTKWave
 GTKWaveのページ

GitHub gtkwave repositories
 GitHubにあるGTKWaveのリポジトリ

GTKWave for Windows
 Windows用GTKWaveの配布元

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA


ABOUT ME
すかいす
すかいす
駆け出しブロガー
デジタル回路の設計、検証をしていた半導体エンジニアです。論理設計やFPGA、生成AIなどの技術を自由研究のように楽しむブログです。学び直しや試行錯誤の記録もゆるく発信中。
記事URLをコピーしました