FPGA開発日記

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

自作CPUの割込みコントローラとISS一致検証タイミングの検討 (7. 割込み挿入のデバッグ)

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

もう少し実装を修正して、複数回の割込み要求の動作に対応した。

とりあえずこれで動作している。次はSoftware Interruptの対応かな?

@@ -835,9 +835,9 @@ always_comb begin
       // CSRRead  (SYSREG_ADDR_STVEC,to &tvec);
       w_priv_next = riscv_common_pkg::PRIV_S;

-      w_mstatus_next[`SSTATUS_SIE] = r_mstatus[`SSTATUS_SPIE];
-      w_mstatus_next[`SSTATUS_SPP] = r_priv;
-      w_mstatus_next[`SSTATUS_SIE] = 'h0;
+      w_mstatus_next[`SSTATUS_SPIE] = r_mstatus[`SSTATUS_SIE];
+      w_mstatus_next[`SSTATUS_SPP]  = r_priv;
+      w_mstatus_next[`SSTATUS_SIE]  = 'h0;
     end else begin // if (r_priv <= riscv_common_pkg::PRIV_S & ((r_mideleg & w_m_int_en) != 'h0))

       w_mepc_next = {{(riscv_pkg::XLEN_W-riscv_pkg::VADDR_W){i_commit.epc[riscv_pkg::VADDR_W-1]}},
@@ -848,9 +848,9 @@ always_comb begin
       w_mtval_next = 'h0;

       // CSRRead  (SYSREG_ADDR_MTVEC, &tvec);
-      w_mstatus_next[`MSTATUS_MIE] = r_mstatus[`MSTATUS_MPIE];
-      w_mstatus_next[`MSTATUS_MPP] = r_priv;
-      w_mstatus_next[`MSTATUS_MIE] = 'h0;
+      w_mstatus_next[`MSTATUS_MPIE] = r_mstatus[`MSTATUS_MIE];
+      w_mstatus_next[`MSTATUS_MPP]  = r_priv;
+      w_mstatus_next[`MSTATUS_MIE]  = 'h0;

     end // else: !if(r_priv <= riscv_common_pkg::PRIV_S & ((r_mideleg & w_m_int_en) 1= 'h0))