メモリ初期化ファイルの作成


以下にプログラムの例を示します。再帰を用いた1からnまでの加算を行います ("testadd.asm")。

テストプログラム "testadd.asm"

このプログラムを、kiteasm を用いてリスティングファイルを作成します。


$ ~kuga/bin/kiteasm -l testadd

これにより、以下のリスティングファイルが生成されます("testadd.lst")。
000001			;
000002			;	再帰を使用した加算プログラム
000003			;
000004			;lab.	mnemonic		comment	
000005				.text
000006 0000 C108	_MAIN:	ld	#0x8
000007 0001 BC00		swp
000008 0002 9100		or	#0x00		; sp = 0x800
000009 0003 F004		mv	sp, acc
000010 0004 C800		in	0		; input n
000011 0005 D400		push
000012 0006 200A		call	radd
000013 0007 D000		pop
000014 0008 CC00		out			; result
000015 0009 F800		halt
000016			;
000017 000A F009	radd:	mv	ixr, sp
000018 000B C201		ld	ixr, 1
000019 000C D400		push
000020 000D 9100		or	#0
000021 000E 5015		jpz	radd0
000022 000F 8C00		dec	acc
000023 0010 D400		push
000024 0011 200A		call	radd
000025 0012 D000		pop
000026 0013 F009		mv	ixr, sp
000027 0014 8200		add	ixr, 0
000028 0015 F009	radd0:	mv	ixr, sp
000029 0016 C602		st	ixr, 2
000030 0017 D000		pop			; dummy pop
000031 0018 E000		ret
000032			
000033				.data	0x100
000034 0100 0000	ZERO:	.word	  0
000035 0101 0064	D100:	.word	100
000036			
000037				.const	0xfff
000038 0FFF 0000		.word	_MAIN

このリスティングファイルをを、lst2ram というプログラムを用いて、 Verilog シミュレータに使える形式のファイルフォーマットに変換します。
$ ~kuga/bin/lst2ram testadd.lst

これにより、"testadd.ram" という以下のようなファイルが出来上がります。 これは、kite プロセッサの 4096 ワードのメモリを初期化するために使用す るものです。
@0000 C108 // 000006 0000 C108	_MAIN:	ld	#0x8
@0001 BC00 // 000007 0001 BC00		swp
@0002 9100 // 000008 0002 9100		or	#0x00		; sp = 0x800
@0003 F004 // 000009 0003 F004		mv	sp, acc
@0004 C800 // 000010 0004 C800		in	0		; input n

	中略

@0101 0064 // 000035 0101 0064	D100:	.word	100
@0fff 0000 // 000038 0FFF 0000		.word	_MAIN

このファイルを、kite_test.v 内の $readmemh(); において、
$readmemh("testadd.ram", MEM);
のように記述します。

また、IN 命令を実行した際に入力する値は、


      io_DATA = 16'h000a;				// Input Value

この行で指定します。"000a" は10進数の 10 を意味します。

シミュレーションを行う際にはこれまでに書いた Verilog-HDL 記述で include で参照されているもの以外のファイルをすべて書く必要があります。 例)

$ verilog kite_test.v kite_top.v kite.v alu.v acc.v ir.v r12.v pc.v fr.v ar.v dec_seq.v
または、入力する引数部分を例えば "kite.vv" のようにファイルにセーブしておけば、
% verilog -f kite.vv
で実行することができます。

このファイルによるシミュレーションでは、HALT 命令を実行したことにより シミュレーションを停止します。したがって、HALT 命令を実行しないデバッ ク中のKITEプロセッサではシミュレーションが停止しません。その場合は、^ Cキー (コントロールC) を押してシミュレーションを止めたのち、^Dキー でシミュレータから抜け出て下さい。

以上の方法によりシミュレーションを行うと以下のような結果となります。

波形出力画面は以下のようになります。赤色のカーソル地点は実行開始か ら 1.106 ミリ秒後(1MHzのクロックを使用しているので1,106クロック後)にHALT 信号が "L" から "H"に変化しています。これにより、HALT 命令によりシミュ レーションが停止したことを示します。また、ACC の値が "0037" を示し ていますが、これは 1〜10までの加算結果である 55 の16進数を意味 します。このように、設計したプロセッサがこのプログラムを正確に実行した ことを示します。
(この信号波形は最上位階層(kite_top)の信号ではなく、第2階層(kite)の信号を表示していま す。)

simvision_testadd.gif

"testadd.asm" が動いたからといって、KITE-1 プロセッサ が完成したわけではありません。 なぜなら、このプログラムは KITE-1 プロセッサの命令のほんの一部しか使用していないためです。プロセッサの動作 が正しいかどうか 次のプログラム (perfect.asm) を実行させてみましょう。このプログラムはKITE-1マイクロ プロセッサの全ての命令を使用し、命令の動作が正しいかをチェックできるよう 考慮したテストプログラムとなっています。
以下にperfect.asmの実行例を示します。5,739,000ns時間付近のACCの値が "900D" を示しており。ほぼ正しく動作していることが確認できます。

simvision_perfect.gif

回路にバグがある場合、どの命令正しく動作し、どの命令が正しく動作しない かを波形表示のみで捜し出すのは至難の技です。そこで次に、期待値比較によるシミュレーションの方法を紹介し ます。


| CAD Home |

My mail address is kuga@cs.kumamoto-u.ac.jp .
Last modified on