FPGA開発日記

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

自作CPUにベクトル命令を追加する実装検討 (1. データ移動命令の実装調整)

自作CPUにベクトル実行エンジンを追加する試行をしている。

とりあえず一番簡単なベクトル命令としてvmv.v.xで、汎用レジスタからデータを読み取ってベクトルレジスタに書き込む命令を動かすようにしてみる。

main:
        li              a5,0
        li              a1,100
        li              a2,99
.L2:
        subw    a4,a1,a5
        vsetvli a4,a4,e64,m1,ta,mu
        vmv.v.x v24,a5
        addw    a5,a4,a5
        ble         a5,a2,.L2

とりあえずデータパスはおいておいて、ベクトル演算のユニットで命令が動作するように持って行った。 一応検証パタンでは、ログとしてうまく動いているように見える。 あとは、データパスをうまく作りこんでいこう。

4668 : 232 : PC=[000000008000200e] (M,21,01) 05877757 vsetvli a4, a4, e64, m1, ta, mu
GPR[14](130) <= 0000000000000002
4674 : 233 : PC=[0000000080002012] (M,22,01) 5e07cc57 vmv.v.x v24, a5
4674 : 234 : PC=[0000000080002016] (M,22,02) 00009fb9 c.addw  a5, a4
GPR[15](14) <= 0000000000000002
4674 : 235 : PC=[0000000080002018] (M,22,04) fef659e3 bge     a2, a5, pc - 14
4684 : 236 : PC=[000000008000200a] (M,32,01) 40f5873b subw    a4, a1, a5
GPR[14](131) <= 0000000000000062
4687 : 237 : PC=[000000008000200e] (M,33,01) 05877757 vsetvli a4, a4, e64, m1, ta, mu
GPR[14](17) <= 0000000000000002
4691 : 238 : PC=[0000000080002012] (M,34,01) 5e07cc57 vmv.v.x v24, a5
4691 : 239 : PC=[0000000080002016] (M,34,02) 00009fb9 c.addw  a5, a4
GPR[15](46) <= 0000000000000004
4691 : 240 : PC=[0000000080002018] (M,34,04) fef659e3 bge     a2, a5, pc - 14
4697 : 241 : PC=[000000008000200a] (M,35,01) 40f5873b subw    a4, a1, a5
GPR[14](21) <= 0000000000000060
4701 : 242 : PC=[000000008000200e] (M,36,01) 05877757 vsetvli a4, a4, e64, m1, ta, mu
GPR[14](25) <= 0000000000000002