FPGA開発日記

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

RISC-Vのランダムテストジェネレータ AAPGを試す (4. RISC-V命令拡張を試す)

AAPGを久しぶりに触っている。久しぶりにテストパタンを動かして問題ないことを確認したので、もうちょっと命令範囲を拡張することにした。

https://gitlab.com/shaktiproject/tools/aapg

現時点ではAAPGはFPU/RMW命令を生成するようになっていない。config.yamlを変更してこれらの命令も生成するように変更した。

diff --git a/tests/aapg/work/config.yaml b/tests/aapg/work/config.yaml
index dcf7289..d74a2ce 100644
--- a/tests/aapg/work/config.yaml
+++ b/tests/aapg/work/config.yaml
@@ -47,12 +47,12 @@ isa-instruction-distribution:
   rel_rv64i.data: 10
   rel_rv32m: 5
   rel_rv64m: 5
-  rel_rv32a: 0
-  rel_rv64a: 0
-  rel_rv32f: 0
-  rel_rv64f: 0
-  rel_rv32d: 0
-  rel_rv64d: 0
+  rel_rv32a: 5
+  rel_rv64a: 5
+  rel_rv32f: 5
+  rel_rv64f: 5
+  rel_rv32d: 5
+  rel_rv64d: 5

 # Compressed instructions

@@ -60,21 +60,21 @@ isa-instruction-distribution:
   rel_rvc.compute: 10
   rel_rvc.sp: 10
   rel_rvc.data: 10
-  rel_rvc.fdata: 0
+  rel_rvc.fdata: 10

   rel_rv32c.compute: 10
   rel_rv32c.ctrl: 1
-  rel_rv32c.fdata: 0
+  rel_rv32c.fdata: 1

   rel_rv64c.compute: 10
   rel_rv64c.data: 10

 float-rounding:
-  rne: 0
-  rtz: 0
-  rdn: 0
-  rup: 0
-  rmm: 0
+  rne: 1
+  rtz: 1
+  rdn: 1
+  rup: 1
+  rmm: 1

Configurationを変更してテストパタンを再生した。

aapg gen --num_programs 100
make -C work -j20

これで自作CPU上でテストパタンを動かした。すべてのパタンでFailしてしまったが、すべてFPU命令の結果が問題のようだ。 デバッグしていこう。

config_00092.rv64imafdc.tiny.log:446-==========================================
config_00092.rv64imafdc.tiny.log:447:Wrong FPR[19](29): RTL = ffffffff4c6b10df, ISS = ffffffff7fc00000
config_00093.rv64imafdc.tiny.log:490-GPR[15](47) <= 0000000000000000
config_00093.rv64imafdc.tiny.log:491-20271 : 167 : PC=[0000000080000450] (M,15,01) 00aba1d3 fadd.s  ft3, fs7, fa0
config_00093.rv64imafdc.tiny.log:492-==========================================
config_00093.rv64imafdc.tiny.log:493:Wrong FPR[03](24): RTL = ffffffffb44ae9cc, ISS = ffffffff7fc00000
config_00094.rv64imafdc.tiny.log:283-GPR[06](43) <= ffffffff9c79dc6a
config_00094.rv64imafdc.tiny.log:284-19981 : 105 : PC=[0000000080000386] (M,06,01) c024a7d3 fcvt.l.s a5, fs1
config_00094.rv64imafdc.tiny.log:285-==========================================
config_00094.rv64imafdc.tiny.log:286:Wrong GPR[15](42): RTL = fffffffffe613f1e, ISS = 7fffffffffffffff
config_00095.rv64imafdc.tiny.log:321-MW4(0x0000000080093d14)=>0000000080100940
config_00095.rv64imafdc.tiny.log:322-20015 : 126 : PC=[00000000800003ca] (M,06,01) c03b9fd3 fcvt.lu.s t6, fs7
config_00095.rv64imafdc.tiny.log:323-==========================================
config_00095.rv64imafdc.tiny.log:324:Wrong GPR[31](5): RTL = 0000000000000000, ISS = ffffffffffffffff
config_00096.rv64imafdc.tiny.log:294-MW4(0x00000000800929b0)=>00000000b79167cd
config_00096.rv64imafdc.tiny.log:295-19984 : 115 : PC=[00000000800003a6] (M,14,02) c03b8e53 fcvt.lu.s t3, fs7
config_00096.rv64imafdc.tiny.log:296-==========================================
config_00096.rv64imafdc.tiny.log:297:Wrong GPR[28](43): RTL = 0000000000000000, ISS = ffffffffffffffff
config_00097.rv64imafdc.tiny.log:282-GPR[11](44) <= 0000000000000001
config_00097.rv64imafdc.tiny.log:283-19983 : 107 : PC=[000000008000038a] (M,07,01) c03314d3 fcvt.lu.s s1, ft6
config_00097.rv64imafdc.tiny.log:284-==========================================
config_00097.rv64imafdc.tiny.log:285:Wrong GPR[09](42): RTL = 0000000000000000, ISS = ffffffffffffffff
config_00098.rv64imafdc.tiny.log:301-80010 : EVict ISS Check : 80092630        : 7947df47_3b1752e1_684136de_1972e8d7
config_00098.rv64imafdc.tiny.log:302-20002 : 111 : PC=[000000008000039a] (M,10,01) 08caba53 fsub.s  fs4, fs5, fa2
config_00098.rv64imafdc.tiny.log:303-==========================================
config_00098.rv64imafdc.tiny.log:304:Wrong FPR[20](25): RTL = ffffffff729f8a13, ISS = ffffffff7fc00000
config_00099.rv64imafdc.tiny.log:289-GPR[15](30) <= 43377731cbef2527
config_00099.rv64imafdc.tiny.log:290-19996 : 107 : PC=[000000008000038c] (M,07,02) c036afd3 fcvt.lu.s t6, fa3
config_00099.rv64imafdc.tiny.log:291-==========================================
config_00099.rv64imafdc.tiny.log:292:Wrong GPR[31](44): RTL = 0000000000000000, ISS = ffffffffffffffff