wbOutputData_OBUF[14:31]
の現在の配線を調べて、遅延を一貫して追加するために変更できる箇所を判断することから始めます。詳しく調べるため、Tcl で for
ループを使用して、これらのネットの既存の配線をレポートします。- [Tcl Console] ウィンドウに次のコマンドを入力します。
for {set i 14} {$i<32} {incr i} { puts "$i [get_property ROUTE [get_nets -of [get_pins -of \ [get_cells wbOutputData_reg[$i]] -filter DIRECTION==OUT]]]" }
この
for
ループはインデックスを 14 に初期化し (i を 14 に設定)、ROUTE プロパティを取得して選択したネットの配線の詳細を返します。[Tcl Console] ウィンドウに、ネット インデックスと各ネットの相対的な配線情報が表示されます。
14 { CLBLL_LL_AQ CLBLL_LOGIC_OUTS4 WW2BEG0 IMUX_L34 IOI_OLOGIC0_D1 LIOI_OLOGIC0_OQ LIOI_O0 } 15 { CLBLL_LL_AQ CLBLL_LOGIC_OUTS4 WW2BEG0 IMUX_L34 IOI_OLOGIC1_D1 LIOI_OLOGIC1_OQ LIOI_O1 } 16 { CLBLL_LL_AQ CLBLL_LOGIC_OUTS4 WW2BEG0 IMUX_L34 IOI_OLOGIC0_D1 LIOI_OLOGIC0_OQ LIOI_O0 } 17 { CLBLL_LL_AQ CLBLL_LOGIC_OUTS4 WW2BEG0 IMUX_L34 IOI_OLOGIC1_D1 LIOI_OLOGIC1_OQ LIOI_O1 } 18 { CLBLL_LL_AQ CLBLL_LOGIC_OUTS4 WW2BEG0 IMUX_L34 IOI_OLOGIC0_D1 LIOI_OLOGIC0_OQ LIOI_O0 } 19 { CLBLL_LL_AQ CLBLL_LOGIC_OUTS4 WW2BEG0 IMUX_L34 IOI_OLOGIC1_D1 LIOI_OLOGIC1_OQ LIOI_O1 } 20 { CLBLL_LL_AQ CLBLL_LOGIC_OUTS4 WW2BEG0 IMUX_L34 IOI_OLOGIC0_D1 LIOI_OLOGIC0_OQ LIOI_O0 } 21 { CLBLL_LL_AQ CLBLL_LOGIC_OUTS4 WW2BEG0 IMUX_L34 IOI_OLOGIC1_D1 LIOI_OLOGIC1_OQ LIOI_O1 } 22 { CLBLL_LL_AQ CLBLL_LOGIC_OUTS4 WW2BEG0 IMUX_L34 IOI_OLOGIC0_D1 LIOI_OLOGIC0_OQ LIOI_O0 } 23 { CLBLL_LL_AQ CLBLL_LOGIC_OUTS4 WW2BEG0 IMUX_L34 IOI_OLOGIC1_D1 LIOI_OLOGIC1_OQ LIOI_O1 } 24 { CLBLL_LL_AQ CLBLL_LOGIC_OUTS4 WW2BEG0 IMUX_L34 IOI_OLOGIC0_D1 LIOI_OLOGIC0_OQ LIOI_O0 } 25 { CLBLL_LL_AQ CLBLL_LOGIC_OUTS4 WW2BEG0 IMUX_L34 IOI_OLOGIC1_D1 LIOI_OLOGIC1_OQ LIOI_O1 } 26 { CLBLL_LL_AQ CLBLL_LOGIC_OUTS4 WW2BEG0 IMUX_L34 IOI_OLOGIC0_D1 LIOI_OLOGIC0_OQ LIOI_O0 } 27 { CLBLL_LL_AQ CLBLL_LOGIC_OUTS4 WW2BEG0 IMUX_L34 IOI_OLOGIC1_D1 LIOI_OLOGIC1_OQ LIOI_O1 } 28 { CLBLL_LL_AQ CLBLL_LOGIC_OUTS4 WW2BEG0 IMUX_L34 IOI_OLOGIC0_D1 LIOI_OLOGIC0_OQ LIOI_O0 } 29 { CLBLL_LL_AQ CLBLL_LOGIC_OUTS4 WW2BEG0 IMUX_L34 IOI_OLOGIC1_D1 LIOI_OLOGIC1_OQ LIOI_O1 } 30 { CLBLL_LL_AQ CLBLL_LOGIC_OUTS4 WW2BEG0 IMUX_L34 IOI_OLOGIC0_D1 LIOI_OLOGIC0_OQ LIOI_O0 } 31 { CLBLL_LL_AQ CLBLL_LOGIC_OUTS4 WW2BEG0 IMUX_L34 IOI_OLOGIC1_D1 LIOI_OLOGIC1_OQ LIOI_O1 }
返された ROUTE プロパティを見ると、ノード
IMUX_L34
までは、出力レジスタからのネットが同じリソースを使用して配線されていることがわかります。それ以降は、Vivado 配線で奇数インデックスと偶数インデックスに異なるノートが使用されて、ダイ パッドまでの接続が作成されています。配線パスを再利用することにより、偶数インデックスのネット (
wbOutputData_OBUF[14]
など) のいずれかと基数インデックスのネット (wbOutputData_OBUF[15]
) のいずれかを手動配線し、その配線をほかの偶数インデックスのネットと奇数インデックスのネットにコピーします。 - [Tcl Console] ウィンドウで次のコマンドを使用して最初のネットを選択します。
select_objects [get_nets -of [get_pins -of \ [get_cells wbOutputData_reg[14]] -filter DIRECTION==OUT]]
- [Device] ウィンドウで右クリックし、Unroute をクリックします。
- [Confirm Unroute dialog box] ダイアログ ボックスで Yes をクリックします。
[Device] ウィンドウに、配線が解除されたネットがレジスタと出力パッドの間のフライラインとして表示されます。
- [Maximize] ボタン をクリックして [Device] ウィンドウを最大表示にします。
- ネットを右クリックし、Enter Assign
Routing Mode をクリックします。
次の図に示す [Assign Routing Mode: Target Load Cell Pin] ダイアログ ボックスが開きます。ここで配線するロード ピンを選択できます。ここでは、リストされているロード ピンは
wbOutputData_OBUF[14]_inst
のみです。
- ロード セル ピン wbOutputData_OBUF[14]_inst/Iを選択し、OK をクリックします。
Vivado IDE が配線割り当てモードになり、次の図に示すように [Device] ウィンドウの右側に [Routing Assignment] ウィンドウが表示されます。
[Routing Assignment] ウィンドウには、次のセクションがあります。
- Net
- 配線する現在のネットを表示します。
- Options
- デフォルトでは非表示になっており、Options をクリックすると表示できます。
- Number of hops
- 使用可能な近傍ノードをレポートする際に調べるプログラマブル インターコネクト ポイント (PIP) の数を定義します。デフォルト値は 1 です。
- Maximum number of neighbors
- 選択用に表示する近傍ノードの数を制限します。
- Allow overlap with unfixed nets
- 制限の緩い配線をイネーブルまたはディスエーブルにします。これにより競合が発生する可能性があるので、後で解決する必要があります。デフォルトではオンです。
- Neighbor Nodes
- 配線のパスを定義する際に使用可能な近傍の PIP/ノードをリストします。
- Assigned Nodes
- 選択したネットの配線パスに現在割り当てられているノードを表示します。
- Assign Routing
- [Routing Assignment] ウィンドウで現在定義されているパスを選択されているネットの配線パスとして割り当てます。
- Exit Mode
- [Routing Assignment] ウィンドウを閉じます。
[Assigned Nodes] セクションには、現在割り当てられている 6 つのノードが表示されています。選択されているネットの近傍ノードが 1 つのみで、ほかに選択肢がない場合は、Vivado 配線で自動的に割り当てられます。[Device] ウィンドウでは、割り当て済みの配線は部分配線としてオレンジ色で表示されます。
現在選択されているネット
wbOutputData_OBUF[14]
は、ノードCLBLL_LL_AQ
およびCLBLL_LOGIC_OUTS4
が出力レジスタwbOutputData_reg[14]
に使用可能な唯一の近傍ノードなので、既に割り当てられています。ノードIMUX_L34
、IOI_OLOGIC0_D1
、LIOI_OLOGIC0_OQ
、およびLIOI_O0
も、デスティネーションである出力バッファー (OBUF) に使用可能な唯一の近傍ノードなので、既に割り当てられています。パスのこれらの配線済み部分の間にあるギャップは、配線を定義する際に使用可能な近傍ノードが複数ある部分です。このギャップに手動配線を使用してパスを完成させ、必要な遅延を追加してクロック スキューを調整します。
ギャップを配線するには、ギャップのいずれかの端のノードを選択した後、配線が割り当てられる近傍ノードを選択します。ノードを選択すると、[Routing Assignment] ウィンドウの [Neighbor Nodes] セクションに使用可能な近傍ノードが表示され、[Device] ウィンドウで白い破線として示されます。
ヒント: 表示される近傍ノードの数は、[Options] セクションの [Number of hops] に指定した値によって異なります。 - [Assigned Nodes] セクションで、ギャップの前の CLBLL_LOGIC_OUTS4 ノードを選択します。
次の図に示すように使用可能な近傍ノードが表示されます。
クロック スキューを補正するため遅延を追加するには、自動選択されたより直接的な配線よりも多少長くなるような近傍ノードを選択します。
- [Neighbor Nodes] セクションで、ノード NE2BEG0 を選択します。
このノードを使用すると、出力バッファーへのより直接的な配線を使用する
WW2BEG0
などのほかのノードよりも、配線に多少の遅延が追加されます。近傍ノードをクリックして選択すると、その配線を確認できます。ノードをダブルクリックすると、そのノードが一時的にネットに割り当てられ、そのノードから次の近傍ノードを選択できます。 - [Neighbor Nodes] セクションで、ノード NE2BEG0 をダブルクリックして割り当てます。
このノードが [Routing Assignment] ウィンドウの [Assigned Nodes] セクションに追加され、[Neighbor Nodes] セクションがアップデートされます。
- [Neighbor Nodes] セクションで、ノード WR1BEG1 を選択して割り当て、その後 WR1BEG2 を選択して割り当てます。ヒント: ノードを間違って割り当てた場合は、[Assigned Nodes] リストでそのノードを右クリックし、[Remove] をクリックします。
[Device] ウィンドウのズーム レベルが変更されないようにするには、[Auto Fit Selection] ツールバー ボタン をクリックします。
次の図に、部分的に配線されたパスを示します。選択されたノードは、オレンジ色で表示されています。残りのギャップには、自動配線を使用します。
- [Routing Assignment] ウィンドウの [Assigned Nodes] セクションで Net Gap を右クリックし、Auto-Route をクリックします。
Vivado 配線により、残りのギャップが配線されます。配線パスが完全に定義されたら、配線を割り当ててデザインで変更を確定します。
- [Routing Assignment] ウィンドウの下部にある Assign Routing をクリックします。
次の図に示す [Assign Routing] ダイアログ ボックスが開きます。このダイアログ ボックスは、配線パスを定義する現在割り当てられているノードのリストを表示します。このリストでノードを選択すると、[Device] ウィンドウでそのノードがハイライトされます。これにより、配線パスをデザインに確定する前に確認できます。
-
Fix Routing がオンになっていることを確認し、OK をクリックします。
[Fix Routing] をオンにすると、定義された配線が固定され、この後の配線段階で Vivado 配線により変更されるのを防ぐことができます。ここではクロック スキューを調整するためにネットを手動で配線して遅延を追加したので、これは重要です。
- [Tcl Console] ウィンドウで Tcl コマンドを確認します。
[Tcl Console] ウィンドウに、現在のネットの配線を割り当てる Tcl コマンドが表示されています。これらのコマンドは、次のとおりです。
set_property is_bel_fixed 1 [get_cells {wbOutputData_reg[14] wbOutputData_OBUF[14]_inst }] set_property is_loc_fixed 1 [get_cells {wbOutputData_reg[14] wbOutputData_OBUF[14]_inst }] set_property fixed_route { { CLBLL_LL_AQ CLBLL_LOGIC_OUTS4 NE2BEG0 WR1BEG1 WR1BEG2 SW2BEG1 IMUX_L34 IOI_OLOGIC0_D1 LIOI_OLOGIC0_OQ LIOI_O0 } } [get_nets {wbOutputData_OBUF[14]}]
重要: ネットwbOutputData_OBUF[14]
に設定されている FIXED_ROUTE プロパティは、ネット ドライバーの配置を基準とした相対フォーマットを使用した指定配線文字列を使用します。これにより、FIXED_ROUTE プロパティを同じ相対配線を使用するほかのネットにコピーして、この配線を再利用できます。偶数インデックス ネットの手動配線を定義したら、同じ手順を使用して奇数インデックス ネット
wbOutputData_OBUF[15]
の配線パスを定義します。 - [Tcl Console] ウィンドウに次を入力してネットを選択します。
select_objects [get_nets wbOutputData_OBUF[15]]
- ネットを選択したら、次を実行します。
- ネットの配線を解除します。
- 配線割り当てモードに入ります。
- ロード セル ピンを選択します。
- 指定の近傍ノード (
NE2BEG0
、WR1BEG1
、およびWR1BEG2
) を使用してネットを配線します。 - ギャップを自動配線します。
- 配線を割り当てます。
[Assign Routing] ダイアログ ボックスに、奇数インデックス ネットの配線パスを完成させるのに選択されたノードがリストされます。
wbOutputData_OBUF[14]
およびwbOutputData_OBUF[15]
ネットを、必要な遅延が追加されるよう少し長い経路を使用して配線しました。これで、[Report Datasheet] コマンドを再実行し、バスの下位ビットに対するこれらのネットのタイミングを調べることができます。 - [Timing] ウィンドウの [Datasheet] タブに移動します。ウィンドウのバナーに、デザインが変更されたためレポート最新でないことを示す情報メッセージが表示されています。
- タイミング データシート レポートで [Rerun] をクリックし、レポートを最新のタイミング情報でアップデートします。
-
wbOutputData
バスのタイミング情報を表示します。
このレポートから、配線し直したネット
wbOutputData[14]
およびwbOutputData[15]
のスキューが、出力バスの下位ビットwbOutputData[13:0]
にほぼ一致するようになったことがわかります。スキューはターゲットである基準ピンwbOutputData[0]
の 100 ps 以内です。手順 6 では、同じ配線パスを残りのネット
wbOutputData_OBUF[31:16]
にもコピーし、wbOutputData
バス全体のタイミングをより厳密なものにします。
をクリックし、