自動パイプライン処理機能を使用すると、配置で必要なパイプライン段数とその最適な場所が判断され、インターフェイスの境界をまたぐ部分のタイミング クロージャを達成するのに役立ちます。この機能をイネーブルにするには、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/*]]]