FPGA開発日記

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

自作RISC-Vアウトオブオーダコアの実装 (FPU命令のサポートとXLEN/FLENの違いによる実装変更 2)

昨日の続き。結局これはメモリアドレスのPMAの設定の問題で、Spikeは0xfffffff0へのアクセスを許可しているが、私の現在のRTLは許可していない、という話だった。

18005 : RTL(9,1) Exception Cause = SRET Flush(25) PC=0000ffc00140, Inst=10200073, sret
18005 : 4360 : PC=[00000000ffc00140] (M,09,01) 10200073 sret
18049 : RTL(13,1) Exception Cause = Illegal Instruction(2) PC=0000000029e0, Inst=00301073, csrw    fcsr, zero
==========================================
18049 : Exception Happened(13,1) : Cause = Illegal Instruction(2)
==========================================
18076 : 4360 : PC=[0000000080000008] (M,01,01) 3040206f j       pc + 0x2304
GPR[00](0) <= 00000000
18103 : 4362 : PC=[000000008000230c] (M,03,01) ff010113 addi    sp, sp, -16
GPR[02](30) <= fffffff0
18117 : 4363 : PC=[0000000080002310] (M,04,01) 34900513 li      a0, 841
GPR[10](8) <= 00000349
18117 : RTL(4,2) Exception Cause = Store Access Fault(7) PC=000080002314, Inst=00112623, sw      ra, 12(sp)
==========================================
18117 : Exception Happened(4,2) : Cause = Store Access Fault(7)
==========================================
18131 : 4364 : PC=[0000000080000008] (M,07,01) 3040206f j       pc + 0x2304
MW4(0xfffffffffffffffc)=>00000000

現在のCPUのPMA(Protected Memory Region)は、JSONファイルで管理している。

// 中略
        "comment":"Serial device"
    },
    {
        "base": "0x8000_0000",
        "size": "0x1000_0000",
        "attr": {"R": 1, "W": 1, "X": 1, "C": 1, "A": 1},
        "comment":"Main Memory"
    }
]

メモリ領域の定義が明らかに足りていなかった。増強する。

diff --git a/src/pma_memory_map.json b/src/pma_memory_map.json
index 38aa7fa..158a818 100644
--- a/src/pma_memory_map.json
+++ b/src/pma_memory_map.json
@@ -61,7 +61,7 @@
     },
     {
                "base": "0x8000_0000",
-        "size": "0x1000_0000",
+        "size": "0x8000_0000",
         "attr": {"R": 1, "W": 1, "X": 1, "C": 1, "A": 1},
         "comment":"Main Memory"
     }

これで、IMCにおける基本的なテストケースは動くようになっている。リグレッションを流して確認していく。