• 検索結果がありません。

マ ク ロのプ ロパテ ィ の例

% report_property [get_macros m1]

Property Type Read-only Visible Value ABSOLUTE_GRID bool true true 0 CLASS string true true macro NAME string true true m1

RLOCS string* true true u2/sr0 X0Y0 u2/sr1 X0Y1 次に、 各プ ロ パテ ィ について説明 し ます。

ABSOLUTE_GRID

RLOC でデフ ォ ル ト のグ リ ッ ド シ ス テ ム を使用す る か、 絶対グ リ ッ ド シ ス テ ム を使用す る か を示すブール プ ロ パ テ ィ です。

デフ ォ ル ト は false です。update_macro で -absolute_grid を使用す る と 、 こ のプ ロ パテ ィ は true にな り ます。

絶対グ リ ッ ド では、 サ イ ト の RPM_X お よ び RPM_Y プ ロ パテ ィ に対応す る 座標が使用 さ れ る ので、 異な る サ イ ト タ イ プに配置 さ れたセルか ら マ ク ロ を作成で き ます。

CLASS

オブジ ェ ク ト を マ ク ロ と し て識別 し ます。

NAME

マ ク ロ オブジ ェ ク ト の名前は、create_macro で使用 さ れた名前か、read_xdc -cell を使用 し てい る 場合は、

セル階層名が接頭辞 と し て付け ら れてい る マ ク ロ 名にな り ます。

RLOCS

マ ク ロ セル と その RLOC プ ロ パテ ィ の リ ス ト を、update_macro コ マ ン ド で使用 さ れ る の と 同 じ フ ォーマ ッ ト で含 む文字列です。

マ ク ロ セルには、 さ ら に次のプ ロ パテ ィ があ り ます。

• RLOC: セルの相対 ロ ケーシ ョ ン プ ロ パテ ィ (RLOC) 値。

前述の例を使用す る と 、 次の よ う にな り ます。

% get_property RLOC [get_cells {u2/sr0 u2/sr1}]

X0Y0 X0Y1

% get_property MACRO_NAME [get_cells {u2/sr0 u2/sr1}]

m1 m1

opt_design 実行時の XDC マ ク ロの保持

opt_design では最適化が自由に実行 さ れ、RLOC 制約が設定 さ れてい る のに も かかわ ら ず XDC マ ク ロ に属す る

LUT が削除 さ れます。opt_design の最適化に よ り XDC マ ク ロ 内の ロ ジ ッ ク が削除 さ れない よ う にす る には、

XDC マ ク ロ に属す る すべてのセルの DONT_TOUCH プ ロ パテ ィ を TRUE に設定す る 必要があ り ます。DONT_TOUCH プ ロ パテ ィ は、RTL ま たは XDC で設定で き ます。

ア ド バン ス XDC マ ク ロの例

こ のセ ク シ ョ ンでは、 次のア ド バン ス XDC マ ク ロ の例を示 し ます。

• 「相対グ リ ッ ド マ ク ロ の例」

• 「絶対グ リ ッ ド マ ク ロ の例」

相対グ リ ッ ド マ ク ロの例

最 も 一般的なマ ク ロ は同 じ サ イ ト タ イ プに属す る セルで構成 さ れてい る ので、 デフ ォ ル ト ではマ ク ロ の RLOC 座標 に相対グ リ ッ ド が使用 さ れます。

次に、 マ ク ロ の RLOC か ら 生成 さ れた相対配置の単純な例を示 し ます。 こ のマ ク ロ は、2x2 パ タ ーンに並べ ら れた 2 つの SRL > FF > FF 回路で構成 さ れます。図9-3 を参照 し て く だ さ い。

X-Ref Target - Figure 9-3

適切な相対配置を作成す る には、 次の よ う にセルに RLOC を設定 し ます。

srl[0] X0Y0 regs0[0] X0Y0 regs1[0] X1Y0 srl[1] X0Y1 regs0[1] X0Y1 regs1[1] X1Y1

次の コ マ ン ド は、m0 と い う 名前のマ ク ロ を作成 し ます。

create_macro m0

update_macro m0 {srl[0] X0Y0 regs0[0] X0Y0 regs1[0] X1Y0 srl[1] X0Y1 regs0[1] X0Y1 regs1[1] X1Y1}

マ ク ロ は自動的に配置 さ せ る か、 セ ッ ト と し て手動で配置で き ます。 マ ク ロ の配置は図9-4 の よ う にな り ます。

マ ク ロ には、LUTRAM に基づ く SRL が含まれてお り 、 こ れは SLICEM タ イ プ ス ラ イ ス にのみ配置可能なので、 ロ ケーシ ョ ンは多少制限 さ れます。 こ のマ ク ロ は、SLICEM 列の右に SLICEL 列があ る 場所にのみ配置可能です。

注意:多 く のオブジ ェ ク ト が配置 さ れてい る ス ラ イ ス が一箇所に集中 し てい る と 、 密集の原因 と な り 、 配線が困難 と な り 、 パフ ォーマ ン ス に悪影響を及ぼす可能性があ り ます。

X-Ref Target - Figure 9-4

図 9-4:マ ク ロの配置例

絶対グ リ ッ ド マ ク ロの例

異な る サ イ ト タ イ プのセルを マ ク ロ に含め る 場合は、 絶対グ リ ッ ド を使用す る 必要があ り ます。

絶対グ リ ッ ド (RPM グ リ ッ ド と も 呼ばれ る) は、 デバ イ ス内の ロ ケーシ ョ ンに基づいてサ イ ト の座標を定義す る 絶対 座標シ ス テ ムです。 絶対グ リ ッ ド では、 サ イ ト のサ イ ズ も 考慮 さ れます。RAM お よ び DSP ブ ロ ッ ク は、 ス ラ イ ス よ

り も 幅が広 く な っ てい ます。 絶対グ リ ッ ド を図9-5 に示 し ます。

こ の例では、3 つの異な る タ イ プのセルか ら 、 絶対グ リ ッ ド を使用 し てマ ク ロ が作成 さ れてい ます。 入力ポー ト か ら の入力デー タ パ ス が、2 段の レ ジ ス タ を介 し てブ ロ ッ ク RAM に接続 さ れてい ます。 こ れが図9-5 に示 さ れてい ます。

X-Ref Target - Figure 9-5

推奨:セルを一時的にデバ イ ス の絶対 ロ ケーシ ョ ンに配置 し 、 各セルの絶対グ リ ッ ド RLOC 値を取得 し ます。

図9-6 に示す よ う に、 セルは まず手動で配置 し 、 適切な ロ ケーシ ョ ンに調整 し ます。

絶対グ リ ッ ド では絶対 ロ ケーシ ョ ンが指定 さ れますが、 マ ク ロ の相対配置を満足で き れば、 デバ イ ス の ど こ にで も 配置で き ます。 こ の例では、 左下角を基点 と し て相対 ロ ケーシ ョ ンが指定 さ れてい ます。

ただ し 、 絶対グ リ ッ ド ロ ケーシ ョ ンでは絶対配置ではな く 相対配置が指定 さ れます。 こ れに よ り 、 相対配置が保持 さ れれば、 マ ク ロ をデバ イ ス の ど こ にで も 配置で き ます。

こ の例は、ILOGIC、 ス ラ イ ス、 お よ びブ ロ ッ ク RAM が含まれていて多少複雑であ り 、 マ ク ロ の ロ ケーシ ョ ン も あ る 程度制限 さ れますが、図9-7 にオ レ ン ジ色でハ イ ラ イ ト さ れてい る 3 つの ど の ロ ケーシ ョ ンにで も 配置で き ます。

X-Ref Target - Figure 9-6

図 9-6:絶対グ リ ッ ド マ ク ロ用にセルを手動配置

絶対グ リ ッ ド の RLOC を判断す る には、RPM_X お よ び RPM_Y のプ ロ パテ ィ を使用 し ます。 た と えば、 下のブ ロ ッ ク

RAM はサ イ ト RAMB36_X0Y0 に配置 さ れます。

X-Ref Target - Figure 9-7

図 9-7: XDC マ ク ロ を配置可能な 3 つのロ ケーシ ョ ン

セルではな く サ イ ト を選択す る と 、RPM_X が 33、RPM_Y が 0 と 表示 さ れます (図9-8)。 こ れ ら が絶対グ リ ッ ド 座標 です。 それに対応す る RLOC の値は X33Y0 です。

同じ方法を使用し て、 ス ラ イ スの絶対 RLOC 値を取得で き ます (図9-9)。 こ のス ラ イ ス内のセルの RLOC は X31Y0 です。

m0 と い う 名前のマ ク ロ を作成す る には、2 つの コ マ ン ド があ り ます。

create_macro m0

update_macro m0 -absolute_grid <cell0 rloc0 cell1 rloc1 cell2 rloc2 … cellN rlocN>

X-Ref Target - Figure 9-8

図 9-8:ブ ロ ッ ク RAM の絶対グ リ ッ ド 座標

X-Ref Target - Figure 9-9

図 9-9:ス ラ イ スの絶対グ リ ッ ド 座標

マ ク ロ に こ の例の よ う に多数のセルが含まれてい る 場合、Tcl コ マ ン ド を使用 し て update_macro に必要な cell-rloc リ ス ト を簡単に作成お よ び指定で き ます。 セルが配置済みの場合、 絶対グ リ ッ ド の RLOC は、 次の Tcl コ マ ン ド proc getAbsRLOC を使用 し て取得で き ます。

proc getAbsRLOC {cell} {

set site [get_sites -of [get_cells $cell]]

set X [get_property RPM_X $site]

set Y [get_property RPM_Y $site]

return "X${X}Y${Y}"

}

例 : 変数 rloc を ブ ロ ッ ク RAM のセルの RLOC に割 り 当て る

% set rloc [getAbsRLOC $ram0]

X33Y0

Tcl コ マ ン ド dict は、update_macro コ マ ン ド 用に、 セル と 絶対グ リ ッ ド RLOC のデ ィ ク シ ョ ナ リ (連想配列) を構 築す る ために使用で き ます。Tcl 連想配列は、 キー と 値のペアの配列です。 セルお よ び RLOC は、dict コ マ ン ド を 使用 し て、 配列にで き ます。 配列キーがマ ク ロ のセル オブジ ェ ク ト で、 配列値がセルの RLOC です。 こ れは、 多数 のセルを含むマ ク ロ を作成す る プ ロ セ ス を自動化す る のに役立ち ます。 次の例では絶対グ リ ッ ド を使用 し てい ます が、 こ の方法は相対グ リ ッ ド に も 適用で き ます。

$cells はマ ク ロ セルの リ ス ト で、$cells の各セルが必要なマ ク ロ パ タ ーン を作成す る よ う に配置 さ れてい る と す る と 、 次の Tcl プ ロ シージ ャ は update_macro コ マ ン ド 用にセル と RLOC のペアの リ ス ト を作成 し ます。

proc buildRLOCList {cells} {

set rlocs [dict create] ; # initialize dictionary called rlocs foreach cell $cells {

# dictionary key is cell, value is absolute RLOC dict set rlocs $cell [getAbsRLOC $cell]

}

return $rlocs }

例 : 回路例の RLOC リ ス ト の構築

# create macro cell list: input register stage and BRAM cells

set cells [get_cells -hier [list ireg0* ireg1* *SIMPLE_PRIM36.ram]]

create_macro m0

update_macro m0 -absolute_grid [buildRLOCList $cells]

buildRLOCList で作成 さ れたデ ィ ク シ ョ ナ リ リ ス ト を表示す る には、 次の コ マ ン ド を使用 し ます。

$ puts [buildRLOCList $cells]

{ireg0[6]} X2Y10 {ireg0[5]} X2Y11 {ireg0[4]} X2Y6 {ireg0[3]} X2Y7 . . .

マ ク ロセルの数が多 く 、 階層にマ ク ロ セルが埋 も れてい る 場合は、 セル と RLOC のペアの リ ス ト を明示的に指定す る のは困難であ り 、 エ ラ ーが発生 し やす く な り ます。Tcl を使用す る と 、XDC マ ク ロ の作成お よ び管理が簡単にな り

RPM の XDC マ ク ロへの変換

相対配置制約を イ ンプ リ メ ン ト す る には、XDC マ ク ロ を使用す る 方が推奨 さ れ る ため、 実現可能な場合は常に RPM を XDC マ ク ロ に変換す る こ と をお勧め し ます。 こ れには、 手動で HDL ソ ース か ら RPM 属性を削除 し て、 同等の XDC マ ク ロ を作成 し ます。 ま た、Tcl を使用 し て自動的に RPM 属性を XDC マ ク ロ に置換す る こ と も で き ます。

自動プ ロ セ ス では、 次が実行 さ れます。

1. すべての HDL ソ ース で各 RPM 属性を次の よ う な同様に命名 さ れた文字列に置 き 換え ます。

° hu_set を m_hu_set に置換。

° u_set を m_u_set に置換。

° rloc を m_rloc に置換。

こ れに よ り 、RPM は処理 さ れな く な り ますが、 非ア ク テ ィ ブな属性は、 セルプ ロ パテ ィ の よ う に合成済みネ ッ ト リ ス ト に渡 さ れ る よ う にな り ます。

2. 合成済みデザ イ ン を開 く か、link_design を実行 し て、 こ の非ア ク テ ィ ブなプ ロ パテ ィ に基づいて XDC マ ク ロ を 作成 し ます。 た と えば、HU_SET にはそれぞれ m_hu_set と い う セル プ ロ パテ ィ が付いてお り 、 同等の XDC マ

ク ロ を作成す る のに使用で き ます。 元の HU_SET 内のセルには、 それぞれ RLOC に変換可能な m_rloc プ ロ パ テ ィ が付 き ます。

3. こ の XDC マ ク ロ 定義を含む よ う にな っ た制約を保存 し ます。

変換には、Tcl を使用 し 、 一意の m_hu_set ま たは m_uset 値に基づいた XDC マ ク ロ セル リ ス ト を構築す る のが最適 な方法です。 次は、 単純な VHDL 変換例です。

元の VHDL ソ ース には、set0 と い う HU_SET RPM が含まれ、X0Y0 と い う RLOC を含むセル と 、X0Y1 と い う RLOC を含むセルの 2 つのセルが含まれます。

signal r0 : std_logic;

signal r1 : std_logic;

attribute hu_set : string;

attribute rloc : string;

attribute hu_set of r0 : signal is "set0";

attribute hu_set of r1 : signal is "set0";

attribute rloc of r0 : signal is "X0Y0";

attribute rloc of r1 : signal is "X0Y1";

次に、VHDL ソ ース で、hu_set お よ び RLOC が同様に命名 さ れた非ア ク テ ィ ブな属性に置換 さ れます。

signal r0 : std_logic;

signal r1 : std_logic;

attribute m_hu_set : string;

ドキュメント内 Vivado Design Suite ユーザー ガイド: 制約の使用 (ページ 158-183)

関連したドキュメント