AR# 68832

Vivado 2016.4 以前を使用した UltraScale FPGA、UltraScale+ FPGA、および Zynq UltraScale+ MPSoC eFUSE のプログラムに関するデザイン アドバイザリ アンサー

説明

概要:

このデザイン アドバイザリ アンサーでは、Vivado 2016.4 (およびそれ以前) を使用した UltraScale FPGA、UltraScale+ FPGA、および Zynq UltraScale+ MPSoC eFUSE のプログラムに関する推奨事項および既知の問題を説明します。 

これらの既知の問題が発生すると、eFUSE をプログラムできなくなるか、暗号化/符号付きブート/コンフィギュレーション イメージ エラーとなります。

重要:

  • UltraScale アーキテクチャ SSI FPGA では、eFUSE 制御レジスタの R_DIS_SEC または R_DIS_RSA オプションをプログラムするのに Vivado 2016.4 およびそれ以前のバージョンをパッチを適用せずに使用しないでください。影響のある SSI デバイスと回避策のリストは、「ソリューション」セクションの問題 1 を参照してください。
  • UltraScale+ MPSoC では、PS eFUSE または PS BBRAM をプログラムするのに Vivado 2016.4 およびそれ以前のバージョンを使用しないでください。Zynq UltraScale+ MPSoC PS eFUSE および PS BBRAM の一般的な推奨事項は、次を参照してください。

既存の eFUSE プログラム プロジェクトまたはプログラム済みのデバイスへの影響:

ありません。eFUSE プログラム手法を使用して問題なくプログラムされた既存のプロジェクトには影響ありません。 

ただし、既存のプロジェクトで eFUSE 設定または手順を変更した場合は、既知の問題を確認し、一般的な推奨事項を適用して、新しい設定および手順で問題が発生しないようにしてください。

新規 UltraScale FPGA および UltraScale+ FPGA eFUSE プログラム プロジェクトの一般的な推奨事項:

最初の eFUSE プログラムを正しく実行するには、新規 eFUSE プログラム プロジェクトに次の方法を使用します。

  • 推奨: ボード デザインで可能な場合は、eFUSE プログラム中に FPGA コンフィギュレーション モード ピンを JTAG のみ設定にします。
  • 必須: 個別の eFUSE プログラム操作を使用します。つまり、Program eFUSE GUI ウィザードを個別に実行するか個別の Tcl コマンドを使用して、次の順序で適切な eFUSE 値およびオプションをプログラムします。
    1. eFUSE のプログラム操作パス #1: NKY 値 (AES、RSA) および FUSE_USER 値をプログラムします。
    2. eFUSE のプログラム操作パス #2: (該当する場合のみ) JTAG ディスエーブル以外のセキュリティ レジスタ (FUSE_SEC) のオプションをプログラムします。
    3. eFUSE のプログラム操作パス #3: (該当する場合のみ) W_DIS_CNTL (write-disable 制御レジスタ) 以外の制御レジスタ (FUSE_CNTL) のオプションをプログラムします。
      注記: 最後の手順 (5) でセキュリティ レジスタの JTAG ディスエーブル オプションをプログラムする必要がある場合は、制御レジスタの W_DIS_SEC オプションをプログラムしないでください。
    4. eFUSE のプログラム操作パス #4: (該当する場合のみ) 制御レジスタ W_DIS_CNTL (write-disable FUSE_CNTL レジスタ) をプログラムします (UG908 を参照)。
    5. 最後の eFUSE のプログラム操作パス #5: (該当する場合のみ) セキュリティ レジスタの JTAG ディスエーブルをプログラムします (UG908 を参照)。
  • 推奨: 最初にプログラムしたデバイスに対して、上記の各手順の後に eFUSE の結果を検証し、すべての手順が終了してから eFUSE の結果を再検証して、完全な eFUSE プログラム手順の最終結果が意図したものであることを確認してください。
  • AES と RSA の両方またはいずれかをプログラムした場合は、AES 暗号化または RSA 符号付きビットストリームが問題なくデバイスに読み込まれることを確認します。
  • FUSE_USER 値をプログラムした場合は、正しい JTAG FUSE_USER および EFUSE_USER プリミティブ値を読み込んだことを確認します。
  • FUSE_SEC 設定をプログラムした場合は、デバイスの動作がその設定に対応した正しいものであることを確認します。
  • USE_CNTL 設定をプログラムした場合は、その結果の REGISTERS.EFUSE.FUSE_CNTL 値を Vivado で確認して設定を検証し、読み出し保護のかかった REGISTER.EFUSE を確認します。* Vivado のレジスタには、実際の値は表示されません。
    注記: Vivado には FUSE_CNTL の一部の予約ビットの位置が表示されます。これらは、ザイリンクス工場であらかじめ 1 にプログラムされています。
  • 手順 5 での選択に応じて、デバイス JTAG にアクセス可能か不可能かを確認します。

Vivado ツールでの UltraScale アーキテクチャ FPGA のプログラム手順は、次の資料を参照してください。

  • 『Vivado Design Suite ユーザー ガイド: プログラムおよびデバッグ』 (UG908)
  • 『暗号化と認証を使用して UltraScale/UltraScale+ FPGA のビットストリームを保護』 (XAPP1267)

Zynq UltraScale+ MPSoC PS eFUSE および PS BBRAM プログラムの一般的な推奨事項:

SDK LibXil SKey ライブラリを使用して、Zynq UltraScale+ MPSoC デバイスの PS eFUSE および PS BBRAM をプログラムします。『OS およびライブラリ資料コレクション』 (UG643) に含まれる (UG1191) を参照してください。

ソリューション

注記: 次にリストされている既知の問題は、すべて 2017.4 Vivado リリースで修正されています。

Vivado 2016.4 以前を使用した UltraScale アーキテクチャ eFUSE のプログラム:


問題 1: 

Vivado 2016.4 (およびそれ以前) では、SSI FPGA をプログラムする際に eFUSE 制御レジスタ読み出しディスエーブル設定 R_DIS_SEC または R_DIS_RSA を使用すると、意図しない eFUSE ビットがプログラムされることがあります。

これらの設定により、FUSE_SEC[3] eFUSE が設定されて JTAG が恒久的にディスエーブルになる、RSA ハッシュ値が正しくなくなり RSA 符号付きビットストリームの読み込みが認証エラーになる、という意図しない結果が発生します。

SSI FPGA には、次が含まれます。

  • KU085
  • KU115
  • VU125
  • VU160
  • VU190
  • VU440
  • VU5P
  • VU7P
  • VU9P
  • VU11P
  • VU13P

回避策:

Vivado 2016.4 およびそれ以前のバージョンでは、eFUSE 制御レジスタ (FUSE_CNTL) の R_DIS_SEC および R_DIS_RSA ビットをプログラムしないでください。Vivado 2016.4 にこのデザイン アドバイザリ アンサーに添付されているパッチを適用してから、R_DIS_SEC および R_DIS_RSA をプログラムしてください。


問題 2: 

Vivado 2016.4 (およびそれ以前) では、難読化 AES キーの使用をイネーブルにする eFUSE セキュリティ レジスタ ビットはプログラムされません。 

BITSTREAM.ENCRYPTION.OBFUSCATEKEY プロパティをイネーブルにして難読化 AES キーを生成し、その結果の NKY ファイルがプログラム用に Vivado に渡されると、Vivado で難読化キーはプログラムされますが、難読化キーをイネーブルにするために必要な eFUSE オプション (FUSE_SEC[6]) はプログラムされません。

この結果、難読化キー フローを使用して暗号化されたビットストリームで FPGA がコンフィギュレーションされなくなります。

回避策:

  • Vivado 2016.4 およびそれ以前のバージョンでは、難読化キーは使用しないでください。
  • その代わり、モノリシック FPGA の場合は、次の Tcl コマンドを使用して FUSE_SEC[6] をプログラムします。ここで、$deviceIdx は JTAG スキャン チェーン内のターゲット デバイスのインデックスです。
program_hw_devices -security_efuse {40} [lindex [get_hw_devices] $deviceIdx]

問題 3:

Vivado 2016.4 GUI の Program eFUSE Register ウィザードでは、プログラムする制御レジスタ オプションを選択しようとすると、W_DIS_CNTL ビットが実際にはプログラムされていなくても、FUSE_CNTL[5] (W_DIS_CNTL、書き込みディスエーブル FUSE_CNTL レジスタ) が既に設定されているとレポートされます。 

その結果、GUI で eFUSE 制御レジスタ (FUSE_CNTL) 設定をプログラムできません。

回避策:

GUI フローではなく、program_hw_devices Tcl コマンドを使用して FUSE_CNTL ビットをプログラムします。 

注記: FUSE_CNTL R_DIS_SEC または R_DIS_RSA については、問題 1 も参照してください。


問題 4:

Vivado 2016.4 の GUI では、FUSE_CNTL またはFUSE_USER レジスタの一部の eFUSE ビットが既にプログラムされている場合、Program eFUSE Registers ウィザードで追加の eFUSE フィールドをプログラムしようとすると、内部エラーが発生します。 

そのため、GUI で追加の eFUSE 制御レジスタ (FUSE_CNTL) または FUSE_USER ビットをプログラムできません。

回避策:

Vivado 2016.4 およびそれ以前のバージョンでは、FUSE_CNTL または FUSE_USER の一部のビットが既にプログラムされている場合は、追加の eFUSE ビット値/オプションをデバイスにプログラムするのに GUI フローを使用するのではなく、program_hw_devices Tcl コマンドを使用してください。


問題 5: 

Vivado 2016.4 (およびそれ以前) では、Zynq UltraScale+ MPSoC に対して [Program eFUSE Registers] を選択できますが、『Zynq UltraScale+ MPSoC テクニカル リファレンス マニュアル』 (UG1085) で説明されているように、このコマンドでは PS eFUSE はプログラムされません。

特定のセキュリティ レジスタ設定を使用した場合、MPSoC デバイスで [Program eFUSE Registers] を使用すると、デバイスに標準 PL ビットストリームを読み込むことができなくなります。

推奨対処方法: 

SDK LibXil SKey ライブラリを使用して、Zynq UltraScale+ MPSoC デバイスに PS eFUSE および PS BBRAM をプログラムします。『OS およびライブラリ資料コレクション』 (UG643) に含まれる (UG1191) を参照してください。

Vivado 2016.4 以前のバージョンでのその他の eFUSE プログラム問題は、サポート サイトのナレッジ ベースを参照するか、サービス リクエストを作成してください。


Vivado デザイン ツール 2016.4 のパッチ

パッチに含まれる README (AR68832_vivado_2016.4_rev3.txt) の「Installation/Use」セクションを参照してください。

Vivado UltraScale eFUSE プログラム スクリプトの例:

このデザイン アドバイザリ アンサーには、UltraScale、UltraScale + FPGA の eFuse 設定の推奨されるプログラム順を示すサンプル スクリプトが添付されています。

添付ファイル

関連添付ファイル

タイトル サイズ ファイルタイプ
AR68832_vivado_2016_4_rev3.zip 11 MB ZIP
vivado_ultrascale_efuse_programming_sequence.txt 6 KB TXT
AR# 68832
日付 10/17/2018
ステータス アクティブ
種類 デザイン アドバイザリ
デバイス 詳細 概略
ツール