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 件のコメント:

コメントを投稿

自作CPUで遊ぶ 25

まだ制御ソフトが完成していないので今まではスピンドルを移動するために一々簡単なプログラムを書いて移動させていたのだが、非常に面倒なのでCNCペンダント的なものを作ることにした。 右側の縦に2つ並んでいるスイッチ...