論理回路を設計し、実機で動作確認をする前に、必ずシミュレーションを行い動作、機能、振る舞い、タイミング等の検証を行う。
不用意な想定外の信号を出したり、組み合わせ禁止の信号を出力することで、FPGAチップの周辺回路を壊すことを避けるためである。
以下にシミュレーションの手順について述べる。
- コンパイルを実行
この回路図にシンタックスエラーなどがないことを確認。正常にコンパイルができていないとシミュレーションはできないことに注意。例では、下記の図の回路(組合せ回路)について説明をする。この回路は、入力A,Bを持ち、出力X,Yを持つ、NAND5つで構成された組合せ回路である。シミュレーションを用いて、入力A,Bと出力X,Yの関係を確認する。
- 設定の確認
New Project Wizard4/5の設定でSimulationの指定が、ModelSim-Altera, Verilog HDL(またはVHDL)に設定されていること。起動後は「Assignment」→「Settings」→「EDA Tool Setting」で確認・設定・変更することができる。 - シミュレーション波形ファイルの作成
「File」→「New」すると新規作成ファイル一覧のウィンドウが表示される。波形入力するファイルは「Verification/Debugging Files」→「University Program VWF」を選択すると「Simulation Waveform Editor」が開く。新規ファイル名は「Waveform?.vwf」(?のところは数字)になることに注意。

- 観測信号の追加
「Name」欄に観測する信号を与えてシミュレーションを行う。「Name」欄で右クリックするとポップアップメニューが出てきてその中から、「Insert node or bus…」を選択すると「Insert Node or Bus」ダイアログが表示される。そこで右側の「Node Finder..」ボタンを押す。
- 観測信号の選択
「Node Finder」ウィンドウが表示されるので「List」ボタンを押す。
すると、「Pins:all」の指定により、シミュレーション回路の入出力ピンに割り当てられている信号名が、左側ウィンドウに表示される。今回は全て観測するので、「>>」ボタンで全てを選択する。(個別に選択する場合は、信号を選択して「>」ボタンで個別に選択できる)

- 信号の選択挿入
「OK」ボタンを押すと「Insert Node or Bus」ダイアログに戻り、NameやTypeのところの表示が変わる。
さらに「OK」ボタンを押すと、Simulation Waveform Editorに戻り、A,B,X,Yの信号が追加される。

- 信号の編集
右側の信号部分を左ドラッグで領域選択肢、0や1の信号(0,1アンコン)を選択すると信号の0/1を設定することができる。信号の継続時間は適当。今回は組み合わせ回路であるため、入力信号の全ての組み合わせが実現できるよう、(A,B)={00,01,11,10}の組み合わせとして実現できるよう、信号を設定した。新規作成のファイル名のままであるなら「Save as..」より名前を付けて保存。プロジェクト名がデフォルトで選択されることに注意。
- シミュレーションの設定
「Simulation」→「Simulation Settings」を開き、表示されたウィンドウの中の「ModelSim Script (Functional Simulation):」の枠の中のスクリプトで、以下の部分を探して修正する
「vsim -novopt -c -t …」となっている部分の「-novopt」を削除する(毎回行う必要がある)


- シミュレーションの実行
波形の入力が完了し、ファイル名を付けて保存したら「Simulation」→「Run Functional Simulation」を選択する。Functional Simurationはゲート遅延を考慮せずにシミュレーションを行うもので、ゲート遅延が考慮されない分、機能的な振る舞いを中心に検証するためのシミュレーションであり、時間的には粗いシミュレーションともいえる。下図のようなSimulation Flow Progressウィンドウが表示されて、シミュレーションの進捗がモニタできる。
- シミュレーション結果の吟味
シミュレーションが完了すると、下図の結果を表示するRead-Onlyのウィンドウが表示される。ここには、シミュレーション結果が表示される。この動作結果をみてX,Yの出力が想定通りのものが得られているかどうか吟味する。間違っていれば、回路図から修正してシミュレーションをやり直すことになる。
