Upload
others
View
3
Download
0
Embed Size (px)
Citation preview
XAPP1283 (v1.0) 2017 年 3 月 8 日 1japan.xilinx.com
この資料は表記のバージ ョ ンの英語版を翻訳したもので、 内容に相違が生じる場合には原文を優先します。 資料によっては英語版の更新に対応していないものがあります。 日本語版は参考用としてご使用の上、 最新情報につきましては、 必ず最新英語版をご参照ください。
概要
UltraScale™ F FPGA には、 外部 JTAG ポート と同じ機能を提供する MASTER_JTAG という ビルト イン プリ ミ ティブがあり ます。 内部 FPGA ロジッ クは、 この MASTER_JTAG を使用して AES 複合化キーをバッ クアップ バッテ リ付きの RAM (BBRAM) へロードできます。 また、 外部 JTAG ポート を使用する代わりに MASTER_JTAG プリ ミ ティブを使用して、 デバイス内部からさまざまなワンタイム プログラマブル (OTP) eFUSE をプログラムするこ と も可能です。 このアプリ ケーシ ョ ン ノートでは、 MicroBlaze™ ベース ソフ ト プロセッサ コア [参照 1] デザイン用のザイ リ ンクス HDL および C ライブラ リ関数を提供して、 MASTER_JTAG プリ ミ ティブとの通信に必要な低レベル コマンドについて説明します。 これらのデザインは、 さまざまなユース ケースに応じて変更したり、 調整できます。
このアプリ ケーシ ョ ン ノートの リ ファレンス デザイン ファ イルは、 ザイ リ ンクスのウェブサイ トからダウンロードできます。 デザイン ファ イルの詳細は、 「 リ ファレンス デザイン」 を参照して ください。
はじめに
Virtex®-6 FPGA 以降のザイ リ ンクス デバイスは、 BBRAM と eFUSE 不揮発性 (NVM) メモ リの両方を備えています。UltraScale デバイスの BBRAM は、 主に 256 ビッ トの AES ビッ ト ス ト リーム複合化キーを格納するために使用されます。この AES キーは eFUSE に格納するこ と も可能ですが、 この場合、 変更や消去ができない点に注意が必要です。 カスタマイズ用にプログラムできる 32 ビッ トの USER_EFUSE レジスタも利用可能です。
UltraScale FPGA には、 ほかにもプログラム可能な 128 ビッ ト レジスタ USER_EFUSE_128 が導入され、 メンテナンス ログ、 改ざん行為ログ、 あるいはカスタマイズに使用できます。 デバイスの認証方式の一部となる RSA-2048 公開キーのハッシュ値をプログラムできる 384 ビッ ト eFUSE レジスタもあ り ます。 また、 eFUSE ベースの制御ビッ ト (読み出し /書き込み無効化、 復号化無効化、 外部 JTAG 無効化、 RSA 有効化など) がプログラム可能です。 詳細は、 『UltraScale アーキテクチャ コンフ ィギュレーシ ョ ン ユーザー ガイ ド』 (UG570) [参照 2] および 『Vivado Design Suite ユーザー ガイ ド : プログラムおよびデバッグ』 (UG908) [参照 3] を参照してください。
BBRAM および eFUSE は従来、ザイ リ ンクスの ISE iMPACT や Vivado® ハードウェア マネージャーを使用して外部 JTAG ポート経由でプログラムしていましたが、 UltraScale FPGA からは、 内部の MASTER_JTAG ポート を使用してプログラムできるよ うにな り ました。
内部パスを使用してプログラムできるこ とで、 特にセキュ リティ アプリ ケーシ ョ ンにさまざまなメ リ ッ トがもたら されます。 たとえば、 FPGA ロジッ クにセキュア キー交換機能をインスタンシエートするこ とで、 BBRAM キーのフ ィールド アップデート を遠隔操作で安全に実行できます。 新しいキーは暗号化 (ブラ ッ ク ) されており、 FPGA ロジッ クで復号化されて、 デバイス内部から BBRAM に保存されるため、 非セキュアなネッ ト ワーク上を安全に移動できます。 その他のセキュ リティ ユース ケースは、 不正操作イベン トに対する応答と してタンパー ログ情報、 AES 複合化機能の無効化、JTAG 無効化などの eFUSE の内部プログラ ミ ングです。 詳細は、 『UltraScale および UltraScale+ FPGA での不正操作防止デザインの開発』 (XAPP1098) [参照 7] を参照して ください。
内部 MASTER_JTAG ポートへのインターフェイス と して MicroBlaze Soft Processor コア [参照 1] が FPGA ロジッ クにインスタンシエート されています。 ザイ リ ンクスの XILSKEY ライブラ リは、 必要な下位レベル JTAG コマンドをシンプルかつ抽象化するためのアプリ ケーシ ョ ン プログラ ミ ング インターフェイス (API) を提供します。 XILSKEY ライブラ リ を使用するハード ウェア/ソフ ト ウェア開発については、 「ハード ウェア/ソフ ト ウェア開発の概要」 で説明しています。XILSKEY ライブラ リの詳細は、『Zynq-7000 UltraScale および Zynq UltraScale+ MPSoC AP SoC デバイス用 LibXil SKey ユーザー ガイ ド』 [参照 8] を参照してください。
このアプリ ケーシ ョ ン ノートで説明するデザイン フローでは、 Vivado ハードウェア プロジェク トが 1 つと 3 つの異なる SDK アプリ ケーシ ョ ンを作成します。 これらの SDK アプリ ケーシ ョ ンは、 次のタスクを実行します。
アプリケーシ ョ ン ノート : UltraScale FPGA
XAPP1283 (v1.0) 2017 年 3 月 8 日
BBRAM および eFUSE の内部プログラ ミング著者: Ed Peterson
必要なハードウェアおよびソフ トウェア
XAPP1283 (v1.0) 2017 年 3 月 8 日 2japan.xilinx.com
• BBRAM AES キーを内部プログラムする。
• BBRAM キーを検証するために、 暗号化されたビッ ト ス ト リームを使用して Hello World デザインを作成する。
• eFUSE ビッ ト を内部プログラムする。 eFUSE の内部プログラ ミ ングが SDK アプリ ケーシ ョ ンおよび Vivado ハードウェア マネージャーで検証される。
このアプリ ケーシ ョ ン ノートは、 Vivado ツール フローの設計手法 (IP インテグレーターなど) に精通し、 単純な SDK プロジェク トの構築経験があるこ とを前提に説明しています。 詳細は、 『Vivado Design Suite ユーザー ガイ ド : プログラムおよびデバッグ』 (UG908) [参照 3]、 『Vivado Design Suite ユーザー ガイ ド : IP を使用した設計』 (UG892) [参照 4]、 『Vivado Design Suite ユーザー ガイ ド : IP を使用した設計』 (UG893) [参照 5]、『Vivado Design Suite ユーザー ガイ ド : IP インテグレーターを使用した IP サブシステムの設計』 (UG994) [参照 6] を参照してください。
必要なハードウェアおよびソフ トウェア
BBRAM および eFUSE の内部プログラ ミ ングに必要なハードウェアおよびソフ ト ウェアは次のとおりです。
• KCU105 Kintex® UltraScale FPGA 評価キッ ト [参照 9] (XCKU040-2FFVA1156E FPGA 搭載)
• AC/DC 電源アダプター (12 VDC)
• USB Type-A/Micro-B USB ケーブル (JTAG 通信用)
• USB Type-A/Micro-B USB ケーブル (UART 通信用)
• Vivado Design Suite 2016.3 以降 [参照 10]
• ザイ リ ンクス ソフ ト ウェア開発キッ ト (XSDK) 2016.3 以降 [参照 11]
• Tera Term などのシ リ アル通信ターミナル アプリ ケーシ ョ ン [参照 12]
重要: eFUSE を制御する EFUSE_KEY_ONLY が KCU105 評価ボードの FPGA にすでにプログラムされている場合、BBRAM キーは使用できません。詳細は、 『UltraScale アーキテクチャ コンフ ィギュレーシ ョ ン ユーザー ガイ ド』 (UG570) [参照 2] を参照してください。
MASTER_JTAG を使用して eFUSE を内部プログラムする場合の注意事項
MASTER_JTAG を使用して eFUSE を内部プログラムする場合は特別な注意が必要です。
1. 内部プログラ ミ ング中、 コンフ ィギュレーシ ョ ン メモ リへはアクセスできません。 これには、 シングルイベン ト アップセッ ト (SEU) スキャン、 リードバッ ク キャプチャ、 パーシャル リ コンフ ィギュレーシ ョ ン (PR) などの動作が含まれます。 たとえば、 eFUSE プログラ ミ ング中はザイ リ ンクスの Soft Error Mitigation (SEM) IP コア [参照 13] を動作させないよ うにします。
2. ボード /システム デザインでは、 eFUSE のプログラ ミ ングに必要となる追加の電流量を考慮する必要があ り ます。 プログラ ミ ングに必要な電流量については、 UltraScale デバイスのデータシート [参照 14] を参照して ください。
ハードウェア/ソフ トウェア開発の概要
このアプリ ケーシ ョ ン ノートでは、 汎用 I/O (GPIO) を使用して MASTER_JTAG プリ ミ ティブへ間接的にインターフェイスする、 MicroBlaze プロセッサ ベースの Vivado ツール デザインを構築する手順を説明します。 Vivado ハードウェア プロジェク ト を作成して、 SDK へエクスポート します。 SDK ツールは、 MicroBlazeプロセッサ ベースの Vivado ツール デザインをハード ウェア プラ ッ ト フォームと して使用して起動します。 利用可能なソフ ト ウェア ライブラ リ とサンプル コードに基づいて、 3 つの異なるソフ ト ウェア アプリ ケーシ ョ ンが作成されます。 これらの SDK アプリ ケーシ ョ ンがコンパイルされ、 実行可能およびリ ンク可能なフォーマッ ト (ELF) ファ イルに組み込まれた後、 それらは Vivado ツールに戻されます。 その後、 3 つの FPGA ビッ ト ス ト リームが生成され、 このアプ リ ケーシ ョ ンノートで説明する機能を実行および検証します。
ハードウェア/ソフ トウェア開発の概要
XAPP1283 (v1.0) 2017 年 3 月 8 日 3japan.xilinx.com
MicroBlaze プロセッサのほかに、 このプロジェク トには 2 つの VHDL ファ イルが含まれています (詳細は、 「 リ ファレンス デザイン」 を参照)。
• int_prog_ctl_us.vhd
• jtag_monitor.vhd
INT_PROG_CTL_US モジュール
JTAG 信号は通常、 MicroBlaze プロセッサの GPIO インターフェイスから直接送信されますが、 実際の eFUSE プログラ ミング パルス中には、 正確な制御を与えるために INT_PROG_CTL_US モジュールが必要です。 このモジュールには、MASTER_JTAG プリ ミ ティブがインスタンシエート されています。
INT_PROG_CTL_US モジュールは、 実際に eFUSE プログラ ミ ング フェーズに入る場合を除いて、 MicroBlaze プロセッサの GPIO 信号を MASTER_JTAG プリ ミ ティブへ直接送信したり、 プ リ ミ テ ィブから直接受信します。 このフェーズに入る と、 XILSKEY ソフ ト ウェアは READY 信号を使用して INT_PROG_CTL_US モジュールをポーリ ングします。 モジュールの準備が整ったこ とを認識する と、 START_PROG 入力をアサート し、 このモジュールに JTAG 信号 (TCK および TMS) の制御を行う よ う命令して正確な 5µs のプログラ ミ ング パルスを送信します。 eFUSE のプログラ ミ ングが完了する と、INT_PROG_CTL_US モジュールは END_PROG 信号をアサート して、 ソフ ト ウェアが再び JTAG 信号を制御できるよ うにします。 図 1 にこのインターフェイスを示します。
eFUSE ではなく BBRAM のみを内部プログラムする場合は、 このモジュールを無視できます。 このモジュールはわずかな リ ソースしか使用しない上に、 将来的な内部 eFUSE プログラ ミ ングにも対応するため、 ザイ リ ンクスはこのモジュールをデザインに含めるこ とを推奨しています。 これを使用しない場合は、 MASTER_JTAG プリ ミ ティブをインスタンシエート し、 MicroBlaze プロセッサの GPIO へ直接接続する必要があ り ます。
デザインにザイ リ ンクスの Security Monitor IP コア ( 『Security Monitor IP コアの製品概要』 [参照 15] 参照) も インスタンシエートする場合、 Security Monitor が MASTER_JTAG プリ ミ ティブをインスタンシエートするため、 INT_PROG_CTL_US モジュールに変更が必要です。 INT_PROG_CTL_US モジュールから MASTER_JTAG プリ ミ ティブを削除して、 Security Monitor の MASTER_JTAG インターフェイスへ接続するために対応する JTAG 信号をモジュールのポート リ ス トに追加する必要があ り ます。
JTAG_MONITOR モジュール
オプシ ョ ン の JTAG_MONITOR モジュールは、 KCU105 の外部ヘッダー ピンへ接続可能な EFUSE_PROG_PULSE 出力を提供するため、 eFUSE のプログラ ミ ング パルス幅 (この信号は JTAG コン ト ローラーがプログラ ミ ング フェーズにある時間を正確に示す) を測定できます。
また、 JTAG_MONITOR を使用して JTAG 信号をデバッグ/監視し、 現在の JTAG ステート を表示するこ と も可能です。Vivado Integrated Logic Analyzer (ILA) IP コアを用いて JTAG ステート を監視する場合は、 INT_PROG_CTL_US で TEST_MODE の標準設定を TRUE (MASTER_JTAG はインスタンシエート されない) にして、外部の JTAG 経由で ILA が通信できるよ うにします。 MASTER_JTAG がデザイン内にインスタンシエート されている場合には外部の JTAG が未接続のため、 この設定を行わないと ILA が機能しません。
JTAG_MONITOR は開発およびデバッグに有効です。 これはオプシ ョ ンであ り、 フ ィールド展開したシステムでは削除できます。
X-Ref Target - Figure 1
図 1: INT_PROG_CTL_US モジュールを使用する MASTER_JTAG への MicroBlaze インターフェイス
INT_PROG_CTL_US
MASTER_JTAG
CLOCK
READY
START_PROG
END_PROG
TDI, TCK, TMS
TDO
Mic
roB
laze
GP
IO
X18313-011117
ハードウェア/ソフ トウェア開発の概要
XAPP1283 (v1.0) 2017 年 3 月 8 日 4japan.xilinx.com
Vivado ハードウェア プロジェク トの構築
共通の Vivado プロジェク トは、 このアプリ ケーシ ョ ンに必要なハードウェアです。 GPIO を使用する MicroBlaze ソフ ト プロセッサをベースに構築され、 「INT_PROG_CTL_US モジュール」 経由で MASTER_JTAG プリ ミ ティブと間接的に接続します。 次の手順を使用して、 Vivado ハードウェア プロジェク ト を作成します。
1. グラフ ィカル ユーザー インターフェイス (GUI) モードで Vivado ツール (2016.3 以降) を起動します。
2. Quick Start のウェルカム画面で、 [Open Example Project] をク リ ッ ク します (図 2)。
3. [Next] をク リ ッ ク し、 [Base MicroBlaze] を選択して [Next] をク リ ッ ク します (図 3)。X-Ref Target - Figure 2
図 2: Vivado のサンプル プロジェク ト
X18314-011117
ハードウェア/ソフ トウェア開発の概要
XAPP1283 (v1.0) 2017 年 3 月 8 日 5japan.xilinx.com
4. [Project name] に 「internal_prog_proj」 と入力します。
5. 適切なプロジェク トの場所を入力し、 オプシ ョ ンで [Create project subdirectory] をオンにします。
注記: Windows で許容されるパスの長さは最大で 260 バイ トです。
6. [Next] をク リ ッ ク し、 [Kintex-UltraScale KCU105 Evaluation Platform] をク リ ッ ク して [Next] をク リ ッ ク します (図 4)。
X-Ref Target - Figure 3
図 3: プロジェク ト テンプレート ベースの MicroBlaze
X18315-011117
ハードウェア/ソフ トウェア開発の概要
XAPP1283 (v1.0) 2017 年 3 月 8 日 6japan.xilinx.com
7. [Finish] をク リ ッ ク します。 Vivado ツールによ り基本の MicroBlaze プロセッサ プロジェク トが作成されます (図 5 および図 6)。
X-Ref Target - Figure 4
図 4: プロジェク トの評価プラッ ト フォーム
Text
X18316-011117
ハードウェア/ソフ トウェア開発の概要
XAPP1283 (v1.0) 2017 年 3 月 8 日 7japan.xilinx.com
8. Clocking Wizard IP ブロ ッ クをダブルク リ ッ ク して [Output Clocks] タブを選択します。 [clk_out1] がオンになっており、リ クエス ト した周波数と実際の周波数が 100MHz であるこ とを確認した後に [OK] をク リ ッ ク します。 これは、MicroBlaze コアのメ イン ク ロ ッ クです。
9. [Output Clock] 列で [clk_out2] をオンにして、 8.000 と します。 [Actual] 列に 8.000MHz と表示されているこ とを確認します。 これは、 実際に eFUSE をプログラムする際に正確な時間を与えるために 「INT_PROG_CTL_US モジュール」で使用されるクロ ッ クです。 [OK] をク リ ッ ク します (図 7)。
X-Ref Target - Figure 5
図 5: プロジェク ト サマリ
X18317-011117
X-Ref Target - Figure 6
図 6: IP インテグレーター内の MicroBlaze デザイン例
X18319-011117
ハードウェア/ソフ トウェア開発の概要
XAPP1283 (v1.0) 2017 年 3 月 8 日 8japan.xilinx.com
重要: eFUSE のプログラムでは、 8.000MHz ク ロ ッ クが INT_PROG_CTL_US ブロ ッ クに送信されます。 このクロ ッ クは必要なプログラ ミ ング パルスを生成するのに重要です。 JTAG TAP マシンは、プログラムされる各 eFUSE に 5µs パルスを与えるために、 このフェーズで正確なクロ ッ クを使用して遷移する必要があ り ます。 プログラ ミ ング パルスが正確でないと、 eFUSE プログラ ミ ングと信頼性に悪影響を及ぼす可能性があ り ます。
10. Clocking Wizard IP ブロ ッ クの [clk_out2] ポート を右ク リ ッ ク して [Create Port] をク リ ッ ク し、 [Port name] を「CLK_8MHZ」 と して [OK] をク リ ッ ク します (図 8)。
X-Ref Target - Figure 7
図 7: Clocking Wizard
X18318-011117
X-Ref Target - Figure 8
図 8:ポートの作成
X18320-011117
ハードウェア/ソフ トウェア開発の概要
XAPP1283 (v1.0) 2017 年 3 月 8 日 9japan.xilinx.com
11. IP インテグレーターのブロ ッ ク図で、 IP インテグレーター ウ ィンド ウの左側にある [Add IP] ボタン をク リ ッ クして、 次の IP ブロ ッ クを検索して追加します。
a. System Management Wizard (eFUSE の読み出し /書き込み動作の前にオンチップの温度や電圧を監視するために使用)。
b. AXI Timer (eFUSE プログラ ミ ング コード セクシ ョ ンのウォッチド ッグと して使用)。
12. IP インテグレーター ウ ィンド ウの上方部の [Designer Assistance available] の横にある [Run Connection Automation] をクリ ッ ク します。
13. [All Automation] をオンしてすべてのチェッ クボッ クスを選択し、 [OK] をク リ ッ ク して、 最近追加した IP ブロ ッ クをすべて自動接続します (図 9)。
14. AXI GPIO IP へ接続された外部インターフェイス、 led_8bits を右ク リ ッ ク して、 [Delete] をク リ ッ クします。
15. [AXI GPIO] IP ブロ ッ クをダブルク リ ッ ク して、 IP を再びカスタマイズします。
16. ド ロ ップダウン ボッ クスを使用して、 IP インターフェイスのGPIO および GPIO2 両方の [Board Interface] が [Custom] に設定されているこ とを確認します (図 10)。
X-Ref Target - Figure 9
図 9:自動接続を実行
X18321-011117
ハードウェア/ソフ トウェア開発の概要
XAPP1283 (v1.0) 2017 年 3 月 8 日 10japan.xilinx.com
17. [IP Configuration] タブを選択して、 GPIO の [All Outputs] をオンにして、 [GPIO Width] を 4 に設定し、 [Enable Dual Channel] をオンにします。GPIO 2 の [All Inputs] をオンにして、[GPIO Width] を 3 に設定して [OK] をク リ ッ ク します (図 11)。
X-Ref Target - Figure 10
図 10: IP インターフェイスの再カスタマイズ
X18322-011117
ハードウェア/ソフ トウェア開発の概要
XAPP1283 (v1.0) 2017 年 3 月 8 日 11japan.xilinx.com
18. AXI GPIO IP ブロ ッ クの GPIO ポート を右ク リ ッ ク して [Create Interface Port] をク リ ッ ク し、 [Interface Name] を GPO に設定して [OK] をク リ ッ ク します (図 12)。
19. AXI GPIO IP ブロ ッ クの GPIO2 ポート を右ク リ ッ ク して [Create Interface Port] をク リ ッ ク し、[Interface name] を GPI に設定して [OK] をク リ ッ ク します (図 13)。
X-Ref Target - Figure 11
図 11: IP GPIO 幅の再カスタマイズ
X-Ref Target - Figure 12
図 12: インターフェイス ポートの作成 (GPIO)
X18323-011117
X18324-011117
ハードウェア/ソフ トウェア開発の概要
XAPP1283 (v1.0) 2017 年 3 月 8 日 12japan.xilinx.com
20. System Management Wizard IP ブロ ッ クの Vp_Vn ポート を右ク リ ッ ク して、 [Make External] をク リ ッ ク します。
21. IP インテグレーター ウ ィンド ウ上部の [Address Editor] タブを選択して、 ド ロ ップダウン ボッ クスを使用して、[microblaze_0_local_memory/dlmd_bram_if_cntlr] の [Range] を 256K に設定し、[microblaze_0_local_memory/ilmd_bram_if_cntlr] の [Range] を 256K に設定します (図 14)。
22. IP インテグレーター ウ ィンド ウ上部の [Diagram] タブを選択して、 ブロ ッ ク図に戻り ます。
23. IP インテグレーター ウ ィンド ウの左側にある [Validate Design] ボタン をク リ ッ ク して、検証で検出された問題を修正します。
24. ブロ ッ ク図についているテキス ト ラベルは、 移動/削除可能です。
25. IP インテグレーター ウ ィンド ウの左側にある [Regenerate Layout] ボタン をク リ ッ ク して、 ブロ ッ ク図の表示を更新します。 図 15 のよ うに表示されるはずです。 編集完了後、 ブロ ッ ク図を保存します。
X-Ref Target - Figure 13
図 13: インターフェイス ポートの作成 (GPIO2)
X-Ref Target - Figure 14
図 14: [Address Editor] タブ
X18325-011117
X18326-011117
ハードウェア/ソフ トウェア開発の概要
XAPP1283 (v1.0) 2017 年 3 月 8 日 13japan.xilinx.com
26. 最上位の Vivado ツール メニューで、 [Tools] → [Project Settings] → [Target Language VHDL] → [OK] をク リ ッ ク します。
27. 中央の [Sources] ビューを選択し、 [Hierarchy] タブを選択して base_mb_i を右ク リ ッ ク します。 [Create HDL Wrapper] を選択し、 [Copy generated wrapper to allow user edits] をオンにして [OK] をク リ ッ ク します (図 16 および図 17)。
X-Ref Target - Figure 15
図 15: MicroBlaze ベースの内部 BBRAM/eFUSE プログラ ミング プロジェク トのレイアウト
X18327-011117
X-Ref Target - Figure 16
図 16: [Sources] ビュー
X18328-011117
ハードウェア/ソフ トウェア開発の概要
XAPP1283 (v1.0) 2017 年 3 月 8 日 14japan.xilinx.com
28. 中央の [Sources] ビューの [Design Sources] の下にある base_mb_wrapper をダブルク リ ッ ク し、 テキス ト エディ タで HDL ファ イルが開いたら次の変更を加えます。
a. 最上位ポート リ ス トから GPIO ポート を削除して、 内部信号と して割り当てます。
b. INT_PROG_CTL_US コンポーネン ト をインスタンシエート して接続します (このブロ ッ クは MASTER_JTAG プリ ミ ティブをインスタンシエートする )。 詳細は、 「INT_PROG_CTL_US モジュール」 を参照してください。
c. JTAG_MONITOR コンポーネン ト をインスタンシエート して接続します (オプシ ョ ン)。 詳細は、「JTAG_MONITOR モジュール」 を参照してください。
29. 次の VHDL コード サンプルは、 これらの変更を示しています (VHDL ラ ッパー ファ イルは、 ザイ リ ンクス ウェブサイ トから もダウンロード可能)。 詳細は、 「 リ ファレンス デザイン」 を参照してください。
entity base_mb_wrapper is port ( Vp_Vn_v_n : in std_logic; Vp_Vn_v_p : in std_logic; default_sysclk_300_clk_n : in std_logic; default_sysclk_300_clk_p : in std_logic; reset : in std_logic; rs232_uart_rxd : in std_logic; rs232_uart_txd : out std_logic; EFUSE_PROG_PULSE : out std_logic );end base_mb_wrapper;
architecture STRUCTURE of base_mb_wrapper is
signal clk_8mhz : std_logic; signal gpi_tri_i : std_logic_vector(2 downto 0); signal gpo_tri_o : std_logic_vector(3 downto 0); signal jtag_mon : std_logic_vector(3 downto 0);
component base_mb is port ( default_sysclk_300_clk_n : in std_logic; default_sysclk_300_clk_p : in std_logic; rs232_uart_rxd : in std_logic; rs232_uart_txd : out std_logic; Vp_Vn_v_n : in std_logic; Vp_Vn_v_p : in std_logic; reset : in std_logic; CLK_8MHZ : out std_logic; GPI_tri_i : in std_logic_vector(2 downto 0); GPO_tri_o : out std_logic_vector(3 downto 0) ); end component base_mb;
component INT_PROG_CTL_US is
X-Ref Target - Figure 17
図 17: HDL ラッパーの作成
X18329-011117
ハードウェア/ソフ トウェア開発の概要
XAPP1283 (v1.0) 2017 年 3 月 8 日 15japan.xilinx.com
generic ( TEST_MODE : boolean := FALSE ); port (
RESET : in std_logic;CLK_8MHZ : in std_logic; -- accuracy of the 5µs efuse prog pulse depends on this 8MHz clockGPIO_IN : in std_logic_vector(3 downto 0); -- from software using gpio outputGPIO_OUT : out std_logic_vector(2 downto 0); -- to software using gpio inputJTAG_OUT : out std_logic_vector(3 downto 0) -- for monitoring jtag signals
); end component INT_PROG_CTL_US;
component JTAG_MONITOR is port ( JTAG_MON : in std_logic_vector(3 downto 0); -- tdi=0, tms=1, tck=2, tdo=3 EFUSE_PROG_PULSE : out std_logic ); end component JTAG_MONITOR;
begin base_mb_i: base_mb port map ( CLK_8MHZ => clk_8mhz, GPI_tri_i => GPI_tri_i, GPO_tri_o => GPO_tri_o, Vp_Vn_v_n => Vp_Vn_v_n, Vp_Vn_v_p => Vp_Vn_v_p, default_sysclk_300_clk_n => default_sysclk_300_clk_n, default_sysclk_300_clk_p => default_sysclk_300_clk_p, reset => reset, rs232_uart_rxd => rs232_uart_rxd, rs232_uart_txd => rs232_uart_txd );
INT_PROG_CTL_US_i : INT_PROG_CTL_US generic map ( TEST_MODE => FALSE ) port map ( RESET => reset, CLK_8MHZ => clk_8mhz, GPIO_IN => GPO_tri_o, GPIO_OUT => GPI_tri_i, JTAG_OUT => jtag_mon );
JTAG_MONITOR_i : JTAG_MONITOR port map ( JTAG_MON => jtag_mon, EFUSE_PROG_PULSE => EFUSE_PROG_PULSE );
end STRUCTURE; -- base_mb_wrapper
30. ローカル コンピューターにプロジェク トの VHDL ファ イル int_prog_ctl_us.vhd および jtag_monitor.vhd をダウンロード します。 詳細は、 「 リ ファレンス デザイン」 を参照してください。
31. 中央の [Sources] ビューで [Design Sources] を右ク リ ッ ク し、 [Add Sources] をク リ ッ ク して [Next] をク リ ッ ク します。[Add or create design sources] をオンして [Add Files] をク リ ッ ク します。 int_prog_ctl_us.vhd および jtag_monitor.vhd (手順 30 でダウンロード したファ イル) を見つけて追加し、 [Copy sources into project] をオンにして [Finish] をク リ ッ ク します (図 18)。
ハードウェア/ソフ トウェア開発の概要
XAPP1283 (v1.0) 2017 年 3 月 8 日 16japan.xilinx.com
32. ローカル コンピューターに制約ファイル xapp1283.xdc をダウンロード します (詳細は、 「 リ ファレンス デザイン」を参照)。 制約ファイルによって、 外部リセッ ト ピン入力と EFUSE_PROG_PULSE モニター出力ピンがセッ ト アップされます。
33. 中央の [Sources] ビューで [Design Sources] を右ク リ ッ ク し、 [Add Sources] を選択して [Add or create constraints] をオンにして [Next] をク リ ッ ク します。 その後、 [Add Files] をク リ ッ ク し、 xapp1283.xdc (手順 32 でダウンロード したファ イル) を見つけて追加して、 [Copy constraints files into project] をオンにして [Finish] をク リ ッ ク します (図 19)。
X-Ref Target - Figure 18
図 18:デザイン ソースの追加/作成
X18331-011117
ハードウェア/ソフ トウェア開発の概要
XAPP1283 (v1.0) 2017 年 3 月 8 日 17japan.xilinx.com
34. 左側にある Flow Navigator で、 [Implementation] セクシ ョ ンの下にある [Run Implementation]
をク リ ッ ク して、 インプリ メンテーシ ョ ンの前に合成を自動的に実行するために [Yes]
をク リ ッ ク します。
注記: このアプリ ケーシ ョ ン ノートではボードの DIP スイ ッチを使用していないため、 これらに関連する重要な合成/インプリ メンテーシ ョ ンの警告メ ッセージはすべて無視して問題あ り ません。
35. インプリ メンテーシ ョ ン完了後、 [Cancel] をク リ ッ ク します。
36. 最上位の Vivado ツール メニューで [File] → [Export] → [Export Hardware] をク リ ッ ク して、 [Include bitstream] はオフのままにします。 [Export to] を [Local to Project] 設定して、 [OK] をク リ ッ ク します (図 20)。
37. 最上位の Vivado ツール メニューで [File] → [Launch SDK] をク リ ッ ク します。 [Workspace] を [Local to Project] に設定して [OK] をク リ ッ ク します (図 21)。
X-Ref Target - Figure 19
図 19:制約の追加/作成
X-Ref Target - Figure 20
図 20:ハードウェアのエクスポート
X18332-011117
X18333-011117
ハードウェア/ソフ トウェア開発の概要
XAPP1283 (v1.0) 2017 年 3 月 8 日 18japan.xilinx.com
SDK アプリケーシ ョ ンの構築
このセクシ ョ ンでは、 3 つの異なる SDK アプリ ケーシ ョ ンを作成する手順を説明します。 Vivado ハードウェア セクシ ョンの手順 37 では、 MicroBlaze プロセッサ デザインをハード ウェア プラ ッ ト フォームと して使用して SDK ツールを起動しました。 SDK ソフ ト ウェア アプリ ケーシ ョ ンを作成するには、 次の手順に従ってください。
1. 最上位の SDK メニューで、 [File] → [New] → [Board Support Package] をク リ ッ ク します。
2. [Project name] に 「internal_prog_bsp」 と入力し [Use default location] をオンにして、 [Board Support Package OS] に [standalone] を選択して [Finish] をク リ ッ ク します (図 22)。
X-Ref Target - Figure 21
図 21: SDK の起動
X18334-011117
ハードウェア/ソフ トウェア開発の概要
XAPP1283 (v1.0) 2017 年 3 月 8 日 19japan.xilinx.com
3. [Board Support Package Settings] ダイアログ ボッ クスで、xilskey 6.0 (Xilinx Secure Key Library) またはそれ以降をオンにして [OK] をク リ ッ ク します (図 23)。
X-Ref Target - Figure 22
図 22:ボード サポート パッケージのプロジェク ト
X18335-011117
ハードウェア/ソフ トウェア開発の概要
XAPP1283 (v1.0) 2017 年 3 月 8 日 20japan.xilinx.com
4. [Project Explorer] で [system.mss] を選択し、 一番下の [Libraries] セクシ ョ ンで [Import Examples] をク リ ッ ク します。
5. [xilskey_bbram_ultrascale_example] および [xilskey_efuse_example] をオンにして、 [OK] をク リ ッ ク します (図 24)。
X-Ref Target - Figure 23
図 23:ボード サポート パッケージの設定
X18336-011117
ハードウェア/ソフ トウェア開発の概要
XAPP1283 (v1.0) 2017 年 3 月 8 日 21japan.xilinx.com
6. SDK の左側にある [Project Explorer] ビューで internal_prog_bsp_xilskey_bbram_ultrascale_example_1 を展開表示し、 src を展開して xilskey_bbram_ultrascale_input.h をダブルク リ ッ クする と、 へッダー ファ イルが SDK テキス ト エディ ターで開きます。
7. ヘッダー ファ イルをスクロール ダウンして XSK_BBRAM_AES_KEY の #define 文を見つけて、 文中のキー値を書き留めておきます。 変更した場合は保存します。 この例ではデフォルト値を使用できますが、 64 文字の 16 進数値を使用して独自の値を入力するこ と も可能です。 このプロジェク トでは、 難読化キー (XSK_BBRAM_OBFUSCATED_KEY) を使用しないため、 無視しても問題あ り ません (図 25)。
8. SDK の左側にある [Project Explorer] ビューで internal_prog_xilskey_efuse_example_1 を展開表示し、 src を展開して xilskey_input.h をダブルク リ ッ クする と、 ヘッダー ファ イルが SDK テキス ト エディ ターで開きます。
9. ヘッダー ファ イルをスクロール ダウンして XSK_EFUSEPS_DRIVER の #define 文を見つけて、 コ メン ト アウ ト します (これは Zynq® SoC デザインでは使用しない)。 変更を保存します (図 26)。
X-Ref Target - Figure 24
図 24: xilskey の例
X-Ref Target - Figure 25
図 25: XSK_BBRAM_AES_KEY 値
X-Ref Target - Figure 26
図 26: XSK_EFUSEPS_DRIVER
X18337-011117
X18338-011117
X18339-011117
ハードウェア/ソフ トウェア開発の概要
XAPP1283 (v1.0) 2017 年 3 月 8 日 22japan.xilinx.com
10. xilskey_input.h ファ イルをスク ロール表示して、 eFUSE プログラムの異なるオプシ ョ ン (コマンドや値) を確認します。 プログラ ミ ングの詳細は、 『Zynq-7000 UltraScale および Zynq UltraScale+ MPSoC AP SoC デバイス用 LibXil SKey ユーザー ガイ ド』 [参照 8] を参照ししてください。 この例では、 値は 32 ビッ トの USER_EFUSE レジスタにプログラムされます。
重要: eFUSE は OTP で、 一度プログラムした値は変更できません。 eFUSE はデバイスのコンフ ィギュレーシ ョ ンや動作に影響を与えるため、 プログラムする eFUSE を選択する際には細心の注意が必要です。
重要: KCU105 評価プラ ッ ト フォームの XCKU040-2FFVA1156E FPGA デバイスに対して、XSK_EFUSEPL_ENABLE_RSA_AUTH (PL RSA 認証 eFUSE ビッ ト ) を有効にしないでください。 RSA が有効になる と、UltraScale デバイスは最小のコンフ ィギュレーシ ョ ン幅とな り、 KCU105 評価ボードがこの要件を満たせなくな り ます。PL RSA 認証 eFUSE ビッ ト を有効にした場合、 このボードのデバイスはコンフ ィギュレーシ ョ ンできない状態とな り ます。
11. XSK_EFUSEPL_PROGRAM_USER_KEY の #define 文を見つけて、 32 ビッ トの USER_EFUSE レジスタをプログラムするために値を TRUE に設定します。 変更を保存します (図 27)。
12. XSK_EFUSEPL_READ_USER_KEY の #define 文を見つけて、 32 ビッ トの USER_EFUSE レジスタを読み出すために値を TRUE に設定します。 変更を保存します (図 28)。
13. 32 ビッ トの USER_EFUSE レジスタの値 XSK_EFUSEPL_USER_KEY (これは AES 複合化キーではない) の #define 文を見つけて、 8 文字の 16 進数値を使用して値を設定します。 0x00000000 以外のすべての 16 進数の組み合わせが有効です。 この値を書き留めておきます。 変更を保存します (図 29 のサンプル値を参照)。
14. 最上位の SDK メニューで、 [File] → [New] → [Application Project] をク リ ッ ク して、 [Project name] に 「hello_encrypted」と入力します。 [Board Support Package] では [Use existing] をオンにして [Next] をク リ ッ ク します。 [Hello World] テンプレート を選択して [Finish] をク リ ッ ク します (図 30 および 図 31)。
X-Ref Target - Figure 27
図 27: XSK_EFUSEPL_PROGRAM_USER_KEY の値
X-Ref Target - Figure 28
図 28: XSK_EFUSEPL_READ_USER_KEY の値
X-Ref Target - Figure 29
図 29: XSK_EFUSEPL_USER_KEY の値
X18340-011117
X18341-011117
X18342-011117
ハードウェア/ソフ トウェア開発の概要
XAPP1283 (v1.0) 2017 年 3 月 8 日 23japan.xilinx.com
X-Ref Target - Figure 30
図 30: アプリケーシ ョ ン プロジェク トの作成
X18343-011117
ハードウェア/ソフ トウェア開発の概要
XAPP1283 (v1.0) 2017 年 3 月 8 日 24japan.xilinx.com
15. 最上位の SDK メニューで、 [Project Clean] → [Clean all projects] をク リ ッ ク して [OK] をク リ ッ ク します。
16. 最上位の SDK メニューで、 [Project] を選択して [Build All] をク リ ッ ク します。 これによ り、 3 つのアプリ ケーシ ョ ン プロジェク トに必要なバイナリ ELF ファ イルが生成されます。
ビッ トス ト リームの生成
このセクシ ョ ンでは、 SDK で生成した 3 つの ELF ファ イルを Vivado ツールにインポート して、 関連する MicroBlaze プロセッサの命令とデータを各ビッ ト ス ト リームにマージします。 BBRAM AES キーのプログラ ミ ング用および 32 ビッ トのユーザー eFUSE レジスタ用のビッ ト ス ト リームは復号化され、 Hello アプリ ケーシ ョ ンは暗号化されます (C ヘッダー ファ イルからの同じキー値を使用)。 次の手順は、 これらのビッ ト ス ト リームの生成を示しています。
1. 構築済みの internal_prog_proj プロジェク トがロード された Vivado ツールの GUI に戻り ます。
2. 中央の [Sources] ビューで [Hierarchy] タブを選択します。
3. [Design Sources] を右ク リ ッ ク して、 [Add Sources] → [Add or create design sources] → [Next] → [Add Files] をク リ ッ ク します。
4. <project_path>/internal_prog_proj/internal_prog_proj.sdk を参照します。 こ こから次の各 ELF ファイルを指定して、 それらをプロジェク トへ追加します。
a. hello_encrypted/<Debug or Release>/hello_encrypted.elf
b. internal_prog_xilskey_bbram_ultrascale_example_1/<Debug or Release>/ internal_prog_bsp_xilskey_bbram_ultrascale_example_1.elf
X-Ref Target - Figure 31
図 31: アプリケーシ ョ ン プロジェク トのテンプレート
X18344-011117
ハードウェア/ソフ トウェア開発の概要
XAPP1283 (v1.0) 2017 年 3 月 8 日 25japan.xilinx.com
c. internal_prog_xilskey_efuse_example_1/<Debug or Release>/ internal_prog_bsp_xilskey_efuse_example_1.elf
5. [Copy sources into project] はオンにしないでください。
6. [Finish] をク リ ッ ク します (図 32)。
7. 3 つの ELF ファ イルが [Design Sources] の [ELF] の下に表示されます (図 33)。
X-Ref Target - Figure 32
図 32: ソースの追加
X18345-011117
ハードウェア/ソフ トウェア開発の概要
XAPP1283 (v1.0) 2017 年 3 月 8 日 26japan.xilinx.com
8. [Design Sources] の下の internal_prog_bsp_xilskey_bbram_ultrascale_example_1.elf を右ク リ ッ ク して、 [Associate ELF Files] をク リ ッ ク します。 [Design Sources] の [Associated ELF File] の下で を使用してファイルを参照し、internal_prog_bsp_xilskey_bbram_ultrascale_example_1.elf を選択して [OK] をク リ ッ ク し、 [OK] をク リ ッ ク します (図 34)。
9. Vivado GUI の左側にある Flow Navigator で、 [Program and Debug] の下にある [Generate Bitstream]
をク リ ッ ク します。
10. ビッ ト ス ト リーム生成が完了後、 [Cancel] をク リ ッ ク します。
11. ファ イル参照を使用して、 project_path>/ internal_prog_proj/internal_prog_proj.runs/impl_1 を指定します (デバイスにビッ ト ス ト リームをプログラムする場合、 このパスが再び使用される )。
X-Ref Target - Figure 33
図 33: ブロック デザイン
X-Ref Target - Figure 34
図 34: [Associate ELF Files] (BBRAM)
X18346-011117
X18347-011117
ハードウェア/ソフ トウェア開発の概要
XAPP1283 (v1.0) 2017 年 3 月 8 日 27japan.xilinx.com
12. base_mb_wrapper.bit を prog_bbram.bit に変更します。
13. [Design Sources] の下の internal_prog_bsp_xilskey_efuse_example_1.elf を右ク リ ッ ク して、 [Associate ELF Files] を選択し
ます。 [Design Sources] の [Associated ELF File] の下で を使用してファイルを参照し、
internal_prog_bsp_xilskey_efuse_example_1.elf を選択して [OK] をク リ ッ ク し、 再び [OK] をク リ ッ ク します (図 35)。
14. Vivado GUI の左側にある Flow Navigator で、 [Program and Debug] の下にある [Generate Bitstream]
をク リ ッ ク します。
15. ビッ ト ス ト リーム生成が完了後、 [Cancel] をク リ ッ ク します。
16. ファ イル参照を使用して、 <project_path>/ internal_prog_proj/internal_prog_proj.runs/impl_1 を指定します。
17. base_mb_wrapper.bit を prog_efuse.bit に変更します。
18. [Design Sources] の下の [hello_encrypted.elf] を右ク リ ッ ク して、 [Associate ELF Files] をク リ ッ ク します。[Design Sources] の [Associated ELF File] で を使用してファイルを参照し、 hello_encrypted.elf を選択して [OK] をク リ ッ ク し、 [OK] をク リ ッ ク します (図 36)。
X-Ref Target - Figure 35
図 35: [Associate ELF Files] (eFUSE)
X18349-011117
ハードウェア/ソフ トウェア開発の概要
XAPP1283 (v1.0) 2017 年 3 月 8 日 28japan.xilinx.com
19. Vivado GUI の左側にある Flow Navigator で、 [Implementation] の下にある [Open Implemented Design]
をク リ ッ ク します。
20. 表示されるすべての警告メ ッセージを無視して [OK] をク リ ッ ク します。
21. Vivado GUI の左側にある Flow Navigator で、 [Program and Debug] の下にある [Bitstream Settings]
を選択します。
22. [Configure additional bitstream settings] をク リ ッ ク し、 左側にある [Encryption] をク リ ッ ク して、 [Enable Bitstream Encryption] を [Yes] に設定し、 [Select location of encryption key] を [BBRAM] に設定します。
23. 「SDK アプリ ケーシ ョ ンの構築」 セクシ ョ ンから 256 ビッ トの AES キー (xilskey_bbram_ultrascale_input.h から XSK_BBRAM_AES_KEY 値) をコピーして、 [Starting AES encryption key (key0)] テキス ト ボッ クスに貼り付けます。
24. [Number of encryption blocks per key] を [256] に設定して [OK] をク リ ッ ク し、 [OK] をク リ ッ ク します (図 37)。 暗号化ブロ ッ クの詳細は、 『UltraScale アーキテクチャ コンフ ィギュレーシ ョ ン ユーザー ガイ ド』 (UG570) [参照 2] を参照して ください。
X-Ref Target - Figure 36
図 36: [Associate ELF Files] (hello)
X18350-011117
ハードウェア/ソフ トウェア開発の概要
XAPP1283 (v1.0) 2017 年 3 月 8 日 29japan.xilinx.com
25. Vivado GUI の左側にある Flow Navigator で、 [Program and Debug] の下にある [Generate Bitstream
] を選択して [Save] をク リ ッ ク します。 [Select an existing file] をオンにして、 ファ イル名を
xapp1283.xdc と設定して [OK] をク リ ッ ク し、 [Overwrite] をク リ ッ ク します (図 38 および図 39)。 これで、 制約ファイ
ルに暗号化オプシ ョ ンとキー値が追加されます。
X-Ref Target - Figure 37
図 37: [Edit Device Properties]
X-Ref Target - Figure 38
図 38: [Save Project]
X18353-011117
X18354-011117
ハードウェア/ソフ トウェア開発の概要
XAPP1283 (v1.0) 2017 年 3 月 8 日 30japan.xilinx.com
26. ビッ ト ス ト リーム生成が完了後、 [Cancel] をク リ ッ ク します。
27. ファ イル参照を使用して、<project_path>/ internal_prog_proj/internal_prog_proj.runs/impl_1 を指定します。
28. base_mb_wrapper.bit を hello_encrypted.bit に変更します。
検証
3 つのビッ ト ス ト リーム (prog_bbram.bit、 prog_efuse.bit、 hello_encrypted.bit) が生成された後、 KCU105 評価キッ ト上の Kintex UltraScale デバイスにこれらのファイルをロード して、 機能を検証できます。 次の手順は、 これらの各ビッ ト ス ト リームの検証プロセスを示しています。
1. KCU105 評価ボードに電源を投入し、 USB JTAG および USB UART ケーブルを使用してコンピューターへ接続します。 詳細は、 『KCU105 ク イ ッ クスタート ガイ ド』 (XTP391) [参照 16] および 『KCU105 ボード ユーザー ガイ ド』 (UG917) [参照 17] を参照して ください。
2. KCU105 評価ボードの DIP スイ ッチ SW15 を JTAG コンフ ィギュレーシ ョ ン モード用に次のよ うに設定します。
° ポジシ ョ ン 1 ~ 5 = OFF
° ポジシ ョ ン 6 = ON
3. Windows デバイス マネージャーを使用して、 MicroBlaze プロセッサの UART へ接続する COM ポート を判断します。USB-UART 接続で、 コンピューター上に 2 つの COM ポート (Standard/Enhancced) を確立します (Silicon Labs 社のシ リアル ド ラ イバーをシステムにインス トールする必要がある )。 Silicon Labs 社の Standard COM ポートに関連付けられたコンピューターの COM ポートは、 MicroBlaze プロセッサの UART へ接続します。
4. シ リ アル通信ターミナル プログラムを開始します。 シ リ アル ポートの設定は次のとおりです。
° COM Port = Silicon Labs Standard COM Port
° Baud rate: 115200
° Data: 8
° Parity: none
° Stop: none
° Flow control: none
5. KCU105 ボード上の PROGRAM_B スイ ッチ SW4 を押して、 放します。
重要: デザインには MASTER_JTAG プリ ミ ティブが含まれているため、 各ビッ ト ス ト リームのロードの間に PROGRAM_B スイ ッチを必ず押して ください。 これを行わない場合には、 外部 JTAG パスがブロ ッ ク されて、 コンピューターの USB JTAG 通信がエラーとな り ます。
6. Vivado GUI の左側にある Flow Navigator で、 [Program and Debug] の下にある [Hardware Manager] をク リ ッ ク し、 [Open Target] をク リ ッ ク して [Auto Connect] をク
リ ッ ク します。
7. 中央の [Hardware] ウ ィンド ウで、 xcku040_0 デバイスを右ク リ ッ ク して [Clear BBR Key] を選択し、 [OK] をク リ ッ クします (図 40)。
X-Ref Target - Figure 39
図 39: set_property
X18412-011117
ハードウェア/ソフ トウェア開発の概要
XAPP1283 (v1.0) 2017 年 3 月 8 日 31japan.xilinx.com
8. 中央の [Hardware] ウ ィンド ウで、 xcku040_0 デバイスを右ク リ ッ ク して [Program Device] をク リ ッ ク し、 [Bitstream file] を <path_to_bitstreams>/hello_encrypted.bit に設定して [Program] をク リ ッ ク します (図 41)。
9. [Bitstream file] を <path_to_bitstreams>/hello_encrypted.bit に設定して [Program] をク リ ッ ク します (図 42)。
X-Ref Target - Figure 40
図 40: [Hardware Manager] の BBR キー
X-Ref Target - Figure 41
図 41: [Hardware Manager] の [Program Device]
X18357-011117
X18358-011117
ハードウェア/ソフ トウェア開発の概要
XAPP1283 (v1.0) 2017 年 3 月 8 日 32japan.xilinx.com
10. ハードウェア マネージャーがデバイスのプログラムを試みますが、 BBRAM キーがないため、 コンフ ィギュレーシ ョ ンは完了しません。 ビッ ト ス ト リームのロードが終了後、 DONE LED (DS34) がオフになったこ とを確認します。
11. メ インの電源スイ ッチ SW1 を使用して、 ボードの電源を一旦切断して再度入れ直します。 そして、 KCU105 ボード上の PROGRAM_B スイ ッチ SW4 を押して、 放します。
12. 中央の [Hardware] ウ ィンド ウで、 xcku040_0 デバイスを右ク リ ッ ク して [Program Device] をク リ ッ ク し、 [Bitstream file] を <path_to_bitstreams>/prog_bbram.bit に設定して [Program] をク リ ッ ク します (図 43)。
13. ビッ ト ス ト リームのロードが完了する と、 DONE LED (DS34) が点灯します。 MASTER _JTAG はデザイン内にインスタンシエート されているため、 FPGA の外部 JTAG ポート をブロッ ク し、 Vivado Tcl コンソールで通信エラーが生じます。 これらのエラーは想定内であ り、 無視しても問題あ り ません。
14. BBRAM キーが正常にプログラムおよび検証されたこ とを示すメ ッセージがシ リ アル ターミナル ウ ィンド ウに表示されます (図 44)。
X-Ref Target - Figure 42
図 42: [Program Device] (hello_encrypted.bit)
X-Ref Target - Figure 43
図 43: [Program Device] (prog_bbram.bit)
X18359-011117
X18360-011117
ハードウェア/ソフ トウェア開発の概要
XAPP1283 (v1.0) 2017 年 3 月 8 日 33japan.xilinx.com
15. KCU105 ボード上の PROGRAM_B スイ ッチ SW4 を押して、 放します。
16. 中央の [Hardware] ウ ィンド ウで、 xcku040_0 デバイスを右ク リ ッ ク して [Program Device] をク リ ッ ク し、 [Bitstream file] を <path_to_bitstreams>/hello_encrypted.bit に設定して [Program] をク リ ッ ク します。
17. BBRAM キーは、 最後のビッ ト ス ト リームによって内部ロード されるため、 ビッ ト ス ト リームのロードが完了すると、 DONE LED (DS34) が点灯します (Vivado Tcl コンソールに表示されるエラーは無視)。
18. シ リ アル ターミナル ウ ィンド ウに、 最後のメ ッセージの後に Hello World という メ ッセージが表示されます。 これは、prog_bbram.bit ビッ ト ス ト リーム (すでにロード済み) が BBRAM キーの書き込みを完了したこ とを示します (図 45)。
19. KCU105 ボード上の PROGRAM_B スイ ッチ SW4 を押して、 放します。
20. シ リ アル ターミナル プログラムの画面をク リ アします。
21. オプシ ョ ンの 「JTAG_MONITOR モジュール」 をインスタンシエート している場合は、 オシレーター プローブを J53-2 (PACKAGE_PIN AM16) へ接続します。 これは、 実際の eFUSE プログラ ミ ング フェーズを示す EFUSE_PROG_PULSE 信号です。 0 から 1 へプログラムされる各 eFUSE ビッ トに対しては 5µs のパルスが確認されるはずです。
22. 中央の [Hardware] ウ ィンド ウで、 xcku040_0 デバイスを右ク リ ッ ク して [Program Device] をク リ ッ ク し、 [Bitstream file] を <path_to_bitstreams>/prog_efuse.bit に設定して、 [Program] をク リ ッ ク します。
注記: prog_efuse.bit ファ イルは暗号化されません。 キーはすでにデバイスにロード されているため、 BBRAM キーを使用して必要に応じて暗号化できます。
23. ビッ ト ス ト リームのロードが完了する と、 DONE LED (DS34) が点灯します (Vivado Tcl コンソールに表示されるエラーは無視)。
24. eFUSE キーが正常にプログラムおよび検証されたこ とを示すメ ッセージがシ リ アル ターミナル ウ ィンド ウに表示されます。 32 ビッ トの USER_EFUSE レジスタには、 XSK_EFUSEPL_USER_KEY 用のヘッダー ファ イルに以前に入力した値が保持されている必要があ り ます (図 46)。
X-Ref Target - Figure 44
図 44: 「Programmed and Verified BBRAM Key」 メ ッセージ
X-Ref Target - Figure 45
図 45: Hello World
X18361-011117
X18362-011117
まとめ
XAPP1283 (v1.0) 2017 年 3 月 8 日 34japan.xilinx.com
25. Vivado ハードウェア マネージャーを使用して、 eFUSE をさ らに検証できます。
26. KCU105 ボード上の PROGRAM_B スイ ッチ SW4 を押して、 放します。
27. 中央の [Hardware] ウ ィンド ウで、 xcku040_0 デバイスを右ク リ ッ ク して [Refresh Device] をク リ ッ ク します。
28. 中央の [Hardware] ウ ィンド ウで、 xcku040_0 デバイスを右ク リ ッ ク して [Hardware Device Properties] をク リ ッ ク します。
29. [Hardware Device Properties] ウ ィンド ウ ([Hardware] ウ ィンド ウのすぐ下) で、 [REGISTER] → [EFUSE] を展開表示します。 FUSE_USER フ ィールドには、 最近プログラムした eFUSE の値が含まれています (図 47)。
まとめ
このアプリ ケーシ ョ ン ノートでは、 UltraScale FPGA デバイスの BBRAM および eFUSE メモ リ を内部プログラムする手順を説明しました。 内部プログラムが可能であるこ とは、 特にセキュ リティを重視するアプリ ケーシ ョ ンに大きなメ リ ッ トをもたらします。 こ こで説明した方法では、 MASTER_JTAG プリ ミ ティブ、 MicroBlaze をベース と した既存のハードウェア サンプル デザイン、 ザイ リ ンクスの HDL モジュール、 ソフ ト ウェア ライブラ リ (XILSKEY)、 そして機能アプリ
X-Ref Target - Figure 46
図 46: プログラムされた eFUSE
X-Ref Target - Figure 47
図 47: FUSE_USER
X18363-011117
X18364-011117
リファレンス デザイン
XAPP1283 (v1.0) 2017 年 3 月 8 日 35japan.xilinx.com
ケーシ ョ ンの構築に使用するソフ ト ウェア サンプルを利用しています。 このアプリ ケーシ ョ ン ノートで説明した手順に従っています、 ペナルティを与えるための改ざんイベン ト駆動型モデルや、 セキュア リ ンクを使用する BBRAM AES キーのフ ィールド アップデート など、 さまざまな使用モデルに合わせてサンプル デザインを変更したり強化するこ とが可能です。
リファレンス デザイン
このアプリ ケーシ ョ ン ノートの リ ファレンス デザイン ファ イルは、 ザイ リ ンクスのウェブサイ トからダウンロードできます。
表 1 に、 リ ファレンス デザインの詳細を示します。
表 1: リファレンス デザインの詳細
パラメーター 説明
全般
開発者 Ed Peterson
ターゲッ ト デバイス UltraScale FPGA
ソース コードの提供 あ り
ソース コードの形式 VHDL
既存のザイ リ ンクス アプリ ケーシ ョ ン ノート / リ ファレンス デザイン、 またはサードパーティからデザインへのコード /IP の使用
なし
シミ ュレーシ ョ ン
論理シ ミ ュレーシ ョ ンの実施 なし
タイ ミ ング シ ミ ュレーシ ョ ンの実施 なし
論理シ ミ ュレーシ ョ ンおよびタイ ミ ング シ ミ ュレーシ ョンでのテス トベンチの利用
なし (ILA デバッガーを使用して検証)
テス ト ベンチの形式 N/A
使用したシ ミ ュレータ /バージ ョ ン N/A
SPICE/IBIS シ ミ ュレーシ ョ ンの実施 N/A
インプリ メンテーシ ョ ン
使用した合成ツール/バージ ョ ン Vivado design suite 2016.3
使用したインプリ メンテーシ ョ ン ツール/バージ ョ ン Vivado design suite 2016.3
スタティ ッ ク タイ ミ ング解析の実施 あ り
ハードウェア検証
ハードウェア検証の実施 あ り
使用したハード ウェア プラ ッ ト フォーム KCU105 評価ボード
参考資料
XAPP1283 (v1.0) 2017 年 3 月 8 日 36japan.xilinx.com
参考資料
注記:日本語版のバージ ョ ンは、 英語版よ り古い場合があ り ます。
1. MicroBlaze ソフ ト プロセッサ コア
2. 『UltraScale アーキテクチャ コンフ ィギュレーシ ョ ン ユーザー ガイ ド』 (UG570: 英語版、 日本語版)
3. 『Vivado Design Suite ユーザー ガイ ド : プログラムおよびデバッグ』 (UG908: 英語版、 日本語版)
4. 『Vivado Design Suite ユーザー ガイ ド : デザイン フローの概要』 (UG892: 英語版、 日本語版)
5. 『Vivado Design Suite ユーザー ガイ ド : Vivado IDE の使用』 (UG893: 英語版、 日本語版)
6. 『Vivado Design Suite ユーザー ガイ ド : IP インテグレーターを使用した IP サブシステムの設計』 (UG994: 英語版、 日本語版)
7. 『UltraScale および UltraScale+ FPGA での不正操作防止デザインの開発』 (XAPP1098)
8. 『Zynq-7000 UltraScale および Zynq UltraScale+ MPSoC AP SoC デバイス用 LibXil SKey ユーザー ガイ ド』 (UG643)
9. Kintex Ultrascale FPGA KCU105 評価キッ ト
10. Vivado Design Suite
11. ザイ リ ンクス ソフ ト ウェア開発キッ ト
12. Tera Term http://ttssh2.osdn.jp/index.html.en
13. Soft Error Mitigation コア
14. UltraScale デバイスのデータシート :
° 『UltraScale アーキテクチャおよび製品概要』 (DS890: 英語版、 日本語版)
° 『Kintex UltraScale FPGA データシート : DC 特性および AC スイ ッチ特性』 (DS892: 英語版、 日本語版)
° 『Virtex UltraScale FPGA データシート : DC 特性および AC スイ ッチ特性』 (DS893: 英語版、 日本語版)
15. Security Monitor IP コアの製品概要
16. 『KCU105 ク イ ッ クスタート ガイ ド』 (XTP391)
17. 『KCU105 ボード ユーザー ガイ ド』 (UG917)
18. 『Vivado Design Suite 7 シ リーズ FPGA および Zynq-7000 All Programmable SoC ライブラ リ ガイ ド』 (UG953: 英語版、日本語版)
改訂履歴
次の表に、 この文書の改訂履歴を示します。
法的通知本通知に基づいて貴殿または貴社 (本通知の被通知者が個人の場合には 「貴殿」、 法人その他の団体の場合には 「貴社」。 以下同じ ) に開
示される情報 (以下 「本情報」 といいます) は、 ザイ リ ンクスの製品を選択および使用するこ とのためにのみ提供されます。 適用される
法律が許容する最大限の範囲で、 (1) 本情報は 「現状有姿」、 およびすべて受領者の責任で (with all faults) とい う状態で提供され、 ザイ リ
ンクスは、 本通知をもって、 明示、 黙示、 法定を問わず (商品性、 非侵害、 特定目的適合性の保証を含みますがこれらに限られません)、すべての保証および条件を負わない (否認する ) ものと します。 また、 (2) ザイ リ ンクスは、 本情報 (貴殿または貴社による本情報の使用
を含む) に関係し、 起因し、 関連する、 いかなる種類 ・ 性質の損失または損害についても、 責任を負わない (契約上、 不法行為上 (過失の
場合を含む)、 その他のいかなる責任の法理によるかを問わない) ものと し、 当該損失または損害には、 直接、 間接、 特別、 付随的、 結
日付 バージョ ン 内容
2017 年 3 月 8 日 1.0 初版
法的通知
XAPP1283 (v1.0) 2017 年 3 月 8 日 37japan.xilinx.com
果的な損失または損害 (第三者が起こした行為の結果被った、 データ、 利益、 業務上の信用の損失、 その他あらゆる種類の損失や損害を
含みます) が含まれるものと し、 それは、 たとえ当該損害や損失が合理的に予見可能であったり、 ザイ リ ンクスがそれらの可能性につい
て助言を受けていた場合であったと しても同様です。 ザイ リ ンクスは、 本情報に含まれるいかなる誤り も訂正する義務を負わず、 本情
報または製品仕様のアップデート を貴殿または貴社に知らせる義務も負いません。 事前の書面による同意のない限り、 貴殿または貴社
は本情報を再生産、 変更、 頒布、 または公に展示してはなり ません。 一定の製品は、 ザイ リ ンクスの限定的保証の諸条件に従う こ と と
なるので、 http://japan.xilinx.com/legal.htm#tos で見られるザイ リ ンクスの販売条件を参照して ください。 IP コアは、 ザイ リ ンクスが貴殿
または貴社に付与したライセンスに含まれる保証と補助的条件に従う こ とにな り ます。 ザイ リ ンクスの製品は、 フェイルセーフと して、
または、 フェイルセーフの動作を要求するアプリ ケーシ ョ ンに使用するために、 設計されたり意図されたり していません。 そのよ うな
重大なアプリ ケーシ ョ ンにザイ リ ンクスの製品を使用する場合のリ スク と責任は、 貴殿または貴社が単独で負う ものです。
http://japan.xilinx.com/legal.htm#tos で見られるザイ リ ンクスの販売条件を参照してください。
自動車用のアプリ ケーシ ョ ンの免責条項
オートモーティブ製品 (製品番号に 「XA」 が含まれる ) は、 ISO 26262 自動車用機能安全規格に従った安全コンセプ ト または余剰性の機
能 ( 「セーフティ設計」 ) がない限り、 エアバッグの展開における使用または車両の制御に影響するアプリ ケーシ ョ ン ( 「セーフティ アプリ ケーシ ョ ン」 ) における使用は保証されていません。 顧客は、 製品を組み込むすべてのシステムについて、 その使用前または提供前
に安全を目的と して十分なテス ト を行う ものと します。 セーフティ設計なしにセーフティ アプリ ケーシ ョ ンで製品を使用する リ スクは
すべて顧客が負い、 製品責任の制限を規定する適用法令および規則にのみ従う ものと します。
© Copyright 2017 Xilinx, Inc. Xilinx、 Xilinx のロゴ、 Artix、 ISE、 Kintex、 Spartan、 Virtex、 Vivado、 Zynq、 およびこの文書に含まれるその
他の指定されたブランドは、 米国およびその他各国のザイ リ ンクス社の商標です。 すべてのその他の商標は、 それぞれの保有者に帰属
します。 ARM ™ は、 ARM の欧州連合その他の国における登録商標です。 すべてのその他の商標は、 それぞれの保有者に帰属します。
この資料に関するフ ィードバッ クおよびリ ンクなどの問題につきましては、 [email protected] まで、 または各ページの右下
にある [フ ィードバッ ク送信] ボタンをク リ ッ クする と表示されるフォームからお知らせください。 いただきましたご意見を参考に早急
に対応させていただきます。 なお、 このメール アドレスへのお問い合わせは受け付けており ません。 あらかじめご了承ください。