2010.12.6 追記
2005.4.15 新規

ダイレクトダウンロード

Icarus Verilog と IVIの概要

  Icarus Verilog はフリーソフトのVerilogHDLシミュレータで、IVIはIcarus Verilogに限らずGUI統合環境を目指して作られたプログラムのようです。

 インターネットを検索するといくつかのHow toページが見つかります。
木村研究室さんのiverilog
ムシン システムズさんのVerilogHDL & VHDL ハードウェア記述言語 on MacOS X 10.2
論理システムのページさんのVerilog HDL で書かれた、論理回路のシミュレーション

 DesignWave2005年5月号の記事でも紹介されてますが、論理合成やネットリストの扱いには問題があるものの、論理シミュレータとしてはかなり使えます。
 デザイン全体やデバイスフィット後の遅延検証等には向いていません。そもそもデバイス毎にネイティブプリミティブのシミュレーションモデルを用意するという面倒な問題があるので、この段階ではデバイスメーカーが提唱しているシミュレータを使うべきだと思います。

 一方、プロセッサなどの個々のモジュールに対して、設計段階におけるカット&トライや最適化後の自動検証などにはもってこいです。
 IVerilogは実行速度が速く、Z80互換IPであるfz80を波形出力付きで1,000,000ステップ(100,000クロック)のシミュレーションを30秒程度でこなします。
 これだけの速度があれば、設計段階におけるカット&トライにおいては、C言語でパソコン用ソフトをコンパイル&実行するような感覚で各モジュールの開発が行えます。

 私はfz80のデバッグ、fz80用バス互換ラッパ、MR16(自作RISC)等でiverilogを使用してきましたが、まさに快適で、GTKWaveの使い勝手がいまいちな事以外には、ストレスを感じませんでした。

 ここではWindows上における、私なりの使い方を紹介します。

IVIについて

 上記の記事は少々古いせいか、どれも「IVIは使いづらいのでIcarus Verilog +GTKWave(波形ビュア)」という組み合わせを紹介されています。
 私も以前IVIにトライしましたが、使い方がさっぱり解らなかったので、Icarus Verilog+GTKWaveの組み合わせで長らく使用してきました。
 しかし今回DesignWave2005年5月号の記事で道が見えました、といってもIVIをそのまま使うには問題があります。
 IVIのフロントエンドからiverilogを実行すると、ちょっと大きな規模のシミュレーションを行なうと、エラーが発生するのです!!

 そこでIVIには単なる波形ビュアになってもらい、シミュレーションはバッチファイルで処理することにしました。
 波形ビュアはGTKWaveでもよいのですが、IVIは画面が見やすいのと、単体インストールで事がすむ(GTKWaveは4つのアーカイブを手動展開)というお手軽さが魅力です。
 iverilogはコマンドプロンプトで実行するので、最新版V0.8のシミュレータと組み合わせて使用することもできます。

 IVIのwaveビュア自体はTcl/Tkで書かれているため、wish84等からもっと簡単に起動できるはずですが、私は力量不足の為、Tcl/Tkの勉強時間と天秤に掛けて、この方法で妥協してます。

ダイレクトダウンロード/直リンク

ivi-0.4-pre-20031121-setup.exe IVI 0.4 Win32版インストーラ 同梱されたIverilogは古いです。
fz80c_sim.lzh fz80cをIVIで「私流」にシミュレーションするためのファイル一式


インストール

 Windowsユーザーの特権?!で、ダウンロードして実行すればインストール完了です。

「私流」使い方

 まずはIVIを"c:\ivi"にインストール後、上のfz80c_sim.lzhをダウンロードして適当な所に解凍して、sim.batをダブルクリックします。
 コマンドプロンプトでシミュレーション実行後、IVIのwaveビュアが起動すれば準備OKです。

 sim.batファイル内のTOP_MODULEと、SOURCE_LIST環境変数を目的のデザインに差し替えて、シミュレーションするソースをディレクトリに放り込みます。

 wave.cfgファイル内で、波形ウィンドウの大きさ、表示する信号、カーソルなどの設定を変更します。
 記述が面倒ならwave.cfgで細かい設定をせず、波形ビュアからGUI操作も可能です。
 でも、ここを自動化しないとカット&トライの効率は上がらないヨ

 と、こんな感じです。
 少々説明が荒っぽかったですが、DOS畑で育った方ならsim.batとwave.cfgの中味を見れば大体理解できると思います。

 IVIのコマンドラインについては、詳しく把握してません。ドキュメントも不親切なので、IVIのサンプルを見て、まねて、試して理解しました。

Tips

 IVIフロントエンドからiverilogを実行すると、エラーになることがある。

  Verilator0.9.3が生成したVCDファイルで正常に波形表示できないものがあった。

 デバイスのネイティブプリミティブ(FPGA内蔵RAMや乗算機など)は極力使用をさけて、ツールが自動推論してくれるコードを標準言語で書いた方が移植性が高い
 やむおえず使用する場合、シミュレーション用ソースを用意する訳だが、デバイス依存部分だけをModule化しておくと、標準記述されたModuleと差し替えができるので楽になる。
 こうすれば、ベースソースの修正は不要で、iverilog<->他の論理合成ツールとパラレルに実行できるようになり、デバイス変更の際もデバイス依存ファイルの差し替えと移行がスムーズになる。