オリジナル命令のシミュレーションによる動作確認




追加したNAND命令の動作をシミュレーションにより確認します。
追加したNAND命令を実行させますが、
KITEアセンブラにはNAND命令が定義されていないため、
NAND命令の命令コードをそのままでは出力できません。

KITEアセンブラの .word 擬似命令を用いて直接NAND命令の命令コードを出力さ せます。

NAND命令演算とアドレッシングモードが正しく動作しているかどうかが確認でき るような命令列を作成します。
これを nandtest.asm として作成します。
	ld	#0xaa		; acc = 0xaa55
	swp
	or	#0x55
	.word	0xb955		; nand #0x55
	push
	ld	PTR
	mv	ixr, acc
	pop
	.word	0xba00		; nand ixr, 0
	swp
	.word	0xba00		; nand ixr, 0
	.word	0xba00		; nand ixr, 0
	halt


PTR:	.word	PTR1
PTR1:	.word	0x55aa	
	
	.data	0xfff
	.word	0		;  start vector

kiteasm および lst2ram を用いて、シミュレーションにかけるためのメモリイ メージ(nandtest.ram)を作成します。
kite_test.v 内のメモリイメージ初期化部分を nandtest.ram に変更します。
//
// Load instructions on Memory
//

reg [15:0] MEM[0:4095];	// Memory Image

initial
begin
  $readmemh("nandtest.ram", MEM); // 変更
end

verilog コマンドによりシミュレーションを行うと以下のような結果が得られま す。

まず、ACC=0xAA55 にした後、nand #0x55 命令で、0xAA55 と 0xFF55 の NAND を演算します。答えは 0xAA55 の反転である 0x55AA となり正しいことがわかります。

次にインデクス修飾アドレッシングが正しく動作するか確認するために、IXRレ ジスタをPTR1に設定し、0x55AAと演算できるよう準備しておきます。

ACC=0x55AA と nand ixr, 0 命令で、0x55AA と 0x55AA の NAND を演算します。 答えは 0x55AA の反転である 0xAA55 となり正しいことがわかります。

次に、ACC=0x55AA と nand ixr, 0 命令で、0x55AA と 0x55AA の NAND を演算 します。答えは 0x55AA の反転である 0xAA55 となり正しいことがわかります。

最後に、ACC=0xAA55 と nand ixr, 0 命令で、0xAA55 と 0x55AA の NAND を演算 します。答えは 0x0000 の反転である 0xFFFF となり正しいことがわかります。
  ---- acc=0000 ixr=000 sp=000 out=0000 pc=000     c1aa
  ---- acc=00aa ixr=000 sp=000 out=0000 pc=001     bc00
  M--- acc=aa00 ixr=000 sp=000 out=0000 pc=002     9155
  M--- acc=aa55 ixr=000 sp=000 out=0000 pc=003     b955
  ---- acc=55aa ixr=000 sp=000 out=0000 pc=004     d400 ← nand #0x55 実行後
  ---- acc=55aa ixr=000 sp=fff out=0000 pc=005     000d
  ---- acc=000e ixr=000 sp=fff out=0000 pc=006     f008
  ---- acc=000e ixr=00e sp=fff out=0000 pc=007     d000
  ---- acc=55aa ixr=00e sp=000 out=0000 pc=008     ba00
  M--- acc=aa55 ixr=00e sp=000 out=0000 pc=009     bc00 ← nand ixr,0 実行後
  ---- acc=55aa ixr=00e sp=000 out=0000 pc=00a     ba00
  M--- acc=aa55 ixr=00e sp=000 out=0000 pc=00b     ba00 ← nand ixr,0 実行後
  M--- acc=ffff ixr=00e sp=000 out=0000 pc=00c     f800 ← nand ixr,0 実行後
  M--- acc=ffff ixr=00e sp=000 out=0000 pc=00d     000e ← halt 実行後のレジスタ内容(000eは無視してよい)

命令実行の波形は以下のようになります。
TimeA および Baseline カーソルのところで、0xBA00 の NAND演算が正しく動作しているこ とが分かります。


いかがでしょうか。

新たに追加する命令が、既存の命令とほぼ同様な処理で実現できるのであれば、 容易に新たな命令を追加することができます。

HDLを使用していますので、もっと複雑な命令でも容易に追加できます。 例えば、これまでの演習では、

などの演算命令を追加していました。





以上を参考にして、あなたもオリジナルプロセッサを設計してみましょう。
※ ちなみに、NOR命令のように単に演算子を書き換えるだけで実現できる簡単な命令は、
※ NAND命令の追加後のソースを2文字書き換えるだけで実現できます。
※ このような命令は、できれば追加命令として選択しないでください。
また、オリジナル命令の追加により、プログラミング効 率やプログラムの処理効率がどの程度向上するか考察してください。


| Home |