FPGA開発日記

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

RISC-Vのランダムテストジェネレータ AAPGを試す (2. より複雑な命令の生成)

AAPGの続き。もう少し複雑な命令を生成してみる。config.yamlを以下のように変更してみた。

isa-instruction-distribution:
  rel_sys: 0
  rel_sys.csr: 1
  rel_rv32i.ctrl: 0
  rel_rv32i.compute: 1
  rel_rv32i.data: 1
  rel_rv32i.fence: 1
  rel_rv64i.compute: 1
  rel_rv64i.data: 1
  rel_rv32m: 1
  rel_rv64m: 1
  rel_rv32a: 0
  rel_rv64a: 0
  rel_rv32f: 0
  rel_rv64f: 0
  rel_rv32d: 0
  rel_rv64d: 0

rel_rv32i.computeのみが1に設定されていたが、それ以外の命令を出力するようにしてみた。

このようにして生成されたファイルは以下のような感じだ。CSR命令、ロードストア、算術演算命令、乗除算命令がまんべんなく生成される。

i000000000c:    lb                  t2, -1854(sp)
i000000000d:    lbu                 gp, -1511(sp)
                                la                  sp, begin_signature
                                li                  t1, 9912
                                add                 sp, sp, t1
i000000000e:    sd                  t1, 2008(sp)
i000000000f:    slliw               a5, s11, 17
i0000000010:    csrrwi              t6, 3430, 2
i0000000011:    sw                  s5, 568(sp)
i0000000012:    sra                 s3, s1, a6
i0000000013:    div                 s1, t5, a7
i0000000014:    mul                 t1, t4, s5
i0000000015:    mulh                t1, tp, s8
i0000000016:    sllw                s1, t3, t5
i0000000017:    or                  zero, a6, s2
i0000000018:    sub                 s3, t1, t6
i0000000019:    sb                  a4, -2036(sp)
i000000001a:    sraiw               t5, s4, 16
i000000001b:    sraiw               s3, t1, 23
i000000001c:    divw                a6, s0, s5
i000000001d:    fence
i000000001e:    fence
                                la                  sp, begin_signature
                                li                  t1, 13544

これを自作CPUで実行してみるとどのようになるのか試してみたが、案の定エラーとなった。これはデバッグだな...

例えばこういう、定義されていないCSRレジスタへのアクセス命令もちゃんと取り扱わないといけない...

18781 : 57 : PC=[00000000800004c4] (M,11,01) b4010113 addi    sp, sp, -1216
GPR[02](33) <= 0000000080091000
18782 : 58 : PC=[00000000800004c8] (M,12,01) 00003337 lui     t1, 0x3
GPR[06](28) <= 0000000000003000
18783 : 59 : PC=[00000000800004cc] (M,13,01) a603031b addiw   t1, t1, -1440
GPR[06](29) <= 0000000000002a60
18788 : 60 : PC=[00000000800004d0] (M,14,01) 00610133 add     sp, sp, t1
GPR[02](30) <= 0000000080093a60
18789 : 61 : PC=[00000000800004d4] (M,15,01) 00a00f93 li      t6, 10
GPR[31](25) <= 000000000000000a
18795 : RTL(0,1) Exception Cause = 27 PC=0000800004d8, Inst=a293aff3, csrrs   t6, unknown_a29, t2
18795 : 61 : PC=[00000000800004d8] (M,00,01) a293aff3 csrrs   t6, unknown_a29, t2
==========================================
Wrong PC: RTL = 00000000800004d8, ISS = 0000000080000360
==========================================
===============================
SIMULATION FINISH : FAIL (CODE=100)
===============================

仕事が増えた。

f:id:msyksphinz:20220310010104p:plain