Comments
Description
Transcript
Report Template
LatticeECP3 ファミリ クロックデザインガイド August.2011 Ver1.0 LatticeECP3 ファミリ クロック・アーキテクチャと 設計ガイドライン ドキュメント番号 JDG08_001 1 LatticeECP3 ファミリ クロックデザインガイド August.2011 Ver1.0 目次 1 はじめに ··················································· 4 2 クロック・アーキテクチャ ··························· 5 2.1 2.2 2.3 2.4 3 Primary クロック ................................................................ 5 2.1.1 Primary クロック本数と Quadrant 分割 ........................................ 5 2.1.2 PURE ラインと DCS ライン ......................................................... 6 2.1.3 Primary クロックの Quadrant 分割 ............................................... 6 2.1.4 クロック選択回路に接続できるクロックソース............................ 7 2.1.5 DCS 機能 ...................................................................................... 8 Secondary クロック........................................................... 10 2.2.1 Secondary クロックの概要 ......................................................... 10 2.2.2 クロック選択回路に接続できるクロックソース.......................... 11 エッジクロック .................................................................. 11 2.3.1 エッジクロックの概要 ................................................................ 11 2.3.2 クロック選択回路に接続できるクロックソース.......................... 13 クロックソース .................................................................. 14 2.4.1 クロック入力ピン ....................................................................... 14 2.4.2 PLL ............................................................................................. 14 2.4.3 DLL ............................................................................................. 16 2.4.4 CLKDIV マクロ(クロック分周器) ................................................ 16 2.4.5 CIB .............................................................................................. 17 2.4.6 SERDES/PCS マクロ ................................................................. 17 クロック・デザインフロー ························· 19 3.1 3.2 HDL ソースの記述および論理合成 .................................... 19 3.1.1 グローバルクロック・バッファのインスタンス記述 .................. 19 3.1.2 DCS のインスタンス記述 ........................................................... 19 3.1.3 Gated クロック ........................................................................... 21 3.1.4 分周クロック .............................................................................. 21 3.1.5 論理合成時のタイミング制約 ...................................................... 22 使用するクロック配線の指定 ............................................. 23 3.2.1 Spreadsheet View での設定方法 ................................................. 23 3.2.2 制約ファイルでの設定方法 ......................................................... 26 ドキュメント番号 JDG08_001 2 LatticeECP3 ファミリ クロックデザインガイド August.2011 4 Ver1.0 クロック設計のガイドライン ······················ 28 4.1 4.2 4.3 クロック入力ピンアサインのガイドライン ........................ 28 4.1.1 I/O タイミングの基準クロック .................................................... 28 4.1.2 I/O タイミングの制約が無いクロック ......................................... 28 クロック出力の生成 ........................................................... 28 内部クロックの設計ガイドライン ...................................... 29 4.3.1 4.4 PLL を使用する場合の設計ガイドライン .......................... 33 4.4.1 4.5 4.6 4.7 5 位相シフト機能を使用する場合のクロックアサイン .................. 33 SERDES を使用する場合のクロック設計ガイドライン .... 33 4.5.1 受信側クロックのクロック配線使用 ........................................... 33 4.5.2 受信側クロックの振る舞いと設計の注意 .................................... 35 4.5.3 送信側クロックのクロック配線使用 ........................................... 36 DCS の使用のガイドライン ............................................... 37 4.6.1 クロックリソースの検討 ............................................................. 37 4.6.2 DCS カスケード接続................................................................... 37 クロック専用配線を使用しない場合のガイドライン.......... 38 その他のクロック関連事項について ············· 41 5.1 6 Quadrant 分割のガイドライン .................................................... 29 周波数拡散クロックのサポート ......................................... 41 改訂履歴 ················································· 42 ドキュメント番号 JDG08_001 3 LatticeECP3 ファミリ クロックデザインガイド August.2011 1 Ver1.0 はじめに 本ドキュメントは、LatticeECP3 ファミリのクロックツリー設計に焦点を当てて、要点・諸要件をま とめたものです。 本ドキュメントは LatticeECP3 のデータシート(DS)とテクニカルノート(TN)をベースとし、必要に 応じてその他関連 TN・資料を参照し、かつ独自に内容を拡充したものです。それらについては随時、 言及するものとしますが、併せてご一読されることを勧めます。 なお、本ドキュメントは Lattice ECP3 のクロック専用配線を最適かつ有効に使用するためのガイド ラインです。 ドキュメント番号 JDG08_001 4 LatticeECP3 ファミリ クロックデザインガイド August.2011 2 Ver1.0 クロック・アーキテクチャ この章では LatticeECP3 のクロック・アーキテクチャについて理解するため、クロック配線および それに関連する回路の構成等について説明します。 LatticeECP3 ファミリには、 配線済みの低スキューのクロック配線が 3 種類あります。1 つ目はロジッ ク領域用のクロック専用配線 Primary クロック、2 つ目は同じくロジック領域用でクロックイネーブ ルやリセットでも使用できる Secondary クロック配線、3 つ目は I/O レジスタ(DDR のみ)用の低ス キュークロック専用配線 Edge クロックです。2.1、2.2、2.3 項で各クロックのアーキテクチャについ て説明します。 2.1 Primary クロック この項では、Primary クロックの回路的な構成について説明します。クロック選択機能や配線接続に ついての説明もありますが、特に記述の無い限り物理的な構成について説明しているだけで、ユー ザーが指定する必要性を述べているのではありません。ほとんどの処理はツールが自動で行います。 2.1.1 Primary クロック本数と Quadrant 分割 デバイスの中央付近に Primary クロック用のクロックバッファとクロック信号を選択するクロック 選択回路があります。Primary クロックは、デバイスを4分割した Quadrant という領域ごとに 8 本 ずつ配線されており、クロック入力ピンから入力されたクロックや PLL 出力等は、全てこのクロッ ク選択回路を介して各 Quadrant の Primary クロックに接続されます(図 2-1)。 図 2-1 Primary クロックと選択回路 クロック選択回路には数十本のクロック入力ポートが有り、その中から各 Quadrant の Primary ク ロック配線に接続するクロックが選択されます。 ドキュメント番号 JDG08_001 5 LatticeECP3 ファミリ クロックデザインガイド August.2011 Ver1.0 2.1.2 PURE ラインと DCS ライン 8 本の Primary クロック配線の内、6 本はクロック選択回路の出力が直接に接続される[PURE]ライ ン、残り 2 本はクロック選択回路の出力がさらに DCS というセレクタを介して接続される DCS ライ ンです。 図 2-2 DCS 機能を使用しない場合の DCS ラインの接続 DCS は Dynamic Clock Select の略で、ハザードを発生させずにクロックを切り替えたり Gated ク ロックを生成したりといった場合に使用するモジュールです。動作の詳細や使用方法は 2.1.5 項に後 述します(図 2-3 は動作の一例) 図 2-3 DCS の動作の一例 DCS のクロック選択機能を使用しない場合、DCS の選択信号入力の値がツールによって固定され、 単なるバッファとして機能します。 デザインツール上では PURE ライン/DCS ラインのどちらを使 用するか選択することが出来ます。 2.1.3 Primary クロックの Quadrant 分割 クロック選択回路に入力されたクロック入力信号の1つを、全ての Quadrant へ接続すると、チップ 全体にクロックが分配されるグローバルクロックとして使用できます(図 2-4)。 図 2-4 グローバルクロック構成の例 ドキュメント番号 JDG08_001 6 LatticeECP3 ファミリ クロックデザインガイド August.2011 Ver1.0 デザインツールはデフォルトで Primary クロックをグローバルクロックとして使用します。このため デフォルト設定では Primary クロックを使用できるクロックは8本までとなります。 デザインツール上で、 使用する Quadrant の制限(分割)を行うと 8 本以上のクロックを Primary クロッ クに接続することも出来ます(図 2-5)。 図 2-5 [Quadrant]クロックの例 以降では特定の Quadrant だけに使用されるクロックを Quadrant クロックと呼びます([グローバル クロック] は「全ての Quadrant で使用される Quadrant クロック」の別名)。 2.1.4 クロック選択回路に接続できるクロックソース クロック選択回路には、以下の信号が Primary クロックのクロックソースとして接続できます。 クロックソース クロックソースの本数 -------------------------------------------------------------------------------------------------------------------全てのクロック入力ピン :6 全ての PLL 出力 : PLL 数× 4(PLL 出力数) 全ての DLL 出力 : 2(DLL 数) × 2(DLL 出力数) 全ての CLKDIV(クロックディバイダ)出力 : 2(CLKDIV 数) × 4(CLKIV 出力数) 全ての PCS の Tx 側クロック : PCS 数 × 2(PCS Tx クロック出力数) CIB(Primary 用) : 16 VCC :1 クロック入力ピンは各 I/O バンクに1本ずつ用意されており、デバイス全体では 6 本あります。 PLL 出力は、デバイスによって搭載されている PLL 数が異なるため本数は固定ではありませんが、 全ての PLL 出力を Primary クロックのクロックソースとして選択することが出来ます。 DLL はデバイスに各 2 個搭載されており、4本(2 DLL×2 出力)をクロックソースとして選択できま す。 CLKDIV はクロック分周のハードマクロです。この分周回路は4出力でデバイスに2つ搭載されてい ます。このため8本がクロックソースとして選択できます。 ドキュメント番号 JDG08_001 7 LatticeECP3 ファミリ クロックデザインガイド August.2011 Ver1.0 PCS は LatticeECP3 ファミリの SERDES モジュールです。このモジュールからは送信側の回路で 使用される tx_full_clk_ch0 と tx_half_clk_ch0(チャネル 0 のクロック)という2本が Primary クロッ クとして選択できます。PCS 数はデバイスによって変わります。送信側の他のチャネルのクロックと 受信側回路のクロックは後述の CIB を介して General Routing としてクロック選択回路に入力され ます。 以上のクロックソースからクロック選択回路までは、基本的に最短経路の専用配線で接続されていま す。このため配置配線を行う際の条件が変わってもクロックソースからレジスタまでの遅延は同じに なります。 CIB は、直接専用配線で接続されていないクロックソースからクロック選択回路までを接続するため に経由する回路です。クロック入力ピン(PCLKT*_*ピン)以外のピンからのクロック入力や FPGA 内 のレジスタを使用して生成した分周クロック等、特定リソース以外からのクロック入力がこれに相当 します。Primary クロック用の[CIB]はデバイスに 16 個実装されています。 CIB からクロック選択回路までは専用配線で接続されていますが、クロックソースから CIB までの 配線は専用配線ではないため、配置配線の条件が変わればクロックソースからレジスタまでの遅延も 変わってしまいます。 図 2-6 CIB を使用した場合のクロック配線 2.1.5 DCS 機能 DCS は[Dynamic Clock Select]の略で、ハザードのないクロック切り替えや Gated クロックを生成す る際に使用するハードマクロです。この項では DCS の機能の説明のみを行い、実装の方法について は 3.1.2 項で説明します。 DCS には8つのモードがあり、このうち 2 つはクロック切り替えを行うモード、4 つは Gated クロッ クを生成するモード、2つはバッファとして使用するモードです。 DCS のクロック切り替え機能および Gated クロック機能を使用するには HDL ソース内にインスタ ンスする必要があります。インスタンスされていない場合に単なるバッファとして使用するモードに なります。 ドキュメント番号 JDG08_001 8 LatticeECP3 ファミリ クロックデザインガイド August.2011 Ver1.0 DCS モード POS NEG HIGH_LOW HIGH_HIGH LOW_HIGH LOW_LOW 表 2-1 DCS モード設定と動作 出力クロック 用途 SEL=0 SEL=1 クロック切り替え CLK0 CLK1 CLK0 CLK1 0 固定 Gated クロック生成 CLK1 1 固定 CLK1 1 固定 CLK0 0 固定 CLK0 a) POS モード DCS のクロック切り替えモードの1つです。DCS 内で切り替え信号を両クロックの立ち上がり エッジを基準にして切り替えを行います(図 2-7(a))。 b) NEG モード DCS のクロック切り替えモードの1つです。DCS 内で切り替え信号を両クロックの立ち下がり エッジを基準にして切り替えを行います(図 2-7(b))。 図 2-7 DCS のクロック切り替え c) HIGH_LOW モード DCS の Gated クロック生成モードの1つです。SEL 入力が High レベルの間は CLK1 入力が、 SEL 入力が Low の間は Low レベルが DCSOUT から出力されます(図 2-8(a))。 d) LOW_LOW モード DCS の Gated クロック生成モードの1つです。SEL 入力が Low レベルの間は CLK0 入力が、 SEL 入力が High の間は Low レベルが DCSOUT から出力されます(図 2-8(b))。 e) HIGH_HIGH モード DCS の Gated クロック生成モードの1つです。SEL 入力が High レベルの間は CLK1 入力が、 SEL 入力が Low の間は High レベルが DCSOUT から出力されます(図 2-8(c))。 ドキュメント番号 JDG08_001 9 LatticeECP3 ファミリ クロックデザインガイド August.2011 f) Ver1.0 LOW_HIGH モード DCS の Gated クロック生成モードの1つです。SEL 入力が Low レベルの間は CLK0 入力が、 SEL 入力が High の間は High レベルが DCSOUT から出力されます(図 2-8(d))。 図 2-8 DCS Gated クロック生成 2.2 Secondary クロック この項では、Secondary クロック配線の構成について説明します。クロック選択機能や配線接続につ いての説明もありますが、特に記述の無い限り物理的な構成について説明しているだけで、ユーザー が指定する必要性を述べているのではありません。処理はツールが自動で行います。 2.2.1 Secondary クロックの概要 Secondary クロック配線はクロックだけでなく、クロックイネーブル信号やリセット信号もアサイン される配線です。また、一部は DCS の選択信号に使用されることもあります。 Secondary クロック配線は Quadrant ごとに 8 本あります。 しかし基本的には Quadrant ごとに個 別のクロックソースを選択できず、8 本のグローバル配線として機能します。この8本の内、クロッ クとして使用できるのは最大で 7 本です(クロックイネーブルやリセットで使用していなくても7本 までしか使用できません)。 以降の文中の Secondary クロックは、特に断り書きのある場合を除いてユーザーが任意に信号をアサ インできる 8 本を指すこととします。 ドキュメント番号 JDG08_001 10 LatticeECP3 ファミリ クロックデザインガイド August.2011 Ver1.0 図 2-9 Secondary クロックと選択回路 2.2.2 クロック選択回路に接続できるクロックソース クロック選択回路には、以下の信号が Secondary クロックのクロックソースとして接続できます。 クロックソース クロックソースの本数 -------------------------------------------------------------------------------------------------------------------全てのクロック入力ピン :6 CIB(Secondary 用) : 16 クロック入力ピンは各 I/O バンクに1本ずつ用意されており、デバイス全体では 6 本あります。 CIB は、直接専用配線で接続されていないクロックソースからクロック選択回路までを接続するため に経由する回路です。クロック入力ピン(PCLKT*_*ピン)以外のピンからのクロック入力や FPGA 内 のレジスタを使用して生成した分周クロック等、特定リソース以外からのクロック入力がこれに相当 します。Secondary クロック用の CIB はデバイスに 16 個実装されています。 2.3 エッジクロック この項ではエッジクロック配線の構成について説明します。クロック選択機能や配線接続についての 説明もありますが、特に記述の無い限り物理的な構成について説明しているだけで、ユーザーが指定 する必要性を述べているのではありません。処理はツールが自動で行います。 2.3.1 エッジクロックの概要 エッジクロックは I/O レジスタ(DDR のみ)に接続されるクロックです。デバイスの辺ごとに2本ず つ配線されており、Primary/Secondary よりも低スキューを実現しています。 ドキュメント番号 JDG08_001 11 LatticeECP3 ファミリ クロックデザインガイド August.2011 Ver1.0 図 2-10 エッジクロックと選択回路 各辺にはエッジクロック選択回路があり、個別にクロックソースを選択することが出来ます。 入力 DDR レジスタにはエッジクロックから直接クロックとして供給されます。出力 DDR レジスタ には DQSBUFF というクロックバッファを介して供給されます。 図 2-11 エッジクロックと I/O レジスタの接続 DQSBUFF は最大 12 の出力 DDR レジスタにしか接続されておらず、DQSBUFF を共有する出力レ ジスタ間で信号の出力スキューが最小となります。 ドキュメント番号 JDG08_001 12 LatticeECP3 ファミリ クロックデザインガイド August.2011 Ver1.0 2.3.2 クロック選択回路に接続できるクロックソース エッジクロックのクロック選択回路は、クロックライン毎に独立して設けられています。各クロック 選択回路には、以下の信号がエッジクロックのクロックソースとして接続できます。 クロックソース クロックソースの本数 -------------------------------------------------------------------------------------------------------------------特定のクロック入力ピン :1 特定の PLL リファレンス入力ピン :1 特定の PLL 出力 :1 特定の DLL 出力 :1 遅延セル出力(DLL で制御) :1 クロックリソースは、エッジクロック毎に対応するリソースが決まっています。ECP3 には各辺に最 大 5 つの PLL がありますが、エッジクロックに接続できるのは特定の PLL だけです。 デバイス サイド ECP3-17 左 右 左 ECP3-35 右 ECP3-70/95 左 右 ECP3-150 左 右 表 2-2 エッジクロックに接続できる PLL 各パッケージの入力指定ピン PLL ロケーション FTBGA256 FPBGA484 FPBGA672 FPBGA1156 PLL_R26C5 PLL_R26C52 PLL_R35C5 PLL_R53C5 PLL_R35C70 PLL_R53C70 PLL_R43C5 PLL_R61C5 PLL_R43C142 PLL_R61C142 PLL_R61C5 PLL_R79C5 PLL_R61C178 PLL_R79C178 K3 K14 K3 P2 K14 T15 -------- L5 M18 L5 T3 M18 R17 L5 T3 M18 R17 ----- --U6 U4 V34 V20 U6 U4 V34 V20 M3 U4 T21 V20 ------M3 Y9 T21 Y28 U6 Y9 V34 Y28 ドキュメント番号 JDG08_001 13 LatticeECP3 ファミリ クロックデザインガイド August.2011 Ver1.0 2.4 クロックソース この項では、各クロック配線のクロックソースとなり得るリソースについて説明します。 2.4.1 クロック入力ピン ECP3 ファミリには、クロック選択回路に接続するための専用配線を持つクロックピンが I/O バンク ごとに1本、合計 6 本あります。 このクロックピンは web で公開されている Pinout list の Dual Function 欄に[PCLKT*_0]と書かれ ているピンです(図 2-12、*は I/O バンクの番号)。 図 2-12 PCLK Pinout Information の例 リスト内には[PCLKC*_0]と書かれたピンもありますが、これはクロック入力ピンを差動 I/O として 使用した際に、反転入力となるピンです。シングルエンドのクロックをこのピンに入力しても、最短 経路の専用配線は使用されません。 2.4.2 PLL PLL 出力 ECP3 ファミリの PLL は以下の 4 本のクロック出力を持っています。 ・CLKOP ・CLKOS ・CLKOK ・CLKOK2 PLL 出力 CLKOP CLKOS CLKOK CLKOK2 : 入力リファレンスクロックを分周または逓倍した出力 : CLKOP 出力に対して位相シフトまたはデューティー比調整を行った出力 : CLKOP または CLKOS を分周した出力 : CLKOP を 3 分周した出力 表 2-3 PLL 出力とクロック配線の接続 Primary クロック Secondary クロック エッジクロック 専用配線を介して接続 接続不可 専用配線を介して接続可※ 専用配線を介して接続 CIB を介して接続可 専用配線を介して接続可※ 専用配線を介して接続 CIB を介して接続可 接続不可 専用配線を介して接続 CIB を介して接続可 接続不可 ※特定の PLL のみ(左右の辺で2個ずつ) ドキュメント番号 JDG08_001 14 LatticeECP3 ファミリ クロックデザインガイド August.2011 Ver1.0 全ての PLL の全ての出力は、専用配線を介して Primary クロック選択回路に接続されています。 ま た、特定 PLL の CLKOP/CLKOS のみはエッジクロック選択回路に専用配線を介して接続されてい ます。 PLL 出力から Secondary クロック選択回路への専用配線はありません。CLKOP 以外の出力は CIB を介して Secondary クロック選択回路に接続することもできますが、これは推奨できない使用方法で す。また、CLKOP 出力を Secondary クロックにアサインすることはできません。そのような制約を 設定してもツールが自動的に Primary クロックにアサインしなおすか、エラーで配置配線が停止しま す。 PLL 入力 リファレンス入力クロックはどのピンからでも入力することが出来ますが、PLL ごとにピンと PLL を最短で接続するための専用配線を持っているピンがあります。このピンは web で公開されている Pinout list の Dual Function 欄に [*_GPLLT_IN_A]と書かれているピンです(図 2-13)。 フィードバック入力ピン リファレンス入力ピン 図 2-13 PLL 入力ピン Pinout Information の例 リスト内には[*_GPLLT_IN_B]と書かれたピンもありますが、これはクロック入力ピンを差動/O と して使用した際に、反転入力となるピンです。シングルエンドのクロックをこのピンに入力しても、 最短経路の専用配線は使用されません。 また、デバイス外部からフィードバッククロックのための専用配線を持つピンがあります。このピン はデータシートの[Pinout Information]項のリスト内で、[Dual Function]欄に[*_GPLLT_FB_A]と 書かれているピンです(図 2-13)。外部フィードバックを使用しない場合、このピンはユーザーI/O と して使用できます。 PLL のパラメータ設定方法や使用方法の詳細については、データシートやテクニカルノート、ユー ザーガイド等をご覧下さい。 ドキュメント番号 JDG08_001 15 LatticeECP3 ファミリ クロックデザインガイド August.2011 Ver1.0 2.4.3 DLL ECP3 ファミリの DLL は以下の 2 本のクロック出力を持ち、両方とも専用配線を介して Primary ク ロック選択回路に接続されています。(Secondary クロック選択回路には接続されていません)。 ・CLKOP : 入力リファレンスクロックを分周または逓倍したクロック出力 ・CLKOS : CLKOP 出力に対して位相シフトおよび分周を行ったクロック出力 (モードにより使用できる機能が異なる) リファレンス入力クロックはどのピンからでも入力することが出来ますが、DLL ごとにピンと DLL を最短で接続するための専用配線を持っているピンがあります。このピンは web で公開されている Pinout list の Dual Function 欄に[*_GDLLT_IN_A]と書かれているピンです(図 2-14)。 図 2-14 DLL 入力ピン Pinout Information の例 リスト内には[*_GDLLT_IN_B]と書かれたピンもありますが、これはクロック入力ピンを差動 I/O として使用した際に、反転入力となるピンです。シングルエンドのクロックをこのピンに入力しても、 最短経路の専用配線は使用されません。 2.4.4 CLKDIV マクロ(クロック分周器) ECP3 ファミリはデバイスの左右に1つずつクロック分周マクロ CLKDIV を搭載しています。 CLKDIV マクロは以下の 4 本の出力を持ち、その全てが専用配線を介して Primary クロック選択回 路に接続されています。 ・CDIV1 : ・CDIV2 : ・CDIV4 : ・CDIV8 : 入力クロックを 1 分周したクロック 入力クロックを 2 分周したクロック 入力クロックを 4 分周したクロック 入力クロックを 8 分周したクロック CLKDIV マクロの入力クロックは、GPLL のリファレンスクロック入力ピン[*_GPLLT_IN_A]と専 用配線で接続されています。このため、[*_GPLLT_IN_A]ピンからクロックを入力した場合は、入 力ピンからレジスタまでの遅延が最短になります。GPLL/DLL の各出力ポートとも専用配線で接続 されているため、これらと接続した場合も配置配線の条件に依存せず配線経路が固定となります。 ドキュメント番号 JDG08_001 16 LatticeECP3 ファミリ クロックデザインガイド August.2011 Ver1.0 CLKDIV の動作の詳細やインスタンスの方法については、テクニカルノート TN1178 を参照してく ださい。 2.4.5 CIB CIB は「クロック選択回路と専用配線で接続されていないクロックソース」からの入力を、クロック 選択回路に入力するためのスイッチです。デバイス内でレジスタを使用して生成した分周クロックや [PCLKT*_0]ピン以外のピンから入力されたクロックは、CIB を介して選択回路に入力されます。 ユーザーは設計の際に HDL ソースに CIB を記述する必要はありません。しかしユーザーは各クロッ クで使用する CIB を指定できないため、配置配線を実行するまでクロックソースからクロック選択回 路までの遅延が分かりません。また、配置配線の条件が変わると、クロックソースから CIB までの配 線経路が変更されたり使用する CIB が変わってしまったりすることもあります。 このため、CIB 経由で Primary クロックまたは Secondary クロックにアサインするクロック信号は、 デバイス外部との AC タイミング制約(入力信号の Setup/Hold-time 制約および出力遅延制約)の基準 クロックには不向きです。AC タイミング制約の基準となるクロックには、CIB が使用されないよう に設計してください。 2.4.6 SERDES/PCS マクロ SERDES/PCS マクロからは、大きく分けると送信するパラレルデータを取り込むためのクロック (full/half)、受信データに同期したリカバリクロック(full/half)、リファレンスクロックをスルーした クロックの 3 種類が出力されます。 図 2-15 PCS のリファレンスクロックと出力クロック この中で、専用配線を介して直接クロック選択回路に接続されているのは、チャネル 0 から出力され る送信側クロックの 2 本だけです(図 2-15)。その他のクロックを[Primary クロック]または [Secondary クロック]にアサインするためには、CIB 経由でクロック選択回路に接続されます。 ドキュメント番号 JDG08_001 17 LatticeECP3 ファミリ クロックデザインガイド August.2011 Ver1.0 送信側/受信側から出力されているクロックを個別に使用すると、マクロ当り最大で 8 本のクロック 配線と 8 個の CIB を使用することになります。複数の SERDES/PCS マクロを使用する場合や、 FPGA 内で CIB を必要とするクロック(Gated クロックや分周クロック)を多数生成する場合に CIB が不足 することがあります。 事前に CIB 数を考慮して共通化できるクロック(特に送信側)は共通化して使用してください。チャネ ル間でのクロック共有については 4.5 項を参照してください。 ドキュメント番号 JDG08_001 18 LatticeECP3 ファミリ クロックデザインガイド August.2011 3 Ver1.0 クロック・デザインフロー この章では、HDL 記述から配置配線までのデザインフローで、クロックに関する注意事項やツール 上での設定について説明します。 3.1 HDL ソースの記述および論理合成 3.1.1 グローバルクロック・バッファのインスタンス記述 ECP3 ファミリのデザインフローでは、論理合成後に Primary/Secondary クロック配線に割り当てる クロック信号を指定します。 従って HDL ソース内に Primary/Secondary クロックにアサインするためのグローバルクロック・ バッファ等のインスタンス記述は必要ありません。 3.1.2 DCS のインスタンス記述 [DCS]のクロック選択機能またはクロック Gating 機能を使用するためには、HDL ソース内に明示的 にインスタンス記述する必要があります。 [DCS]の HDL ソースは IPexpress では生成されませんので、以下の記述例を Copy & Past して必要 な部分を変更してください。 VHDL 記述例 -------------------------------------------------------------------------------------------------------------------------------------library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_arith.all; use ieee.std_logic_unsigned.all; library ecp3; use ecp3.components.all; entity DCSEXAMPLE is port( CLKI0 : in std_logic; CLKI1 : in std_logic; SELI : in std_logic; CLKO : out std_logic ); end DCSEXAMPLE; architecture RTL of DCSEXAMPLE is component DCS -- synthesis translate_off generic ( DCSMODE : string := "POS" ); -- synthesis translate_on port ( ドキュメント番号 JDG08_001 19 LatticeECP3 ファミリ クロックデザインガイド August.2011 SEL CLK0 CLK1 DCSO Ver1.0 : in std_logic; : in std_logic; : in std_logic; : out std_logic ); end component; attribute DCSMODE : string; attribute DCSMODE of DCSAA : label is "POS"; --// DCS のモード(合成用)を記述。 2.1.5 項参照。 begin DCSAA : DCS -- synthesis translate_off GENERIC map( DCSMODE => "POS” --// DCS の動作モード(SIM 用)を記述。Attribute 宣言と合わせる ) -- synthesis translate_on PORT map( SEL => SELI, CLK0 => CLKI0, CLK1 => CLKI1, DCSOUT => DCSO ); end RTL; Verilog HDL 参考記述 -------------------------------------------------------------------------------------------------------------------------------------module DCSEXAMPLE (CLKI0, CLKI1, SELI, DCSO); input CLKI0; input CLKI1; input SELI; output DCSO; DCS DCSAA ( .SEL(SELI), .CLK0(CLKI0), .CLK1(CLKI1), .DCSOUT(DCSO) ); defparam DCSAA.DCSMODE = “POS”; // DCS の動作モードを記述 end module ドキュメント番号 JDG08_001 20 LatticeECP3 ファミリ クロックデザインガイド August.2011 Ver1.0 3.1.3 Gated クロック クロックの Gating を行うと、最小パルス幅エラーのために回路が誤動作する可能性があるため、 Gating は基本的に推奨しません。 やむをえず Gating する場合は、[DCS]マクロを使用してください。 なお、[DCS]を使用せず HDL ソース内に AND や OR 論理で Gating を行っても、論理合成ツール(デ フォルト設定)は Gated Clock を生成せず、Gating 信号をレジスタのクロックイネーブルに接続して しまいます。 図 3-1 論理合成ツールによる Gated クロックの変換 この様に、期待と違う合成結果が出力されてしまうという理由からも、HDL ソース内でのクロック Gating は推奨できません。 3.1.4 分周クロック レジスタを使用して分周クロックを生成した場合、デフォルト設定のまま論理合成を行うと分周ク ロックが最適化されクロックイネーブルに変換されてしまうことがあります。 図 3-2 論理合成ツールによる分周クロックの最適化 ドキュメント番号 JDG08_001 21 LatticeECP3 ファミリ クロックデザインガイド August.2011 Ver1.0 3.1.5 論理合成時のタイミング制約 論理合成ツールへのタイミング制約は、 デフォルト設定では全てのクロックに対して 200MHz になっ ています。 要求されるクロック周波数がこれより大幅に高速な場合や低速な場合は、sdc ファイルに各クロック の周波数制約を記述し、合成ツールに読み込ませることで適切な制約を与えることが出来ます。 読み込ませる sdc ファイルの指定は、Lattice Diamond の File List ウインドウで行います。 図 3-3 sdc ファイルの指定 既存の sdc ファイルをインポートする場合は、File List ウインドウの[Synthesis Constraint Files] を右クリックし、[Add] => [Existing File]の順に選択し、起動するウインドウ上で sdc ファイルを指 定します。 新規に作成する場合は、[Add] => [New File]の順に選択し、起動するウインドウ上で作成するファイ ル名とファイルタイプとして sdc ファイルを選択します(図 3-4)。 [Add to Implementation]にチェックが入っていると作成した sdc ファイルは自動的にインポートさ れます。 ドキュメント番号 JDG08_001 22 LatticeECP3 ファミリ クロックデザインガイド August.2011 Ver1.0 図 3-4 sdc ファイルの作成ウインドウ sdc ファイルの記述については、web 上の Lattice Diamond の Synthesis マニュアルか、Synplify Pro のドキュメントを参照してください。 Lattice Diamond のマニュアル http://www.latticesemi.co.jp/docs/toolmanuals/diamond/index.cfm Synplify Pro のドキュメント C:¥lscc¥diamond¥1.3¥synpbase¥doc¥* (デフォルトパスにインストールした場合) 3.2 使用するクロック配線の指定 Primary クロック/Secondary クロック配線へのクロック信号のアサインは、論理合成後に行いま す。従って HDL ソース内にクロックバッファ等のインスタンスは必要ありません。 クロック信号を Primary クロック/Secondary クロック配線にアサインする方法は2つあります。1 つは Lattice Diamond の制約設定ツール Spreadsheet View を使用して設定する方法、もう 1 つは制 約ファイルに直接記述する方法です。 3.2.1 Spreadsheet View での設定方法 [Translate Design]プロセス完了後に、Lattice Diamond のツールバーあるアイコン すると Spreadsheet View が起動します。 をクリック ドキュメント番号 JDG08_001 23 LatticeECP3 ファミリ クロックデザインガイド August.2011 Ver1.0 図 3-5 Spreadsheet View Spreadsheet View ウインドウには複数のタブがありますが、設定はこの中の Clock Resource タブで 行います。Clock Resource タブを開くと、自動的にネットリスト内のクロック信号(とクロックイネー ブル、セット/リセット信号)が検出されて表示されます。 配線の種類の選択は[Selection]行のセルで行います。各クロックの[Selection]列のセルをクリックす ると、いくつかの選択肢が表示されますので、この中から1つを選択します。 図 3-6 配線種別選択 各選択肢の設定内容は以下の通りです。 ドキュメント番号 JDG08_001 24 LatticeECP3 ファミリ クロックデザインガイド August.2011 Primary Secondary Prohibit Primary Prohibit Secondary Prohibit Both Ver1.0 : : : : : Primary にアサイン Secondary にアサイン Primary にはアサインしない Secondary にはアサインしない Primary/Secondary どちらにもアサインしない 何も選択しない場合は、ツールが自動的にアサインします。 [Primary]を選択した場合のみ右側の[Quadrant]および[DCS/Pure]列がアクティブになります。 [Quadrant]列のセルではアサインする[Quadrant]の選択を行います。セルをクリックすると、選択可 能な[Quadrant]の組み合わせリストが表示されるので、その中から1つ選択してください。 図 3-7 Quadrant 選択 何も選択しない(ブランク)場合は、全 Quadrant が使用されます(グローバルクロック)。 [DSC/Pure]列のセルでは使用するライン([DCS] or [PURE])の選択を行います。セルをクリックする と選択肢のリストが表示されるので、その中から1つ選択してください。 図 3-8 [PURE] / [DCS]の選択 何も選択しない(ブランク)場合は、ツールが自動的に選択します。なお、[DCS]をインスタンスして いるクロックで[PURE]を選択すると、配置配線でエラーが起きますので、ご注意ください。 ドキュメント番号 JDG08_001 25 LatticeECP3 ファミリ クロックデザインガイド August.2011 Ver1.0 3.2.2 制約ファイルでの設定方法 制約ファイルを直接編集してクロック配線を指定する場合は、以下のように記述します。 Syntax : []内は省略可 |で区切られている場合はどちらかを選択 ============================================== # 指定したクロック net を PRIMARY クロック配線にアサインさせる場合 USE PRIMARY [ PURE|DCS ] NET “クロックネット名” [使用する QUADRANT ] ; ※ [ PURE | DCS ]を省略した場合、ツールが自動で割り当て ※ [アサインする QUADRANT ] を省略した場合、全ての QUADRANT を使用(グローバルクロッ ク) # 指定した net を SECONDARY クロック配線にアサインさせる場合 USE SECONDARY NET “ネット名” ; ※ アサイン対象はクロック、クロックイネーブルおよびローカル Set/Reset # 指定したクロック net を PRIMARY クロック配線にアサインさせない場合 PROHIBIT PRIMARY NET “クロックネット名” ; # 指定した net(クロック/リセット/クロックイネーブル)を SECONDARY クロック配線にアサインさ せない場合 PROHIBIT SECONDARY NET “ネット名” ; 以下に参考記述を紹介します。 Example ============================================== # クロックネット”CLK0_c”を PRIMARY クロック配線にアサインさせる場合。全 QUADRANT 使用 (グローバルクロック)。DCS/PURE は任意。 USE PRIMARY NET “CLK0_c” ; # クロックネット”CLK1_c”を SECONDARY クロック配線にアサインさせる場合。QUADRANT TL と TR を使用 USE SECONDARY NET “CLK1_c” QUADRANT_TL QUADRANT_TR ; # クロックイネーブル信号”CE”を SECONDARY クロック配線にアサインさせる場合。 USE SECONDARY NET “CE” ; # クロックネット”CLK2_c”を PRIMARY クロック配線にアサインさせない場合 PROHIBIT PRIMARY NET “CLK2_c” ; なお、この制約記述で指定できるのはネット名のみです。クロック入力ポートを指定することは出来 ません。 同期パスがあるクロックネット名は論理合成ツールのレポートファイル内にレポートされますが、そ れが全てではない場合もあります。 ドキュメント番号 JDG08_001 26 LatticeECP3 ファミリ クロックデザインガイド August.2011 Ver1.0 設定可能なクロックネット名のリストは以下の方法で確認することが出来ます。 1. 3.2.1 項のように Spreadsheet View を起動し、Clock Resource タブを開く。 2. Map Design プロセスを実行し、そのレポート内のクロックリストを見る。 ドキュメント番号 JDG08_001 27 LatticeECP3 ファミリ クロックデザインガイド August.2011 4 Ver1.0 クロック設計のガイドライン この章では、2 章で説明したクロック・アーキテクチャに基づき、ツール上のエラー回避/処理時間 短縮および実機上での誤動作回避の観点から、どのようにクロック設計を行うべきかを説明します。 4.1 クロック入力ピンアサインのガイドライン クロック入力ピンを決定する際は、以下の点に注意してください。 4.1.1 I/O タイミングの基準クロック I/O タイミングの基準クロックは、クロック選択回路までの配線が固定されるピンにアサインしてく ださい。基本的にはクロック入力ピン、PLL リファレンス入力ピンまたは DLL 入力ピンです (PLL,DLL を使用する場合はそれぞれの入力ピン)。 これ以外のピンを使用すると、配置配線ごとに入力ピンからスイッチボックスまでの遅延が変わるた め、結果として I/O のタイミング(入力 Setup/Hold-time、出力遅延)が変わることになります。 ----------------------------------------------------------------------------------------------------------------------------------・ECP3-75/90 は 10 個の PLL を内蔵していますが、FPBGA484 パッケージでは PLL のリファレ ンス入力ピンが4本しかありません。従って5つ以上の PLL を IO 入出力タイミング調整の目的 で使用する場合は、FPBGA676 か FPBGA1164 パッケージを選択してください。 ----------------------------------------------------------------------------------------------------------------------------------クロック入力ピンが不足している場合は、余っている PLL/DLL リファレンス入力ピンで代用します (例: PLL をバイパスモードにしてバッファ代わりに使用)。なお、クロック周波数が遅く(1MHz 以 下)Setup/Hold-time や出力遅延等のタイミングが 100ns 程度でも問題ない場合は、通常のユーザー I/O を使用しても構いません。 4.1.2 I/O タイミングの制約が無いクロック I/O タイミングの制約がないクロックは、どのピンから入力しても問題ありません。しかし、クロッ ク入力ピンが余っているなら、クロック入力ピンから入力することを推奨します。 4.2 クロック出力の生成 SDR(Single Data Rate)ソースシンクロナス伝送のために ECP3 からクロックを出力する場合、内部 で使用しているクロック信号を直接ピンに接続するのではなく、出力 DDR レジスタを使用して”10” の固定パターンを出力する回路構成にすることを推奨します。 図 4-1 クロック出力回路構成例(SDR) ドキュメント番号 JDG08_001 28 LatticeECP3 ファミリ クロックデザインガイド August.2011 Ver1.0 クロック信号を直接ピンに引き出した場合、クロックソースからピンまでは一般配線が使用されるた め配置配線を行うたびに遅延が変わります。また PVT(プロセス、電源電圧、温度)の変動により出力 データとクロック間の位相が大きく変動します。出力 DDR レジスタを使用することでこの問題を回 避できます。 データとクロックの位相を 180°ずらす場合は、出力 DDR レジスタに入力する”10”パターンを反転 されることで実現します。 な お 、 DDR ソ ー ス シ ン ク ロ ナ ス 伝 送 の 場 合 は 、 IPexpress で DDR の 送 受 信 モ ジ ュ ー ル (DDR_GENERIC)を生成すると、条件に応じたクロック構成が自動的に生成されます(図 4-2)。 図 4-2 クロック出力回路構成例(DDR) DDR での送受信の場合は、データレートやクロックエッジの位置(Align or Center)等で最適なクロッ ク構成が変わりますので、かならず IPexpress でモジュールを生成して使用してください。 4.3 内部クロックの設計ガイドライン 4.3.1 Quadrant 分割のガイドライン ECP3 にはクロック配線として Primary クロック 8 本、Secondary クロック 7 本しか実装されてい ないため、16 本以上のクロックを使用するデザインでは Quadrant 分割を行い Primary クロックに アサインできるクロックを増やす必要があります。 ---------------------------------------------------------------------------------------------------------------------------------・基本的に Primary/Secondary クロック配線を使用せず、一般配線でクロックツリーを構成する ことは推奨しません。 ・例外的にクロックのファンアウトが1の場合のみ、そのクロックは一般配線を使用しても構いま せん(PLL のフィードバッククロックは除く)。 ---------------------------------------------------------------------------------------------------------------------------------この際、Quadrant 分割、およびクロック信号アサインには、以下の制限があります。 ・1つのクロック信号がアサインできる Quadrant 数は 1,2,4(3 はダメ)。 ・クロック信号を 2 つの Quadrant にアサインする場合は、隣り合った Quadrant の組しか選択で きない(TL & BR および TR & BL の組み合わせは不可)。 ドキュメント番号 JDG08_001 29 LatticeECP3 ファミリ クロックデザインガイド August.2011 Ver1.0 図 4-3 Quadrant 分割例 ・分割した Quadrant 内に、接続されているリソースが全て収まること(PLL,IO レジスタ等も含む) Quadrant のアサイン数および組み合わせについては、制約設定ツール上では許可された組み合わせ しか表示されません。 Quadrant 分割したリソース(特に PLL や PCS といったマクロ) に関しては制限がかかります。これ らのマクロを複数使用した場合、Quadrant 分割しないとクロック本数が足らなくなることがありま すが、使用するマクロの配置を考慮して Quadrant 分割を行わないとツール上で配線できずにエラー が発生します。 以下に特に注意が必要なリソースについて説明します。 EBR/DSP ブロック ECP3-17 では、EBR は TL/TR のみ、DSP ブロックは BL/BR にのみ配置されています。これらの マクロをドライブしているクロックを、マクロの配置されていない Quadrant にアサインするとデ ザインツールはエラーメッセージを出力して配置配線を終了させます。 エラーメッセージの例 ----------------------------------------------------------------------------------------------------------------ERROR - par: MULT9 resources are not sufficient for Quadrant/s TR . Please check the quadrant clock preferences. ----------------------------------------------------------------------------------------------------------------また、ECP3-17 以外でも Quadrant 分割を行うと指定した Quadrant 内のマクロしか使用できな いので、リソースが不足して同様のメッセージが出力されることがあります。EBR/DSP ブロック を多くドライブするクロックは可能な限り Quadrant 分割しないことを推奨します。 PLL/DLL の配置とフィードバッククロックの Quadrant 指定が一致しない場合 PLL の出力クロックを Primary 配線経由でフィードバックする構成の場合、フィードバックする クロック が全くレジスタに接続されていなくても Primary 配線を1本消費してしまいます。この ような PLL を複数使用するデザインでは、フィードバッククロックだけで Primary 配線の多くを 消費してしまい、クロック配線が足らなくなってしまうことがあります。 このような場合、フィーダバッククロックを Quadrant 分割することにより Primary クロックの消 費を抑えることが出来ます。この際、フィードバッククロックは PLL のある Quadrant に割り当 てられる必要があります。 ドキュメント番号 JDG08_001 30 LatticeECP3 ファミリ クロックデザインガイド August.2011 Ver1.0 PLL のフィードバッククロックを出力元 PLL の無い Quadrant へアサインする設定を行った場合、 Primary クロックに余りがあれば、 自動的にフィードバッククロックを余っている Primary クロッ クにアサインしますが、余りが無い場合は Primary クロックを介さないでフィードバックしたり、 以下のようなエラーメッセージを出力して配置配線が中断されたりします。 エラーメッセージの例 ----------------------------------------------------------------------------------------------------------------ERROR - par: DLL comp " Inst1_CIDDLLB" cannot be placed in the designated quadrants. The quadrant clock preference of the feedback signal " CLKOP_0" of this DLL is "quadrant TL, BL". The design is unroutable. ----------------------------------------------------------------------------------------------------------------表 4-1 は各デバイスに搭載されている PLL のロケーション(配置指定の際に使用する位置情報)、配置 されている Quadrant、およびその PLL に専用配線で接続されるピン番号のリストです。 PLL のフィードバッククロックを Quadrant 分割した Primary クロックにアサインする場合は、か ならず該当する Quadrant が含まれるように分割・アサインを行ってください。 表 4-1 PLL のロケーションと Quadrant Device ECP3-17 ECP3-35 ECP3-70/95 ECP3-150 PLL のロケー ション PLL_R26C5 PLL_R26C52 PLL_R35C5 PLL_R53C5 PLL_R35C70 PLL_R53C70 PLL_R25C5 PLL_R43C5 PLL_R61C5 PLL_R70C5 PLL_R79C5 PLL_R25C142 PLL_R43C142 PLL_R61C142 PLL_R70C142 PLL_R79C142 PLL_R43C5 PLL_R61C5 PLL_R79C5 PLL_R97C5 PLL_R106C5 PLL_R43C178 PLL_R61C178 PLL_R79C178 PLL_R97C178 PLL_R106C178 Quadrant Input pin FTBGA256 TL TR TL BL TR BR TL TL BL BL BL TR TR BR BR BR TL TL BL BL BL TR TR BR BR BR FPBGA484 FPBGA672 FPBGA1156 K3 L5 --K14 M18 --K3 L5 M3 -P2 T3 U4 -K14 M18 T21 -T15 R17 V20 --L8 N7 ※1 -L5 M3 U6 -T3 U4 Y9 -U6 AC6 ※1 -U7 AL1 ※1 -L21 P30 ※1 -M18 T21 V34 -R17 V20 Y28 -Y26 AB28 ※1 -V17 AJ34 ※1 --L8 N7 --M3 U6 --U4 Y9 --U6 AC6 --U7 AL1 --L21 P30 --T21 V34 --V20 Y28 --Y26 AB28 --V17 AJ34 ※1 PLL まで専用配線を使用して配線されるピンはなし なお、フィードバックしないクロックは、Quadrant 分割する場合でも PLL の配置による制限の対象 とはなりませんが、他の要因による Quadrant アサインの制限を受けることになります。 ドキュメント番号 JDG08_001 31 LatticeECP3 ファミリ クロックデザインガイド August.2011 Ver1.0 PCS(SERDES) 多くの SERDES チャネルを使用する場合、構成によってはチャネル間でクロックが共有できない ので、Primary クロックの Quadrant 分割を行います。 この際、使用する PCS ごとに必ず含まれなければならない QUADRANT があります(基本的には PCS が配置されている QUADRANT)。 デバイス ECP-17/35 ECP3-75/90 ECP3-150 表 4-2 PCS と QUADRATN の対応 使用する PCS 分割の際、含まなければ ならない QUADRANT PCSA BR,BL PCSA BR,BL PCSB BL PCSC BR PCSA BR PCSB BL PCSC BR PCSD BL なお、PCS から出力されるクロックのほとんど(TX 側 CH0 クロック以外)は、CIB を介してクロッ ク選択回路に接続されるため、その他のクロックの使用状況によっては、CIB の数が足らず配線で きないことがあります。その際は、余っている PLL 等をバイパスする等の方法で CIB の不足を補っ てください。 I/O レジスタ クロックの[Quadrant]分割を行った場合、指定されたクロックに接続されたレジスタは指定された [Quadrant]にしか配置されません。このレジスタには、SLICE 内のレジスタだけでなく I/O レジ スタも含まれます。 このため、[Quadrant]指定とピンアサインによる I/O レジスタの配置に不一致が生じると、配置配 線できません。このような場合、デザインツールは以下の様なエラーメッセージを出力して配置配 線を終了させます。 エラーメッセージの例 ----------------------------------------------------------------------------------------------------------------ERROR - par: init_place_piopgroup(): failed to place PIO PGROUP comp ポート名. ----------------------------------------------------------------------------------------------------------------例えば、ある I/O レジスタが使用されるポートを I/O バンク 3(Quadrant BR)にアサインしたのに、 その I/O レジスタをドライブするクロックをアサインする[Quadrant]に TL_TR を指定した場合な どに、このようなエラーが発生します。 Quadrant 分割を行う必要のあるデザインの場合は、ピンアサインも考慮して行ってください。 ドキュメント番号 JDG08_001 32 LatticeECP3 ファミリ クロックデザインガイド August.2011 Ver1.0 図 4-4 Quadrant と I/O バンクの組み合わせ 4.4 PLL を使用する場合の設計ガイドライン 4.4.1 位相シフト機能を使用する場合のクロックアサイン PLL の CLKOS 出力で位相シフト機能を使用する場合、CLKOP と CLKOS は必ず Primary クロッ クを使用してください。また、DCS ラインか PURE ラインかも統一してください。 DCS ラインと PURE ラインとでは数十 ps ですが、遅延がかわります。このため、PURE と DCS ラ インが混在だと、クロック周波数が高いほど位相シフト量の誤差が大きくなってしまいます。これを 防ぐために必ず CLKOP と CLKOS は同じクロックラインにアサインしてください。 4.5 SERDES を使用する場合のクロック設計ガイドライン 4.5.1 受信側クロックのクロック配線使用 受信側は、チャネル毎にリカバリクロックが出力されており、基本的には各チャネルのデータ出力は 当該チャネルのリカバリクロックでラッチします。 図 4-5 各チャネルで個別のカバリクロックを使用した例 ドキュメント番号 JDG08_001 33 LatticeECP3 ファミリ クロックデザインガイド August.2011 Ver1.0 しかし、Lattice ECP3 では最大 16 チャネルの SERDES を内蔵しており、複数チャネル使用時に個 別のリカバリクロックを使用すると、多くのクロック配線が必要になります。さらに送信側のクロッ クも必要となるため Primary/Secondary クロックをグローバルクロックとして使用すると本数が足 らなくなる可能性があります。 ------------------------------------------------------------------------------------------------------------------------------------・多数のリカバリクロックを使用する際、各リカバリクロックに接続される F/F 数(fanout)がどれほ ど小さくても、Primary/Secondary クロックを使用せずに一般配線を使用してクロックツリーを実 現することは推奨しません。 ------------------------------------------------------------------------------------------------------------------------------------これの問題を回避するには2つの方法があります。 リカバリクロックを複数チャネルで共有する XAUI や PCIe×4 のように、複数チャネルを束ねて1つのリンクを構成するような場合に、この方 法で使用するリカバリクロックの本数を削減できます。 この方法は、リカバリクロックを共有するチャネル間でデータレートの差がない場合に適用できま す。具体的には以下の様な場合です。 ・全チャネルのデータが1つのデバイスから出力されている。 ・送信側の全 SERDES デバイスのリファレンスクロックソースが共通 ・リカバリクロックを共有するチャネルは、全て同時に ON/OFF される。 図 4-6 チャネル間でリカバリクロックを共有した例 ドキュメント番号 JDG08_001 34 LatticeECP3 ファミリ クロックデザインガイド August.2011 Ver1.0 図 4-7 チャネル間でリカバリクロックを共有できる接続例 この条件を満たさない場合、リカバリクロックを共有すると SERDES マクロ最終段の FIFO で Overflow または underflow が発生し、データの欠損等により正しいデータの伝送が行われません。 条件を満たせば Quad をまたいでリカバリクロックを共有することもできます。 Primary クロックを Quadrant 分割して使用 各チャネル間でデータレートに差がある場合や、チャネル毎に動作状況(ON/OFF)が異なる場合は チャネル間でリカバリクロックが共有できないので、Primary クロックの QUADRANT 分割を行 い、疑似的にクロック配線数を増やします。 この際、使用する PCS ごとに必ず含まれなければならない Quadrant があります(基本的には PCS が配置されている Quadrant)。 デバイス ECP-17/35 ECP3-75/90 ECP3-150 表 4-3 PCS と QUADRATN の対応 使用する PCS 分割の際、含まなければ ならない QUADRANT PCSA BR,BL PCSA BR,BL PCSB BL PCSC BR PCSA BR PCSB BL PCSC BR PCSD BL なお、リカバリクロックは全て CIB を介してクロック選択回路に接続されるため、その他のクロック の使用状況によっては、CIB の数が足らず配線できないことがあります。その際は、余っている PLL 等をバイパスする等の方法で CIB の不足を補ってください。 4.5.2 受信側クロックの振る舞いと設計の注意 受信側ではリカバリクロックとしてチャネル毎に[rx_full_clk_ch*]と[rx_half_clk_ch*](*はチャネル 番号)という2つのクロックが出力されています。 ドキュメント番号 JDG08_001 35 LatticeECP3 ファミリ クロックデザインガイド August.2011 Ver1.0 [rx_half_clk_ch*] は、[rx_full_clk_ch*] を PCS 内部で 2 分周したクロックです。[rx_full_clk_ch*] と[rx_half_clk_ch*]は、FPGA ファブリックとのインターフェイスのバス幅に応じてどちらか1つを 使用します。これらのクロックは、SERDES の動作状態によっては安定した周波数を実現できませ ん。以下の様な場合にはこれらのクロックで回路が動作しないような回路設計を行ってください。 SERDES マクロのリセット中 2つのクロックはリセット中の振る舞いに違いがあり、それぞれの理由により SERDES のリセッ ト中に動作する回路には使用しないでください。 [rx_full_clk_ch*]は、SERDES のリセット中でも常に発信し続けます。ただし、この時の周波数は 規定されていません。このため、リセット期間中に[rx_full_clk_ch*]の周波数が、CDR の安定動作 中と比較して非常に高くなることがあり、これによりこのクロックで動作させている回路が誤動作 する可能性があります。 また、[rx_half_clk_ch*]は、リセット中は発信が止まり Low レベルに固定されます。このため、リ セット解除にかかわる回路に[rx_half_clk_ch*]が使用されていると、クロックがトグルしないので リセットが解除されなくなる可能性があります。 CDR が un-lock 中 リセット解除後、CDR が un-lock の期間(rx_cdr_lol_ch*_s=’1’の期間)は、[rx_half_clk_ch*] 、 [rx_full_clk_ch*]ともに発信はしていますが、その周波数は規定されていません。このため、CDR の安定動作中と比較して非常に高くなることがあり、これによりこのクロックで動作させている回 路が誤動作する可能性があります。 4.5.3 送信側クロックのクロック配線使用 送信側は、チャネル毎にクロックが出力されていますが、これらは Quad 内の1つの PLL 出力(もし くはそれを分周したもの)が出力されています。 図 4-8 各チャネルで個別のクロックを使用した例 ドキュメント番号 JDG08_001 36 LatticeECP3 ファミリ クロックデザインガイド August.2011 Ver1.0 しかし、チャネルの送信モード設定(full or half)が同じなら SERDES/PCS モジュール入口の FIFO 以降は全て同じクロックで動作していますので、送信側クロックは Quad 内の全てのチャネルで共 有することが出来ます。 図 4-9 チャネル間でクロックを共有した例 送信側は、送信先がチャネル毎に別々でも FPGA 内のクロックを共有することができます。共有する際は、 チャネル 0 のクロックを優先的に使用してください。チャネル 0 のクロックは、クロック選択回路まで専 用配線で接続されているので、CIB を消費することなく Primary クロックを使用することが出来ます。 リファレンスクロックソースと各種送信モード設定が同じであれば、Quad 間で送信データ用クロックを 共有することもできます。 4.6 DCS の使用のガイドライン 4.6.1 クロックリソースの検討 DCS は2本のクロックをハザードなしで切り替えられますが、切り替えを行う場合は、切り替え信号 が Secondary クロックにアサインされます。Secondary クロックは8本の内、最大 7 本がクロック として使用できますが、DCS を2つクロック選択回路として使用するため、クロックとして使用でき る本数が最大6本になってしまいます。 クロック本数が多く、Secondary クロックまで使用する場合はこの本数の制限に注意してください。 ---------------------------------------------------------------------------------------------------------------------------------・Primary クロックの DCS ラインを使用しても、選択機能を使用しなければ、この制限はありません。 ---------------------------------------------------------------------------------------------------------------------------------4.6.2 DCS カスケード接続 3 本以上のクロックを選択する際に、DCS をカスケード接続して切り替えを行うと、クロック接続に 大幅に制限がかかります。これにより配線できないケースが多々あるので DCS をカスケード接続し て使用しないでください。 ドキュメント番号 JDG08_001 37 LatticeECP3 ファミリ クロックデザインガイド August.2011 Ver1.0 3本以上のクロックから1本を選択する場合は、まず論理回路(LUT)での選択を行い、最後に DCS で2本から1本を選択することを推奨します(図 4-10 参照)。 非推奨構成 非推奨構成 推奨構成 図 4-10 DCS を使用したクロック回路構成例 4.7 クロック専用配線を使用しない場合のガイドライン デザインのクロック本数が 15 本を超えると、Primary クロックの Quadrant 分割でクロック配線に アサインするクロック信号を増やすことができます。しかし、クロック信号の多いデザインでは Quadrant 分割を行ってもクロック配線にアサインできないクロック信号が出てくることがありま す。 このような場合、ツール上では通常配線リソースを使用してクロックツリーを構成することで、クロック 配線の不足を補うことができますが、基本的には通常配線リソースを使用したクロックツリーの構成は禁 止します。 しかし、例外的に以下の条件を満たすクロックの場合は配置指定等の制約を追加することで、通常配線リ ソースを使用することも許容されます(推奨はしませんが、禁止もしません)。 1. IO レジスタ、EBR、DSP ブロック、PCS といったハードマクロに接続されていない。 通常配線リソースを使用した場合、専用配線を使用した場合と比べるとクロックスキューが大きくなり ます。特にハードマクロを使用した場合はスキューが大きくなる傾向にあるので、ハードマクロに接続 されているクロックは通常配線を使用することを禁止します。 2. Fanout 数が 24 以下。 Fanout が大きくなるほどスキューが大きくなる傾向があります。Fanout 数は小さい場合のみ通常配線 でクロックツリーを構成することを許容します。24 以下が推奨ですが、理想は 6 以下です(理由は後述)。 3. 動作周波数が 50MHz 未満 通常配線を使用したクロックツリーでは、クロックスキューのために動作周波数が高くなりにくい傾向 があります。このため動作周波数の低いクロック信号のみ通常配線でクロックツリーを構成することを 許容します。 ドキュメント番号 JDG08_001 38 LatticeECP3 ファミリ クロックデザインガイド August.2011 Ver1.0 4. 外部の AC タイミング制約がない、または Setup/Hold-time の要求値が各 10ns 以上、最大出力遅 延の要求値が 20ns 以上。 通常配線を使用したクロックツリーでは、入力ピンからレジスタまでの遅延が固定されません(配置配 線の条件が変わると遅延も変わる) 。このため、AC タイミング要求が厳しいと要求を満たすために何度 も配置配線を繰り返すことになります。これを避けるために制約がないか、非常に緩いタイミング要求 の場合のみ通常配線でクロックツリーを構成することを許容します。 5. 他のクロックドメインとの間にタイミングが問題になるデータのやりとりがない 通常配線を使用したクロックツリーでは、入力ピンからレジスタまでの遅延が固定されません(配置配 線の条件が変わると遅延も変わる) 。このためクロック間の位相が期待通りにならずタイミングエラーが 発生する場合があります。これを防ぐため、他のグロックドメインとタイミングが問題になるようなデー タのやり取りのある場合は、通常配線を使用したクロックツリーの使用を禁止します。 上記の条件の満たしている場合は、配置配線時に周波数制約だけでなく以下の制約を追加してください。 なお、クロックの Fanout 数が1の場合はこれらの制約は必要ありません。 制約 1. クロックの最大スキュー制約 クロックスキューを小さくするために、以下の様なタイミング制約を制約ファイルに記述しま す(GUI ツールでは設定できません)。LatticeECP3 では 0.2ns 以下に設定することを推奨しま す。 -記述ルール MAXSKEW NET “クロックネット名” -記述例 MAXSKEW “dummy_clk_c” NET スキュー値 0.2 ns ; ; 制約 2. クロックの最大遅延制約 クロック配線の遅延が大きくなるほどクロックスキューは大きくなる傾向があります。クロッ クスキューを小さくするために、以下の様なタイミング制約を制約ファイルに記述します(GUI ツールでは設定できません)。LatticeECP3 では 2.0ns 以下に設定することを推奨します。 制約 3. -記述ルール MAXDELAY NET “クロックネット名” 最大遅延値 -記述例 MAXDELAY “dummy_clk_c” 2.0 ns NET ; ; Hold-time マージン制約 通常配線を使用したクロックツリーでは、Primary/Secondary クロックを使用した場合より スキューが大きくなり、特に Hold-time エラーが起こりやすくなります。ツール上ではデータ 遅延やスキューは全て max または min 条件でタイミング解析が行われますが、ツール上でタ イミング解析をパスしていても、実デバイス上では遅延条件のばらつき等により Hold-time エ ラーが発生してしまうことがあります。これを防ぐため、クロックの周波数制約設定の際に Hold-time マージンの設定も行います。 Hold-time マージンは GUI ツール上で設定することが出来ます。周波数制約を設定する際に [Hold Margin]欄に、制約 2 で設定した最大遅延の 10%を入力してください。 ドキュメント番号 JDG08_001 39 LatticeECP3 ファミリ クロックデザインガイド August.2011 Ver1.0 Hold-time マージンの設定 図 4-11 Hold-time マージンの設定 制約 4. レジスタのグルーピング(UGROUP)と配置指定 レジスタの配置がバラバラになるとスキューが大きくなりますし、配置がクロック入力ピンか ら遠いとクロック遅延が大きくなります(結果スキューも大きくなる)。レジスタのグルーピング を行うと、グルーピングされたレジスタは近くの SLICE に配置されるようになります。また、 グルーピングしたレジスタをクロック入力ピンの近くに配置することにより、クロック信号の 遅延とスキューを小さくすることが出来ます。 ただし、グルーピング対象のレジスタが 6 個以下の場合は、配置指定は必要ありません。Lattice ECP3 では、SLICE 内に 2 個のレジスタをもちます。また、4SLICE で1PFU という単位を 構成し、PFU 内のクロックは共通でスキューが 0 になります(ただし PFU 内の1SLICE はレ ジスタなし)。従ってレジスタ 6 個以下であれば 1PFU 内に収まるのでスキューを 0 にすること が出来ます。グルーピングされたレジスタは基本的に同じ PFU 内に収まるように配置されるの で、レジスタ 6 個以下であれば配置指定をする必要はありません。 グル―ピングしたレジスタが 配置された PFU 通常配線にアサインされた クロック 図 4-12 レジスタ 6 個をグルーピングした場合の配置配線結果 ドキュメント番号 JDG08_001 40 LatticeECP3 ファミリ クロックデザインガイド August.2011 5 Ver1.0 その他のクロック関連事項について 5.1 周波数拡散クロックのサポート この項では Lattice ECP3 での周波数拡散クロック(Spectrum Spread Clock)サポートについて説明 します。 Lattice ECP3 はユーザーロジックへの周波数拡散クロックの入力をサポートします。PLL に入力し た場合でも、数十~数百 KHz の周波数拡散成分は PLL を通過するので PLL の出力も周波数拡散ク ロックになります。 --------------------------------------------------------------------------------------------------------------------------------・DLL に入力した場合、拡散成分が大幅に減衰する可能性があるので、デバイス内で周波数拡散ク ロックが必要な場合は、直接使用するか PLL の出力を使用して下さい。 --------------------------------------------------------------------------------------------------------------------------------しかし、Lattice ECP3 の PLL/DLL には周波数拡散成分を付加する機能はないので、拡散クロック をデバイス内部で生成することはできません。拡散クロックが必要な場合は、かならず外部から入力 してください。 ドキュメント番号 JDG08_001 41 LatticeECP3 ファミリ クロックデザインガイド August.2011 6 Ver1.0 改訂履歴 バージョン Ver1.0 リリース日 2011/8 表 6-1 改訂履歴 改訂内容 ・初版リリース ドキュメント番号 JDG08_001 42