FPGA開発日記

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

自作CPUにベクトル命令を追加する実装検討 (30. ベクトルレジスタ読み込みの遅延挿入)

msyksphinz.hatenablog.com

汎用レジスタは、1サイクル遅延を挿入してBlockRAMを使えるようにしたので、ベクトル・レジスタも1サイクル遅延を挿入してBlockRAMを使えるようにした。 この時にいろいろと改変しないといけない場所で最も面倒なのが、STQからキャッシュに書き込みをする際の書き込みベクトル・レジスタの読み出しだ。

このために、1サイクルステージを挿入する必要がある。

この時に、L1DがBusyだった時にどう待ち合わせるかというと、L1Dに書き込みをするValid & Readyが有効でない限り、次のリクエストはベクトルレジスタに対して要求を出し続ける。 0サイクルでデータを取得できるので、前の命令が書き込みを完了させると、即時次のベクトル・レジスタ・データを渡すことができる。

これを1サイクルほどベクトル・レジスタの読み込みを挿入させるとどうなるか。基本的にはデータを取得した状態で、書き込みポートのFFを停止させるので、その次のデータ読み出しはリクエストを出し続けて、前の命令がL1Dへの書き込みを完了させると、次の書き込みポートのFFを更新すればよいということになる。 つまり、下記の図のB3は、L1DのValid & Readyが完了するまでレジスタ・リードのArbitrationを取得し続けておく必要があるということか。このように論理を変える必要がある。