FPGA開発日記

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

自作CPUにベクトル命令を追加する実装検討 (19. レーンを跨いで演算結果を格納するマスク命令)

ベクトル命令における、マスク命令をどのように実行するのかについて考えたい。

ベクトル命令にはマスク命令という、各要素の比較を実行してその結果をマスクとしてベクトルレジスタに格納する命令がある。 ベクトルレジスタには、マスクフォーマットという、各要素の比較結果をLSB側に敷き詰める方式で書き込む。

したがって、VLEN!=DLENの場合には各DLENの計算結果をスタックして、最後に書き込む必要がある。 これを実現するのは意外と難しくて、例えばVLEN=512, DLEN=128の場合、4サイクルを用いて書き込むのだが、

  • 0~3サイクルは単純に演算の結果をスタックする。同時に、ベクトル・レジスタのOldデータを書き込んでいく。
  • 4サイクルは比較の結果を書き込む

という、合計5サイクルを実行する必要があり、そのための面倒な論理が必要になる。 これ以外にどのような方法があるのかわからないが、例えばAraなどはDLENの概念がないので、あまり参考にできない。もっと賢い実装はないのかなあ。