hungalab / cube_sim

Cube System Simulator based on VMIPS

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

割込みのエミュレーション

tkojima0107 opened this issue · comments

MIPS R3000には8つの割込みを利用できる。うち2つはSW割込み、残り6つはHW割込み。

SW割込みに関してはCP0のstatusレジスタにSWが1を書き込むことで発生する(CPU側は毎サイクルビットが立っていないかをチェックする)。

一方でHW割込みにはGEYSERでは

  • HW3 DMAC
  • HW5 Router
    に対応する。

vmipsでのHW割り込みの実装は

vmips.ccで
intc->connectLine(IRQ2, デバイス);
としてHWを接続
IRQ2~IRQ7はdeviceint.hで定義されている

割り込みをかけるHWはDeviceIntを継承する必要あり

多分devideintのassertIntを呼ぶと割り込みがかかるんだと思う

Routerの割り込みを実装していて気が付いたが、
assertIntをかけると割り込み信号がHighになった状態を作るが、終わったらdeassertIntで下げる状態も作らないと割り込みから復帰しても即また割り込みがかかってしまう。
それから、DeviceIntを継承したクラスは純粋仮想関数のdescriptor_str()を実装する必要がある。
これは割り込みモジュール名を返すだけでよい。

一つ紛らわしかったのが、
SW0 == IRQ0
..
HW0 == IRQ2
..
HW5 == IRQ7
となっていたのに気がつかず, ルーターようにIRQ5をつなげてしまったいた。
でも、無事DMAC、router共に割り込みをかけることができたため閉じます