FPGA開発日記

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

自作CPUにベクトル命令を追加する実装検討 (17. ベクトルロード命令の実装)

いよいよ自作CPUにベクトル・メモリ・アクセス命令を実装するときが来た。まずは簡単なUnit Strideロード命令を実装しようと思う。 何も考えずに、Cacheableな領域にストレートにアクセスする形式から考えていきたい。

とりあえずデバッグして、簡単なテストベンチは動作するようになった。ベクトル・ロードが動いている。

パイプラインにL1Dキャッシュをつなげて、MSHRとかもスカラ側にパラメータを変更することですぐにつながるようにしていたのでその辺の接続は非常に簡単だ。 あとはいくつかシンプルなテストを流して、動作することを確認した。

4721 : 257 : PC=[0000000080002012] (M,62,01) 40f5873b subw    a4, a1, a5
GPR[14](9) <= 0000000000000024
4724 : 258 : PC=[0000000080002016] (M,63,01) 04877757 vsetvli a4, a4, e16, m1, ta, mu
GPR[14](13) <= 0000000000000010
4727 : 259 : PC=[000000008000201a] (M,00,01) 5e07cc57 vmv.v.x v24, a5
VPR[24](40) <= 00400040_00400040_00400040_00400040_00400040_00400040_00400040_00400040_
18954 : L1D Load-In     : 80003440(00209) : 000a216f_6f66202c_29286e69_616d2074_6e656d65_6c706d49_00000000_00000000_74657274_736e696d_0000656c_6379636d_0000296c_6c756e28_01010101_01010101
18954 : Load ISS Check  : 80003440        : 000a216f_6f66202c_29286e69_616d2074_6e656d65_6c706d49_00000000_00000000_74657274_736e696d_0000656c_6379636d_0000296c_6c756e28_01010101_01010101
4744 : 260 : PC=[000000008000201e] (M,01,01) 5e05ccd7 vmv.v.x v25, a1
VPR[25](41) <= 00640064_00640064_00640064_00640064_00640064_00640064_00640064_00640064_
4744 : 261 : PC=[0000000080002022] (M,01,02) 02085f07 vle16.v v30, (a6)

VPR[30](52) <= 74657274_736e696d_0000656c_6379636d_0000296c_6c756e28_01010101_01010101_
4744 : 262 : PC=[0000000080002026] (M,01,04) 000097ba c.add   a5, a4
GPR[15](63) <= 0000000000000050
4744 : 263 : PC=[0000000080002028] (M,01,08) 0000983a c.add   a6, a4

次はベクトルストアなのだが、どうしようか。同様にスカラのストアバッファに接続しても、ストアバッファは128bit程度のインタフェースしか持っていないので幅が足りない。 コヒーレンスをあまり気にかけたくなければ、スカラ側のストアバッファを使ったほうがいいんだけどな。