現在の自作CPUは、簡易的にフロントエンドとバックエンドのデータ幅を一致させている。 例えば、バックエンドのキャッシュラインの幅が64Bであれば、フロントエンドも64Bにしている。 しかし、さすがにフロントエンドのデコードラインで64Bを一気にデコードするのは回路規模的に厳しいので、フロントエンドのデータ幅を削減することを検討する。
基本的にパラメタライズしているのでデータ幅削減は問題ないのだが、ポイントはキャッシュラインの取り込みのバスをどのようにするかだ。 フロントエンドのデータ幅を64Bから16Bに落としても、L2への接続幅は64Bをキープしたほうが簡単なので、基本的にバスの幅を変更はしない。
その代わりに、命令キャッシュのキャッシュラインは64Bをキープしながら4バンクに分割し、キャッシュラインの読み出しリクエストは16B単位で行うようにする。
キャッシュのバンク化の部分の実装最適化はイマイチだが、とりあえず動く構成のRTLを作って、検証はとりあえず流れるようになった。 かなりパラメタライズしておいてよかった。半日以下の作業で済んだ。
とりあえず論理合成にて、あるコンフィグレーションでフロントエンドのデータ幅を16Bから8Bに削減した。データ幅は16Bを維持している。 その結果、フロントエンドの回路面積は34%程度削減できたようだった。ある程度は効果がありそうだな。