FPGA開発日記

カテゴリ別記事インデックス https://msyksphinz.github.io/github_pages , English Version https://fpgadevdiary.hatenadiary.com/

自作CPUの割込みコントローラとISS一致検証タイミングの検討 (4. 割込み挿入方針の変更)

自作CPUに対して割込みコントローラの実装をしているが、久しぶりに時間ができたのでこれの修正を行っている。

結局割込み挿入の方針は以下に変えた。

  • あるいは、割込み要求信号が一度フェッチモジュールでAcceptされると、それ以降は割込み挿入リクエストを取り下げてしまったほうがいいかもしれない。そっちのほうが楽そうな気がする。

こうしてフェッチモジュール内で割り込み要求信号をいったん受け入れてしまう。CSRモジュールは割込み要求信号はトリガーの形式で上げてしまう。 こうすると、MIE/MIPの存在価値がなくなってしまう気もするが、たぶん大丈夫。

これにより、一応割込みがかかって、Spikeもそれに追従してくれた。

MR4(0x0000000080002f30)=>0000000000000000
val1 = 8000000a00006000, val2 = 8000000a00006000
val1 = 0, val2 = 0
GPR[15](17) <= 0000000000000000
209127 : 162778 : PC=[0000000080002b9c] (M,03,02) fef77fe3 bgeu    a4, a5, pc - 2
val1 = 8000000a00006000, val2 = 8000000a00006000
209129 : 162779 : PC=[0000000080002b9a] (M,04,01) 0000429c c.lw    a5, 0(a3)
MR4(0x0000000080002f30)=>0000000000000000
val1 = 8000000a00006000, val2 = 8000000a00006000
val1 = 0, val2 = 0
GPR[15](18) <= 0000000000000000
209129 : 162780 : PC=[0000000080002b9c] (M,04,02) fef77fe3 bgeu    a4, a5, pc - 2
val1 = 8000000a00006000, val2 = 8000000a00006000
/// ----------------------------------
/// ここで割り込みがかかった
/// ----------------------------------
209136 : 162780 : PC=[000000008000231c] (M,05,01) d5bff06f j       pc - 0x2a6
val1 = 8000000a00006000, val2 = 8000000a00006000
val1 = 0, val2 = 0
GPR[00](0) <= 0000000000000000
209167 : 162782 : PC=[0000000080002076] (M,09,01) 00007119 c.addi16sp sp, -128
val1 = 8000000a00006000, val2 = 8000000a00006000
val1 = 80022f80, val2 = 80022f80
GPR[02](1) <= 0000000080022f80
209167 : 162783 : PC=[0000000080002078] (M,09,02) 0000fc86 c.sdsp  ra, 120(sp)
MW8(0x0000000080022ff8)=>0000000080002b90

問題はそのあとだ。どうも差分が発生しているらしい。割込み要因レジスタだな。

MW8(0x0000000080022f88)=>0000000000000000
val1 = 8000000a00006000, val2 = 8000000a00006000
209206 : 162798 : PC=[0000000080002096] (M,08,01) 0000e07e c.sdsp  t6, 0(sp)
MW8(0x0000000080022f80)=>0000000000000000
val1 = 8000000a00006000, val2 = 8000000a00006000
836830 : L1D Load-In     : 80022f90(00249) : 00000000_80002c08_00000000_00000000
836830 : Load ISS Check  : 80022f90        : 00000000_80002c08_00000000_00000000
836834 : L1D Stq Store  : 80022f90(00249) : 00000000_80002c08_00000000_00000000
836834 : STQ  ISS Check : 80022f90        : 00000000_80002c08_00000000_00000000
209212 : RTL(9,1) Exception Cause = CSR Update Flush(27) PC=000080002098, Inst=342025f3, csrr    a1, mcause
209212 : 162799 : PC=[0000000080002098] (M,09,01) 342025f3 csrr    a1, mcause
val1 = 8000000000000007, val2 = 8000000000000000
==========================================
Wrong GPR[11](4): RTL = 8000000000000000, ISS = 8000000000000007
==========================================
===============================
SIMULATION FINISH : FAIL (CODE=100)
===============================

修正していく。