AR# 55572

Zynq-7000 SoC - NAND/QSPI を使用したブート時間

説明

このアンサーでは、NAND または QSPI メモリ デバイスを使用した Zynq-7000 SoC ブートに関する情報を示します。

特に、各ブート段階でよりよいタイミングおよびバンド幅を達成するための設定および考慮事項について説明します。

使用中のコンフィギュレーションのブート時間を予測するには、添付のスプレッドシートを使用してください。

ソリューション

ブート時間

フラッシュ メモリのバンド幅は、次のコンフィギュレーションではベンダーによって異なります。これがブート時間に影響します。

ザイリンクス ツールでサポートされるデバイスのサイズとタイプの詳細は、(Xilinx Answer 50991) を参照してください。

次の図に、Zynq-7000 デバイスのブート時間の主な構成を示します。

PS と PL イメージを順に読み込み


  1. 電源ランプ時間 (電源によって異なる)
  2. PLL ロック時間
  3. bootROM 時間
  4. イメージの読み込み


このアンサーには、電源ランプ時間と PLL ロック時間の説明は含まれません。電源投入ランプ時間は、使用する電源のタイプによって異なります。PLL ロック時間は数千サイクルになることがありますが、それでもマイクロ秒の単位であり、ブート時間全体にはそれほど影響しません。

非セキュア ブート

非セキュア ブートの詳細は、『Zynq-7000 SoC テクニカル リファレンス マニュアル』の第 6 章を参照してください。非セキュア ブートでは、PL に別の電源が使用されている場合は、PL の電源をオフにできます。PL と PS に同じ電源を使用している場合は、PL の電源もオンにしておく必要があります。どちらの場合にも、bootROM は PL が準備できるまで待機しません。TPoR の数値は、「bootROM タイミング」セクションの TPoR の表を参照してください。FSBL が OCM にコピーされると (ユーザー コード)、FSBL に制御が移行します。bootROM には、非セキュア FSBL を実行する前に RSA 公開キー認証を使用して認証する機能があります。

セキュア ブート

セキュア ブートでは、すべてまたは一部のイメージ パーティションが暗号化されています。ブートを保護するため、FSBL を暗号化する必要があります。詳細は、『Zynq-7000 SoC テクニカル リファレンス マニュアル』の第 6 章および第 32 章を参照してください。FSBL が保護されているため、プログラマブル ロジック内の AES/SHA エンジンがイメージの復号化および認証に使用されます。これには、bootROM が PL の準備 (PL TPoR、クリーニングを含む) ができるまで待機する必要があります。bootROM では、保護された FSBL も実行する前に RSA 公開キー認証を使用して認証できます。

bootROM タイミング

使用するインターフェイスの bootROM タイミングを入手するには、ザイリンクス FAE にご連絡ください。

bootROM は PLL ロック後にコードの実行を開始します。これは、PoR (パワーオン リセット) がディアサートされた後になります。FSBL に制御が移行するまでのすべてが含まれます。bootROM コードは、次のように分割できます。

  1. ブート コードの実行
  2. FSBL のフラッシュ デバイスから OCM へのコピー
  3. bootROM コードの CRC チェック (イネーブルの場合)
  4. プログラマブル ロジックの TPoR (セキュア ブート)
  5. AES/SHA の復号化と認証 (セキュア ブート)
  6. RSA 暗号化 (イネーブルの場合)

ブート コードの実行と FSBL の OCM へのコピー以外のリストの残りはオプションであり、イネーブルの場合に bootROM 時間に追加されます。

bootROM コードの CRC チェック

電源が投入され、リセット シーケンスが完了すると、オンチップ bootROM が実行されます。オプションの eFuse 設定を使用して、bootROM でフル 128 KB CRC を実行できます。boot ROM で 128 KB CRC チェックをイネーブルにする方法は、『Zynq-7000 SoC テクニカル リファレンス マニュアル』の第 32 章を参照してください。インテグリティ チェックの後、bootROM でブートストラップ ピンで指定されたブート モード設定が読み出されます。

プログラマブル ロジックの TPoR

PL の TPoR は、デバイスに最初に電源が投入されたときの電圧ランプ時間です。これは、ボード/デバイスに最初に電源が投入されたときにのみ影響します。ボードに既に電源が投入されており、Zynq-7000 デバイスがリセットされている場合は、PL に既に電源が投入されているので、TPoR が影響します。次の表に、bootROM タイミングで考慮する必要のある PL TPOR の値を示します。

PS 電源投入済みPL 電源投入済みセキュアTPoR (ms)
××0
×0
35/50*

* TPoR の詳細は、『Zynq-7000 SoC データシート: DC および AC スイッチ特性』 (DS187 または DS191) を参照してください。

上記の表には、次の場合が示されています。

  • 非セキュア ブートでは、PS と PL の両方に電源が投入されており、bootROM が TPoR を待機しません。bootROM は FSBL を OCM に読み込み、FSBL も PS のコンフィギュレーションを開始できます。これらのタスクにかかる時間が TPoR 未満であり、PL ビットストリームを読み込む場合は、PL の準備ができるまで (PL に電源が投入されてから 35/50 ms 後) 待機する必要があります。PL の準備ができているかを確認するため、ビットストリームをプログラムする前に、ユーザー コードで DevC ステータス レジスタの PCFG_INIT ビットを確認する必要があります。詳細は、『Zynq-7000 SoC テクニカル リファレンス マニュアル』の PL コンフィギュレーションのセクションを参照してください。
  • セキュア ブート モードでは、PL に電源が投入されて、PL の AES/SHA エンジンを使用して FSBL の復号化および認証を実行する必要があるので、BootROM は PL の準備ができるまで待機します。これには、ボードに最初に電源が投入される場合は TPoR が含まれます。ボードに既に電源が投入されており、Zynq-7000 デバイスのみがリセットされる場合は、PL には既に電源が投入されているので、TPoR は影響しません。


AES/SHA 復号化および認証

AES/SHA 復号化および認証は、セキュア ブート モードでのみ実行されます。QSPI を使用しているときに AES/SHA 復号化および認証を実行するには、デバイス コンフィギュレーション ブロックの DMA により暗号化されたイメージがフラッシュからデバイス コンフィギュレーション エンジンにコピーされます。NAND の場合は、イメージは DDR にコピーされ、暗号化および認証のため、デバイス コンフィギュレーションの DMA により DDR からデバイス コンフィギュレーション エンジンにコピーされます。bootROM 時間に最も影響するのは、前述のとおり、PL の準備ができるまで待機する時間です。

RSA 認証

bootROM には、非セキュア FSBL を実行前に RSA 公開キー認証を使用して認証する機能もあります。この機能は、PS eFuse アレイの RSA 認証イネーブル ヒューズを切ってイネーブルにします。RSA 認証がイネーブルの場合、bootROM は FSBL を OCM に読み込んでから認証プロセスを開始します。認証に成功すると、非セキュア FSBL の実行が開始します。非セキュア FSBL の認証に失敗すると、bootROM のフォールバック モードがトリガーされます。新しい非セキュア FSBL が見つからない場合は、デバイスは非セキュア ロックダウンになります。RSA 認証がイネーブルの場合、FSBL が OCM に読み込まれた後、bootROM により認証プロセスが開始されます。認証に成功すると、セキュア FSBL が AES を使用して復号化されます。セキュア FSBL の認証に失敗すると、bootROM のフォールバック モードがトリガーされます。新しいセキュア FSBL が見つからない場合は、デバイスはセキュア ロックダウンになります。

注記: スプレッドシートでは、bootROM の RSA 時間のみが計算されます。ビットストリームおよびソフトウェア アプリケーションの認証に要する時間は計算されません。

この時間は数百 ms になることもあり、認証されるデータのサイズによって異なります。

bootROM の最適化

bootROM のブート インターフェイス用のデフォルト設定は、非常に低速です。レジスタを設定することにより、ブート インターフェイスの速度を上げることができます。これらの設定は、使用するデバイスとボード レイアウト パラメーターによって異なります。下の例に示すレジスタの最適化された値は、ご使用のデバイスのデータシートから入手する必要があります。下の例は、ボード上の特定のデバイスの NAND および QSPI インターフェイスに対する設定であり、ご使用のデバイスおよびボードでは最適な設定ではない可能性があります。変更可能なレジスタ設定を知るための参考としてのみ使用してください。

MIO マルチプレクサーとフラッシュ クロックを表すこれらのレジスタは、bootROM ヘッダーの一部です。詳細は、『Zynq-7000 SoC テクニカル リファレンス マニュアル』の第 6 章にある bootROM ヘッダーのセクションを参照してください。

NAND の例

NANDx8 非セキュア レジスタの初期化

/******* Register Inits *******/
.set. 0xF8000120 = 0x1F000200; // ARM_CLK_CTRL - divisor = 2 (433 MHz)
.set. 0xF8000148 = 0x00000921; // SMC_CLK_CTRL - divisor = 9 (96 MHz, 10.4ns)
.set. 0xE000E014 = 0x00225133; // SMC set_cycles - 2,1,1,2,1,3,3 see below*
.set. 0xE000E018 = 0x00000000; // SMC set_opmode - 8 bit
.set. 0xE000E010 = 0x02400000; // SMC direct_cmd - write set regs to NAND

* set_cycles のビット:

     t6 - t_rr

     t5 - t_ar

     t4 - t_clr

     t3 - t_wp

     t2 - t_rea

     t1 - t_wc

     t0 - t_rc

詳細は、『Zynq-7000 SoC テクニカル リファレンス マニュアル』の SMC レジスタ SET_CYCLES (0xE000E014) のビット フィールド定義を参照してください。

NANDx8 セキュア レジスタの初期化

/******* Register Inits *******/
.set. 0xF8000120 = 0x1F000200; // ARM_CLK_CTRL - divisor = 2 (433 MHz)
.set. 0xF8000148 = 0x00000921; // SMC_CLK_CTRL - divisor = 9 (96 MHz, 10.4ns)

NANDx16 非セキュア レジスタの初期化

/******* Register Inits *******/
.set. 0xF8000120 = 0x1F000200; // ARM_CLK_CTRL - divisor = 2 (433 MHz)
.set. 0xF8000148 = 0x00000921; // SMC_CLK_CTRL - divisor = 9 (96 MHz, 10.4ns)
.set. 0xE000E014 = 0x00225133; // SMC set_cycles - 2,1,1,2,1,3,3 see below*
.set. 0xE000E018 = 0x00000001; // SMC set_opmode - 16 bit
.set. 0xE000E010 = 0x02400000; // SMC direct_cmd - write set regs to NAND

* set_cycles のビット:

     t6 - t_rr

     t5 - t_ar

     t4 - t_clr

     t3 - t_wp

     t2 - t_rea

     t1 - t_wc

     t0 - t_rc

詳細は、『Zynq-7000 SoC テクニカル リファレンス マニュアル』の SMC レジスタ SET_CYCLES (0xE000E014) のビット フィールド定義を参照してください。

NANDx16 セキュア レジスタの初期化

/******* Register Inits *******/
.set. 0xF8000120 = 0x1F000200; // ARM_CLK_CTRL - divisor = 2 (433 MHz)
.set. 0xF8000148 = 0x00000921; // SMC_CLK_CTRL - divisor = 9 (96 MHz, 10.4ns)

QSPI の例

QSPI 非セキュア レジスタの初期化

/******* Register Inits *******/
.set. 0xF8000120 = 0x1F000200; // ARM_CLK_CTRL - divisor = 2 (433 MHz)
.set. 0xF8000720 = 0x00000602; // MIO_PIN_08 - QSPI FB clock, 3.3 V
.set. 0xF800014C = 0x00000521; // LQSPI_CLK_CTRL - divisor = 5 (173 MHz)
.set. 0xE000D000 = 0x800238C1; // QSPI config - divide-by-2 (86 MHz)
.set. 0xE000D038 = 0x00000020; // QSPI loopback - internal, 0 delay
.set. 0xE000D0A0 = 0x82FF04EB; // LQSPI_CFG - QIOREAD mode, Numonyx/Micron

QSPI セキュア レジスタの初期化

/******* Register Inits *******/
.set. 0xF8000120 = 0x1F000200; // ARM_CLK_CTRL - divisor = 2 (433 MHz)
.set. 0xF800014C = 0x00000621; // LQSPI_CLK_CTRL - divisor = 6, (144 MHz)

デュアル QSPI 非セキュア レジスタの初期化

/******* Register Inits *******/
.set. 0xF8000120 = 0x1F000200; // ARM_CLK_CTRL - divisor = 2 (433 MHz)
.set. 0xF8000720 = 0x00000602; // MIO_PIN_08 - QSPI FB clock, 3.3 V
.set. 0xF800014C = 0x00000521; // LQSPI_CLK_CTRL - divisor = 5 (173 MHz)
.set. 0xE000D000 = 0x800238C1; // QSPI config - divide-by-2 (86 MHz)
.set. 0xE000D038 = 0x00000020; // QSPI loopback - internal, 0 delay
//.set. 0xE000D0A0 = 0xE2FF06EB; // LQSPI_CFG - QIOREAD mode, Numonyx/Micron
.set. 0xE000D0A0 = 0xE2FF02EB; // LQSPI_CFG - QIOREAD mode, Winbond/Spansion


デュアル QSPI セキュア レジスタの初期化

/******* Register Inits *******/
.set. 0xF8000120 = 0x1F000200; // ARM_CLK_CTRL - divisor = 2 (433 MHz)
.set. 0xF800014C = 0x00000621; // LQSPI_CLK_CTRL - divisor = 6, (144 MHz)

注記: ブート デバイスの読み込まれるイメージのサイズは 128 KB です。使用される基準クロックの周波数は 33.33 MHz です。

イメージの読み込み

イメージの残りの部分をボートするのにかかる時間は、イメージ サイズと使用するブート インターフェイスによって異なります。特定のアプリケーションのブートに必要な大まかな時間を予測するには、「デザインの詳細」セクションの情報が必要になります。

デザインの詳細

使用中のコンフィギュレーションのブート時間を予測するには、次の詳細をスプレッドシートに入力してください。

モードオプションコメント
ブート タイプセキュア/非セキュア
Zynq デバイスZ-7010/Z-7015/Z-7020/Z-7030/Z-7045/Z-7100
OSベアメタル/Linux

アプリケーション コードまたは Linux イメージのサイズがわかっている場合は、それらも入力ください。わからない場合は、ブート時間の予測に使用されるデフォルト サイズを FAE にお問い合わせください。次の情報もわかる場合は入力してください。

  • アプリケーション コードのサイズ
  • Linux カーネル、RAM ディスク、デバイス ツリー、および Uboot のサイズ 
ベンダー Micron/Spansion
ブート デバイスNAND/QSPI
デバイス コンフィギュレーション

NAND: x8/x16
QSPI: Single/Dual Stacked/Dual Parallel

電圧 1.8v/3.3v
認証なし/AES/RSA/AES+RSA非セキュア: None/RSA
セキュア: AES/RSA/AES+RSA
QSPI タイプ> 128 Mb または < 128 Mb
bootROM CRCbootROM の 128 Kb CRC チェックをイネーブル

添付ファイル

関連添付ファイル

タイトル サイズ ファイルタイプ
Zynq-7000_Boot_time_estimator_QSPI_NAND_rev3.0.xlsm 106 KB XLSM

アンサー レコード リファレンス

関連アンサー レコード

Answer Number アンサータイトル 問題の発生したバージョン 修正バージョン
67475 Zynq UltraScale+ MPSoC - ブート時間の見積もり N/A N/A
AR# 55572
日付 03/18/2020
ステータス アクティブ
種類 一般
デバイス