FPGA開発日記

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

Rocket-ChipのAtomic命令動作観察 (1. ChipyardによるRTLシミュレーション)

とりあえずChipyardで以下のようにしてテストベンチを動かせば良かろう。vcdの出力はrv32ua-v-amoadd_d.vcdに行われる。

./simulator-chipyard-RocketConfig-debug +verbose -v rv32ua-v-amoadd_d.vcd ${RISCV}/riscv64-unknown-elf/share/riscv-tests/isa/rv64ua-p-amoadd_d 2>&1 | spike-dasm | tee rv64ua-p-amoadd_d.rocket.log

ログを見てみると、amoadd.dを2回実行している。あれ、2回だけなの?

C0:        410 [1] pc=[0000000080000180] W[r10=ffffffff80000000][1] R[r 0=0000000000000000] R[r 0=0000000000000000] inst=[80000537] lui     a0, 0x80000
C0:        411 [1] pc=[0000000080000184] W[r11=fffffffffffff800][1] R[r 0=0000000000000000] R[r 0=0000000000000000] inst=[80000593] li      a1, -2048
C0:        412 [1] pc=[0000000080000188] W[r13=0000000080002188][1] R[r 0=0000000000000000] R[r 0=0000000000000000] inst=[00002697] auipc   a3, 0x2
C0:        413 [1] pc=[000000008000018c] W[r13=0000000080002000][1] R[r13=0000000080002188] R[r 0=0000000000000000] inst=[e7868693] addi    a3, a3, -392
C0:        430 [1] pc=[0000000080000190] W[r 0=0000000000000000][0] R[r13=0000000080002000] R[r10=ffffffff80000000] inst=[00a6b023] sd      a0, 0(a3)
C0:        436 [1] pc=[0000000080000194] W[r14=ffffffff80000000][1] R[r13=0000000080002000] R[r11=fffffffffffff800] inst=[00b6b72f] amoadd.d a4, a1, (a3)
C0:        437 [1] pc=[0000000080000198] W[r 7=ffffffff80000000][1] R[r 0=0000000000000000] R[r 0=0000000000000000] inst=[800003b7] lui     t2, 0x80000
C0:        438 [1] pc=[000000008000019c] W[r 3=0000000000000002][1] R[r 0=0000000000000000] R[r 0=0000000000000000] inst=[00200193] li      gp, 2
C0:        439 [1] pc=[00000000800001a0] W[r 0=0000000000000000][0] R[r14=ffffffff80000000] R[r 7=ffffffff80000000] inst=[04771863] bne     a4, t2, pc + 80
C0:        440 [1] pc=[00000000800001a4] W[r15=ffffffff7ffff800][1] R[r13=0000000080002000] R[r 0=0000000000000000] inst=[0006b783] ld      a5, 0(a3)
C0:        441 [1] pc=[00000000800001a8] W[r 7=ffffffffffffffff][1] R[r 0=0000000000000000] R[r 0=0000000000000000] inst=[fff0039b] addiw   t2, zero, -1
C0:        442 [1] pc=[00000000800001ac] W[r 7=ffffffff80000000][1] R[r 7=ffffffffffffffff] R[r 0=0000000000000000] inst=[01f39393] slli    t2, t2, 31
C0:        443 [1] pc=[00000000800001b0] W[r 7=ffffffff7ffff800][1] R[r 7=ffffffff80000000] R[r 0=0000000000000000] inst=[80038393] addi    t2, t2, -2048
C0:        444 [1] pc=[00000000800001b4] W[r 3=0000000000000003][1] R[r 0=0000000000000000] R[r 0=0000000000000000] inst=[00300193] li      gp, 3
C0:        445 [1] pc=[00000000800001b8] W[r 0=0000000000000000][0] R[r15=ffffffff7ffff800] R[r 7=ffffffff7ffff800] inst=[02779c63] bne     a5, t2, pc + 56
C0:        446 [1] pc=[00000000800001bc] W[r14=ffffffff7ffff800][1] R[r13=0000000080002000] R[r11=fffffffffffff800] inst=[00b6b72f] amoadd.d a4, a1, (a3)
C0:        468 [1] pc=[00000000800001c0] W[r 7=ffffffffffffffff][1] R[r 0=0000000000000000] R[r 0=0000000000000000] inst=[fff0039b] addiw   t2, zero, -1
C0:        469 [1] pc=[00000000800001c4] W[r 7=ffffffff80000000][1] R[r 7=ffffffffffffffff] R[r 0=0000000000000000] inst=[01f39393] slli    t2, t2, 31
C0:        470 [1] pc=[00000000800001c8] W[r 7=ffffffff7ffff800][1] R[r 7=ffffffff80000000] R[r 0=0000000000000000] inst=[80038393] addi    t2, t2, -2048
C0:        471 [1] pc=[00000000800001cc] W[r 3=0000000000000004][1] R[r 0=0000000000000000] R[r 0=0000000000000000] inst=[00400193] li      gp, 4

おそらくこの辺りだと思われる。波形を詳細に見ていきたい。

f:id:msyksphinz:20220222002156p:plain