レジスタ パイプラインの段数が多い場合、できるだけ多くのレジスタを SRL にマップし、レジスタの使用率が大幅に増加するのを回避します。たとえば、データ幅 32 の 9 段のパイプラインには、各ビットに 9 個のレジスタ、合計 32 x 9 = 288 個のレジスタが使用されます。同じ構造を SRL にマップすると、32 個の SRL が使用されます。各 SRL には、5'b01000 に接続されたアドレス ピン A4 ~ A0 があり、9 段のパイプラインをインプリメントできます。
合成で SRL を推論する方法は、次のように複数あります。
- SRL
- REG -> SRL
- SRL -> REG
- REG -> SRL -> REG
これらの構造は、次のように RTL コードで srl_style
属性を使用すると作成できます。
-
(* srl_style = "srl" *)
-
(* srl_style = "reg_srl" *)
-
(* srl_style = "srl_reg" *)
-
(* srl_style = "reg_srl_reg" *)
より深いパイプライン段で異なるイネーブル/リセット制御信号を使用してしまうというのが、よくある間違いです。次は、深さ 9 のパイプライン段で使用されるリセット (3、4、8 つ目のパイプライン段に接続) の例です。この構造では、SRL プリミティブにリセット ピンがあるので、パイプライン段はレジスタのみにマップされます。
FF->FF->FF(reset) -> FF->FF(reset)->FF->FF->FF(reset)->FF
SRL 推論の利点を活かすには、次のようにします。
- パイプライン段用のリセットがないようにします。
- リセットが本当に必要かどうかを解析します。
- フリップフロップの 1 つ (たとえばパイプラインの最初または最後の段) でリセットを使用します。