Icarus Verilogのサポートページ

このページでは、フリーのハードウェア開発ツール

を用いて本書のテストベンチを動かす方法について説明します。 これらのツールはMacOSやUbuntuでも動作しますが、以下ではWindows10を前提に説明します。

ここでの作業を終えれば、本書13ページのような電圧波形グラフが得られます。 しかし本書11,12ページのような回路図は得られません。 またFPGA評価ボードも使用できません。 そうした本格的な開発をお望みの方は Vivadoを使った開発方法のページ をお読み下さい。

Icarus Verilogのインストール

まず http://bleyer.org/icarus/ を開いて、 iverilog-v11-20201123-x64_setup.exe をダウンロードして下さい。

01

ダウンロードしたファイルを実行して下さい。

02

以下のように I accept the agreementを選択してNextをクリックして下さい。

03

以下のようにNextをクリックして下さい。

04

以下のようにNextをクリックして下さい。

05

以下のようにNextをクリックして下さい。

06

以下のようにInstallをクリックして下さい。

07

以下のようにFinishをクリックして下さい。

08

これでCドライブ直下に Icarus Verilog と GTKWave がインストールされました。

テストベンチの実行

まず下記リンクをクリックし、本書のソースコードをダウンロードして下さい。

https://github.com/amane-uehara/cpubook-code/archive/master.zip

zipファイルを解凍すると、以下4つのフォルダが得られます。 ここでは12章 (chapter12) のコードを動かしてみます。

09

なおIcarus Verilogでは、本書の13章のコードを動かすことができません。 13章ではSystemVerilogの先進的な機能 (インターフェイスとか) を使用していますが、Icarus Verilogはこうした機能に対応していないのです。

さて chapter12 には以下の3つのフォルダが含まれています。 このうち board のフォルダを開きます。

10

以下の icarus-verilog のフォルダを開きます。

11

icarus-verilog のフォルダには test_top.sv というファイルが含まれています。 これが今回動かしたいテストベンチのソ-スコードです。 開発ツールの都合上、本書143ページに記載したtest_top.svとは少し内容が異なっています。

さて exec.bat をダブルクリックすると、テストベンチが走り、波形ビューアーが立ち上がります。

12

以下の画面 (GTKWave) が立ち上がれば成功です。

13

補足ですが、今回実行した exec.bat の内容は下記3行のコマンドです。 LinuxやMacOSで実行する場合は、適宜シェルスクリプトに置き換えて下さい。

C:\iverilog\bin\iverilog.exe -g2012 -o test_top.vvp test_top.sv ..\..\main\top.sv ..\..\main\prescaler.sv ..\..\main\mother_board.sv ..\..\main\mother_board\cpu.sv ..\..\main\mother_board\rom.sv
C:\iverilog\bin\vvp.exe -N test_top.vvp +vcd
C:\iverilog\gtkwave\bin\gtkwave.exe test_top.vcd

波形ビューアーの操作方法

ここからはCPU内部のワイヤーの電圧を見ていきます。 まず左上パネルのtest_topモジュールをクリックして下さい。

14

以下のようにmother_board配下のcpuを選択します。 すると左下パネルにcpuモジュールのワイヤーが一覧表示されるので、そこからclkワイヤーを選択します。

15

以下のようにAppendボタンをクリックすると、clkワイヤーが電圧表示対象として登録されます。

16

以下のようにSignalsのパネルにclkが追加されました。 これでclkの電圧変動が黒の波形パネルに表示されます。

17

同様の手順でいくつかワイヤーを追加しました。 ここで虫眼鏡アイコン(Zoom Fit)をクリックすると、シミュレーション時間全体の波形が表示されます。

18

以下のようにシミュレーション時間全体(0秒 - 2マイクロ秒)の波形が表示されます。 最初の時間帯に何が起きたのか見てみます。

19

以下は0秒 - 250ナノ秒までのシミュレーション結果です。 グラフに添えられている数字は、複数ビットのワイヤーの電圧値を十六進数で表示したものです。

20

なお波形の左端に、赤い線とxの文字が表示されます。 これは電圧が定まっていないことを表しています。 DFFの出力電圧は、n_resetがリセットするまで不定なのです。 詳細は本書の144ページを参照して下さい。