zero-riscy を3段パイプにしたい2

BNN アクセラレータの高速化も難しくなってきたので、そろそろ zero-riscy 本体に手を入れたいと思います。
zero-riscy は2段パイプの設計です。言い換えると、2段に収まらない命令はすべてマルチサイクル命令になります。具体的には、分岐、ロードストア、MUL/DIVがマルチサイクルになります。
この中で分岐はEXの資源を使い続けるのでパイプライン化の対象外です。
MUL/DIVはちょっと悩んでいるのだけどとりあえず保留して、ロードストアを3段パイプにしてみようと思います。
変更箇所はこんな感じ
  1. 命令デコーダのマルチサイクル命令判定部分からロードストアを削除
  2. ロードストアユニットをパイプライン化
  3. ロード結果を遅れてレジスタに書き戻す機能を追加
  4. RAWハザード検出
  5. WAW時に先行(ロードストアの)書き込みを無効化
  6. gnt を待つときはマルチサイクルのままにもどす
  7. rvalid を待つときは WBステージをストール
5番はバグのにおいがプンプンしますね。
3番について少し補足すると、レジスタの書き込みポートは増やさず、ロード結果はEXステージのレジスタ書き込みに負け、隙間をついて書き戻す方式です。昔教えてもらった方式で、バイパス機能は持たせません。
アクセラレータを使った推論プログラムの実行サイクルは、昨日のソフトの最適化で 1672165 から 1237938 になって、今日の 3段パイプ化で 1180519 になりました。
ちなみに、命令トレース出力がロード命令のレジスタ書き込み値の出力に対応出来なくなりました(--)
それから、もともと zero-riscy ってなぜかミスアラインアクセスに対応していたと思うのですが、良く分からないので取っちゃいました。

[PR]
トラックバックURL : https://tom01h.exblog.jp/tb/29830956
トラックバックする(会員専用) [ヘルプ]
※このブログはトラックバック承認制を適用しています。 ブログの持ち主が承認するまでトラックバックは表示されません。
by tom01h | 2018-06-06 22:55 | PCとか | Trackback | Comments(0)