01signal.com

Xilinx Partial Reconfiguration: Reset および decoupling

これは、 Partial Reconfiguration、または Dynamic Function eXchange (DFX) と Xilinxの Vivadoに関する4 回のシリーズの3 回目です。前の 2 つは FPGA designのセットアップ方法を示していますが、ここでは static logic が reconfigurable logic の消失と再出現にどのように対処するかについて説明します。

概要

partial bitstream をロードするプロセスは、物理ハードウェアの hot swapping と似ています。 ある部品が突然取り外され、別の部品と交換され、電源がオンになります。この投稿では、この移行がスムーズかつ確実に行われるようにするために必要な手段について説明します。

この投稿では、 Partial Reconfiguration が FPGA 自体で static logic によって実行されることを前提としています。スムーズな運用を確保するために、次の段階で実行する必要があります(説明は次のとおりです)。

decouplingの必要性

partial bitstreamのロード プロセス中、 static logic と reconfigurable logic 間の接続は予測できない状態になります。その結果、 reconfigurable moduleの output ports は random patterns または不正な値を生成する可能性があります。これは必ずしもすべての output port で常に発生するわけではありませんが、ある種の奇妙な動作が見られる可能性があります。

static logic は partial bitstreamのロードに関係なく機能し続けるため、悪影響を避けるために、 reconfigurable moduleから到着する可能性のある予測不可能な信号を無視する必要があります。 Xilinxのユーザー ガイド UG909では、これを decouplingと呼んでいます。

decoupling の実装方法は、 reconfigurable moduleの output portsの性質によって異なります。 static logic に対するこれらの ports のそれぞれの影響を分析し、必要に応じて予防措置を講じる必要があります。これには、たとえば、 reconfiguration中にニュートラル値を持つ output ports の multiplexing 、応答しないはずの logic に clock-enable を追加する、または resetで static logic の一部を保持することが含まれます。

reconfigurable logic が I/O padsに直接接続されている場合、これらを high-Z モードにするか、 I/O logicの clock enable を無効にする必要がある場合があります ( I/O logic に output registerが含まれている場合)。また、 reconfigurable logic が外部コンポーネントに接続されている場合、 reconfigurationの前にこれらのコンポーネントを安全な状態にする必要がある場合があります。

Partial Reconfiguration Decoupler IP は、 AXI 接続の decoupling 用に Vivadoの IP Catalog で使用できます。

reconfigurable moduleの input ports にはそのような処理は必要ありません。 static logic は、駆動する信号が消費されなくてもかまいません。

Ultrascale デバイスに関しては、 reconfigurable logicをシャットダウンするため、"clearing bitstreams" をロードする前に decoupling が必要です。

STARTUP sequenceについて一言

bitstream (full と partial) の重要な部分の 1 つは、 STARTUP sequenceを開始する START configuration commandです。このシーケンスには、 logicの一貫した bring-up を目的としたいくつかのメカニズムが含まれます。

最初の部分は、 synchronous elements が configurationの最後にデフォルト値を割り当てられることです。これは、 Ultrascale FPGAs 以降では常に当てはまります。 Series-7 FPGAでは、 full configuration (つまり、 initial bitstreamを使用) と、 RESET_AFTER_RECONFIG が有効になっている場合は Partial Reconfiguration に当てはまります。

次に、2 番目の部分は GWE (Global Write Enable、 synchronous elementsの enable inputs または write-enable inputsと混同しないでください) です。 この信号により、 flip-flops および RAMs は値を変更できます。 GWE は、 full configurationの間、 FPGA 全体でローに保持され、 configuration startup sequenceの間のある段階でハイに変化します。 partial bitstreamをロードすると、 reconfigured logic のみが影響を受けます。

当然、 GWE の変更は、 application logicによって提供される clock に対して非同期であるため、この変更と最初に有効な clock の間の timing は、 synchronous elementに関して予測できません。

Partial Reconfiguration のシナリオでは、 full configurationの場合と同様に、すべての synchronous elements はプロセスが終了した直後 ( Ultrascale 以降の場合、または RESET_AFTER_RECONFIG が設定されている場合) に初期値を持つことを意味しますが、一部の synchronous elements が応答するランダムな可能性があります。最初の application logicの clock cycleに、他の要素はそうではありません。このランダムな動作は、 GWE が High に変化するタイミングと比較して、この最初の clock が到着するタイミングによって異なります。したがって、このような不確実性に敏感なすべての logic に reset を適切に適用することが重要です。

partial bitstream のロード後に reconfigurable logic をリセットする必要性は、 FPGAの full configuration の後と同じです。ただし、 full configurationの場合はリセットが必要であることがより直感的です。特に、一部の logic elements が安定するまで ( MMCMs または PLLs がロックされ、外部ハードウェアの準備が整うなど)、 reset がアクティブなままになることが多いためです。

要約すると、 reconfigurable logicをリセットするかどうか、およびそのどの部分をリセットするかについて、単一の答えはありません。 full configurationと同様に、 synchronous elements にはデフォルト値が与えられ、 clocksに応答し始めます。状況によってはこれで十分ですが、他のシナリオでは reset が必要です。

STARTUPの終了を検出する

上記の段階で、 application logicの制御外にある唯一の部分は STARTUP sequenceです。それにもかかわらず、それがいつ終了するかを知ることは重要です。

FPGA ファミリごとに Configuration Guide の STARTUP sequence の説明がありますが、簡単に言うと、このシーケンスにかかる時間は bitstreamの options に大きく依存します。たとえば、シーケンスは、 MMCMs がロックするのを待つか、 DCIs が impedance matchingを完了するのを待つように構成できます。

FPGA は、 STARTUP sequence の最終ステージ (つまり、このシーケンスが終了したとき) でハイに変化する信号 End Of Startup (EOS) を供給します。 EOS に依存することは、 reset を開始し、 output portsの recoupling を開始することによって、 reconfigurable logic をいつ戻すかを伝える正式な正しい方法です。

EOS 信号は、おそらく次のように、 STARTUPE2 primitiveの instantiation を使用して、 logic fabricの内部からのみ利用できます。

wire eos;

STARTUPE2 #(.PROG_USR("FALSE")) startup_ins
  (
   .CLK(1'b0),
   .GSR(1'b0),
   .GTS(1'b0),
   .KEYCLEARB(1'b1),
   .PACK(1'b0),
   .USRCCLKO(1'b0),
   .USRCCLKTS(1'b0),
   .USRDONEO(1'b1),
   .USRDONETS(1'b1),
   .CFGCLK(),
   .CFGMCLK(),
   .EOS(eos),
   .PREQ());

したがって、 bitstream が ICAPへのロードを終了したら、 EOS がハイになるのを待ってから、 reset と recouplingを開始します。

Ultrascale FPGAs には代わりに STARTUPE3 primitive がありますが、 Vivado はこれらの FPGAs に対しても STARTUPE2 primitives を受け入れ、それらを STARTUPE3に正しく変換します。したがって、上記のコード例はすべての FPGA ファミリーをカバーしています。

bitstreamの START コマンドが ICAPに到着した後、 EOS が High に変わるまでにかかる時間を測定するために、いくつかの事例テストを行いました。

Kintex-7では、 bitstreamのデフォルト設定で、これには 26 個の clock cycles が必要でした ( 100 MHzでは、したがって ~260 ns)。 bitstream、とりわけ NOPsには追加のデータがあったため、 bitstream の最後のワードが ICAPに供給された直後に EOS がハイに変化した可能性は十分にあります。

しかし、 Kintex Ultrascale FPGA を使用した同じテストでは、まったく異なる結果が得られました。 START コマンドの後、 EOS が 0.8 ms から 4.5 ms の間のどこかでランダムにハイに変わりました。

上記のように STARTUPE2 primitive を使用するのは非常に簡単ですが、 bitstream のロードが完了してから一定時間後に recoupling を起動することもできます。たとえば、 STARTUP sequence が 100 msと同じくらい時間がかかるとはまったく考えられませんが、人間にとってはほとんど気付かれない delay です。ただし、上記の 2 つのテスト結果を考慮すると、 STARTUPE2 primitive を使用するのが安全な方法のようです。

Ultrascale FPGAsに関しては、 clearing bitstream をロードした後の EOSの動作は明らかに文書化されていません。しかし、逸話的なテストでは、 clearing bitstreamをロードした後は低いままであり、その後にロードされた partial bitstream の後で高く変化しました。


3回目の投稿はここまでです。最後の投稿では、 Vivado が OOCs と DCPsによって static logic と reconfigurable logic の関係を処理する方法と、これを理解することで、 Remote Update シナリオ用に partial bitstreams を作成する信頼できる方法がどのように開かれるかについて、舞台裏を紹介します。

このページは英語から自動翻訳されています。 不明な点は元のページを参照してください。
Copyright © 2021-2024. All rights reserved. (b4b9813f)