Quartus® Primeプロ・エディションのユーザーガイド: タイミング・アナライザー

ID 683243
日付 4/01/2024
Public
ドキュメント目次

2.3.5.1.2. RTLエンティティー・ベースSDC制約のスコープ

RTLでのエンティティー・ベースのSDC手法で提供される多様なスコープにより、制約の影響範囲を決定します。
表 7.  エンティティー・ベースの制約のスコープ
制約のスコープタイプ 機能 インスタンス・ベースのスコープを有効にする方法
Automatic
  • .qsf 割り当てによってのみアクセス可能です。
  • 自動スコープでは、制約はプロジェクト全体において割り当てられているエンティティーのすべてのインスタンスに適用されます。
  • 任意の get コマンド (get_pinsget_ports など) で取得するSDCファイル内のそれぞれの結果には、インスタンスのパスが先頭に付加されます。
  • get コマンドはすべて、RTLでのSDCファイルに関連付けられている、結び付けられているインスタンス内のターゲット要素に限定されます。
次の引数を使用します。
name RTL_SDC_FILE <sdc_on_rtl_file_name>

-entity <entity_name>

-library <library_name>
Manual
  • .qsf 割り当てによってのみアクセス可能です。
  • -no_sdc_promotion 設定では、自動スコープが無効になり、完全な階層パスでノードをターゲットにする必要があります。
  • エンティティー境界を越えてノードをターゲットにすることができます。
  • get_entity_current_instance コマンドは、現在のインスタンスへの最上位パスを提供します。そのため、現在のインスタンス内の要素をターゲットとするフィルターと、エンティティー境界を越えて要素をアドレス指定するコマンドをマージすることができます。
次の引数を使用します。
-name RTL_SDC_FILE <sdc_on_rtl_file_name>
-entity <entity_name>
-library <library_name>
-no_sdc_promotion
それぞれのコレクション・フィルターの前に get_entity_current_instance を付け、エンティティー境界内のノードをターゲットにします。
次に例を示します。
get_pins [get_entity_current_instance]|reg[*]|q
Disabled
  • QSF割り当てによってのみアクセス可能です。
  • -no_sdc_promotion-no_auto_inst_discovery 引数をともに使用するとスコープが無効になり、RTLでのエンティティーに結び付けられているSDCがグローバルスコープとして扱われるようになります。SDCファイルは、リンクされているそれぞれのインスタンスに対して処理されるのではなく、コンパイル全体に対して1回だけ読み取られます。
  • このモードは、RTLでのSDCと .qdb ファイルとしてエクスポートするエンティティーをまとめ、それと同時に get コマンドでグローバルな最上位パスを指定する機能を維持する場合に最適です。
次の引数を使用します。
-name RTL_SDC_FILE <sdc_on_rtl_file_name>
-entity <entity_name>
-library <library_name>
-no_sdc_promotion
-no_auto_inst_discovery

エンティティーに結び付けられているSDCファイルを定義すると、ソフトウェアは自動スコープを使用して制約を適用します。ただし、-no_sdc_promotion または -no_auto_inst_discovery 引数が指定されている場合を除きます。

自動スコープでは、フィルターの先頭にインスタンスのパスが付けられます。次の表では、制約の自動スコープにより、さまざまなTclコマンドでパスがどのように解釈されるかを示しています。

表 8.  制約の自動スコープ
制約例 インスタンス X|Y の自動スコープ制約の解釈
set_false_path -from [get_pins reg_a|clk] set_false_path -from [get_pins X|Y|reg_a|clk]
set_false_path -from [get_pins reg_a|clk] -to [get_pins reg_b|d] set_false_path -from [get_pins X|Y|reg_a|clk] -to [get_pins X|Y|reg_b|d]
set_false_path –from [get_clocks clk_1] –to [get_clocks clk_2] set_false_path –from [get_clocks clk_1] –to [get_clocks clk_2]
set_max_delay –from [get_ports in] -to [get_pins reg_a|d] 2.0 set_max_delay –from [get_ports in] -to [get_pins X|Y|reg_a|d] 2.0
get_ports * get_ports *
get_clocks * get_clocks *
get_ports a get_ports a
get_clocks a get_clocks a

-no_sdc_promotion 引数の使用を含めて、QSF割り当てによって自動スコープが無効になっている場合は、最上位パスを手動で先頭に追加することにより自動スコープと同じ動作を実現する必要があります。このプロセスを単純に行うには、-get_entity_current_instance コマンドを使用して、現在のインスタンスの最上位パスが返されるようにします。次の表は、-get_entity_current_instance コマンドを使用して最上位パスを特定のTclコマンドに追加する場合に、パスがどのように解釈されるかを示しています。

表 9.  制約の手動スコープ
制約例 手動スコープ制約の解釈
set_false_path –from [get_entity_current_instance
|reg_a|clk –to [get_entity_current_instance]|reg_b|d
set_false_path –from i1|inner|reg_a|clk –to i1|inner|reg_b|d
set_false_path –from i2|inner|reg_a|clk –to i2|inner|reg_b|d
set_false_path –from i3|reg_a|clk –to i3|reg_b|d
create_generated_clock –divide_by 2 –source \
     [get_ports inclk] –name \
     [get_entity_current_instance]_divclk \
     [get_entity_current_instance]|div 
set_multicycle_path –from \
    [get_entity_current_instance]|a \
    –to [get_entity_current_instance]|b 2
# Evaluated for instances i1 and i2
create_generated_clock –divide_by 2 –source \
     [get_ports inclk] –name i1_divclk i1|div
set_multicycle_path –from i1|a –to i1|b 2 \ 
create_generated_clock –divide_by 2 –source \ 
     [get_ports inclk] –name i2_divclk \
     i2|div set_multicycle_path –from i2|a \
     –to i2|b 2 \