Icarus Verilog
Icarus Verilog は Verilog の文法を解釈しコンパイル、シミュレーションおよび合成するフリーなソフトウェアです。Icarus Verilog はIEEE標準のIEEE Std 1364-2005での設計記述の互換を目標としています。
Icarus Verilogの2012年2月11日現在の最新バージョンは0.9.5(2011年11月1日リリース)です。このプロジェクトは比較的頻繁にバージョンアップされていおり、またさまざまなプラグインもサードパーティーで開発が進められています。
Icarus Verilog のインストール
ソースからインストール
ソースからインストールするには、ソースパッケージ verilog-0.9.5.tar.gz を Icarus Verilog ホームページのFTP ディレクトリからダウンロードし、適当なディレクトリで展開します。以下の例ではダウンロードディレクトリにあるファイルをホームディレクトリに展開しています。
$ tar xvfz ./ダウンロード/verilog-0.9.5.tar.gz
ソースパッケージを展すると verilog-version というディレクトリ(今回の場合は verilog-0.9.5)が作成されていますのでそのディレクトリに移動します。
$ cd verilog-0.9.5/
以下のコマンドを実行しコンパイル、インストールします(コンパイルには gperf、flex、bison、g++ がインストールされている必要があります)。
$ ./configure $ make $ sudo make install [sudo] password for hoge:
デフォルトのインストール先は "/usr/local/bin" ディレクトリとなっていますが、configure コマンドで prefix を指定することでインストール先を変更することができます。以下の例では ホームディレクトリ hoge の verilog ディレクトリに変更する場合の指定の仕方です。
$ ./configure --prefix=/home/hoge/verilog
バイナリーパッケージからインストール
Red Hat系のディストリビューションでは yum コマンドでインストールします。Feodra 16 ではiverilog パッケージを指定します。
$ su パスワード: # yum -y install iverilog
Debian系のディストリビューションでは apt-get コマンドでインストールします。以下 Ubuntu 11.10 での実行例です。
$ sudo apt-get update $ sudo apt-get install verilog
Verilog ソースのコンパイル、シミュレーション
Verilogソースのコンパイル はコマンドラインから "iverilog -o <出力ファイル名> <Verilog ファイル名 1> <Verilog ファイル名 2>…<Verilog ファイル名 n>" と入力することで行います。オプションの "-o <出力ファイル名>" を指定しない場合は a.out ファイルが出力されます。
シミュレーションは "vvp <出力ファイル名>" で実行することができます。
Verilog mode for Emacs の説明で作成したサンプルソースを使ってコンパイル、シミュレーションをします。サンプルソースは tb.v、top.v、decoder.v および state_machine.v から構成されます。尚、これらのコードはあくまで説明用に書いたもので回路の動作は意味の無いものであり、検証もされていません。
$ iverilog -o hoge tb.v top.v state_machine.v decoder.v $ vvp hoge VCD info: dumpfile test.vcd opened for output. *** Write Transaction Start *** *** Write Transaction End *** *** Read Transaction Start *** *** Read Transaction End *** *** Write Transaction Start *** Timeout Error Simulation Stopped!
シミュレーション結果は、視覚的に(タイミングチャートとして)も確認したいものです。 Icarus Verilogではそのために VCD ファイルを出力させることができます。サンプルコードのテストベンチモジュール tb.v で
initial begin $dumpfile("test.vcd"); $dumpvars(0,test.TOP); end
の部分でファイル名を test.vcd とし、また TOP モジュール以下の全ての信号を観測するように指定しています。この test.vcd を GTKWave 等の波形表示ツールに読み込ませて視覚的に確認することができます。