FPGA開発日記

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

自作CPUにベクトル命令を追加する実装検討 (35. vadd.viの確認)

順序違反と、LMUL>1の対応を実装して、どうにか最初のテストパタンvadd.viのPASSに成功した。

// vadd.vi-0
MW4(0x000000008003c000)<=0000000000000001
322930 : 41349 : PC=[000000008000003a] (M,11,01) 0003cf17 auipc   t5, 0x3c
GPR[30](26) <= 000000008003c03a
322942 : 41350 : PC=[000000008000003e] (M,12,01) fc0f2523 sw      zero, -54(t5)
MW4(0x000000008003c004)<=0000000000000000
322942 : 41351 : PC=[0000000080000042] (M,12,02) 0000bfc5 c.j     pc - 16
GPR[00](0) <= 0000000000000000
1291786 : L1D Load-In     : 8003c000(00000) : 00000000_00000000_00000000_00000001
===============================
SIMULATION FINISH : PASS
RUNNING TIME : 1291786
===============================

とりあえず最初のテストでは、LMUL=2までのテストをしているっぽいな。 それ以降のテストは、vadd.vi-1およびvadd.vi-2を走らせてみなければならない。

vadd.vi-1は、ロードとの順序違反検出に失敗しているっぽい。

// vadd.vi-1
GPR[07](36) <= 0000000080001918
253397 : 1272 : PC=[0000000080001902] (U,05,02) 0003b383 ld      t2, 0(t2)
MR8(0x0000000080001918)=>00ff7fff000f0200
GPR[07](35) <= 00ff7fff000f0200
253398 : 1273 : PC=[0000000080001906] (U,06,01) 00728d63 beq     t0, t2, pc + 26
253423 : 1274 : PC=[0000000080001920] (U,12,01) 07a00193 li      gp, 122
GPR[03](30) <= 000000000000007a
253423 : 1275 : PC=[0000000080001924] (U,12,02) 00053283 ld      t0, 0(a0)
MR8(0x00000000800df040)=>92d2901b2c2227dc
==========================================
Wrong GPR[05](62): RTL = 0200ff7fff000f02, ISS = 92d2901b2c2227dc
==========================================
===============================
SIMULATION FINISH : FAIL (CODE=100)
RUNNING TIME : 253423
===============================

vadd.vi-2は、デッドロックが発生している...

// vadd.vi-2
382078 : Load ISS Check  : 2ba0        : 00000000_00000000_00000000_00000000
382266 : L1D Load-In     : 2bb0(00699) : 00000000_00000000_00000000_00000000
382266 : Load ISS Check  : 2bb0        : 00000000_00000000_00000000_00000000
Spike Result : 183 : PC=[0000000000002112] (M) 0000058e c.slli  a1, 3
Spike Result : 184 : PC=[0000000000002114] (M) 02050007 vle8.v  v0, (a0)
Spike Result : 185 : PC=[0000000000002118] (M) 0000952e c.add   a0, a1
Spike Result : 186 : PC=[000000000000211a] (M) 02050407 vle8.v  v8, (a0)
Spike Result : 187 : PC=[000000000000211e] (M) 0000952e c.add   a0, a1
Spike Result : 188 : PC=[0000000000002120] (M) 02050807 vle8.v  v16, (a0)
Spike Result : 189 : PC=[0000000000002124] (M) 0000952e c.add   a0, a1
Spike Result : 190 : PC=[0000000000002126] (M) 02050c07 vle8.v  v24, (a0)
Spike Result : 191 : PC=[000000000000212a] (M) 0000952e c.add   a0, a1
Spike Result : 192 : PC=[000000000000212c] (M) 0000a241 c.j     pc + 384
===============================
COMMIT DEADLOCKED
RUNNING TIME : 99414
===============================