Vivado の包括的なスキルを活用すれば、この HDL XDC プロパティ設定のリストを使用すると、半分の労力で 2 倍の結果が得られます。(二)

Vivado 合成ツールは、RTL ファイルまたは XDC ファイルで設定できる複数のプロパティ設定をサポートしています。これらのプロパティ設定は、対応する論理回路を生成するための合成ツールの操作をガイドするのに役立ちます。

この記事では、Vivado 合成ツールでサポートされる共通のプロパティ設定を紹介し、参考として Verilog の例を示します。

1、ゲートクロック

GATED_CLOCK 属性は、ゲート クロックの遷移を制御するために使用されます。合成設定の -gated_lock_conversion オプションと組み合わせて使用​​すると、「off」に設定すると、ゲート クロック変換を無効にすることができます。「on」に設定するとゲートクロック変換が行われ、「auto」に設定するとツールが自動で判定します。サンプルコードは次のとおりです。

(* gated_clock = “true” *) input clk; // 在Verilog中声明clk为门控时钟

2、フルケース

FULL_CASE 属性は Verilog 言語にのみ適用され、case、casex、および casez ステートメント内のすべての未作成の値を自動的に設定できます。RTL ファイルに設定するだけです。サンプルコードは次のとおりです。

(* full_case *) case select
3’b100 : sig <= val1;
3’b010 : sig <= val2;
3’b001 : sig <= val3;
endcase

3、IO_BUFFER_TYPE

IO_BUFFER_TYPE プロパティは、任意のトップレベル モジュールのポートに適用され、バッファの使用方法をツールに指示できます。Vivado 合成は、使用するバッファのタイプ (入力バッファまたは出力バッファ) を自動的に推測します。IO_BUFFER_TYPE が none に設定されている場合、自動推論は無効になります。RTL または XDC ファイルで設定できます。サンプルコードは次のとおりです。

(* IO_BUFFER_TYPE = “none” *) input in1; //Verilog示例

4、IOB

IOB は合成属性ではなく、実装プロセスで使用される属性です。レジスタが I/O バッファに接続されているかどうかを示すことができます。RTL または XDC ファイルで設定できます。サンプルコードは次のとおりです。

(* IOB = “true” *) reg sig1; //sig1将被连接到I/O buffer

5、KEEP_HIERARCHY

Vivado 合成ツールは、最適化のために階層を展開できます。モジュールの KEEP_HIERARCHY 属性を設定すると、モジュールの入力ポートと出力ポートを RTL に保存できます。つまり、完全な境界を保持できます。RTL でのみ設定できます。例:

(* keep_hierarchy = “yes” ) module test (clk,rst, in, out);  //模块示例
( keep_hierarchy = “yes” *)test u0 (.clk(clk), …  //实例化示例

6、キープ

KEEP 属性を使用すると、合成中に信号が最適化されるのを防ぎ、信号を最適化したり他のロジック ブロックに組み込んだりせずにネットリストに保持できます。モジュールのポートでは KEEP 属性を使用できません。対応する機能は、- flatten_hierarchy 属性を none に設定するか、モジュールの DONT_TOUCH 属性を設定することで実現できることに注意してください。どの信号、reg、wire でも KEEP 属性を設定できます。KEEP 属性は RTL でのみ設定できます。次に例を示します。

(* keep = “true” *) wire test;  //wire示例

7、MAX_FANOUT

MAX_FANOUT 属性は、レジスタおよび組み合わせロジック信号の最大ファンアウト制限、つまりドライブの最大数を設定するために使用されます。この制限を超えると、同一のレジスタまたは組み合わせロジックが複製されます。プロジェクト総合設定では、プロジェクト全体に対して-fanout_limitを設定しますが、信号やレジスタのみにMAX_FANOUT属性を設定すると、-fanout_limitの制限は無視されます。

さらに、-fanout_limit は制御信号 (セット信号セット、リセット信号リセット、クロック イネーブル信号クロック イネーブルなど) には影響しませんが、MAX_FANOUT 属性を使用してこれらの信号のファンアウトを制限できます。RTLまたはXDCで設定できます。

(* max_fanout = 50 *) reg test_r; //Verilog示例

8、MARK_DEBUG

MARK_DEBUG 属性を使用すると、Vivado ハードウェア マネージャーでデバッグできるように、任意のネットワーク オブジェクト (ネット) をデバッグ状態に設定できます。同時に、このプロパティにより、この信号の最適化が妨げられます。RTL または XDC で設定できます。例:

(* MARK_DEBUG = “TRUE” *) wire test_w;  //Verilog示例
set_property MARK_DEBUG TRUE [get_nets test_w]  #XDC示例

9、RAM_STYLE

RAM_STYLE 属性は、合成ツールに RAM メモリの実装方法を指示します。ブロック (BRAM またはブロック RAM を使用して実装)、分散 (分散 RAM を構築するための LUT を使用)、レジスタ (RAM の代わりにレジスタ バンクを使用)、またはウルトラ (UltraScale の URAM を使用) に設定できます。

デフォルトでは、ツールは最適な実装方法を自動的に選択します。属性が RAM を定義する信号で宣言された場合、その信号にのみ適用されます。階層で宣言された場合、その階層内のすべての RAM に適用されますが、その階層のサブ階層には影響しません。

(* ram_style = “distributed” *) reg [size-1:0] ram [(1>Deepth)-1:0]; //Verilog示例

この記事は今後も定期的に更新されます。⭐️いいねをクリックして、⭐️を承認して非表示にしてください。迷わないようにしてください。

この記事はFPGAの入門から独創性の習得までを目的としていますが、ご質問がございましたら、コメント欄にてお問い合わせください。

公式アカウントは「FPGA 習熟への入門」、無料学習教材をダウンロードしまくる、github オープンソース コード:「FPGA ナレッジ ベース

皆様のご支援が創作活動を続ける最大の原動力です!この記事が役に立った場合は、励ましをお願いします。

おすすめ

転載: blog.csdn.net/mengzaishenqiu/article/details/130308515