はじめに

この文書ではIcarus Verilogのインストール方法と,簡単な使い方について述べています.Icarus Verilogは無料のVerilogコンパイラですが,その中にシミュレータが含まれています.今回はこのシミュレータのみを使用します.参考にしたのはこちらのページです.

Icarusのダウンロード

こちらにあるサイトがIcarusの公式となります.下の図はこの原稿を書いている2023年10月時点のものです.最新版はV12ですのでこちらをダウンロードしてください.HowToInstallIcarus01

 

Icarusのインストール

ダウンロードしたファイルを実行するとインストールが開始されます.最初にユーザーアカウント制御(UAC)が下のように働きますので,「はい」を選択してください.

HowToInstallIcarus02

 

次にライセンスの許諾を求められますので,I accept the agreementを選択し,「Next」を選択してください.

HowToInstallIcarus03

 

次に情報が現れます.要するに,インストールするフォルダまでのパスにスペースが無いようにして下さい,ということのようです.念のため,スペース以外にも漢字やひらがななども避けておいた方が無難です.

HowToInstallIcarus04

 

インストール先を選びます.デフォルトのままでよいと思いますので,「Next」を押してください.

HowToInstallIcarus05

 

必要なコンポーネントを選択します.すべて選択後,「Next」を押してください.

HowToInstallIcarus06

 

スタートメニューフォルダに何と表示するかを聞かれています.デフォルトのままでよいです.「Next」を押してください.

HowToInstallIcarus07

 

パスを通しておきたいため,下図のようにAdd executable folder(s) to the user PATHにチェックを入れて「Next」を押してください.

HowToInstallIcarus08

 

 

 インストールの最終確認です.「Install」を押してください.

HowToInstallIcarus09

 

インストールが終わると下のようになります.

HowToInstallIcarus10

 

簡単な使い方

Icarus verilogはVerilogコードをコンパイルすることもできますが,ここではあくまでシミュレーションの機能のみを使うこととします.まずはVerilogコードを書きます.今回のコードは10進カウンタです.下のコードはVerilogのコードです.それに続くのがテストベンチです.

`timescale 1ns / 1ps
module DecimalCounter(iClk, oCnt);

	input iClk;
	output [3:0] oCnt;

	reg [3:0] oCnt = 4'b1001;
	
	always @(posedge iClk)
	begin
			if(oCnt == 4'b1001)
				oCnt <= 4'b0000;
			else
				oCnt <= oCnt + 4'b0001;
	end
endmodule
`timescale 1ns / 1ps
module t_DecimalCounter;
	reg iClk;
	wire [3:0] oCnt;

	DecimalCounter uut (
		.iClk(iClk), 
		.oCnt(oCnt)
	);
	integer i;

	initial begin
		$dumpfile("t_DecimalCounter.vcd");
		$dumpvars(1, t_DecimalCounter);
		iClk = 0;

		#100;
        
		for(i=0; i<30; i=i+1)
			#10 iClk = ~iClk;
	end     
endmodule

 上記のコードとテストベンチがあるディレクトリをコマンドプロンプトで移動します.下の図はその様子を表しています.

HowToInstallIcarus11

 

続いてこれらのファイルからシミュレーション結果をグラフィカルに表示することを行います.下に示す3行のコマンドを実行してください.

iverilog -o DecimalCounter t_DecimalCounter.v DecimalCounter.v
vvp DecimalCounter
gtkwave t_DecimalCounter.vcd

 

うまくいくと下の図の様なアプリケーション(GTKWave)が立ち上がります.SSTにはt_DecimalCounterとなっていますのでここをクリックしてください.

 HowToInstallIcarus12

 

次に画面左下には3つの信号が現れます.ここではreg iClkとwire oCnt[3:0]をダブルクリックしてください.そうすると画面中央付近にあるSignalsとWavesにそれらの信号が表示されます.ただし,そのままだと信号の変化がわかりづらいです.これはズームインしすぎているためです.そこで,画面左上にある表示するズームをフィットさせるZoom Fitを押します.その結果,下の図のように信号がすべてみられるようになります.

HowToInstallIcarus13

 

さらにSignalsにあるoCntのような,複数の信号から成り立つたびっと信号については,ダブルクリックするとその中を展開してくれます.下の図はその様子を示しています.

HowToInstallIcarus14

 

このようにすることでシミュレーションをすることができます.