UPGRADE YOUR BROWSER

We have detected your current browser version is not the latest one. Xilinx.com uses the latest web technologies to bring you the best online experience possible. Please upgrade to a Xilinx.com supported browser:Chrome, Firefox, Internet Explorer 11, Safari. Thank you!

このページをブックマークに追加

AR# 62136

Vivado 制約 - 階層区切り文字のスラッシュ (/) の XDC と UCF での機能の仕方の違い

説明

ISE では、デザインで「a_inst/b_inst/c_inst/data_out_reg_r」というレジスタを検索するのに、次のコマンドを UCF で使用することができます。

INST "*/data_out_reg_r" TNM = "group1";


しかし、Vivado で同じレジスタを同じパターンを使用して検索すると (デザイン階層は保持された状態)、次のようなメッセージが表示されます。

%get_cells */data_out_reg_r
WARNING: [Vivado 12-180] No cells matched '*/data_out_reg_r'.
%get_cells -hier */data_out_reg_r
WARNING: [Vivado 12-180] No cells matched '*/data_out_reg_r'.


このレジスタは完全な名前を検索するとデザインで検出されます。

%get_cells a_inst/b_inst/c_inst/data_out_reg_r
a_inst/b_inst/c_inst/data_out_reg_r


Vivado での get_cells コマンドに何か問題があるのですか。


ソリューション

XDC と UCF では、オブジェクトの階層を区切る文字 (/) が異なる働きをします。 

Vivado では、ワイルドカード文字 (*) が階層を越えては使用できません。
Vivado でオブジェクトを検索する場合、オブジェクトの階層名に含まれるスラッシュ (/) は、階層の境界を示し、これをワイルドカード文字 (*) に置き換えることはできません。
UCF では、オブジェクトの階層区切り文字であるスラッシュ (/) は、名前の一部であり、ワイルドカード文字 (*) に置き換えることができます。
これは、Vivado で、すべての階層をフラットにしてすべてのデザイン オブジェクトを同一レベルにするのと同じシナリオです。

上記の例でいうと、「get_cells */data_out_reg_r」は、最上位のすぐ下にあるサブモジュールにある「data_out_reg_r(2)」という名前のセルを検索しいます。

「get_cells -hier */data_out_reg_r」はすべての階層にある「*/data_out_reg_r」という名前のセルを検索します。

つまり、この 2 つのコマンドで検索しても何のオブジェクトも検索結果に表示されません。

オブジェクトを検索できるようにするには、次のコマンドのいずれかを使用してください。

get_cells */*/*/data_out_reg_r
get_cells -hier data_out_reg_r
get_cells -hier -filter {NAME =~ */data_out_reg_r }
get_cells -hier -regexp .*data_out_reg_r

UCF で同様の検索を行うには、オブジェクトの NAME プロパティを使用します。

get_cells -hier -filter {NAME =~ */data_out_reg_r }

NAME プロパティの階層区切り文字 (/) は、UCF の場合と同じように普通の文字です。

1 点注意すべきことは、Vivado ではピンの階層名でのスラッシュ (/) は、2 つの別々ものを指すために使用されています。

たとえば、「a_inst/b_inst/c_inst/data_out_reg_r/Q」というピンの場合、最後のスラッシュは「data_out_reg_r/Q」というピン名の一部です。

その他のスラッシュは階層を区切るためのものです。

最後のスラッシュは階層を区切るものではありませんが、これもワイルドカード文字 (*) に置き換えることはできません。

このピンは、次のコマンドで検索すると検索結果に表示されます。
get_pins */*/*/data_out_reg_r/Q
get_pins -hier data_out_reg_r/Q
get_pins -hier data_out_reg_r/*
get_pins -hier */Q

次のコマンドだと「a_inst/b_inst/c_inst/data_out_reg_r/Q」は検索されません。

%get_pins *Q
WARNING: [Vivado 12-508] No pins matched '*Q'.
%get_pins a_inst/b_inst/c_inst/data_out_reg_r*
WARNING: [Vivado 12-508] No pins matched 'a_inst/b_inst/c_inst/data_out_reg_r*'.
%get_pins -hier Q
WARNING: [Vivado 12-508] No pins matched 'Q'.
%get_pins a_inst/b_inst/c_inst/*
---this command returns the hierarchical pins on the c_inst boundary (e.g. a_inst/b_inst/c_inst/I1) but not any pins inside this hierarchy.

注記 :
(1) 階層の境界は次の方法で保持することができます。
a. -flatten_hierarchy = none または rebuilt に設定
b. モジュール/エンティティ レベルで「keep_hierarchy = true」と設定
c. ジュール/エンティティ レベルで「dont_touch = true」と設定
 
(2) オブジェクト名および階層名 : 「data_out_reg_r」はオブジェクト名で、「a_inst/b_inst/c_inst/data_out_reg_r」はオブジェクトの階層名です。
しかし、デザイン階層がフラットになると、オブジェクト名は「a_inst/b_inst/c_inst/data_out_reg_r」となり、すべてのオブジェクトは同一レベルになります。

AR# 62136
日付 11/25/2014
ステータス アクティブ
種類 一般
ツール
  • Vivado Design Suite