まず現実的な話
Verilogを学ぶために何かをインストールする必要はありません。このドキュメントのすべてのインタラクティブエディタは、サンドボックス内でIcarus Verilogを通じて本物のVerilogを実行しており、波形ビューアも含まれます。言語を学びに来ているなら、このページをスキップして、長めのプロジェクトをローカルで作業したくなったときに戻ってきてください。
それでもローカルインストールがしたい?では続きをどうぞ。
「Verilogをインストールする」が実際に意味するもの
Verilogは言語であり、プログラムではありません。実行するには以下が必要です:
- シミュレータ -
.vファイルをコンパイルして実行するツール。多くの学習者には Icarus Verilog が該当し、iverilogコンパイラとvvpランタイムを提供します。 - 波形ビューア - 通常は GTKWave で、testbenchが生成する
.vcdファイルを読み込みます。 - テキストエディタ - VerilogエクステンションのあるVS Codeが一般的ですが、何でも構いません。
ベンダーのツールチェーン(Xilinx Vivado、Intel Quartus、Synopsys VCS、Cadence Xcelium)はFPGAプログラミングやASIC作業向けに存在します。サイズが大きく、ライセンスが必要なことが多く、学習には過剰です。Icarusで十分です。
macOSへのインストール
最速の方法はHomebrewです:
brew install icarus-verilog gtkwave
これでコンパイラと波形ビューアの両方がインストールされます。確認:
iverilog -V
gtkwave --version
両方のバージョン番号が表示されるはずです。iverilogは自動的にPATHに追加されます。GTKWaveは/Applications配下にappバンドルを置き、ターミナルから起動できるgtkwaveコマンドラインも 両方 インストールします。
Homebrewが入っていない場合は、まずbrew.shの手順に従ってください(curl一発です)、それから戻ってきてください。
Linuxへのインストール
Debian系のディストリビューション(Ubuntu、Mint、Pop!_OS):
sudo apt update
sudo apt install iverilog gtkwave
Fedora/RHEL系:
sudo dnf install iverilog gtkwave
Arch:
sudo pacman -S iverilog gtkwave
同じ方法で確認:
iverilog -V
gtkwave --version
パッケージ版は上流より1リリース遅れることがあります。学習用途ならそれで問題ありません。新しいリリースが必要なら、ソースからビルドします。プロジェクトのGitHubリポジトリに手順があり、./configure && make && sudo make installで済みます。
Windowsへのインストール
最も簡単な方法は、iverilogコミュニティが bleyer.org で維持しているプリビルドのインストーラです(「iverilog Windows」で検索)。Icarus Verilog、GTKWave、そしてIcarusが内部で必要とするGCCツールチェーンがバンドルされています。
- 最新のインストーラ(通常
iverilog-vXX-setup.exe)をダウンロード。 - 実行する。理由がなければデフォルト設定を受け入れる。
- インストーラが尋ねたら、「Add to PATH」のチェックを残す。
- 新しいPowerShellまたはコマンドプロンプトを開いて確認:
iverilog -V
gtkwave --version
PATHへの追加を忘れた場合、バイナリはC:\iverilog\bin\iverilog.exeのような場所にあります。システムのプロパティからユーザーPATHにC:\iverilog\binを追加するか、インストーラを再実行してチェックボックスを入れてください。
WSL2もWindowsで良い選択肢です。Microsoft StoreからUbuntuをインストールし、その中でLinuxの手順に従えば、より馴染みのあるUnix風のワークフローになります。
最初のファイルをコンパイル・実行する
インストール後のワークフローはこんな感じです。hello.vとしてファイルを保存:
module hello;
initial begin
$display("hello from verilog");
$finish;
end
endmodule
シミュレーションバイナリにコンパイル:
iverilog -o hello hello.v
iverilogがコンパイラ。-o helloは出力名。hello.vがソースです。
シミュレーションを実行:
vvp hello
次のように表示されるはずです:
hello from verilog
これがローカルワークフローのすべてです。ここから、複数ファイルに設計を分割(iverilog -o sim *.v)、SystemVerilog-2012機能を有効にする-g2012フラグの使用、出力を独自のスクリプトにパイプ、などができます。
波形の生成と表示
testbenchに$dumpfileと$dumpvarsを追加し、実行し、結果のVCDをGTKWaveで開きます:
initial begin
$dumpfile("dump.vcd");
$dumpvars(0, test);
// ...
end
vvp simが終了すると、ソースの隣にdump.vcdができます。開きます:
gtkwave dump.vcd
GTKWaveはファイルを読み込み、左側にsignalツリーを表示します。気になるsignalを右の波形エリアにドラッグします。詳細はDumpfileと VCDで扱います。
よくあるエラー
iverilog: command not found - バイナリがPATHに入っていません。WindowsではインストーラがPATH更新を有効にして実行されなかった場合に起こります。macOS/LinuxではHomebrew/aptが完了していないか、PATHを再読み込みしていないシェル内にいる場合です(ターミナルを閉じて開き直してください)。
正しく見える行でsyntax error - プレーンVerilogモードでSystemVerilog機能を使っていないか確認してください。-g2012をiverilogに渡してSystemVerilog-2012を有効にします:
iverilog -g2012 -o sim main.v
コンパイル時にUnknown module - moduleのソースファイルがiverilogに渡されていないか、インスタンス化時のmodule名がmodule宣言と完全に一致していません。Verilogは大文字小文字を区別します。
GTKWaveで波形が空 - testbenchが$dumpfileと$dumpvarsを呼んでいないか、シミュレーションがsignalが変化する前に$finishに達しています。少なくとも1つの$dumpvars(0, top)を追加し、遷移が起こるまでシミュレーションを十分長く実行してください。
次に読むもの
ローカルにインストールしたかブラウザを使い続けるかに関わらず、次のドキュメントでは最初の完全なmoduleをゼロから書きます。module宣言、ポート、ちょっとした組み合わせ論理、そしてその周りのtestbenchです。
よくある質問
Verilogをインストールするには?
「Verilog」という単一のプログラムはありません。Verilogは言語であり、インストールするのはコンパイラ/シミュレータです。学習目的では、波形表示の GTKWave とペアにする Icarus Verilog(iverilogとvvpコマンド)が標準的な選択肢です。macOSではbrew install icarus-verilog gtkwave、Debian/Ubuntuではapt install iverilog gtkwave、Windowsではbleyer.orgからプリビルドのインストーラをダウンロードします。
Verilogを学ぶのに何かインストールする必要はありますか?
いいえ。このページのエディタはクラウド上でiverilogとvvpを実行し、VCD波形をインラインで表示します。これらのチュートリアルのすべてを何もインストールせずに完了できます。ローカルにインストールするのは、ファイルを保存したり、プロジェクトをバージョン管理したり、ブラウザエディタには大きすぎる設計に取り組みたくなったときに役立ちます。
iverilogとvvpの違いは?
iverilogはコンパイラで、.vソースファイルをシミュレーションバイナリに変換します。vvpはそのバイナリを実行するランタイムです。典型的なコマンド列はiverilog -o sim main.v test.vに続けてvvp simです。ほとんどのワークフロースクリプトは両方をラップしています。
Icarus Verilogは無料ですか?
はい。Icarus VerilogはGPL/LGPLのオープンソースです。ライセンスサーバーも試用期間もなく、学習にも商用利用にも使えます。商用の代替品(ModelSim、VCS、Xcelium)は有料ですが、このドキュメントで扱う範囲ならIcarusで十分です。
iverilogのバージョンを確認するには?
ターミナルでiverilog -Vを実行します。Icarus Verilog version 12.0のようなバージョン番号が表示されるはずです。command not foundが出る場合、バイナリがPATHに入っていません。インストーラを再実行するか、binディレクトリをシェル設定に追加してください。