FPGA開発日記

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

自作RISC-V CPUコア実装(RASの動作確認)

自作CPUの実装、ロードストア命令の物理アドレスが決まらないうえでのハザードのボトルネックを解決した。 そうこうしているうちにいつの間にかRET命令のRAS予測が怪しくなってきているので修正しておきたい。

RASの実装を確認するために、とりあえず以下のようなアセンブリを組み上げてみた。 再帰的に関数を呼び出すような形で  f(x) = f(x-1) + x (ただし x=0 ならば  f(x) = 0) で実装している。 これでひたすらRASが埋められていき、RET命令実行時にスタックされた情報がPOPされていくはずだ。

_start:
    li      sp, 0x80001000
    li      x10, 10
    jal     func

    j       fin

func:

    beq     x10, zero, _func_fin

    addi    sp, sp, -0x20
    sd      x10, 0(sp)
    sd      ra , 8(sp)

    addi    x10, x10, -1
    jal     func

    ld      ra , 8(sp)
    ld      x13, 0(sp)
    addi    sp, sp, 0x20

    add     x10, x10, x13

    ret

_func_fin:
    ret

これにより、RASの情報が増えていき、そしてRET命令時にPOPされるのを波形上で確認した。シミュレーション結果としても、CALL/RET時にフラッシュが起きていないので良い感じだ。次はこれをDhrystoneで流してみよう。

f:id:msyksphinz:20211228010452p:plain