FPGA開発日記

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

自作CPUにベクトル命令を追加する実装検討 (32. LMUL>1のサポート実装)

msyksphinz.hatenablog.com

ベクトルレジスタのLMUL>1サポートを具体的に考えていく。 前に考えた、LMULが変更されたときにベクトル・レジスタのリネームを整列する方法を考える。 例外を発生させるところまではできているので、例外の途中にvsetvl命令が実行されると、フリーリストの最大値とスケールを置き換えるようにする。

    vs1r.v v28, (x10); add   x10, x10, x11
    vs1r.v v29, (x10); add   x10, x10, x11
    vs1r.v v30, (x10); add   x10, x10, x11
    vs1r.v v31, (x10); add   x10, x10, x11

    csrr   x12, 0x00b  # vscratch
    vsetvl x0, x0, x12

    la      x10, vector_stack_data
    vl1r.v v0 , (x10); add   x10, x10, x11
    vl1r.v v1 , (x10); add   x10, x10, x11
    vl1r.v v2 , (x10); add   x10, x10, x11
    vl1r.v v3 , (x10); add   x10, x10, x11

新たにVSCRATCHというシステムレジスタを作った。LMULが変更される例外が発生すると、その命令の機械語をVSCRATCHに格納するようにしておき、vsetvl命令によってそれを読み出して、vtypeレジスタに格納することで、ここで実際にフリーリストの再構成を行う。

一応これでハードウェア側を変更して、動作を確認する。