• 検索結果がありません。

MAX 10 JTAG のセキュアデザインの例

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 セキュアモードではないこと を意味します。