FPGA 設計では、タイミング制約は回路のパフォーマンスと信頼性にとって非常に重要です。前回の記事では、FPGA タイミング制約の主要なクロック制約について詳しく紹介しました。
この記事では、派生クロック制約とクロック グループ化制約の設定について詳しく紹介し、詳細な制約コマンドと例を示します。
1. 派生クロック制約
生成クロック (生成クロックとも呼ばれます) は、FPGA のメイン クロック信号から派生したサブクロック信号です。
これらのサブクロック信号は、FPGA 内のさまざまな領域で使用して、さまざまなモジュールのニーズを満たすことができます。これは通常、MMCM または PLL、または組み合わせロジックによって生成される逓倍および分周されたクロック信号です。
派生クロックは、次のようにソース クロックに関連付けられます。
-
単純な周波数分割
-
単純な周波数逓倍
-
非整数比を取得するための周波数逓倍と周波数分割の組み合わせ
-
位相シフトまたは波形反転
-
デューティサイクルの変化
-
上記の関係をすべて組み合わせたもの
派生クロックの制約では、生成されたクロックをクロック ツリーに追加する必要があり、create_generated_ Clock コマンドを使用して派生クロックのクロック制約を定義できます。その構文は次のとおりです。
create_generated_lock -name <生成されたクロック名> \
-source <マスタークロックソースのピンまたはポート> \
-multiply_by <mult_factor> \
-divide_by <div_factor> \
-master_クロック <マスタークロック> \ <
ピンまたはポート>
パラメータ |
意味 |
---|---|
-名前 |
時計名 |
-ソース |
ソースクロック |
-multiply_by |
ソースクロックに対する倍率 |
-除算 |
ソースクロックを基準とした分周係数 |
ピンまたはポート |
物理ノード |
create_generated_lock コマンドを使用すると、派生クロックのタイミング制約を柔軟に定義し、それをメイン クロックと組み合わせて、回路の安定性と正確性を確保できます。
時計の例を作成します。
create_ Clock -name clk_24m -period 10 [get_ports sys_clk]
create_generated_ Clock -name clkdiv2 -source [get_ports clk_24m] -divide_by 2 \ [get_pins REGA/Q]
派生クロックには通常、「FPGA開発ソフトウェアによって自動的に派生される派生クロック」と「ユーザーが定義する派生クロック」の2つのケースがあります。
MMCMやPLLの分周により出力されるクロックなど、 FPGA開発ソフトウェアによって自動導出される派生クロックについては、タイミング制約を記述する必要はなく、MMCMやPLLに入力されるメインクロックに対してタイミング制約を行うだけで済みます。 。
ユーザー定義の派生クロックは、通常、ユーザーが組み合わせロジックを通じて構築した分周クロックを指します。これには、派生クロック制約を自分で記述する必要があります。
2. クロックグループ化の制約
FPGA 回路のメイン クロックに加えて、DFF クロック、クロック分周器クロックなど、他にも多くの派生クロックがあります。
これらのクロックは、回路のパフォーマンスと信頼性にとって非常に重要です。
したがって、回路の安定した動作を確保するには、これらの派生クロックとメインクロックをグループ化し、それらの間の階層関係を定義する必要があります。
Vivado では、set_ Clock_groups コマンドを使用してクロック グループを定義できます。その構文は次のとおりです。
set_ Clock_groups -name <group_name>
-group <group_type> <async_port_list> <sync_port_list\> [-logically\_exclusive]
パラメータ |
意味 |
---|---|
-名前 |
クロックグループの命名 |
-グループ |
クロックパケットの種類 |
aysnc_port_list |
非同期ポートリスト |
同期ポートリスト |
同期ポートリスト |
-論理的に排他的 |
論理的に独立したグループであるかどうかを指定するために使用されます |
1. 2 つのメインクロックは非同期です
create_ Clock -period 12 -name clk1 [get_ports clk1] create_ Clock -period 6 -name clk2 [get_ports clk2] set_lock_groups -asynchronous -group clk1 -group clk2
2. 異なるクロック周波数のタイミングが同じクロック ポートで収束するかどうかを確認します。
create_ Clock -name clkA -period 20.0 [get_ports clk] create_ Clock -name clkB -period 10.0 [get_ports clk] -add create_ Clock -name clkC -period 5.0 [get_ports clk] -add create_ Clock -name clk0 -period 10.0 [get_ports clk0] set_ Clock_groups -physically_exclusive -group clkA -group clk1B -group clkC set_ Clock_groups -asynchronous -group "clkA clkB clkC" -group clk0
3、BUFGMUX
MMCM によって生成される BUFGMUX へのクロック入力が 2 つある場合、1 つのクロックのみが使用され、この時点で設定されるタイミング制約は次のとおりです。
set_ Clock_groups -logical_exclusive \
-group [get_locks -of [get_pins inst_mmcm/inst/mmcm_adv_inst/CLKOUT0]] \
-group [get_locks -of [get_pins inst_mmcm/inst/mmcm_adv_inst/CLKOUT1]]
3. まとめ
この記事では、派生クロック制約とクロック グループ化制約について詳しく紹介します。これら 2 つは、タイミング制約の一般的な記述方法です。タイミング制約を学習する際には、そこから学ぶことができます。
この記事は今後も定期的に更新されます。コードワードは簡単ではありません。⭐️いいねをクリックして、⭐️を集めて非表示にしてください。迷わないようにしてください。
この記事はFPGAの入門から独創性の習得までを目的としていますが、ご質問がございましたら、コメント欄にてお問い合わせください。
学習教材の共有、github オープンソース コード:「FPGA ナレッジ ベース」
皆様のご支援が創作活動を続ける最大の原動力です!この記事が役に立った場合は、励ましをお願いします。