自動パイプライン処理に関する注意事項 - 2023.2 日本語

FPGA および SoC 用 UltraFast 設計手法ガイド (UG949)

Document ID
UG949
Release Date
2023-11-29
Version
2023.2 日本語

自動パイプライン処理機能を使用すると、配置で必要なパイプライン段数とその最適な場所が判断され、インターフェイスの境界をまたぐ部分のタイミング クロージャを達成するのに役立ちます。この機能をイネーブルにするには、AXI レジスタ スライス コアの自動パイプライン処理モード設定するか、データ バスに自動パイプライン処理 HDL 属性または XDC 制約を適用します。挿入はタイミング ドリブンなので、ターゲット パスに適切なタイミング制約を適用するようにしてください。詳細は、 『Vivado Design Suite ユーザー ガイド: インプリメンテーション』 (UG904)このセクションを参照してください。

次に、モジュール data01 と data12 の間のインターフェイスに自動パイプライン処理を適用した例を示します。data01 からの出力は、制御セットのないレジスタで構成されています。

図 1. モジュール間のシンプルなデータフロー接続

この例の RTL コードは、次のとおりです。階層モジュール data01 に autopipeline_module 属性を適用し、レジスタの Q ピンで直接駆動されるネットに autopipeline_group/autopipeline_limit/autopipeline_include 属性を適用する必要があります。

data_reg_ap #( .C_DATA_WIDTH(C_DATA_WIDTH)) data01 (
.clk (clk),
.datain (shinreg),
.datareg (d1)
);

data_reg #( .C_DATA_WIDTH(C_DATA_WIDTH)) data12 (
.clk (clk),
.datain (d1),
.datareg (d2)
);

(* autopipeline_module="yes" *)
module data_reg_ap # (
parameter integer C_DATA_WIDTH = 32
)
( input wire clk,
input wire [C_DATA_WIDTH-1:0] datain,
(* autopipeline_group="fwd",autopipeline_limit=24 *)
output reg [C_DATA_WIDTH-1:0] datareg
);

always @(posedge clk) begin
datareg <= datain;
end
endmodule

この例の XDC 制約は、次のとおりです。これは、RTL コードで属性を設定する代わりに使用します。

# It's suggested to add the USER_SLR_ASSIGNMENT property at the module 
#level to ensure better logic clustering with its driver and load, see UG912 
#for more details on this property
set_property USER_SLR_ASSIGNMENT APSRC [get_cells data01]
set_property USER_SLR_ASSIGNMENT APDST [get_cells data12]

set_property AUTOPIPELINE_MODULE TRUE [get_cells data01]
set_property AUTOPIPELINE_GROUP WBUS [get_nets -of [get_pins -filter REF_PIN_NAME==Q -of [get_cells data01/*]]]
set_property AUTOPIPELINE_LIMIT 10 [get_nets -of [get_pins -filter REF_PIN_NAME==Q -of [get_cells data01/*]]]