AR# 62488

Vivado 制約 - create_generated_clock コマンドの一般的な使用ケース

説明

生成クロックは、クロック調整ブロック (例: MMCM) と呼ばれる特別なセル、またはユーザー ロジックによって、デザイン内で駆動されます。

XDC コマンドの create_generated_clock は、生成クロック オブジェクトを作成するために使用されます。

構文:

create_generated_clock  [-name <arg>] [-source <args>] [-edges <args>]
                        [-divide_by <arg>] [-multiply_by <arg>]
                        [-combinational] [-duty_cycle <arg>] [-invert]
                        [-edge_shift <args>] [-add] [-master_clock <arg>]
                        [-quiet] [-verbose] <objects>


このアンサーでは、生成クロックの作成の一般的な使用ケースについて説明します。

create_generated_clock の詳細は、『Vivado Design Suite ユーザー ガイド: 制約の使用』(UG903) を参照してください。

ソリューション

生成クロックは、その派生元のマスター クロックに関連付けられています。

マスター クロックは、プライマリ クロックまたは別の生成クロックにすることができます。

すべてのプライマリ クロックを最初に定義するようにしてください。

プライマリ クロックは生成クロックの定義に必要です。


使用ケース 1: 自動派生クロック


MMCMx、PLLx、IBUFDS_GTE2、BUFR、PHASER_x プリミティブなど、クロック調整ブロック (CMB) の場合は、生成クロックを手動で作成する必要はありません。

関連するマスター クロックが既に定義されている場合、Vivado では生成クロックが自動的に作成されます。

CMB に入力されるプライマリ クロックのみを作成する必要があります。

自動生成クロック名は、合成済みまたはインプリメント済みデザインで report_clocks コマンドによりレポートされ、その他のコマンドまたは制約で使用できるようになります。


ツールによって自動作成される生成クロックの名前を強制することは可能です。

下の「使用ケース 2: 自動派生クロックの名前変更」を参照してください。


ユーザー定義のクロック (プライマリまたは生成) が同じネットリスト オブジェクトでも定義されていて、同じ定義ポイント (ネットまたはピン) 上にある場合、自動生成クロックは作成されません。

Vivado では、既存のプライマリまたは生成クロックによって自動生成クロック伝搬が妨げられると、次のような警告メッセージが表示されます。


Warning:[Timing 38-3] User defined clock exists on pin <pin_name> and will prevent any subsequent automatic derivation.


自動派生クロックの例

次の自動派生クロックの例は、MMCM によって生成されたクロックに対するものです。



XDC 制約:

create_clock -name clkin -period 10.000 [get_ports clkin]


report_clocks コマンドにより、次の情報が出力されます。


Clock Period Waveform Attributes Sources

clkin 10.00000 {0.00000 5.00000} P {clkin}

cpuClk 10.00000 {0.00000 5.00000} P,G {clkip/mmcm0/CLKOUT}

......


使用ケース 2: 自動派生クロックの名前変更

ツールによって自動作成される生成クロックの名前を強制することは可能です。

名前変更には、create_generated_clock コマンドといくつかのパラメーターを使用します。


create_generated_clock -name new_name [-source source_pin] [-master_clock master_clk] source_object


詳細は (Xilinx Answer 57197) を参照してください。


1 つの create_generated_clock コマンドで、名前変更する固有の自動派生クロックを 1 つ指定する必要があります。

ユーザー定義の生成クロックの名前は変更できません。


自動派生クロックの名前変更に関する一般的な問題は、(Xilinx Answer 62528) および (Xilinx Answer 62537) を参照してください。


自動派生クロックの名前変更の例


使用ケース 1 と同じ例:

XDC 制約:

create_clock -name clkin -period 10.000 [get_ports clkin]
#renaming auto-derived clock cpuClk
create_generated_clock -name user_clk [get_pins clkip/mmcm0/CLKOUT]

report_clocks コマンドにより、次の情報が出力されます。

Clock Period Waveform Attributes Sources

clkin 10.00000 {0.00000 5.00000} P {clkin}

user_clk 10.00000 {0.00000 5.00000} P,G {clkip/mmcm0/CLKOUT}

......

使用ケース 3: ユーザー定義の生成クロック

自動生成が行われない場合、クロック変更を手動で実行する必要があります。

たとえば、LUT および FF で構成されるクロック分周器ロジックの場合、Vivado では、ソース クロックと分周クロックとの間の周期関係を認識できません。 

そのため、分周クロックにはユーザー定義の生成クロックが必要となります。

この種類のクロック分周器の使用は FPGA ではお勧めしません。クロックの分周には、MMCM または PLL を使用してください。

-source オプションを使用してマスター ソースを指定してください。
これにより、マスター クロックが伝搬されるデザインのピンまたはポートが指定されます。
 一般的には、 マスター クロックのソース ポイントまたは生成クロックのソース セルの入力クロック ピンを使用します。


ユーザー定義の生成クロックの例

プライマリ クロックによってレジスタ分周器が駆動され、レジスタ出力でクロックの 2 分周バージョンが作成されます。


 

次は、2 つの同等な制約です。

create_clock -name clkin -period 10 [get_ports clkin]

# オプション 1: マスター クロック ソースは、回路の分周値を用いるプライマリ クロック ソース ポイントです。

create_generated_clock -name clkdiv2 -source [get_ports clkin] -divide_by 2 [get_pins REGA/Q]

# オプション 2: マスター クロック ソースは、回路の分周値を用いる REGA クロック ピンです。

create_generated_clock -name clkdiv2 -source [get_pins REGA/C] -divide_by 2 [get_pins REGA/Q]


使用ケース 4: ODDR による転送クロック


ソース同期アプリケーションでは、クロックがソース デバイスで再生成され、データと共にデスティネーション デバイスへ転送されます。

ダブル データ レートのレジスタを介したクロック転送を使用するのが、一般的な方法です。

次の例では、ソース同期インターフェイスの転送クロックを生成するために、ソース デバイスの ODDR インスタンスが使用されています。

ソース同期インターフェイスの set_output_delay 制約で使用されるようにするために、ユーザー定義の生成クロックが転送クロックに対して作成される必要があります。

クロック出力ポートにおける生成クロックの作成の例:


 

create_generated_clock -name fwd_clk -multiply_by 1 -source [get_pins ODDR_inst/C] [get_ports CLKOUT]

これで生成クロックが set_output_delay コマンドで参照可能になります。

set_output_delay コマンドの詳細は、(UG903) を参照してください。


使用ケース 5: クロック マルチプレクサーで駆動される重複したクロック

2 つ以上のクロックがマルチプレクサー (または組み合わせセル) に駆動されると、すべてが伝搬され、セルのファンアウトで重複します。

そのため、CDC パスを確認して新しい制約を追加し、重複によるフォルス パスを除外する必要があります。

正しい制約は、デザインでクロックが対話する方法と場所によって異なります。

場合によっては、CDC パスが正しく制約されるようにするために、マルチプレクサーを介したクロックに対してユーザー定義の生成クロックを作成する必要があります。


マルチプレクサーを介したクロックの例:


 


clk0 および clk1 がマルチプレクサーのファンアウト (FDM0 および FDM1) でのみ対話する (つまり、パス A、B、および C は存在しない) 場合は、clk0 および clk1 にクロック グループ制約を直接適用しても問題ありません。

set_clock_groups -logically_exclusive -group clk0 -group clk1

clk0、clk1、または両方がマルチプレクサーを介したクロックと直接対話する (つまり、パス A、B、または C が存在する) 場合は、clk0 および clk1 に制約を直接適用すると、パス A、B、および C のタイミングを維持できなくなってしまいます。

代わりに、マルチプレクサーのファンアウトのクロックの部分に適用してください (追加のクロック定義が必要となる)。

この場合、マルチプレクサー出力ピンに 2 つの生成クロックが作成され、生成クロック ドメインをまたぐパスは無視されます。

create_generated_clock -name clk0mux -divide_by 1 -source [get_pins mux/I0] [get_pins mux/O]
create_generated_clock -name clk1mux -divide_by 1 -add -master_clock clk1 -source [get_pins mux/I1] [get_pins mux/O]
set_clock_groups -physically_exclusive -group clk0mux -group clk1mux
AR# 62488
日付 03/16/2018
ステータス アクティブ
種類 一般
ツール