AR# 54778

Vivado 合成のデザイン アシスタント - 合成 HDL 属性のサポート - keep、keep_hierarchy、ram_style、rom_style

説明

このアンサーでは、Vivado 合成の属性である KEEP、KEEP_HIERARCHY、RAM_STYLE、ROM_STYLE を説明し、コード例を紹介します。このコード例は、このアンサーの最後にあるリンクからダウンロードできます。また、このアンサーには既知の問題、コード記述事例も含まれます。

注記 : 各コード例は Vivado プロジェクトの作成に直接使用できます。各例に含まれる合成属性は、各ソース ファイルのヘッダーを参照してください。

ソリューション

KEEP

信号が最適化されたりロジックに吸収されるような最適化を防ぐために、KEEP 属性を使用します。配置された位置に信号が保持され、またその信号がネットリストに配置されるように、合成ツールに指示します。

KEEP 属性はタイミング制約とともに使用するのが一般的です。普通なら最適化されるはずの信号にタイミング制約が設定されている場合は、KEEP 属性を設定することにより最適化を防ぎ、そのタイミング制約が適用されるようになります。

KEEP 属性と競合を引き起こすような属性がある場合は、通常 KEEP 属性のほうが優先されます。

  • ある信号に MAX_FANOUT 属性が設定されていて、この信号により駆動される 2 番目の信号に KEEP 属性が設定されている場合、この KEEP 属性 が優先されるのでファンアウトの属性は適用されません。
  • RAM_STYLE="block" と設定されている場合は、その RAM の一部になるはずのレジスタに KEEP 属性が設定されていると、その KEEP 属性によってブロック RAM は推論されなくなります。

有効な値は次のとおりです。

  • true : 信号を保持します。
  • false : 適宜 Vivado 合成により最適化されます。値が false になっていてもツールによって信号は削除されません。デフォルト値は false です。

注記:

  • KEEP 属性は配置配線ツールで信号を保持するためのものではありません。その場合は DONT_TOUCH 属性を使用してください。
  • KEEP 属性はモジュールまたはエンティティのポートではサポートされません。特定のポートを維持する必要がある場合は、flatten_hierarchy = none を使用するか、モジュールまたはエンティティ自身に DONT_TOUCH を使用します。
  • 後に RTL で使用されない信号には KEEP 属性を付けておいてください。 合成ではこれらの信号が維持はされますが、何も駆動しません。これにより、フローの後で問題になることがあります。
  • この属性は RTL でのみ設定することをお勧めします。維持する必要のある信号は XDC ファイルが読み込まれるよりも前に最適化されることがよくあるので、この属性は RTL で設定することで使用されるようになります。

Verilog の例

(* keep = "true" *) wire  sig1;

VHDL の例

signal sig1 : std_logic;

attribute keep : string;

attribute keep of sig1 : signal is "true";

既知の問題 :

なし


KEEP_HIERARCHY

KEEP_HIERARCHY 属性は最適化で階層を保持するために使用します。Vivado 合成ツールは RTL で指定されているとおりに階層を保持しようとしますが、QoR のために階層をフラットにしたり変更することがあります。

KEEP_HIERARCHY がインスタンスに設定されている場合は、この合成ツールはそのレベルの階層を保持します。これは QoR に影響を及ぼす可能性があり、またトライステート出力および I/O バッファーの制御ロジックを記述するモジュールには使用すべきではありません。

KEEP_HIERARCHY 属性は、モジュール、アーキテクチャ レベル、インスタンスに設定することができます。

有効な値は次のとおりです。

  • yes : 指定したレベルで階層を保持します。
  • no : 階層ブロックは最上位モジュールにマージされます。

Verilog の例

モジュールの場合

(* keep_hierarchy = "yes" *) module bottom (in1, in2, in3, in4, out1, out2);

インスタンスの場合

(* keep_hierarchy = "yes" *) bottom u0 (.in1(in1), .in2(in2), .out1(temp1));

VHDL の例

モジュールの場合

attribute keep_hierarchy : string;

attribute keep_hierarchy of beh : architecture is "yes";

インスタンスの場合

attribute keep_hierarchy : string;

attribute keep_hierarchy of u0 : label is "yes";

既知の問題 :

なし


RAM_STYLE

RAM_STYLE は Vivado 合成ツールでのメモリの自動推論方法を制御します。有効な値は次のとおりです。

  • block : RAMB タイプのコンポーネントを自動推論します。
  • distributed : LUT RAM を自動推論します。

デフォルトでは、経験則テストに基づきほとんどのデザインに対しベストな結果が得られる RAM がツールによって選択されます。RAM 用に宣言された配列にこの属性を適用してください。

Verilog の例

(* ram_style = "distributed" *) reg [data_size-1:0] myram [2**addr_size-1:0];

VHDL の例

attribute ram_style : string;

attribute ram_style of myram : signal is "distributed";

既知の問題 :

なし


ROM_STYLE

ROM_STYLE は Vivado 合成ツールでの ROM メモリの自動推論方法を制御します。有効な値は次のとおりです。

  • block : RAMB タイプのコンポーネントを自動推論します。
  • distributed : LUT RAM を自動推論します。

デフォルトでは、経験則テストに基づきほとんどのデザインに対しベストな結果が得られる ROM がツールによって選択されます。

Verilog の例

(* rom_style = "distributed" *) reg [data_size-1:0] myrom [2**addr_size-1:0];

VHDL の例

attribute rom_style : string;
attribute rom_style of myrom : signal is "distributed";
 
既知の問題 :
なし
 
表 1 :
 
ファイル名 属性
keep.zip KEEP
keep_hierarchy.zip KEEP_HIERARCHY
ram_style.zip RAM_STYLE
rom_style.zip ROM_STYLE
 

添付ファイル

関連添付ファイル

タイトル サイズ ファイルタイプ
keep.zip 1 KB ZIP
keep_hierarchy.zip 1 KB ZIP
ram_style.zip 1 KB ZIP
rom_style.zip 1 KB ZIP

アンサー レコード リファレンス

マスター アンサー レコード

Answer Number アンサータイトル 問題の発生したバージョン 修正バージョン
55160 Vivado 合成のデザイン アシスタント - 合成 HDL 属性のサポート N/A N/A
AR# 54778
日付 06/04/2014
ステータス アクティブ
種類 ソリューション センター
ツール