インテルのみ表示可能 — GUID: jbr1446662770544
Ixiasoft
2.4.2.1. 高速クロック・ドメイン
2.4.2.2. ループの再構築
2.4.2.3. コントロール信号のバックプレッシャー
2.4.2.4. FIFOステータス信号によるフロー・コントロール
2.4.2.5. スキッドバッファーを使用したフロー制御
2.4.2.6. リードモディファイライトメモリー
2.4.2.7. カウンターとアキュムレーター
2.4.2.8. ステートマシン
2.4.2.9. メモリー
2.4.2.10. DSPブロック
2.4.2.11. 一般ロジック
2.4.2.12. モジュラスと除算
2.4.2.13. リセット
2.4.2.14. ハードウェアの再利用
2.4.2.15. アルゴリズム要件
2.4.2.16. FIFO
2.4.2.17. 三進加算器
インテルのみ表示可能 — GUID: jbr1446662770544
Ixiasoft
4.1.2. ステップ2:パイプライン・ステージを追加し、非同期リセットを削除する
この最初の最適化ステップでは、Fast Forwardが提案するデザインロケーションに5レベルのパイプライン・レジスターを追加し、デザインモジュールに存在する非同期リセットを削除します。 ALM間の相互接続にパイプライン・ステージを追加すると、長いルーティング遅延の一部がなくなります。この最適化ステップにより、fMAXのパフォーマンスがFast Forwardが推定するレベルまで向上します。
パイプライン・ステージを追加し、デザインから非同期リセットを削除するには:
- Median_filter_<version>/Step_1/rtl/hyper_pipe.svを開きます。このファイルは、任意のデザインで簡単に使用できるパラメーター化可能なhyper_pipeパイプライン・コンポーネントを定義します。以下は、パラメーター化可能な幅( WIDTH )と深さ( NUM_PIPES )を持つこのコンポーネントのコードを示しています。
module hyper_pipe #( parameter WIDTH = 1, parameter NUM_PIPES = 1) ( input clk, input [WIDTH-1:0] din, output [WIDTH-1:0] dout); reg [WIDTH-1:0] hp [NUM_PIPES-1:0]; genvar i; generate if (NUM_PIPES == 0) begin assign dout = din; end else begin always @ (posedge clk) hp[0] <= din; for (i=1;i < NUM_PIPES;i++) begin : hregs always @ ( posedge clk) begin hp[i] <= hp[i-1]; end end assign dout = hp[NUM_PIPES-1]; end endgenerate endmodule
- パラメーター化可能なモジュールを使用して、Fast Forwardが推奨する場所にいくつかのレベルのパイプライン・ステージを追加します。次の例は、dff_3_pipeモジュールのq出力の前にレイテンシーを追加する方法を示しています。
. . . hyper_pipe #( .WIDTH (DATA_WIDTH), .NUM_PIPES(4) ) hp_d0 ( .clk(clk), .din(d0), .dout(q0_int) ); . . . always @(posedge clk) begin : register_bank_3u if(~rst_n) begin q0 <= {DATA_WIDTH{1'b0}}; q1 <= {DATA_WIDTH{1'b0}}; q2 <= {DATA_WIDTH{1'b0}}; end else begin q0 <= q0_int; q1 <= q1_int; q2 <= q2_int; end end
- 以下に示すように、レジスターを同期レジスターに変更するだけで、 dff_3_pipeモジュール内の非同期リセットを削除します。効率的なリセット実装の一般的な例については、リセット戦略を参照してください。
always @(posedge clk or negedge rst_n) // Asynchronous reset begin : register_bank_3u if(~rst_n) begin q0 <= {DATA_WIDTH{1'b0}}; q1 <= {DATA_WIDTH{1'b0}}; q2 <= {DATA_WIDTH{1'b0}}; end else begin q0_reg <= d0; q1_reg <= d1; q2_reg <= d2; q0 <= q0_reg; q1 <= q1_reg; q2 <= q2_reg; end end always @(posedge clk) begin : register_bank_3u if(~rst_n_int) begin // Synchronous reset q0 <= {DATA_WIDTH{1'b0}}; q1 <= {DATA_WIDTH{1'b0}}; q2 <= {DATA_WIDTH{1'b0}}; end else begin q0 <= q0_int; q1 <= q1_int; q2 <= q2_int; end end
これらのRTL変更により、median_wrapperデザインの入力( word0、word1、およびword2バス)に5レベルのパイプラインが追加され、dff_3_pipeモジュールに5レベルのパイプラインが追加されます。次の手順は、これらの変更の結果を示しています。 - 変更を実装するには、すべてのデザイン変更を保存し、コンパイルダッシュボードのCompile Designをクリックします。
- コンパイル後、 Clkクロックドメインのコンパイル結果をFast Forward Detailsレポートでもう一度表示します。
このレポートは、RTLの変更がデザインのBase Performance fMAXに与える影響を示しています。デザイン性能が495 MHzに向上しました。
このレポートは、非同期レジスターをさらに削除し、パイプライン・レジスターを追加し、ショートパスとロングパスの最適化制限に対処することにより、パフォーマンスをさらに向上できることを示しています。次の手順では、デザインRTLでのこれらの推奨事項の実装について説明します。
注: 前の手順を完了する代わりに、これらの変更が既に含まれているMedian_filter_<version>/Step_1/median.qpfプロジェクトファイルを開いてコンパイルし、結果を確認できます。