: 7 fpga クイックブート方式による fpga デザインの ... -...

44
XAPP1081 (v1.1) 2013 6 7 japan.xilinx.com 1 © Copyright 2013 Xilinx, Inc. Xilinx, the Xilinx logo, Artix, ISE, Kintex, Spartan, Virtex, Vivado, Zynq, and other designated brands included herein are trademarks of Xilinx in the United States and other countries. All other trademarks are the property of their respective owners. 概要 All Programmable FPGA の主な利点の 1 つに、 リモートからのアップデート機能があります。 この機 能を利用すると、 フィールドにあるシステムに対してパッチを適用したり、 機能をアップグレードした りできるようになります。 このアプリケーション ノートでは、高速で堅牢性を備えたコンフィギュレーション方法と効率的な HDL ベースのインシステム プログラミング リファレンス デザイ ンを補完的に組み合わせた、信頼性の 高いフィールド ア ッ プデー ト ソ リ ューシ ョ ンを紹介します。 この 2 つを組み合わせた ソ リ ューシ ョ ン を ク イ ッ ク ブー ト 方式 と 呼び ま す。 はじめに 1 に、 リ モー ト FPGA アップデート機能を備えたシステムのアーキテクチャを示します。 このアプリケーション ノ ー ト では、ク イ ッ ク ブー ト ソ リ ューシ ョ ンの評価およびインプ リ メ ンテーシ ョ ンにおけ る問題のデバ ッ グに役立つ重要な情報を含め、ク イ ッ ク ブー ト 方式について詳し く 説明し ます。 SPI ( シリアル ペリフェラル インターフェイス) フラッシュおよび BPI (バイ ト ペリフェラル インター フェイス) フラッシュを使用したクイックブート方式を KC705 評価ボードにインプリメントしたデモ ンストレーション デザインも用意しています。 KC705 評価ボー ド 上で ク イ ッ ク ブー ト 方式のデモを実 行する方法については、 35 ページの 「KC705 ボードでのデモンス ト レーシ ョ ン」 を参照してください。 クイックブート リファレンス デザインを FPGA にインプリ メン トする方法については、 15 ページの 「クイックブート リファレンス デザインのインプリ メンテーション ガイド」 を参照してください。 特長 ク イ ッ ク ブー ト 方式の主な特長は次の と お り です。 すべての 7 シリーズ FPGA をサポート HDL ベースのフラッシュ プログラマ リファレンス デザイン オーバーヘ ッ ド が最小限に抑え ら れ、 リ モー ト アップデートのペイロード サイズは通常のビッ ト ス ト リームのサイズとほぼ同じ アプリケーション ノート : 7 シリーズ FPGA XAPP1081 (v1.1) 2013 6 7 クイックブート方式による FPGA デザインの リモート アップデート 著者 : Randal Kuramoto X-Ref Target - ? 1 1 : リモート アップデート機能を備えたシステム FPGA Flash Memory (Non-volatile Bitstream Storage) FPGA Bitstream New/Enhanced FPGA Bitstream Configuration Bitstream Update Remote Update Channel (e.g., Ethernet, PCIe, USB, etc.) or Media (e.g., USB Memory Stick, SD Card, etc.) Deployed System X1081_01_040413

Upload: others

Post on 29-Jan-2021

3 views

Category:

Documents


0 download

TRANSCRIPT

  • XAPP1081 (v1.1) 2013 年 6 月 7 日 japan.xilinx.com 1

    © Copyright 2013 Xilinx, Inc. Xilinx, the Xilinx logo, Artix, ISE, Kintex, Spartan, Virtex, Vivado, Zynq, and other designated brands included herein are trademarks of Xilinx in the United States and other countries. All other trademarks are the property of their respective owners.

    概要 All Programmable FPGA の主な利点の 1 つに、 リモートからのアップデート機能があ り ます。 この機能を利用する と、 フ ィールドにあるシステムに対してパッチを適用したり、 機能をアップグレード した

    りできるよ うにな り ます。

    このアプ リ ケーシ ョ ン ノー ト では、 高速で堅牢性を備えたコンフ ィ ギュレーシ ョ ン方法と効率的なHDL ベースのインシステム プログラ ミ ング リ ファレンス デザインを補完的に組み合わせた、信頼性の高いフ ィールド アップデート ソ リ ューシ ョ ンを紹介します。 この 2 つを組み合わせたソ リ ューシ ョ ンをク イ ッ クブート方式と呼びます。

    はじめに 図 1 に、 リモート FPGA アップデート機能を備えたシステムのアーキテクチャを示します。

    このアプリ ケーシ ョ ン ノートでは、ク イ ッ クブート ソ リ ューシ ョ ンの評価およびインプリ メンテーシ ョンにおける問題のデバッグに役立つ重要な情報を含め、ク イ ッ クブート方式について詳し く説明します。

    SPI (シ リ アル ペリ フェラル インターフェイス) フラ ッシュおよび BPI (バイ ト ペリ フェラル インターフェイス) フラ ッシュを使用したク イ ッ クブート方式を KC705 評価ボードにインプ リ メ ン ト したデモンス ト レーシ ョ ン デザインも用意しています。 KC705 評価ボード上でク イ ッ クブート方式のデモを実行する方法については、 35 ページの 「KC705 ボードでのデモンス ト レーシ ョ ン」 を参照してください。

    ク イ ッ クブート リ ファレンス デザインを FPGA にインプ リ メ ン トする方法については、 15 ページの「ク イ ッ クブート リ ファレンス デザインのインプリ メンテーシ ョ ン ガイ ド」 を参照してください。

    特長 ク イ ッ クブート方式の主な特長は次のとおりです。

    • すべての 7 シ リーズ FPGA をサポート

    • HDL ベースのフラ ッシュ プログラマ リ ファレンス デザイン

    • オーバーヘッ ドが最小限に抑えられ、 リモート アップデートのペイロード サイズは通常のビッ トス ト リームのサイズとほぼ同じ

    アプリケーシ ョ ン ノート : 7 シリーズ FPGA

    XAPP1081 (v1.1) 2013 年 6 月 7 日

    クイッ クブート方式による FPGA デザインのリモート アップデート著者 : Randal Kuramoto

    X-Ref Target - ? 1

    図 1 : リモート アップデート機能を備えたシステム

    FPGA Flash Memory(Non-volatile

    Bitstream Storage)

    FPGABitstream

    New/EnhancedFPGA Bitstream

    Configuration

    Bitstream Update

    Remote UpdateChannel

    (e.g., Ethernet, PCIe, USB, etc.) or Media

    (e.g., USB MemoryStick, SD Card, etc.)

    Deployed System

    X1081_01_040413

    http://japan.xilinx.com

  • 従来のリモート アップデート ソリューシ ョ ン

    XAPP1081 (v1.1) 2013 年 6 月 7 日 japan.xilinx.com 2

    • シンプルなプログラマ インターフェイス プロ ト コルによるペイロード デリバリ

    • リモート アップデートがエラーになった場合、 正常動作が確認済みのゴールデン ビッ ト ス ト リームへのリ カバリ /フォールバッ ク機能を内蔵

    • アップデート ビッ ト ス ト リームとゴールデン ビッ ト ス ト リームのどちらも短時間でコンフ ィギュレーシ ョ ンが完了

    • 次に示す複数のコンフ ィギュレーシ ョ ン オプシ ョ ンとの互換性を維持

    • SPI モード

    • BPI モード

    • 暗号化ビッ ト ス ト リーム

    • デイジー チェーンによる複数 FPGA のコンフ ィギュレーシ ョ ン

    従来のリモート アップデート ソリューシ ョ ン

    従来のリモート FPGA アップデート ソ リ ューシ ョ ンでは、 次のコンポーネン ト を格納するために、 メインのフラ ッシュ メモ リ アレイ内に予約領域を設けます。

    • アップデート ビッ ト ス ト リーム

    • 正常動作が確認済みのゴールデン ビッ ト ス ト リーム

    そして、 リモー ト プログラム方法をインプ リ メ ン ト し、 これを用いて新規または改良したビッ ト ス トリームをアップデート ビッ ト ス ト リーム領域に書き込みます。 FPGA は、 このアップデート ビッ ト スト リームでコンフ ィギュレーシ ョ ンを試みます。

    リモート アップデートがエラーまたは中断した場合は、フォールバッ クしてゴールデン ビッ ト ス ト リームから確実にコンフ ィギュレーシ ョ ンする必要があ り ます。 ゴールデン ビッ ト ス ト リームは、 あらゆる場合にその正常動作を保証する必要があるため、 決して変更されるこ とはあ り ません。

    従来のリモート アップデート ソ リ ューシ ョ ンは、 FPGA に内蔵されているマルチブートおよびフォールバッ ク機能を利用します。マルチブートは、 フラ ッシュ メモ リ内の特定のアドレスを指定してビッ トス ト リ ームを選択的に読み込む機能です。 FPGA がコンフ ィ ギュレーシ ョ ン エラーを検出する と、フォールバッ ク機能によって FPGA がリセッ ト され、フラ ッシュ メモ リのアドレス 0 からコンフ ィギュレーシ ョ ンを再試行します。図 2 に、フォールバッ ク マルチブート を用いた従来のソ リ ューシ ョ ンで使用するフラ ッシュ メモ リ内のコンポーネン ト と、 コンフ ィギュレーシ ョ ン方法を示します。マルチブートおよびフォールバッ ク機能の詳細は、 『7 シ リーズ FPGA コンフ ィギュレーシ ョ ン ユーザー ガイ ド』[参照 1] の 「フォールバッ ク マルチブート 」 を参照してください。

    http://japan.xilinx.com

  • クイックブート方式によるリモート アップデート

    XAPP1081 (v1.1) 2013 年 6 月 7 日 japan.xilinx.com 3

    注記 : フォールバッ ク中、 FPGA はウォーム ブート シーケンスを無視します。

    マルチブート コンフ ィギュレーシ ョ ンを指定してビッ ト ス ト リームを生成する と、 ゴールデン ビッ トス ト リームのヘッダー内にウォーム ブート ジャンプ シーケンスが挿入されるため、 FPGA は次のコンフ ィギュレーシ ョ ン アドレスから リブート します。 ウォーム ブート ジャンプ シーケンスは、次の 2 つの FPGA コンフ ィギュレーシ ョ ン パケッ トで構成されます。

    • FPGA のウォーム ブート開始アドレス レジスタ (WBSTAR) に新しいコンフ ィギュレーシ ョ ン開始アドレスを書き込むためのパケッ ト

    • WBSTAR で指定したアドレスから FPGA コンフ ィギュレーシ ョ ンを再開する IPROG (内部プログラム) コマンドを発行するパケッ ト

    これら 2 つのパケッ トで構成されるウォーム ブート ジャンプ シーケンスによ り、FPGA はコンフ ィギュレーシ ョ ンを リセッ ト して指定されたコンフ ィギュレーシ ョ ン開始アドレスへジャンプします。

    簡単にいえば、 フォールバッ ク マルチブート ソ リ ューシ ョ ンはアップデート ビッ ト ス ト リームを単純に上書きする方法であ り、コンフ ィギュレーシ ョ ンを逐次的に試行およびリ カバリする方法といえます。

    書き込みのエラーや中断があった場合のリ カバリ処理は、FPGA コンフ ィギュレーシ ョ ン ロジッ クが全面的に実行します。 FPGA はまずアップデート ビッ ト ス ト リームからコンフ ィギュレーシ ョ ンを試み、コンフ ィギュレーシ ョ ン エラーを検出する とフォールバッ ク してゴールデン ビッ ト ス ト リームからのリ コンフ ィギュレーシ ョ ンを開始します。 最初にアップデート ビッ ト ス ト リームからのコンフ ィギュレーシ ョ ンを試みるため、 フォールバッ クの場合のコンフ ィギュレーシ ョ ン時間は標準のコンフ ィギュ

    レーシ ョ ン時間の 2 倍になり ます。

    クイックブート方式によるリモート アップデート

    ク イ ッ クブート方式では、 ビッ ト ス ト リーム アップデート プロセスのプログラ ミ ング アルゴ リ ズムに簡単な変更を加えるこ とによ り、 プログラ ミ ング エラー /中断からのリ カバリ をプログラム処理で実現します。 ク イ ッ クブート方式は、 このプログラム方法と特別なコンフ ィギュレーシ ョ ン ヘッダーに基づく専用のコンフ ィギュレーシ ョ ン方式を組み合わせた リモート アップデート ソ リ ューシ ョ ンです。 このソ リ ューシ ョ ンは堅牢性が高く、 さまざまなコンフ ィギュレーシ ョ ン方法との互換性もあ り、 どのよ

    うな場合でも短時間でコンフ ィギュレーシ ョ ンが完了します。図 3 に、 ク イ ッ クブート システムの概要を示します。

    X-Ref Target - ? 2

    図 2 : フォールバック マルチブートを利用した従来の方法で使用するフラッシュ メモリ内のコンポーネン ト と コンフ ィギュレーシ ョ ン方法

    Flash Memory

    UpdateBitstream

    GoldenBitstream

    Warm Boot JumpSequence

    Addr 0

    Configuration Step 1:FPGA Configuration

    Starts Here

    ConfigurationStep 5: Loadgolden bitstream.

    Configuration Step 4:If configuration error

    detected, then fallbackto golden bitstream.

    Configuration Step 2:MultiBoot: Jump toupdate bitstream.

    Configuration Step 3:Attempt to load update

    bitstream.

    X1081_02_040413

    http://japan.xilinx.com

  • クイックブート方式によるリモート アップデート

    XAPP1081 (v1.1) 2013 年 6 月 7 日 japan.xilinx.com 4

    このアプリケーシ ョ ン ノートに付属する リ ファレンス デザインは、 クイッ クブート フラッシュ プログラマと クイッ クブート ヘッダーを含むフラッシュ メモリ イ メージを生成するスク リプ トで構成されます。

    クイックブート コンフ ィギュレーシ ョ ンの方法図 4 に、 リモート アップデート時のクイ ッ クブート コンフ ィギュレーシ ョ ンの方法を示します。

    X-Ref Target - ? 3

    図 3 : クイックブート リモート アップデート ソリューシ ョ ン全体の構成

    X1081_03_040413

    UpdatedBitstream

    (.bit)

    Perl Scriptadds CRC

    PROMGen

    UpdatedBitstream

    (.mcs)

    UpdateImage(.mcs)

    Host Update Code: 1. WriteRegister (EnableBit) 2. [Optional] Pause for Erase

    3. MemCopy (update image)

    4. while (not done) done = ReadRegister()

    Factory/DesignCenter

    Local Memory

    UpdateImage

    Remote Host (External or Integrated in FPGA)

    FIF

    O

    inReset_EnableB

    inData32

    outDoneoutError

    FlashMemory

    UpdateImage

    GoldenImage

    Rea

    dabl

    eR

    egis

    ter

    Writ

    able

    Reg

    iste

    r

    FPGA

    Remote System

    Packetsor DMA

    QuickBootFlashProgrammer

    QuickBootHeader

    X-Ref Target - ? 4

    図 4 : クイックブート方式で使用するフラッシュ メモリ内のコンポーネン ト とコンフ ィギュレーシ ョ ン方法

    Flash Memory

    Component 2:Golden

    Bitstream

    Component 3:Update

    Bitstream

    Warm BootJump Sequence

    CriticalSwitch Word

    Addr 0

    Configuration Step 1:FPGA ConfigurationStarts Here – Read

    Critical Switch Word

    Component 1:QuickBoot Header Configuration Step 3A:

    If critical switch word isOFF, then ignorewarm boot sequence.

    Configuration Step 3B:Synchronize and loadgolden bitstream.

    Configuration Step 2B:Synchronize and load

    update bitstream.

    Configuration Step 2A:If critical switch word is ON,

    then execute warm bootand jump to update bitstream.

    X1081_04_041513

    http://japan.xilinx.com

  • クイックブート方式によるリモート アップデート

    XAPP1081 (v1.1) 2013 年 6 月 7 日 japan.xilinx.com 5

    ク イ ッ クブート方式では、 フラ ッシュ メモ リに次のコンポーネン ト を格納します。

    • 特別なクイ ッ クブート ヘッダー

    • ゴールデン ビッ ト ス ト リーム イ メージ領域

    • アップデート ビッ ト ス ト リーム イ メージ領域

    マルチブート ウォーム ブート ジャンプ シーケンスがゴールデン ビッ ト ス ト リームから独立している点を除き、ク イ ッ クブート方式の場合にフラ ッシュ メモ リに格納するコンポーネン トはマルチブート方式の場合とほぼ共通です。 ク イ ッ クブート ヘッダーは、 次の 2 つで構成されます。

    • ク リ ティカル スイ ッチ ワード

    • ウォーム ブート ジャンプ シーケンス

    ク イ ッ クブート方式のコンフ ィギュレーシ ョ ンで重要な役割を果たすのが、ク リ ティカル スイ ッチ ワードです。 ク リ テ ィカル スイ ッチ ワードはオンまたはオフいずれかの状態をと り ます。 このスイ ッチがオンの場合、 FPGA はアップデート ビッ ト ス ト リームを読み込み、 オフの場合はゴールデン ビッ ト スト リームを読み込みます。

    図 4 に示したク イ ッ クブート コンフ ィギュレーシ ョ ンは、 次の順序で実行されます。

    1. フラ ッシュ メモ リのアドレス 0 から読み出しを開始します。 ク リ ティカル スイ ッチ ワードのアドレスから値を読み出し、 スイ ッチの値に基づいて手順 2 または手順 3 へ進みます。

    2. ク リ ティカル スイ ッチ ワードがオンの場合は、 アップデート ビッ ト ス ト リームを用いてコンフ ィギュレーシ ョ ンを実行します。

    a. ク リ ティカル スイ ッチ ワードに続く ウォーム ブート ジャンプ シーケンスを実行し、 アップデート ビッ ト ス ト リーム領域へジャンプします。

    b. アップデート ビッ ト ス ト リーム領域からビッ ト ス ト リームを読み込みます。

    3. ク リ ティカル スイ ッチ ワードがオフの場合は、 ゴールデン ビッ ト ス ト リームを用いてコンフ ィギュレーシ ョ ンを実行します。

    a. ク リ ティカル スイ ッチ ワードの後、ウォーム ブート ジャンプ シーケンスを無視してゴールデン ビッ ト ス ト リームのアドレスに達するまでフラ ッシュ メモ リ を順に読み出します。

    b. ゴールデン ビッ ト ス ト リーム領域からビッ ト ス ト リームを読み込みます。

    つま り、 ク イ ッ クブート方式のコンフ ィギュレーシ ョ ンでどちらのビッ ト ス ト リームを読み込むかは、

    コンフ ィギュレーシ ョ ン プロセスの最初の段階でク リティカル スイ ッチ ワードを用いてただちに決定します。 その後、 FPGA は選択したビッ ト ス ト リーム領域から通常の方法でコンフ ィギュレーシ ョ ンを実行します。

    クイックブートのフラッシュ プログラ ミング方法ク イ ッ クブート方式では、アップデート ビッ ト ス ト リームのプログラム手順によってソ リ ューシ ョ ンの堅牢性を確保しています。 ク イ ッ クブート コンフ ィギュレーシ ョ ンを確実に成功させるには、 フラ ッシュをプログラムする際に次の条件に従う必要があ り ます。

    1. アップデート ビッ ト ス ト リームに変更を加える際は、 事前にク リティカル スイ ッチ ワードをオフにしておく こ と。 ク リ テ ィカル スイ ッチ ワードの値を正確なオン値以外に変更する と、 スイ ッチがオフになる。

    2. アップデート ビッ ト ス ト リームが正し く書き込まれたこ とが確認できた場合のみ、ク リ ティカル スイ ッチ ワードをオンにするこ と。 ク リ テ ィカル スイ ッチ ワードを特定の値に設定した場合のみ、スイ ッチがオンになる。

    3. ゴールデン イ メージおよびクイ ッ クブート ヘッダーの後半は、 あらゆる場合にその正常動作を保証する必要があるため、 決して書き換えないこ と。

    http://japan.xilinx.com

  • クイックブート インプリ メンテーシ ョ ンの詳細

    XAPP1081 (v1.1) 2013 年 6 月 7 日 japan.xilinx.com 6

    ク イ ッ クブート方式のコンフ ィギュレーシ ョ ンでは、 ク リ ティカル スイ ッチ ワードがオンの場合のみ、アップデート ビッ ト ス ト リーム イ メージからコンフ ィギュレーシ ョ ンを実行します。 このため、 アップデート ビッ ト ス ト リーム領域に正しいビッ ト ス ト リームが書き込まれていない可能性がわずかでもある場合は、 FPGA がウォーム ブート ジャンプ シーケンスでアップデート ビッ ト ス ト リーム領域へジャンプしないよ うに条件 1 と 2 を満たす必要があ り ます。 条件 3 によって、 ク リ テ ィカル スイ ッチワードがオフの場合はゴールデン ビッ ト ス ト リームが安全に読み込まれ、それ以外の場合にはウォームブート ジャンプ シーケンスによって FPGA が正し く アップデート ビッ ト ス ト リームへジャンプします。

    クイックブートのフラッシュ プログラ ミング アルゴリズム

    ク イ ッ クブートのフラ ッシュ プログラ ミ ング アルゴ リズムは、 次のとおりです。

    1. ク リ ティカル スイ ッチ ワードが格納されているサブセクターまたはブロ ッ クを消去して、 スイ ッチをオフにする。

    2. アップデート イ メージ領域のセクターまたはブロ ッ クを消去する。

    3. アップデート イ メージ領域にアップデート ビッ ト ス ト リームを書き込む。

    4. アップデート イ メージが正し く書き込まれたこ とを確認する。

    5. アップデート イ メージの確認が完了したら、 ク リ ティカル スイ ッチ ワードを正確なオン値となるよ うに書き込んでスイ ッチをオンにする。

    クイックブートインプリ メンテーシ ョ ンの詳細

    ク イ ッ クブート インプ リ メンテーシ ョ ンには、 次の要素が関連します。

    • ク リ ティカル スイ ッチ ワード

    • フラ ッシュ メモ リの概要と ク イ ッ クブート方式におけるフラ ッシュ メモ リ内での各コンポーネントのマッピング

    • ビッ ト ス ト リーム イ メージのサイズとフラ ッシュ メモ リ サイズの選択

    • ク イ ッ クブートのコンフ ィギュレーシ ョ ン時間

    • ク イ ッ クブートにおけるアップデート イ メージの検証

    クリテ ィ カル スイッチ ワードク リ ティカル スイ ッチ ワードは特別なワード値です。 ク リ ティカル スイ ッチ ワードのアドレスに特定の値が格納されている場合のみ、 このスイ ッチはオンと見なされます。 このアドレスに正確な値が格納

    されているかど うかによって、 FPGA コンフ ィギュレーシ ョ ン ロジッ クがウォーム ブート ジャンプシーケンスを実行するかど うかが決ま り ます。

    ク リ テ ィカル スイ ッチ ワードの動作とその特別なオン値を理解するには、 FPGA のビッ ト ス ト リームおよび FPGA が備えるコンフ ィギュレーシ ョ ン ロジッ クに関する知識が必要です。 ザイ リ ンク スのFPGA は、 連続する 32 ビッ ト ワードで構成されたビッ ト ス ト リーム (.bit ファ イル) を用いてコンフ ィギュレーシ ョ ンされます。 32 ビッ ト ワードには、 次の種類があ り ます。

    • バス幅自動検出ワード。 FPGA はこのワードを使用して、 コンフ ィギュレーシ ョ ンの最初にパラレル コンフ ィギュレーシ ョ ン データ バス幅を自動で検出します (BPI および SelectMAP モードの場合のみ)。

    • 同期ワード。 ビッ ト ス ト リーム開始の目印となるもので、 コンフ ィギュレーシ ョ ン ロジッ クは同期ワード以降のパケッ トの 32 ビッ ト境界に同期します (すべてのコンフ ィギュレーシ ョ ン モードで共通)。

    • パケッ ト ヘッダー ワード。 レジスタにデータを書き込むためのレジスタ とデータ ワード数を指定します。

    • 各パケッ トに対するパケッ ト コマンドまたはデータ ワード。 コンフ ィギュレーシ ョ ン コマンド レジスタへの書き込みを指定したパケッ トの場合、このワードは IPROG などのコマンド とな り ます。

    http://japan.xilinx.com

  • クイックブート インプリ メンテーシ ョ ンの詳細

    XAPP1081 (v1.1) 2013 年 6 月 7 日 japan.xilinx.com 7

    WBSTAR への書き込みを指定したパケッ トの場合は、 このデータ ワードにウォーム ブート ジャンプ アドレスが含まれます。

    注記 : ビッ ト ス ト リームのバス幅自動検出ワード、同期ワード、パケッ トの詳細は、 『7 シ リーズ FPGAコンフ ィギュレーシ ョ ン ユーザー ガイ ド』 [参照 1] の 「コンフ ィギュレーシ ョ ンの詳細」 を参照してください。

    ザイ リ ンクスのデザイン ツールで生成されるビッ ト ス ト リームはすべて、 次の順で構成されています。

    1. バス幅自動検出ワード

    2. 同期ワード

    3. FPGA コンフ ィギュレーシ ョ ンを定義するデータ パケッ ト

    FPGA が BPI フラ ッシュ メモ リからデータを読み出す場合、 FPGA コンフ ィギュレーシ ョ ン ロジッ クは D[0:7] ピンに現れるバス幅自動検出パターンの最初のワードでデータ値 0xBB を検出するまで第 1ステージにとどま り ます。 バス幅自動検出パターンを最初に検索している間、 有効なバス幅自動検出パ

    ターンを認識するまで FPGA はすべての入力データを無視します。 このため、 BPI モードのコンフ ィギュレーシ ョ ンではバス幅自動検出パターンの最初のワード 0x000000BB がク イ ッ クブート方式のクリティカル スイ ッチ ワード とな り ます。ク イ ッ クブート ク リ ティカル スイ ッチ ワードの観点からいえば、FPGA コンフ ィギュレーシ ョ ン ロジッ クの残りのステージはバス幅自動検出パターンが見つかるまでオンにはなり ません。

    SPI モードでは、 FPGA はバス幅自動検出ロジッ クは使用しません。

    FPGA が SPI フラ ッシュ メモ リからデータを読み出す場合、 FPGA コンフ ィギュレーシ ョ ン ロジッ クは入力データを監視して同期ワード 0xAA995566 を検出するまで第 1 ステージにとどま り、 同期ワードを検出する と入力ビッ ト ス ト リームの 32 ビッ ト ワード境界に同期します。 同期ワードを最初に検索している間、 同期ワードを認識するまですべての入力データを無視します。 このため、 SPI モードのコンフ ィギュレーシ ョ ンでは同期ワードがク イ ッ クブート方式のク リ テ ィカル スイ ッチ ワード とな り ます。 ク イ ッ クブート ク リ ティカル スイ ッチ ワードの観点からいえば、 FPGA コンフ ィギュレーシ ョ ンロジッ クの残りのステージは同期ワードが見つかるまでオンにはなり ません。

    表 1 に、 各コンフ ィギュレーシ ョ ン モードでク リ ティカル スイ ッチ ワードがオンになる正確な値を示します。

    フラ ッシュ メモリの概要とクイックブート方式におけるフラッシュ メモリ内での各コンポーネン トのマッピング

    ク イ ッ クブート フラ ッシュ プログラ ミ ング アルゴ リ ズムをインプ リ メ ン トするには、 NOR 型フラ ッシュ メモ リのアーキテクチャ と動作を理解しておく必要があ り ます。特に、 ク イ ッ クブート方式で使用する各コンポーネン ト をフラ ッシュ メモ リ内の特定の領域にマッピングし、これら領域に対して利用可能なフラ ッシュ動作にクイ ッ クブート アルゴ リズムの各処理をマッピングする必要があ り ます。

    フラ ッシュ メモリのアーキテクチャと動作

    NOR 型フラ ッシュ メモ リは、 データ ワードまたはデータ バイ トが リニア アレイ と して配列された構成となっています。 この リ ニア アレイは消去可能なブロ ッ クまたはセク ターに分かれています。 一部の NOR 型フラ ッシュ メモ リでは、 セク ターがさ らにサブセクターに分割されているものもあ り ます。セグメン ト とそのサイズについては、使用する NOR 型フラ ッシュ メモ リのデータシート を参照して ください [参照 2] [参照 3]。

    表 1 : クリテ ィ カル スイッチ ワードがオンになる値

    コンフ ィギュレーシ ョ ン モード BPI モード SPI モードク リ ティカル スイ ッチ ワード (32 ビッ ト値) 0x000000BB(1) 0xAA995566

    注記 : 1. ビッ ト / バイ ト スワ ップによ り、 BPI フラ ッシュのク リティカル スイ ッチ ワードは 16 進数データ (MCS)

    ファイル内では 0x0000DD00 とな り ます。

    http://japan.xilinx.com

  • クイックブート インプリ メンテーシ ョ ンの詳細

    XAPP1081 (v1.1) 2013 年 6 月 7 日 japan.xilinx.com 8

    NOR 型フラ ッシュ メモ リ を新しいデータ値で書き換えるには、 次の 2 つの手順が必要です。

    1. 消去 : 選択したセグメン トのすべてのデータ ビッ ト を 1 にリセッ トする2. 書き込み : 必要な位置のみ 1 のデータ ビッ ト を 0 に変更する消去は、 ブロ ッ ク単位、 セクター単位、 サブセクター単位のいずれかで実行できます。 つま り、 あるセ

    グメン ト を消去する とそのセグメン トに含まれるすべてのデータ ワード またはデータ バイ トが消去されます。 書き込み動作は 1 ワードまたは 1 バイ ト単位で実行できます。

    注記 : 書き込み速度を高めるため、 通常は 1 回の書き込みでバッ フ ァーへのワード書き込みまたは1 ページ分のバイ ト書き込みを実行します。

    フラ ッシュ メモリ内でのクイックブート コンポーネン トのマッピング概要

    フラ ッシュ メモ リのセグメン ト アーキテクチャでは、 フラ ッシュ メモ リの書き換えには消去動作が必要で、 その消去動作はフラ ッシュ メモ リのセグメン ト全体に影響するため、 ク イ ッ クブート コンポーネン ト をフラ ッシュ メモ リに格納する際には次の制約が生じます。

    1. ク イ ッ クブート ヘッダーは次の順に配置します。

    a. ク イ ッ クブート ヘッダーの前半、 すなわちク リ ティカル スイ ッチ ワードはそれだけを独立して 1 つの消去可能セグメン トに配置します。

    b. ク イ ッ クブート ヘッダーの後半は、 前半とは別のフラ ッシュ セグメン トに配置します。

    2. ゴールデン ビッ ト ス ト リーム イ メージは、フラ ッシュ メモ リ アレイ内でクイ ッ クブート ヘッダーの直後に配置します。

    3. アップデート ビッ ト ス ト リーム イ メージは、 それだけを消去できるよ うに独立した複数のセグメン トに配置します。1 つの消去可能セグメン トに、アップデート イ メージとゴールデン ビッ ト ス トリーム イ メージの両方が存在しないよ うにします。

    ク リ テ ィカル スイ ッチ ワードは、 それだけを独立して 1 つの消去可能セグメン トに配置し、 消去の影響がク リ ティカル スイ ッチ ワード以外に及ばないよ うにします。 同様に、 アップデート イ メージもそれだけを消去できるよ うに独立した複数のセグメン トに配置し、アップデート イ メージを書き換える際にゴールデン ビッ ト ス ト リーム イ メージに影響が及ばないよ うにする必要があ り ます。

    BPI フラッシュ メモリへのクイックブート コンポーネン トのマッピングの詳細

    図 5 に、ク イ ッ クブート ソ リ ューシ ョ ンの BPI フラ ッシュ メモ リ コンポーネン ト を Micron P30 フラ ッシュ メモ リ [参照 2] に配置する場合の詳細なマップを示します。 最初の消去可能ブロ ッ クのサイズは65,536 (0x00010000) 16 ビッ ト ワードで、その末尾にク リティカル スイ ッチ ワードを配置します。この図には、 アップデート ビッ ト ス ト リームが正常な場合とそこに問題がある場合の例を示しています。アップデート ビッ ト ス ト リームが正常な場合、その予約領域に有効なビッ ト ス ト リームが格納されています。 アップデート ビッ ト ス ト リームに問題がある場合は、 その予約領域に破損したデータ、不完全なデータ、 あるいは状態が未知のデータが格納されています。

    http://japan.xilinx.com

  • クイックブート インプリ メンテーシ ョ ンの詳細

    XAPP1081 (v1.1) 2013 年 6 月 7 日 japan.xilinx.com 9

    注記 : 図 5 に示したアップデート イ メージのアドレスは、ビッ ト ス ト リームが 16Mb 空間に収まる場合のものです。 FPGA のサイズが異なる と、 アップデート ビッ ト ス ト リーム イ メージのアドレスも異なり ます。 この情報の Excel バージ ョ ンは、 リ ファレンス デザイン ファ イルを参照してください。

    アップデート ビッ ト ス ト リームが正常な場合の例では、 ク リ ティカル スイ ッチ ワードのアドレスに最初のバス幅自動検出ワード 0x000000BB が格納されています。この場合、FPGA コンフ ィギュレーシ ョン ロジッ クは次の手順を実行します。

    1. バス幅自動検出シーケンスを開始する。

    2. ク イ ッ クブート ヘッダーの後半にあるウォーム ブート ジャンプ シーケンスを実行する。

    3. アップデート ビッ ト ス ト リームを読み込んで処理を完了する。

    アップデート ビッ ト ス ト リームに問題がある場合の例では、 ク リ ティカル スイ ッチ ワードのアドレスに最初のバス幅自動検出ワードが格納されていません。 したがって、 この場合 FPGA コンフ ィギュレーシ ョ ン ロジッ クは次の手順を実行します。

    1. ク イ ッ クブート ヘッダーの後半を無視し、 バス幅自動検出ワードを待つ。

    2. ゴールデン ビッ ト ス ト リームの先頭にある標準のバス幅自動検出ワードを検出する。

    3. ゴールデン ビッ ト ス ト リームを読み込んで処理を完了する。

    X-Ref Target - ? 5

    図 5 : アップデート イメージが正常な場合と問題がある場合のクイックブート BPI フラッシュ メモリ マップ

    Data LegendBlack Text = Standard bitstream from design tools.

    Light-Red Background = QuickBoot Header – two parts.Yellow/Gold Background = “Golden” data image.Green Background = “Update” data image.

    Flash26-bit Word

    Address(when update

    image/content isNOT good)

    0x00000000

    0x0000FFFE

    0x00010000 Second word of bus width auto detect sequence0x00010002 Dummy word0x00010004 Dummy word0x00010006 Bitstream Sync Word0x00010008 Bitstream NOOP packet0x0001000A Bitstream WRITE to warm boot start (WBSTAR) packet0x0001000C Packet data: warm boot start address 0x002000000x0001000E Bitstream WRITE to COMMAND register packet0x00010010 Packet data: IPROG command.0x00010012 Bitstream NOOP packet0x00010014 Bitstream NOOP packet0x00010016 Bitstream NOOP packet0x00010018 GOLDEN BITSTREAM:

    …0x000000BB0x11220044

    …0xAA995566

    …bitstream packets

    GOLDEN BITSTREAM:…

    0x000000BB0x11220044

    …0xAA995566

    …bitstream packets

    The "golden" bitstream, a standard bitstream from Xilinxdesign tools.NOTE: All standard bitstreams begin with a bus width autodetect sequence and sync word.

    Dummy pad words to fill from end of the "golden" bitstreamto the end of the "golden" image.

    0x00100000 UPDATE BITSTREAM:…

    0x000000BB0x11220044

    …0xAA995566

    …bitstream packets

    The "update" bitstream, a standard bitstream from Xilinxdesign tools.NOTE: All standard bitstreams begin with a bus width autodetect sequence and sync word.

    Dummy pad words to fill from end of the "update" bitstreamto the end of the "update" image, minus the last 4 bytes thatare reserved for the CRC32.

    0x001FFFFE 32-bit reciprocal of CRC32 for all bytes in the "update" imagearea from addresses 0x00100000 to 0x001FFFFE.

    QUICKBOOT HEADER - PART 1: THE CRITICAL SWITCH WORD:This is the first and smallest erasable flash block. This block contains the first bus widthauto detect word, which enables an FPGA to begin its process of interpreting the packetsthat follow or, if not present, causes the FPGA to ignore the words that follow while itcontinues to search for the first bus width auto detect word.

    QUICKBOOT HEADER - PART 2: THE WARM BOOT JUMP SEQUENCE:This section of the QuickBoot header includes the remainder of the bus width autodetect words to complete the bus width auto detect process, a sync word to synchronizethe configuration logic to the 32-bit boundary of the 32-bit packet words, and the warmboot jump sequence. The warm boot jump sequence is a series of bitstream packetsthat write an address to the warm boot start address register (WBSTAR) andcommand and address, plus an IPROG command. Only if the FPGA configurationlogic sees the first bus width auto detect word in the first part of the header does theFPGA interpret these packets and execute this warm boot sequence. Otherwise,the FPGA configuration logic ignores these data words while it continues its search forthe first bus width auto detect word.

    THE "GOLDEN" IMAGE:The "golden" image contains the known-good, "golden" design bitstream(s).If the QuickBoot header did not contain the first bus width auto detect word, theFPGA configuration logic continues searching through the flash and finds the first buswidth auto detect word in this golden bitstream. Thus, configuration can start here.The "golden" image contains:1. A standard bitstream, which is the "golden" design.2. Dummy pad words (0xFFFFFFFF) to fill the area between the end of the "golden"bitstream and the end of the "golden" image/area.

    THE "UPDATE" IMAGE/AREA:Updated design bitstreams are programmed into this "update" area, which is aligned to erasable sector boundaries.

    The "update" image/area contains:1. A standard bitstream, which is the "updated" design.2. Dummy pad words (0xFFFFFFFF) to fill the area between the end of the "update"bitstream and the at the end of the "update" image/area.4. = "Complemented" CRC32 value for all bytes in the "update"image area, except for the last four bytes, which are reserved for the 32-bit.

    Eraseable Block 0:Contains padding of dummy (0xFFFFFFFF) words, plus the"critical switch word" (0x000000BB) at word address0x000FFFE. If this switch word is NOT present, the FPGAignores the following data while searching for the first0x000000BB word.

    0x11220044

    0xFFFFFFFF

    0xFFFFFFFF

    0xAA995566

    0x200000000x300200010x002000000x300080010x0000000F0x200000000x200000000x20000000

    Blue Text = Data added by/for reference design.

    Blue Dashed Line = FPGA read path, ignoring data.Blue Solid Line = FPGA read path, executing commands.

    0xFFFFFFFF0xFFFFFFFF

    …0xFFFFFFFF

    0x000000BB(bus width auto

    detect word)0x11220044

    0xFFFFFFFF

    0xFFFFFFFF

    0xAA995566

    0x200000000x300200010x002000000x300080010x0000000F0x200000000x200000000x20000000

    0xFFFFFFFF0xFFFFFFFF

    …0xFFFFFFFF

    0xFFFFFFFF0xFFFFFFFF

    …0xFFFFFFFF

    0xFFFFFFFF0xFFFFFFFF

    …0xFFFFFFFF

    0xXXXXXXXX

    Red Text = Unknown or don’t care data.

    Green Line = FPGA loading configuration.

    ?

    ?

    ?

    Flash Contents forGood Update

    Flash Contentsfor Bad Update

    (when updateimage/content

    is verified GOOD)

    Detailed Description of Data Content(Details for each data word or

    significant data group)

    High-Level Block Description(Descriptions of the three major blocks of

    data within the flash memory)

    X1081_05_041513

    http://japan.xilinx.com

  • クイックブート インプリ メンテーシ ョ ンの詳細

    XAPP1081 (v1.1) 2013 年 6 月 7 日 japan.xilinx.com 10

    アップデート ビッ ト ス ト リームは、 それだけを消去できるよ うに独立した複数のブロッ ク内に配置されます。アップデート ビッ ト ス ト リームは、これら消去可能ブロッ クの先頭 (ワード アドレス 0x00100000)から始ま り ます。

    注記 : アップデート イ メージのサイズはビッ ト ス ト リームのサイズによって異なるため、実際のインプリ メ ンテーシ ョ ンにおけるアップデート ビッ ト ス ト リーム イ メージのアドレスは、 図 5 に示したものと異なるこ とがあ り ます。

    SPI フラッシュ メモリへのクイックブート コンポーネン トのマッピングの詳細

    ク リ ティカル スイ ッチ ワードに違いがある点を除いて、 SPI フラ ッシュ メモ リへのク イ ッ クブート コンポーネン ト のマッピングは BPI フラ ッシュ メモ リ の場合と基本的には同様です。 SPI モードでは、FPGA コンフ ィギュレーシ ョ ン ロジッ クはバス幅自動検出ステージをスキップして、同期ワードの検索から開始します。 したがって、SPI フラ ッシュ メモ リ用のク イ ッ クブート ヘッダーの先頭にはバス幅自動検出ワードではなく、 同期ワードがク リ ティカル スイ ッチ ワード と して格納されます。

    図 6 に、クイッ クブート ソ リ ューシ ョ ンの SPI フラッシュ メモリ コンポーネン ト を Micron N25Q フラッシュ メモリ [参照 2] に配置する場合の詳細なマップを示します。最初の消去可能サブセクターのサイズは4,096 (0x00001000) 8 ビッ ト バイ トで、 その末尾にク リティカル スイッチ ワードを配置します。

    注記 : 図 6 に示したアップデート イ メージのアドレスは、ビッ ト ス ト リームが 16Mb 空間に収まる場合のものです。 FPGA のサイズが異なる と、 アップデート ビッ ト ス ト リーム イ メージのアドレスも異なり ます。 この情報の Excel バージ ョ ンは、 リ ファレンス デザイン ファ イルを参照してください。

    X-Ref Target - ? 6

    図 6 : アップデート イメージが正常な場合と不正な場合のクイックブート SPI フラッシュ メモリ マップ

    Data LegendBlack Text = Standard bitstream from design tools

    Light-Red Background = QuickBoot Header - two partsYellow/Gold Background = "Golden" data imageGreen Background = "Update" data image

    Flash8-bit ByteAddress

    Flash Contents forGood Update

    (when update image/contentis verified GOOD)

    Flash Contents forBad Update

    (when update image/contentis NOT good)

    Detailed Description of Data Content(Details for each data word or significant data group)

    High-Level Block Description(Descriptions of the three major blocks of data within the flash memory)

    0x00000000

    0x00000FFC

    0x00001000 Bitstream NOOP packet0x00001004 Bitstream WRITE to warm boot start (WBSTAR) packet0x00001008 Packet data: Warm boot start address 0x002000000x0000100C Bitstream WRITE to COMMAND register packet0x00001010 Packet data: IPROG command0x00001014 Bitstream NOOP packet0x00001018 Bitstream NOOP packet0x0000101C Bitstream NOOP packet0x00001020 GOLDEN BITSTREAM:

    …0x000000BB0x11220044

    …0xAA995566

    …bitstream packets

    GOLDEN BITSTREAM:…

    0x000000BB0x11220044

    …0xAA995566

    …bitstream packets

    The "golden" bitstream, a standard bitstream from Xilinxdesign tools.NOTE: All standard bitstreams begin with a bus width autodetect sequence and sync word.

    Dummy pad words to fill from end of the "golden" bitstream tothe end of the "golden" image.

    0x00200000 UPDATE BITSTREAM:…

    0x000000BB0x11220044

    …0xAA995566

    …bitstream packets

    The "update" bitstream, a standard bitstream from Xilinxdesign tools.NOTE: All standard bitstreams begin with a bus width autodetect sequence and sync word.

    Dummy pad words to fill from end of the "update" bitstreamto the end of the "update" image, minus the last 4 bytes thatare reserved for the CRC32.

    0x003FFFFC 32-bit reciprocal of CRC32 for all bytes in the "update" imagearea from addresses 0x00200000 to 0x003FFFFB.

    THE "UPDATE" IMAGE/AREA:Updated design bitstreams are programmed into this "update" area, which isaligned to erasable sector boundaries.

    The "update" image/area contains:1. A standard bitstream, which is the "updated" design.2. Dummy pad words (0xFFFFFFFF) to fill the area between the end of the"update" bitstream and the at the end of the "update"image/area.4. = "Complemented" CRC32 value for all bytes in the"update" image area, except for the last four bytes, which are reserved forthe 32-bit .

    QUICKBOOT HEADER - PART 1: THE CRITICAL SWITCH WORD:This is the first and smallest erasable flash block (e.g., subsector). This blockcontains the sync word, which enables an FPGA to begin its process ofinterpreting the packets that follow or, if not present, causes the FPGA toignore the words that follow while it continues to search for the sync word.

    THE "GOLDEN" IMAGE:The "golden" image contains the known good, "golden" design bitstream(s).If the QuickBoot header did not contain a sync word, the FPGAconfiguration logic continues searching through the flash and finds the syncword in this golden bitstream. Thus, configuration can start here.The "golden" image contains:1. A standard bitstream, which is the "golden" design.2. Dummy pad words (0xFFFFFFFF) to fill the area between the end of the"golden" bitstream and the "golden" image/area.

    QUICKBOOT HEADER - PART 2: THE WARM BOOT JUMP SEQUENCE:The warm boot jump sequence is a series of bitstream packets that write anaddress to the warm boot start address register (WBSTAR) and commandand address, plus an IPROG command. Only if the FPGA configuration logicsees and synchronizes to the previous sync word does the FPGA interpretthese packets and execute this warm boot sequence. Otherwise, the FPGAconfiguration logic ignores these data words while it continues its search forthe sync word.

    Eraseable Subsector 0:Contains padding of dummy (0xFFFFFFFF) words, plus the"critical switch word" (0xAA995566) at byte address0x0000FFC. If this switch word is NOT present, the FPGA ignores the following data, while searching for the first0xAA995566 word.

    Blue Text = Data added by/for reference designRed Text = Unknown or don’t-care data

    Blue dashed line = FPGA read path, ignoring dataBlue solid line = FPGA read path, executing commandsGreen line = FPGA loading configuration

    0xFFFFFFFF0xFFFFFFFF

    …0xFFFFFFFF

    0xAA995566(sync word)

    0xXXXXXXXX

    0x20000000 0x20000000

    0x30020001 0x300200010x00200000 0x002000000x30008001 0x300080010x0000000F 0x0000000F0x20000000 0x200000000x20000000 0x200000000x20000000 0x20000000

    0xFFFFFFFF0xFFFFFFFF

    …0xFFFFFFFF

    0xFFFFFFFF0xFFFFFFFF

    …0xFFFFFFFF

    ?

    0xFFFFFFFF0xFFFFFFFF

    …0xFFFFFFFF

    ?

    ?

    X1081_06_041613

    http://japan.xilinx.com

  • クイックブート インプリ メンテーシ ョ ンの詳細

    XAPP1081 (v1.1) 2013 年 6 月 7 日 japan.xilinx.com 11

    図 6 には、アップデート ビッ ト ス ト リームが正常な場合と問題がある場合の例を示しています。アップデート ビッ ト ス ト リームが正常な場合の例では、 ク リ ティカル スイ ッチ ワードのアドレスに正しい同期ワード 0xAA995566 が格納されています。 したがって、 この場合 FPGA コンフ ィギュレーシ ョ ン ロジッ クは次の手順を実行します。

    1. ク リ ティカル スイ ッチ ワードのアドレスで同期を実行する。

    2. ク イ ッ クブート ヘッダーの後半にあるウォーム ブート ジャンプ シーケンスを実行する。

    3. アップデート ビッ ト ス ト リームを読み込んで処理を完了する。

    アップデート ビッ ト ス ト リームに問題がある場合の例では、 ク リ ティカル スイ ッチ ワードのアドレスに有効な同期ワードが格納されていません。 したがって、 この場合 FPGA コンフ ィギュレーシ ョ ン ロジッ クは次の手順を実行します。

    1. ク イ ッ クブート ヘッダーの後半を無視し、 同期ワードの検索を続ける。

    2. ゴールデン ビッ ト ス ト リームの先頭にある標準の同期ワードを検出する。

    3. ゴールデン ビッ ト ス ト リームを読み込んで処理を完了する。

    アップデート ビッ ト ス ト リームは、 それだけを消去できるよ うに独立した複数のブロッ ク内に配置されます。アップデート ビッ ト ス ト リームは、これら消去可能ブロッ クの先頭 (バイ ト アドレス 0x00200000)から始ま り ます。

    注記 : アップデート イ メージのサイズはビッ ト ス ト リームのサイズによって異なるため、実際のインプリ メ ンテーシ ョ ンにおけるアップデート ビッ ト ス ト リーム イ メージのアドレスは、 図 6 に示したものと異なるこ とがあ り ます。

    ビッ トス ト リーム イ メージのサイズとフラ ッシュ メモリ サイズの選択一般に、 フラ ッシュ メモ リのサイズは FPGA ビッ ト ス ト リームの長さを 2 の累乗に切り上げたサイズ(単位 : Mb) の 2 倍と見積もるこ とができます。 フラ ッシュ メモ リのサイズ (単位 : ビッ ト ) の見積も り方法は次のとおりです。

    1. FPGA ビッ ト ス ト リームの長さを 『7 シ リーズ FPGA コンフ ィギュレーシ ョ ン ユーザー ガイ ド』[参照 1] の表 「ビッ ト ス ト リームの長さ」 で調べます。 たとえば 7K70T の場合、 ビッ ト ス ト リームの長さは約 23Mb です。

    2. ビッ ト ス ト リームの長さを 2 の累乗 (単位 : Mb) に切り上げてイ メージ サイズを見積も り ます。 たとえば 23Mb の場合、 32Mb (225 ビッ ト ) に切り上げます。

    3. ゴールデン イ メージとアップデート イ メージを格納できるよ う、 手順 2 で求めたイ メージ サイズを 2 倍して最小フラ ッシュ サイズを見積も り ます。 たとえば 32Mb の場合、 32Mb x 2 = 64Mb とな り ます。

    実際の最小イ メージ サイズは、 次の 3 つの値の合計を消去可能ブロッ ク サイズの倍数に切り上げた値とな り ます。また、実際の最小フラ ッシュ サイズは実際の最小イ メージ サイズを 2 倍した値となり ます。

    1. 次の 3 つの値を合計します。

    a. 最初の消去可能セグメン トのサイズ (すなわち、 ク リ ティカル スイ ッチ ワードを含む消去可能セグメン トのサイズ)

    b. ク イ ッ クブート ヘッダー後半の長さ

    c. FPGA ビッ ト ス ト リームの長さ

    2. 手順 1 で求めた合計を通常の消去可能セグメン ト サイズの倍数に切り上げたものが最小イ メージサイズとな り ます。

    3. 手順 2 で求めた値を 2 倍します。

    4. 手順 3 で求めた値の単位をビッ トから Mb に変換し、 最小フラ ッシュ サイズを求めます。

    http://japan.xilinx.com

  • クイックブート インプリ メンテーシ ョ ンの詳細

    XAPP1081 (v1.1) 2013 年 6 月 7 日 japan.xilinx.com 12

    表 2 に、最小イ メージ サイズと最小フラ ッシュ サイズを求めるためのワークシート を示します。BPI および SPI フラ ッシュ デバイスの詳細は、 35 ページの 「KC705 ボードでのデモンス ト レーシ ョ ン」 で説明します。

    フラ ッシュ メモ リのサイズは、 表 2 の行 10 の値以上とする必要があ り ます。 各ビッ ト ス ト リーム イメージのサイズは、 表 2 の行 8 の値以上とする必要があ り ます。

    MMCM/PLL のロックまたは DCI の待機状態を考慮したビッ トスト リームの間隔通常の FPGA コンフ ィギュレーシ ョ ン シーケンスでは、FPGA はビッ ト ス ト リーム読み込みプロセスの完了近くになる と読み込んだデザインに対するスタート アップ シーケンスを開始し、 ビッ ト ス ト リームの終わりに達する前にフラ ッシュ メモ リからのデータ読み出しを停止します。 ただし場合によっては、FPGA スタート アップ シーケンスが長引く こ とがあ り ます。 この場合、 FPGA はビッ ト ス ト リームが終わった後もフラ ッシュ メモ リからのデータ読み出しを継続します。 このよ うな場合、 フラ ッシュ メモ リ内の最初のビッ ト ス ト リーム (すなわちゴールデン ビッ ト ス ト リーム) と次のビッ ト ス ト リーム (すなわちアップデート ビッ ト ス ト リーム) の間に十分な間隔を確保しておかないと、 FPGA は最初のビッ ト スト リームのスタート アップ シーケンス完了を待っている間に次のビッ ト ス ト リームを読み込んでしまいます。

    スタート アップの待機状態が長引くのは、 FPGA デザインとビッ ト ス ト リーム設定が次のいずれかの条件に該当する場合です。

    表 2 : 最小イメージ サイズおよび最小フラッシュ サイズの計算用ワークシート

    手順/行 説明 記入欄 BPI フラ ッシュと 7K70T FPGASPI フラッシュと 7K70T FPGA 単位

    1 ク イ ッ クブート ヘッダー前半の長さ最初の消去可能セグメン トのサイズ

    • BPI フラ ッシュ : BPI フラ ッシュのデータシート [参照 2] で消去ブロッ ク サイズを確認します。

    • SPI フラ ッシュ : SPI フラ ッシュのデータシート [参照 3] で消去サブセクター サイズを確認します。

    1,048,576 32,768 ビッ ト

    2 ク イ ッ クブート ヘッダー後半の長さ• BPI モード : 384 ビッ ト• SPI モード : 256 ビッ ト

    384 256 ビッ ト

    3 非圧縮のビッ ト ス ト リームの長さ : 『7 シ リーズ FPGA コンフ ィギュレーシ ョ ン ユーザー ガイ ド』 [参照 1] の表 「ビッ ト ス ト リームの長さ」 を参照

    24,090,592 24,090,592 ビッ ト

    4 ク イ ッ クブート ヘッダーとゴールデン ビッ ト ス ト リームのサイズ= [行 1] + [行 2] + [行 3](1)

    25,139,552 24,123,616 ビッ ト

    5 通常の消去可能セグメン トのサイズ• BPI フラ ッシュ : BPI フラ ッシュのデータシート [参照 2] で消去ブロ ッ

    ク サイズを確認します。• SPI フラ ッシュ : SPI フラ ッシュのデータシート [参照 3] で消去セク

    ター サイズを確認します。

    1,048,576 524,288 ビッ ト

    6 行 5 のブロ ッ ク /セクター サイズを用いて求められる、行 4 のビッ ト数を格納するのに必要なブロッ ク /セクター数= int(([行 4] + [行 5] – 1) / [行 5])

    24 47 ブロック

    7 行 5 で求めた必要なブロ ッ クのサイズ= [行 6] * [行 5]

    25,165,824 24,641,536 ビッ ト

    8 行 7 の値を Mb に変換した最小イ メージ サイズ= int(([行 7] + 1,048,575) / 1,048,576)

    24 24 Mb

    9 ゴールデン イ メージとアップデート イ メージを格納できるよ うに、イ メージ サイズを 2 倍する = [行 7] * 2

    50,331,648 49,283,072 ビッ ト

    10 行 9 の値を Mb に変換した最小フラ ッシュ サイズ= int(([行 9] + 1,048,575) / 1,048,576)

    48 48 Mb

    注記 : 1. 行 4 のビッ ト数を大き くする と、 2 つのビッ ト ス ト リームの間隔を広げるこ とができます。 詳細は、 「MMCM/PLL のロッ クまたは DCI の待機状

    態を考慮したビッ ト ス ト リームの間隔」 を参照してください。

    http://japan.xilinx.com

  • クイックブート インプリ メンテーシ ョ ンの詳細

    XAPP1081 (v1.1) 2013 年 6 月 7 日 japan.xilinx.com 13

    • デジタル制御インピーダンス (DCI) を持つ SelectIO™ インターフェイスを使用しており、 BitGen-g Match_cycle を NoWait に設定していない場合

    • MMCM (Mixed-Mode Clock Manager) の STARTUP_WAIT 属性を TRUE に設定し、 BitGen -gLCK_cycle を NoWait に設定していない場合

    • 位相ロッ ク ループ (PLL) の STARTUP_WAIT 属性を TRUE に設定し、 BitGen -g LCK_cycle をNoWait に設定していない場合

    FPGA デザインがこれら条件のいずれかに該当する場合は、ビッ ト ス ト リーム用の予約イ メージ サイズを大き くするこ とによ り、 ビッ ト ス ト リームど う しの間隔を広げるこ とができます。 ビッ ト ス ト リーム

    は予約されたイ メージ領域の先頭近くから配置されるため、 イ メージ領域を大き くする と ビッ ト ス ト

    リームの後ろに空き領域が確保されるこ とにな り ます。 最小ビッ ト ス ト リーム イ メージ サイズに追加すべき最小ビッ ト数は、 式 1 で求めるこ とができます。

    式 1

    式 1 の待機時間には、 次の該当するもののうち最も長い値を使用します。

    • SelectIO インターフェイス DCI の場合、 待機時間は約 10ms。

    • MMCM の最大ロッ ク時間については、 FPGA のデータシートで MMCM_TLOCKMAX を参照。

    • PLL の最大ロッ ク時間については、 FPGA のデータシートで PLL_TLOCKMAX を参照。

    たとえば、 SelectIO インターフェイス DCI 待機を使用したデザインで BPI x16 コンフ ィギュレーシ ョン モード (3MHz) を選択する場合、 追加するビッ ト数は次の式で求めます。

    追加するビッ ト数 = 480,000 ビッ ト = 16 ビッ ト /サイクル 3MHz 10ms

    SelectIO インターフェ イス DCI 待機を使用したデザインで SPI x1 コンフ ィ ギュレーシ ョ ン モード(20MHz) を選択する場合、 追加するビッ ト数は次の式で求めます。

    追加するビッ ト数 = 200,000 ビッ ト = 1 ビッ ト /サイクル 20MHz 10ms

    スタート アップ シーケンスが長引く よ う な FPGA デザインでは、 式 1 で求めた最小ビッ ト数を表 2 の行 4 の値に加算してください。

    クイックブートのコンフ ィギュレーシ ョ ン時間

    ク イ ッ クブート ソ リ ューシ ョ ンのコンフ ィギュレーシ ョ ンは、 標準の FPGA コンフ ィギュレーシ ョ ン時間にご くわずかな一定のオーバーヘッ ドを加えた時間で完了します。 まず、 アップデート ビッ ト ス トリームとゴールデン ビッ ト ス ト リームのどちらを読み込むかをク リ ティカル スイ ッチ ワードで決定する必要があるため、 すべてのケースでコンフ ィギュレーシ ョ ン プロセスの最初にク イ ッ クブート ヘッダーのオーバーヘッ ドが生じます。 最初のこのオーバーヘッ ドは、 FPGA コンフ ィギュレーシ ョ ン ロジッ クが最初の消去可能セグメン ト を読み出してク リ テ ィカル スイ ッチ ワードに達するまでの時間です。 アップデート ビッ ト ス ト リームを選択した場合は、 さ らにウォーム ブート ジャンプ プログラムのリセッ ト時間 TPL がオーバーヘッ ド と して加算されます。 どのコンフ ィギュレーシ ョ ンの場合でも、 クイ ッ クブー ト ヘッダーのオーバーヘッ ドは最初の消去可能セグ メ ン ト の読み出しにかかる時間とウォーム ブート ジャンプ プログラムのリセッ ト時間の合計よ り大き くなるこ とはあ り ません。

    追加するビット数 (コンフィギュレーション データのビット幅) (コンフィギュレーション CCLK 周波数) (待機時間)=

    http://japan.xilinx.com

  • クイックブート インプリ メンテーシ ョ ンの詳細

    XAPP1081 (v1.1) 2013 年 6 月 7 日 japan.xilinx.com 14

    表 3 に、 ク イ ッ クブートのコンフ ィギュレーシ ョ ン時間を計算するためのワークシート を示します。

    表 3 の行 8 の値が、 標準ビッ ト ス ト リームのコンフ ィギュレーシ ョ ン時間です。 行 9 の値がク イ ッ クブートのコンフ ィギュレーシ ョ ン時間です。 標準のコンフ ィギュレーシ ョ ン時間とは、 行 5 の時間のみが異なり ます。

    クイックブートにおけるアップデート イ メージの検証ク イ ッ クブート方式のソ リ ューシ ョ ンと しての堅牢性は、 アップデート ビッ ト ス ト リーム イ メージが正し く書き込まれたこ とをそのプログラ ミ ング ソ リ ューシ ョ ンで確実に検証できるかど うかに依存します。 ク イ ッ クブート ソ リ ューシ ョ ンでは、 巡回冗長検査 (CRC) を使用してフラ ッシュ メモ リ内のアップデート ビッ ト ス ト リーム イ メージの完全性を検証します。

    CRC に対応したクイックブート イメージのフォーマッ ト

    ク イ ッ クブート ソ リ ューシ ョ ンで使用するアップデート ビッ ト ス ト リーム イ メージは、 次の順で構成されます。

    1. ザイ リ ンクスのデザイン ツールで生成した標準の FPGA ビッ ト ス ト リーム。

    2. ダ ミーの 32 ビッ ト パッ ド ワード。 アップデート イ メージ用の予約領域の残り を 0xFFFFFFFF で埋める。

    3. 手順 1 と手順 2 のデータで計算した CRC32 の補数。

    フラ ッシュ メモ リには、 アップデート ビッ ト ス ト リーム イ メージ用に固定サイズの領域が割り当てられます。消去と書き込みを簡単にするため、 アップデート イ メージ用に割り当てられたアップデート領域の先頭と末尾は消去可能セグメン トの境界に揃えられています。

    アップデート領域の先頭に、 まずアップデート ビッ ト ス ト リームを格納します。 ビッ ト ス ト リームが終わったら、 アップデート領域の残り全体 (ただし最後の 32 ビッ ト を除く ) をダ ミー ワードで埋めます。アップデート イ メージを MCS ファ イルと して生成する場合に、 アップデート領域全体 (ただし最後の32 ビッ ト を除く ) の内容に対して CRC32 を計算します。アップデート領域の最後の 32 ビッ トには、計算した CRC32 の補数を格納します。こ う して、アップデート領域全体の完全性が CRC32 チェッ ク コードで保護されます。

    表 3 : クイックブートのコンフ ィギュレーシ ョ ン時間計算のためのワークシート

    行 説明 記入欄BPI x16の例

    SPI x1の例

    単位

    1 最初の消去可能セグメン ト サイズ 65,536 32,768 BPI : ワードSPI : ビッ ト

    2 FMCCK_START (FPGA データシート記載の仕様値) 3 3 MHz、 標準3 最初の消去可能セグメン トの読み出し時間 :

    = [行 1] / [行 2] / 1,00022 11 ms、 標準

    4 IPROG によ る ウ ォーム ブー ト ジ ャ ンプの時間 :FPGA のデータシートで TPL の仕様値を参照

    5 5 ms、 最大

    5 ク イ ッ クブート ヘッダーのオーバーヘッ ド時間 : = [行 3] + [行 4]

    27 16 ms、 標準

    6 『7 シ リーズ FPGA コンフ ィギュレーシ ョ ン ユーザーガイ ド』 [参照 1] に記載されているビッ ト ス ト リームの長さ

    24,090,592 24,090,592 ビッ ト

    7 ビッ ト ス ト リームで定義される CCLK 周波数 FMCCK 6 26 MHz、 標準8 標準ビッ ト ス ト リームの読み込みにかかる時間

    BPI モード : [行 5] / 16 (ビッ ト /ワード ) / [行 6] / 1,000SPI モード : [行 5] / [行 6] / 1,000

    251 927 ms、 標準

    9 ク イ ッ クブート ビッ ト ス ト リームの読み込みにかかる時間 (すべての場合) = [行 5] + [行 8]

    278 943 ms、 標準

    http://japan.xilinx.com

  • クイックブート リファレンス デザイン

    XAPP1081 (v1.1) 2013 年 6 月 7 日 japan.xilinx.com 15

    ク イ ッ クブート プログラ ミ ング ソ リ ューシ ョ ンでアップデート イ メージを検証するには、CRC32 の補数値を含むアップデート イ メージ領域全体を読み出して CRC32 を計算します。 データ と CRC32 の補数値から計算した CRC32 の値が既知の定数 (剰余) と一致すれば、アップデート イ メージの完全性が維持されているこ とにな り ます。CRC32、CRC32 の補数の埋め込み、定数 (剰余) の詳細は、『IEEE 802.3巡回冗長検査 (CRC)』 [参照 4] を参照してください。

    クイックブート リファレンス デザイン

    このアプリ ケーシ ョ ン ノートには、SPI フラ ッシュ用と BPI フラ ッシュ用の合計 2 つのクイ ッ クブートリ ファレンス デザインが付属しています。 各リ ファレンス デザインは次で構成されます。

    • コンフ ィギュレーシ ョ ン ビッ ト ス ト リーム用のクイ ッ クブート フラ ッシュ メモ リ イ メージを生成するための Perl スク リプ ト

    • フラ ッシュ デバイス内のビッ ト ス ト リームを更新するためのフラ ッシュ プログラマ モジュール

    Perl スク リプ ト とフラ ッシュ プログラマ モジュールは、 SPI モード と BPI モードにそれぞれ専用のものが用意されています。 フラ ッシュ プログラマ モジュールのインターフェイス と利用モデルは SPI、BPI と もに共通です。

    さ らに、KC705 評価ボードの SPI または BPI フラ ッシュを使用してこれらのフラ ッシュ プログラマ リファレンス デザインを実際に試すこ とのできるデモンス ト レーシ ョ ン デザインも提供されています。

    クイックブート リファレンス デザインのインプリ メンテーシ ョ ン ガイドク イ ッ クブート リ ファレンス デザインは、 次の手順でインプリ メン ト します。

    1. ク イ ッ クブートに必要なハードウェアを決定します。

    a. FPGA コンフ ィギュレーシ ョ ン モード (BPI または SPI) を選択します。SPI モードはピン数を最小に抑えるこ とができます。BPI モードでは最大集積度のフラ ッシュ デバイスがサポート されます。 その他の検討事項については、 『7 シ リーズ FPGA コンフ ィギュレーシ ョ ン ユーザーガイ ド』 [参照 1] を参照して ください。

    b. 11 ページの 「ビッ ト ス ト リーム イ メージのサイズとフラ ッシュ メモ リ サイズの選択」 を参考にして、 最小限必要なイ メージ サイズとフラ ッシュ サイズを求めます。 このイ メージ サイズは、 ク イ ッ クブート ファ イルの生成時に使用するため書き留めておきます。

    c. 選択したコンフ ィギュレーシ ョ ン モード と最小限必要なフラ ッシュ サイズに基づいて、フラ ッシュ メモ リの種類とデバイスを決定します (表 4 参照)。

    d. 選択したフラ ッシュ デバイスが、 iMPACT ツールの間接フラ ッシュ プログラムをサポートする リ ス トに含まれているこ とを確認します。 iMPACT のヘルプ ページを参照して ください [参照 5]。

    e. FPGA とフラ ッシュ デバイスのボード レベルの接続要件については、 16 ページの 「ク イ ッ クブート リ ファレンス デザインのハードウェア要件」 を参照してください。

    2. ク イ ッ クブート フラ ッシュ プログラマのパラ メーターを取得するために、 暫定的なクイ ッ クブート ファ イルを生成します。

    a. FPGA の暫定的なテス ト ビッ ト ス ト リームを生成します。

    b. 17 ページの 「ビッ ト ス ト リームの生成とフォーマッ ト 」 の手順に従い、テス ト ビッ ト ス ト リームの標準 MCS ファ イルを生成します。

    c. 次の手順に従い、Perl スク リプ ト を使用してクイ ッ クブート MCS イ メージ ファ イルを生成し、Perl スク リプ トの出力レポート を保存しておきます。

    - 18 ページの 「BPI モードの場合のクイ ッ クブート フラ ッシュ イ メージ ファ イルの生成」または

    - 19 ページの 「SPI モードの場合のクイ ッ クブート フラ ッシュ イ メージ ファ イルの生成」

    http://japan.xilinx.com

  • クイックブート リファレンス デザイン

    XAPP1081 (v1.1) 2013 年 6 月 7 日 japan.xilinx.com 16

    3. すべての FPGA デザインにクイ ッ クブート フラ ッシュ プログラマ モジュールをインスタンシエート します。

    a. 選択したフラ ッシュ メモ リに応じたクイ ッ クブート フラ ッシュ プログラマ モジュールをインスタンシエート します。次の手順に従い、インスタンシエート したモジュールを接続先のフラ ッ

    シュ メモ リ デバイスにアクセスする FPGA ピンに接続し、 ク イ ッ クブート ファ イル生成の際に出力されたレポートに基づいてモジュールを設定します。

    - 20 ページの 「BPI フラ ッシュ プログラマ リ ファレンス デザイン モジュール」 の説明に従って BPI フラ ッシュ プログラマ モジュールを接続し、 22 ページの「BpiFlashProgrammer.vhd のパラ メーターの設定」 の説明に従ってこのモジュールを設定します。 または

    - 26 ページの 「SPI フラ ッシュ プログラマ リ ファレンス デザイン モジュール」 の説明に従って SPI フラ ッシュ プログラマ モジュールを接続し、 29 ページの「SpiFlashProgrammer.vhd のパラ メーターの設定」 の説明に従ってこのモジュールを設定します。

    注記 : 6 ページの 「ク イ ッ クブートのフラ ッシュ プログラ ミ ング アルゴ リズム」 で説明したアルゴリ ズムの要件を満たしたものであれば、 任意のプログラマ インプ リ メ ンテーシ ョ ンを使用できます。

    4. 5 ページの 「ク イ ッ クブートのフラ ッシュ プログラ ミ ング方法」 の説明に従い、 ク イ ッ クブート フラ ッシュ プログラマ モジュールへのシステム インターフェイスをインプリ メン ト します。

    5. ク イ ッ クブート フラ ッシュ プログラマをインスタンシエート した FPGA デザインを使用して手順 2 を繰り返します。FPGA デザインがゴールデン イ メージ/初期イ メージの場合は手順 6 へ、アップデート イ メージの場合は手順 7 へ進みます。

    6. ゴールデン ビッ ト ス ト リーム イ メージの場合、 またはクイ ッ クブート フラ ッシュ プログラマを新規に FPGA にイ ンプ リ メ ン ト する場合は、 手順 5 で生成し た *_initial.mcs フ ァ イルをiMPACT ツールまたはその他の使い慣れたプログラ ミ ング ソ リ ューシ ョ ンでフラ ッシュに書き込みます。

    注記 : ク イ ッ クブー ト フ ラ ッ シュ プログラマを新規に FPGA にインプ リ メ ン ト する場合は、34 ページの 「ク イ ッ クブート フラ ッシュ プログラマ リ ファレンス デザインのチェッ ク リ ス ト 、テス ト、 デバッグ」 の説明に従ってク イ ッ クブート フラ ッシュ プログラマ インプ リ メ ンテーシ ョ ンの確認、 テス ト、 デバッグを行ってください。

    7. アップデート ビッ ト ス ト リーム イ メージの場合は、手順 5 で生成した *_update.mcs ファイルをFPGA デザインにインスタンシエート されているク イ ッ クブート フラ ッシュ プログラマに送信します。

    クイックブート リファレンス デザインのハードウェア要件表 4 に、 KC705 評価ボード上の 7 シ リーズ FPGA でク イ ッ クブート リ ファレンス デザインを実行できる NOR 型フラ ッシュ メモ リ を示します。

    FPGA と フラ ッシュ メモ リのボードレベル接続は、 『7 シ リーズ FPGA コンフ ィギュレーシ ョ ン ユーザー ガイ ド』 [参照 1] の 「マスター BPI コンフ ィギュレーシ ョ ン インターフェイス」 または 「マスターSPI コンフ ィギュレーシ ョ ン モード」 で推奨されている標準の方法に従ってください。

    表 4 : クイックブートでサポート される FPGA およびフラッシュ メモリ デバイス

    FPGA シリーズ/ファ ミ リ BPI x16 フラッシュ メモリ SPI フラッシュ メモリ7 シ リーズ FPGA Micron P30 NOR 型フラ ッシュ Micron N25Q NOR 型フラ ッシュ

    http://japan.xilinx.com

  • クイックブート リファレンス デザイン

    XAPP1081 (v1.1) 2013 年 6 月 7 日 japan.xilinx.com 17

    フラ ッシュのリセッ トに関する推奨事項

    フラ ッシュ デバイスは、 なるべくアクティブ Low のリセッ ト ピンがあるものを選んでください。 ほとんどの BPI フラ ッシュ デバイスにはアクティブ Low のリセッ ト ピンがあ り ます。 SPI フラ ッシュ デバイスにも、 一部の製品にはアクティブ Low のリセッ ト ピンがあ り ます。 フラ ッシュ デバイスにアクティブ Low のリセッ ト ピンがある場合、 このピンを FPGA の INIT_B 信号に接続してください。

    PROGRAM_B ピンで FPGA を リセッ トする と、FPGA INIT_B ピンは瞬間的に Low に駆動します。これによ り、FPGA を リセッ トする とフラ ッシュ デバイスも必ずリセッ ト され、 コンフ ィギュレーシ ョ ンビッ ト ス ト リームを出力する準備が整います。 この接続をしない場合、 フラ ッシュが内部消去または書

    き込み動作を実行中に FPGA を リセッ トする と、 フラ ッシュは消去/書き込み動作動作から リセッ ト されません。 その後、 フラ ッシュは FPGA から読み出し要求があってもコンフ ィギュレーシ ョ ン データを出力せず、 FPGA コンフ ィギュレーシ ョ ンがエラーになるこ とがあ り ます。

    クイックブート ファイルの生成ク イ ッ クブート ソ リ ューシ ョ ンでは、 FPGA ビッ ト ス ト リームに特別なオプシ ョ ンは必要あ り ません。ただし特別なクイ ッ クブート ヘッダー、 フラ ッシュ メモ リ マップ内にイ メージを格納する専用の予約領域が必要です。 メモ リ マップの詳細は、 図 4 または図 5 を参照して ください。 この リ ファレンス デザインには、 ク イ ッ クブート ソ リ ューシ ョ ン用のフラ ッシュ イ メージ (MCS) ファ イルを生成するための Perl スク リプ トが付属しています。

    ビッ トス ト リームの生成とフォーマッ ト

    ク イ ッ クブート イ メージを作成するには、 まず FPGA ビッ ト ス ト リームを生成します。 選択したコンフ ィギュレーシ ョ ン モードに対応した標準のビッ ト ス ト リームを生成して ください。 マルチブートやフォールバッ クなどの特別なコンフ ィギュレーシ ョ ン オプシ ョ ンは必要あ り ません。

    FPGA のコンフ ィギュレーシ ョ ンに使用するビッ ト ス ト リームは、 MCS フォーマッ トに変換する必要があ り ます。

    BPI モードの場合は、 次の PROMGen コマンドを実行します。

    PROMGen -w -p mcs –data_width 16 -u 0 FPGA_design.bitSPI モードの場合は、 次の PROMGen コマンドを実行します。

    PROMGen -w -p mcs -spi -u 0 FPGA_design.bit注記 : BPIx16-to-SelectMAPx16 デイジー チェーンまたは SPIx1-to-serial デイジー チェーンを用いて複数の FPGA をコンフ ィギュレーシ ョ ンする場合は、上記の PROMGen のコマンド ラインで「FPGA_design.bit」 の部分にすべての FPGA.bit ファ イルを順に指定します。PROMGen から次のよ うなレポートが出力されます。

    >promgen -w -p mcs -spi -u 0 FPGA_design.bitRelease 14.4 - Promgen P.49d (nt64)Copyright (c) 1995-2012 Xilinx, Inc. All rights reserved.0x148da8 (1346984) bytes loaded up from 0x0Using generated prom size of 2048KWriting file "FPGA_design.mcs".Writing file "FPGA_design.prm".Writing file "FPGA_design.cfi".

    PROMGen で生成された FPGA_design.mcs をク イ ッ クブートの Perl スク リプ トの入力と して使用します。

    上記のレポートでは、ビッ ト ス ト リームを格納できる 2 の累乗の PROM サイズが 2,048KB と表示されています。通常は、 この 2 の累乗の PROM サイズを Mb に変換したものをクイ ッ クブート イ メージ サイズと して設定します。

    http://japan.xilinx.com

  • クイックブート リファレンス デザイン

    XAPP1081 (v1.1) 2013 年 6 月 7 日 japan.xilinx.com 18

    上に示したレポートには、ビッ ト ス ト リームの長さが 1,346,984 バイ トであるこ と も表示されています。このサイズをビッ ト単位に変換した後、表 2 のワークシートでク イ ッ クブートの最小イ メージ サイズと最小フラ ッシュ サイズを求めます。

    クイックブート フラ ッシュ イ メージ ファイルの生成

    この リ ファレンス デザインには、 PROMGen で生成した MCS ファ イルをク イ ッ クブート イ メージに変換する Perl スク リプ トが付属しています。 この Perl スク リプ トは、 常に 2 種類のイ メージを生成します。

    • 初期 MCS フラ ッシュ メモ リ イ メージ

    • アップデート MCS ビッ ト ス ト リーム イ メージ

    これら 2 つのイ メージは、 システム プログラ ミ ングの段階 (新規にシステムをコンフ ィギュレーシ ョ ンするかリモート アップデート を行うか) に応じてどちらか 1 つを使用します。

    初期 MCS フラ ッシュ メモリ イメージ

    初期 MCS フラ ッシュ メモ リ イ メージはフラ ッシュ メモ リの初期状態の完全なイ メージで、 次の内容で構成されます。

    • ク イ ッ クブート ヘッダー

    • ゴールデン ビッ ト ス ト リーム (実際に使用するビッ ト ス ト リーム)

    • アップデート ビッ ト ス ト リーム (ゴールデン ビッ ト ス ト リームと同じもの)

    フラ ッシュ メモ リへの最初の書き込みには、 この初期 MCS を使用します。

    アップデート MCS ビッ トス ト リーム イメージ

    アップデート MCS ビッ ト ス ト リーム イ メージは、アップデート イ メージを リモートからアップデートするために使用するデータです。 このイ メージには実際に使用するビッ ト ス ト リームが含まれ、 その完

    全性は CRC32 コードで保護されます (14 ページの「CRC に対応したク イ ッ クブート イ メージのフォーマッ ト 」 参照)。

    アップデート MCS ビッ ト ス ト リーム イ メージを リモート システム内のクイ ッ クブート フラ ッシュ プログラマに送信し、 フラ ッシュ メモ リのアップデート ビッ ト ス ト リーム領域に書き込みます。

    BPI モードの場合のクイックブート フラッシュ イメージ ファイルの生成

    BPI モードの場合、 次の Perl スク リプ ト コマンドでク イ ッ クブート イ メージを生成します。

    xilPerl MakeBpiFlashProgrammerMcsFiles.pl FPGA_design.mcsこの Perl スク リプ トは、 次の処理を実行します。

    1. 指定した MCS ファ イルを読み出す。

    2. ク イ ッ クブート ゴールデン イ メージとアップデート イ メージのデフォルトの最小イ メージ サイズを計算する。

    3. BPI フラ ッシュに関する情報、 およびフラ ッシュ メモ リ内のアップデート イ メージのアドレスをレポート と して出力する。

    4. フラ ッシュ メモ リの初期 MCS イ メージ ファ イルを生成する。

    5. MCS フラ ッシュ メモ リ イ メージ ファ イルを更新する。

    イ メージ サイズは imagesize IS オプシ ョ ン (IS はイ メージ サイズ、 単位はメガビッ ト ) で設定するこ と もできます。 次に例を示します。

    xilPerl MakeBpiFlashProgrammerMcsFiles.pl –imagesize 16 FPGA_design.mcsMakeBpiFlashProgrammerMcsFiles.pl スク リプ ト を実行する と、 次のよ うなレポートが出力されます。

    http://japan.xilinx.com

  • クイックブート リファレンス デザイン

    XAPP1081 (v1.1) 2013 年 6 月 7 日 japan.xilinx.com 19

    >xilPerl MakeBpiFlashProgrammerMcsFiles.pl –imagesize 16 FPGA_design.mcsINFO:##### Reading MCS file:FPGA_design.mcs...INFO:BPI device type = P30INFO:BPI flash (minimum) size = 32 MbitsINFO:BPI block size = 0x00010000 (65536) wordsINFO:Update image start address = 0x00100000INFO:Update image end+1 address = 0x00200000INFO:Update switch word address = 0x0000FFFEINFO:Switch word = 0x000000BBINFO:Generating files...This can take several minutes....INFO:Output Update MCS file name = FPGA_design_update.mcsINFO:Output Initial MCS file name= FPGA_design_initial.mcs

    SPI モードの場合のクイックブート フラッシュ イメージ ファイルの生成

    SPI モードの場合、 次の Perl スク リプ ト コマンドでクイ ッ クブート イ メージを生成します。

    xilPerl MakeSpiFlashProgrammerMcsFiles.pl FPGA_design.mcsこの Perl スク リプ トは、 次の処理を実行します。

    1. 指定した MCS ファ イルを読み出す。

    2. ク イ ッ クブート ゴールデン イ メージとアップデート イ メージのデフォルトの最小イ メージ サイズを計算する。

    3. SPI フラ ッシュに関する情報、およびフラ ッシュ メモ リ内のアップデート イ メージのアドレスをレポート と して出力する。

    4. フラ ッシュ メモ リの初期 MCS イ メージ ファ イルを生成する。

    5. MCS フラ ッシュ メモ リ イ メージ ファ イルを更新する。

    イ メージ サイズは imagesize IS オプシ ョ ン (IS はイ メージ サイズ、 単位はメガビッ ト ) で設定するこ と もできます。 次に例を示します。

    xilPerl MakeSpiFlashProgrammerMcsFiles.pl –imagesize 16 FPGA_design.mcsPerl スク リプ トが出力するレポートには、 ク イ ッ クブート フラ ッシュ プログラマの基本的なパラ メーターの設定が表示されます。このレポートの値は SPI フラ ッシュ プログラマ モジュールの設定 (29 ページの 「SpiFlashProgrammer.vhd のパラ メーターの設定」 参照) で使用するため、 Perl スク リプ トのレポートは保存しておいてください。

    MakeSpiFlashProgrammerMcsFiles.pl スク リプ ト を実行する と、 次のよ うなレポートが出力されます。

    >xilPerl MakeSpiFlashProgrammerMcsFiles.pl -imagesize 16 FPGA_design.mcsINFO:##### Reading MCS file:FPGA_design.mcs...INFO:SPI Device Type = N25QINFO:SPI flash (minimum) size = 32 MbitsINFO:SPI address width = 24 bitsINFO:SPI sector size = 00010000 (65536) bytesINFO:SPI page size = 00000100 (256) bytesINFO:Update image start address = 0x00200000INFO:Update image end+1 address = 0x00400000INFO:Update switch word address = 0x00000FFCINFO:Switch word = 0xAA995566INFO:Generating files...This can take several minutes....INFO:Output Update MCS file name = FPGA_design_update.mcsINFO:Output Initial MCS file name= FPGA_design_initial.mcs

    ファイル生成時間を短縮する方法

    ク イ ッ クブート リ ファレンス デザイン パッケージに含まれる Perl スク リプ トには、 専用の CRC32 計算サブルーチンが含まれています。 このサブルーチンの計算方法は VHDL CRC32 インプ リ メ ンテーシ ョ ンをそのままコピーしたもので、 Perl に最適化されていません。

    http://japan.xilinx.com

  • クイックブート リファレンス デザイン

    XAPP1081 (v1.1) 2013 年 6 月 7 日 japan.xilinx.com 20

    さ らに高速な CRC32 Perl サブルーチンが、標準の Digest::CRC Perl パッケージと して提供されています。 この Perl パッケージは、 インターネッ トで 「perl Digest CRC」 と検索する と見つかり ます。

    Perl で Digest::CRC パッケージが利用可能な場合は、MakeSpiFlashProgrammerMcsFiles.pl スクリプ トの冒頭の行のコ メン ト を付け替えて、 Digest::CRC パッケージの CRC32 関数を使用するよ うに変更できます。

    # Comment/uncomment one of the pairs of lines below, # depending on whether you have the Digest::CRC# Use the following two lines if you have the Digest::CRCuse Digest::CRC qw(crc32);sub subCrc32{my $data=shift(@_);return(subFastCrc32($data));}# Use the following two lines if you do NOT have the Digest::CRC#sub crc32{return(0);}#sub subCrc32{my $data=shift(@_);return(subSlowCrc32($data));}

    BPI フラ ッシュ プログラマ リファレンス デザイン モジュールこのベース リ ファレンス デザインは、 BpiFlashProgrammer.vhd という 1 つのモジュールで構成されます。

    BpiFlashProgrammer.vhd モジュールBpiFlashProgrammer.vhd は、 BPI フラ ッシュ用のクイ ッ クブート プログラ ミ ング アルゴ リズムをインプ リ メ ン ト したプログラ ミ ング ステート マシンです。 BpiFlashProgrammer は BPI フラ ッシュ と直接接続します。

    表 5 に、 BpiFlashProgrammer の各ポートの説明�