2011年2月12日土曜日

粗動作確認2

割込みとload, storeの動作を見た。

以下は割込み確認用のprogramで、Interrupt_Entryが割込み処理、
Loopがforegroundの処理になる。
programはStartでStackや変数用registerの初期化を行い、
foreground処理(Loop以降)に入る。
LoopではR4の値を0~10まで1づつ更新する処理を繰り返す。
割込みが入るとInterrupt_Entryが実行されるが、ここでは
Interrupt_Entryで使用するregisterやEPC(return address)を
stackに退避して、割込み処理を実行し、退避した値をregisterに戻し
割込み処理を抜ける。
zumi32の割込みはlevel割込みで、本来は割込み処理で(interrupt controller内の)
要因をclearして抜ける必要があるが、本試験ではtest benchでireqを一定期間だけ
1にしており、softwareでの解除処理を省略できるようにしている。
割込み処理でMAIL_BOXの値を+1して書き戻しているのは、単にdbusの内容を
loadして+1し書き戻しているだけでそれ自体には意味は無い。
foregroundで使われているR3を使って何か処理をする目的でいれている。



以下がsimulationの波形だ。
LoopではLoopの最後でR4の値が10になるかどうかを検査している。
割込みの復帰番地がずれたり、割込み処理でのstack処理が正しく行われていなければ
R4の値は最終的に10にならずzumi32はHALTするが、そういう事態は起きていない。
正しく動作している。



次にload, storeの8bit, 16bit, 32bit命令の動作確認を行った。
以下がprogramで、BRAMに32bit値0x76543210をstore後32bit load,
8bit load, 16bit loadで期待通りにreadできるかを見ている。
次に8bit store後8bit load, 32bit loadでそれぞれが期待通りにreadできるか、
同様に16bit storeを見ている。
(今回は結果は波形を見て確認することにして、programでの合否判定はしていない。)



以下がsimulationの結果の波形だ。
期待通りだ。

0 件のコメント:

コメントを投稿

ERROR: Failed to spawn fakeroot worker to run ...

なにかと忙しくてなかなか趣味の時間を確保できない。 ...orz  家の開発機のOSはLinux Mintなのだが、最近バージョンを22に更新したところ、myCNC用のpetalinuxをビルドできなくなってしまった。ビルドの途中で ERROR: Failed to spawn ...