3 MAX 10 FPGA コンフィグレーション・デザインのガイドライン
3.9 MAX 10 JTAG のセキュアデザインの例
このデザイン例では、JTAGの
LOCK
とUNLOCK
命令を実行するための、内部JTAG WYSIWYG アト ムのインスタンス化および Quartus Prime ソフトウェアで実現されるユーザーロジックの例について 説明します。このデザイン例は、JTAG セキュアモードが有効にされている MAX 10 デバイスを対象と しています。関連情報
• 22ページの 使用できるJTAG 命令
• 22ページの コンフィグレーション・フラッシュメモリーへのアクセス許可
• JTAG Secure Design Example
3.9.1 内部 JTAG インターフェイス
MAX 10 デバイスでは、JTAG コントロール・ブロックにアクセスするインターフェイスは2 つあります。
• 外部JTAG インターフェイス—物理的なJTAG ピン、
TCK
、TDI
、TDO
およびTMS
からJTAG コ ントロール・ブロックに接続する• 内部JTAG インターフェイス—内部FPGA コアファブリックからJTAG コントロール・ブロックに
接続する
JTAG コントロール・ブロックにアクセスするために、外部または内部JTAG インターフェイスのどちら
か一度に1 つのみ使用できます。外部JTAG インターフェイスは通常、プログラミング・ケーブルを使用
したJTAG コンフィグレーションに使用されます。内部JTAG インターフェイスにアクセスするために
は、 Quartus Prime ソフトウェアのデザインにWYSIWYG アトムを含める必要があります。
図 -15: 内部および外部JTAG インターフェイスの接続
JTAG Control Block
TDI TMS TCK TDO
Core Interface Internal JTAG
TDICORE TMSCORE TCKCORE TDOCORE CORECTL
I/O Interface External JTAG TDI
TMS TCK TDO
TDI TMS TCK TDO TDI
TMS TCK TDO
注意: MAX 10 デバイスの内部 JTAGが正しく機能するために、JTAG WYSIWYG アトム内でのJTAG 信号
が4 つ (
TCK
、TDI
、TMS
およびTDO
) とも外部に配線される必要があります。 Quartus Prime ソフ トウェアは、専用JTAG ピンの対応するポートを自動的に割り当てます。3.9.2 内部 JTAG ブロックアクセスの WYSIWYG アトム
以下の例は、 MAX 10 デバイスでWYSIWYG アトムの入力および出力ポートがどのように定義されて いるかを示します。
fiftyfivenm_jtag <name>
(
.tms(), .tck(), .tdi(), .tdoutap(), .tdouser(), .tdicore(), .tmscore(), .tckcore(), .corectl(), .tdo(), .tmsutap(), .tckutap(), .tdiutap(), .shiftuser(), .clkdruser(), .updateuser(), .runidleuser(), .usr1user(), .tdocore(), .ntdopinena() );
表 32. ポートの説明
ポート 入力/出力 機能
<name> — MAX 10 JTAG WYSIWYG アトムの識別子で、Verilog HDL、VHDL、およびAHDL など特定の記述言語に応じて適正な識別名を表します。
.corectl() 入力 JTAG コントロール・ブロックへのアクティブHigh 入力は、コアインターフェイスから
内部JTAG アクセスを有効にします。コンフィグレーション後にFPGA がユーザーモー ドに入る時、このポートはデフォルトでLow になっています。このポートをロジック High にすると、内部JTAG インターフェイスが有効になり(同時に外部JTAG インター フェイスが無効になる)、ポートをロジックLow にすると、内部JTAG インターフェイス が無効になります(同時に外部JTAG インターフェイスが有効になる)。
.tckcore() 入力 tck コア信号
.tdicore() 入力 tdiコア信号
.tmscore() 入力 tms コア信号
.tdocore() 出力 tdo コア信号
.tck() 入力 tck ピン信号
.tdi() 入力 tdi ピン信号
.tms() 入力 tms ピン信号
.tdo() 出力 tdo ピン信号
.clkdruser()
入力/出力 これらのポートは、内部JTAG インターフェイスを介してJTAG セキュアモードを有効 にするために使用されていないため、未接続のままにできます。
.runidleuser() .shiftuser() .tckutap() .tdiutap() .tdouser() .tdoutap() .tmsutap() .updateuser() .usr1user() .ntdopinena()
3.9.3 LOCK および UNLOCK JTAG 命令の実行
JTAG セキュアモードが有効にされている状態で、 MAX 10 デバイスにこのリファレンス・デザインをコ ンフィグレーションすると、デバイスがパワーアップおよびコンフィグレーション後にはJTAG セキュア モードになります。
JTAG セキュアモードを無効にするために、ユーザーロジックの
start_unlock
ポートをトリガーして、
UNLOCK
JTAG 命令を発行させます。UNLOCK
JTAG 命令が発行されたら、デバイスはJTAG セキ ュアモードを終了します。JTAG セキュアモードが無効になっている時に、 MAX 10 デバイスの内部フ ラッシュをフルチップ消去を行うことにより、JTAG セキュアモードを永久に無効にすることができます。ユーサーロジックの
start_lock
ポートは、LOCK
JTAG 命令の実行をトリガーします。この命令の 実行により、 MAX 10 デバイスでJTAG セキュアモードが有効になります。図 -16: LOCK またはUNLOCK JTAG 命令の実行 スタート
Enable the Internal JTAG Interface, corectl = 1
JTAG 命令を TDI
Core にシフトする
start_unlock or start_lock
= 1?
no
yes
命令長の終わり? no
yes
TMS Core の制御を通して TAP Controller State Machine をRESET State からSHIFT_IR State に移動する
TAP Controller State Machine を SHIFT_IR State から IDLE State に移動する
完了
表 33. ユーザーロジックの入力および出力ポート
ポート 入力/出力 機能
clk_in 入力 ユーザーロジックのクロックソース。ユーザーロジックのfMAX は、タイミングクロージャー
解析に依存します。fMAX を決定するには、タイミング制約を適用し、パスにタイミング解析 を実行する必要があります。
start_lock 入力 内部JTAG インターフェイスにLOCK JTAG 命令の実行をトリガーします。トリガーするに は、パルス信号が1クロックサイクル以上High の状態が必要です。
start_unlock 入力 内部JTAG インターフェイスにUNLOCK JTAG 命令の実行をトリガーします。トリガーす るには、パルス信号が1 クロックサイクル以上High の状態が必要です。
jtag_core_en_out 出力 JTAG WYSIWYG アトムへの出力。このポートは、内部JTAG インターフェイスを有効に するために、JTAG WYSIWYG アトムのcorectl ポートに接続されています。
tck_out 出力 JTAG WYSIWYG アトムへの出力。このポートはJTAG WYSIWYG アトムの
tck_core ポートに接続されています。
tdi_out 出力 JTAG WYSIWYG アトムへの出力。このポートはJTAG WYSIWYG アトムの tdi_core ポートに接続されています。
tms_out 出力 JTAG WYSIWYG アトムへの出力。このポートはJTAG WYSIWYG アトムの
tms_core ポートに接続されています。
indicator 出力 この出力ピンのロジックHigh は、LOCK またはUNLOCK JTAG 命令の実行が完了した ことを示しています。
3.9.4 JTAG セキュアモードの検証
必須ではないJTAG 命令を実行することにより、デバイスが正しくJTAG セキュアモードに入ったか、ま
たはJTAG セキュアモードを終了したかを検証することができます。
注意: デバイスがJTAG セキュアモードにある際、外部JTAG のロックを解除するためには、内部JTAG イン ターフェイスをインスタンス化する必要があります。
JTAG セキュアオプションを有効にすると、 MAX 10 デバイスはパワーアップ後にJTAG セキュアモー
ドに入ります。デザイン例でJTAG セキュア機能を検証するために、以下の手順を実行します。
1. JTAG セキュアモードが有効にされている状態で、リファレンス・デザインの
.pof
ファイルをデバイスに設定します。電源の再投入後に、デバイスはJTAG セキュアモードにあるべきです。
2. デバイスが正しくユーザーモードに入ったかを確認するために、以下のいずれかを観察します。
—
CONFDONE
ピンがHigh になる—
counter_output
ピンがトグルを開始する3. デバイスをリコンフィグレーションするために、外部JTAG ピンを使用して、
PULSE_NCONFIG
JTAG 命令を発行します。デザイン例に添付された
pulse_ncfg.jam
ファイルを使用することができます。この
pulse_ncfg.jam
ファイルを、quartus_jli またはJAM player を通じて実 行できます。以下のいずれかを観察することによって、デバイスはリコンフィグレーションしていない ことを確認できます。—
CONFDONE
ピンがHigh にとどまる—
counter_output
ピンがトグルを継続するリコンフィグレーションが成功しないということは、デバイスが現在JTAG セキュアモードであるこ とを意味します。
4. ユーザーロジックの
start_unlock
ポートをロジックHigh にして、UNLOCK
JTAG 命令を実 行します。UNLOCK
JTAG 命令の完了後に、インジケーター・ポートがHigh になります。5. デバイスをリコンフィグレーションするために、外部JTAG ピンを使用して、
PULSE_NCONFIG
JTAG 命令を発行します。以下のいずれかを観察することによって、デバイスが正しくリコンフィグレ ーションしたことを確認できます。—
CONFDONE
ピンがLow になる—
counter_output
ピンがトグルを停止するコンフィグレーションが成功したということは、デバイスが現在JTAG セキュアモードではないこと を意味します。