仮想JTAG(altera_virtual_jtag)IP コアのユーザーガイド
アルテラ仮想JTAG(altera_virtual_jtag)IP コアのユーザーガイド
概要
仮想JTAG IP コアはOn-Chip Debugging Tool Suite の1 つの機能であり、このIP コアを使用すると、デバイス上のI/O ピンを使用せずにJTAG ポートを介してデザインをモニターし、更新、およびデバッグするための独自のソフトウェア・ソリューションを作成することができます。Quartus® II ソフトウェアまたはJTAG 制御ホストは、このIP コアの各インスタンスを一意のインデックスで識別します。各IP コアのインスタンスは、デバイスのJTAG 動作に似たフローで機能します。このインターフェイスを使用するロジックは、インスタンスがアクティブになった時に、PLD デバイスの代わりにJTAG チェーンの連続性を維持する必要があります。
仮想JTAG IP コアを使用すると、効率的で高速で生産的なデバッグ・ソリューションを設計することができます。デバッグ・ソリューションは、他のロジック・アナライザーを使用してデザインをデバッグする評価テストの一部、またはエンベデッド・ロジック・アナライザーを実行するホストを持たない製品テストの一部として使用できます。デバッグ機能に加えて、仮想JTAG IP コアを使用すると、デバイスのJTAG ポートを介してシングルチャネルまたは複数のシリアルチャネルを提供することができます。アプリケーションでシリアルチャネルを使用して、データをキャプチャ-したり、ロジックのさまざまな部分にデータを強制的に送信したりすることができます。
On-Chip Debugging Tool Suite の各機能は、オンチップリソースを活用して、テスト中のロジックに対するリアルタイムの可視化を実現します。ランタイム時に、各ツールはJTAG 接続を共有し、収集されたテストデータをQuartus II ソフトウェアに送信して解析します。ツールセットは、一連のGUI、IP コア、およびTcl API(Application Programming Interface)で構成されています。GUI は、テスト信号のコンフィグレーションと、デバッグ中にキャプチャ-されたデータの視覚化を提供します。Tcl スクリプト・インターフェイスは、ランタイム時に自動化を提供します。
仮想JTAG IP コアにより、FPGA コアロジックにルーティングされたJTAG 制御信号への直接なアクセスが可能となり、JTAG リソースを精細に制御でき、JTAG リソースを汎用シリアル通信インターフェイスとして開くことができます。ランタイム時にデバイスにトランザクションを送受信するための完全なTcl API が用意されています。JTAG ピンはランタイム時に容易にアクセスできるため、このIP コアによりデバイス内部のJTAG スキャンチェーンを簡単にカスタマイズでき、デバッグ・アプリケーションの作成に使用できます。
デバッグ・アプリケーションの例には、アナライザー・インスタンスに接続されたテスト信号を実行することによりSignalTap® II Logic Analyzer によって評価される誘発トリガー条件、デザインの試作段階でのフロント・パネル・インターフェイスの置換、テスト中のデザインを実行するためのテストベクトルの挿入などがあります。
このインフラストラクチャーは、SignalTap II Logic Analyzer などのアルテラ固有のアプリケーションおよびユーザー・アプリケーションで使用するためのJTAG プロトコルの拡張です。
IP コアのインストールとライセンス取得
ソフトウェアはデフォルトでIP コアを以下のロケーションにインストールします。
ロケーション | ソフトウェア | プラットフォーム |
---|---|---|
<drive>:\intelFPGA_pro\quartus\ip\altera | Windows | |
<drive>:\intelFPGA\quartus\ip\altera | Windows | |
<home directory>:/intelFPGA_pro/quartus/ip/altera | Linux | |
<home directory>:/intelFPGA/quartus/ip/altera | Linux |
On-Chip Debugging Tool Suite
ツール |
概要 |
典型的な使用状況 |
---|---|---|
SignalTap II Logic Analyzer |
このツールは、FPGA リソースを使用してテストノードをサンプリングし、情報をQuartus II ソフトウェアに出力して表示および分析します。 |
予備のオンチップメモリーがあり、ハードウェアで動作するデザインの機能検証が必要な場合に使用します。 |
SignalProbe |
このツールは、最後の配置配線からの結果を保存しながら、内部信号をI/O ピンにインクリメンタルにルーティングします。 |
予備のI/O ピンがあり、外部ロジック・アナライザーまたはオシロスコープのいずれかを使用して、少数の制御ピンの動作をチェックする必要がある場合に使用します。 |
Logic Analyzer Interface (LAI) |
このツールは、比較的大量の信号を少数の予備のI/O ピンに多重化します。 LAI を使用すると、JTAG 接続を介してI/O ピンに切り替える信号を選択できます。 |
オンチップメモリーが限られており、外部ロジック・アナライザーを使用して検証したい大量の内部データバスがある場合に使用します。Tektronics やAgilent などのロジック・アナライザーのベンダーは、使いやすさを向上させるためにツールとの統合を提供しています。 |
In-System Memory Content Editor |
このツールは、オンチップメモリーを表示し、編集することを可能にします。 |
Nios® II プロセッサー・アプリケーションの命令キャッシュまたはデータキャッシュの内容を表示および編集する必要がある場合に使用します。 |
In-System Sources and Probes |
このツールは、JTAG インタフェースを使用して、内部ノードとの間で論理値をドライブおよびサンプリングする方法を提供します。 |
FPGA デザイン用の仮想ボタンを備えたフロントパネルをプロトタイプ化する必要がある場合に使用します。 |
Virtual JTAG Interface |
このツールは、独自のカスタム・アプリケーションを開発できるようにJTAG インターフェイスを開きます。 |
大量のテストベクトルを生成し、JTAG ポート経由でデバイスに送信して、ハードウェアで実行されているデザインを機能的に検証したい場合に使用します。 |
仮想JTAG IP コアのアプリケーション
ハブは、単一のJTAG リソースを共有する複数のアプリケーション間で自動的にアービトレーションします。したがって、IP コアをSignalTap II Logic Analyzer などのオンチップ・デバッグ・アプリケーションと併用することで、デバッグの可視性を高めることができます。また、IP コアを使用して、以下のアプリケーションを含め、ランタイム時にテスト中のデザインからの応答を求める簡単なスティミュラス・パターンを提供することもできます。
- ロジックの内部部品の値を診断、サンプリング、および更新する。 このIP コアを使用すると、ハードウェアデバイスの内部カウンターおよびステートマシンの値を簡単にサンプリングして更新できる
- ハードウェアをデバッグするTcl コマンドを使用して独自のカスタム・ソフトウェア・デバッグIP を構築する。このIP は、デザイン内の仮想JTAG IP コアのインスタンスと通信する
- 仮想入力と出力を実現するようにデザインを構築する
- マイクロプロセッサーがJTAG チェーンを制御するシステム向けにデバッグ・ソリューションを構築する場合は、JTAG 制御がマイクロプロセッサーに搭載されている必要があるため、SignalTap II Logic Analyzer は使用できない。Tcl コマンドからダイレクト・マイクロプロセッサーへのJTAG ポート用の低レベルのコントロールを使用することにより、デバイスコア内の仮想JTAG IP コアと通信できる
JTAG プロトコル
バウンダリー・スキャン・テスト中、ソフトウェアはテストデータをシリアル・インターフェイス経由で選択IC のBSC にシフトアウトします。このテストデータは、影響を受けるBSC に接続されたピンに既知のパターンを強制します。PCB トレースのもう一方の端にある隣接するIC がJTAG に準拠している場合、隣接IC のBSC はテストパターンをサンプリングし、BSC を解析のためにソフトウェアに戻します。以下の図は、バウンダリー・スキャン・テストの概念を示しています。
JTAG インターフェイスは、あらゆる情報をデバイスに移行し、フットプリントを低く抑え、すべてのアルテラのデバイスで利用できるため、汎用通信インターフェイスと見なされます。バウンダリー・スキャン・アプリケーションに加えて、アルテラのデバイスは、Quartus II ソフトウェアで利用可能なデバイス・コンフィグレーションやオンチップ・デバッグ機能などの他のアプリケーションにJTAG ポートを使用します。
JTAG 回路のアーキテクチャー
JTAG 回路の基本アーキテクチャーは、以下のコンポーネントで構成されています。
- DRs(Data Registers)のセット
- IR(Instruction Register)
- データをアービトレーションするステートマシン(TAP(Test Access Port)コントローラーと呼ばれる)
- 以下のピンで構成された4 または5 ピン・シリアル・インターフェイス
- データをIR およびDR シフトレジスター・チェーンにシフトするために使用されるTDI(Test data in)
- IR およびDR シフトレジスター・チェーンからデータをシフトするために使用されるTDO(Test data out)
- TAP コントローラーへの入力として使用されるTMS(Test mode select)
- JTAG 回路のクロックソースとして使用されるTCK
- TRST はTAP コントローラーをリセットする。 これは、規格1149.1 で定義されたオプションの入力ピン
TRST ピンは、Cyclone デバイスファミリーには存在しません。
DR のバンクは、JTAG 回路の主要データパスであり、すべてのJTAG トランザクションのペイロードデータを伝送します。各DR チェーンは、特定の機能を果たすために専用されています。プライマリーのDR チェーンはバウンダリー・スキャン・セルで形成されています。他のDR チェーンは識別のために使用され、バウンダリー・スキャン・テスト中にIC をバイパスするか、またはIC ベンダーによって定義された機能を備えたレジスターチェーンのカスタムセットをバイパスします。アルテラは、オンチップ・デバッグ・アプリケーションなどのJTAG チェーンを通信リソースとして必要とするユーザ定義のIP を備えた2 つのDR チェーンを使用します。特に、仮想JTAG IP コアは、2 つのDR チェーンをユーザ定義のカスタム・アプリケーションに拡張することを可能にします。
命令レジスター(IR)を使用して、TDI とTDO が接続する必要があるデータレジスター(DR)のバンクを選択します。このレジスターは、データレジスターのバンクのためのアドレスレジスターとして機能します。各IR 命令は、特定のDR チェーンにマッピングされます。
JTAG 回路(IR およびDR レジスターチェーン)の一部であるすべてのシフトレジスターは、2 種類のレジスターで構成されています。それは、TDI ピンからの新しいシリアルシフト入力をキャプチャするシフトレジスターと、各シフトレジスターに接続し、シフト時に現在の入力を保持するパラレル・ホールド・レジスターです。パラレル・ホールド・レジスターは、新しいデータがシフトされた時の出力の安定性を保証します。
以下の図は、JTAG 回路の機能モデルを示しています。TRST ピンは規格1149.1 のオプションピンで、Cyclone デバイスでは使用できません。TAP コントローラーはハードコントローラーであり、プログラム可能なリソースを使用して作成されるものではありません。TAP コントローラーの主な機能は、テストデータをIR レジスターチェーンとDR レジスターチェーンの間でルーティングすることです。
システムレベルのデバッグ・インフラストラクチャー
JTAG リソースは複数のオンチップ・アプリケーション間で共有されるため、アービトレーション・スキームは、異なるアプリケーション間でUSER0 とUSER1 のスキャンチェーンがどのように割り当てられるかを定義する必要があります。SLD(システム・レベル・デバッグ)インフラストラクチャーは、JTAG リソースを使用するすべてのプログラマブル・ロジック・アプリケーションのシグナル・コンベンションとアービトレーション・ロジックを定義します。以下の図は、SLD インフラストラクチャー・アーキテクチャーを示しています。
SLD インフラストラクチャーのトランザクション・モデル
SLD インフラストラクチャーは、JTAG プロトコルによって定義されたIR/DR パラダイムを模倣しています。各アプリケーションは命令レジスターと、JTAG 標準の命令レジスターおよびデータレジスターと同様に動作するデータレジスターのセットを実装します。各アプリケーションによって実装された命令レジスターおよびデータレジスターのバンクは、USER1 とUSER0 データレジスター・チェーンのサブセットであることに注意してください。SLD インフラストラクチャーは、JTAG TAP コントローラー、SLD ハブ、およびSLD ノードの3 つのサブシステムで構成されています。
SLD ハブは、各SLD ノード間のTDI ピン接続をルーティングするアービターとして機能し、JTAG TAP コントローラー・ステートマシンをミラーリングするステートマシンです。
SLD ノードは、エンド・アプリケーションのための通信チャネルを表します。SignalTap II Logic Analyzer などのJTAG 通信リソースを必要とするIP の各インスタンスは、SLD ハブへのSLD ノード・インターフェイスの形で独自の通信チャネルを持ちます。各SLD ノード・インスタンスには、独自の命令レジスターとDR チェーンのバンクがあります。デバイスで使用可能なリソースに応じて、最大255 のSLD ノードをインスタンス化できます。
ともに、sld_hub ノードとSLD ノードは、JTAG プロトコル内で仮想JTAG スキャンチェーンを形成します。各SLD ノード・インスタンスの命令レジスターとDR トランザクションの両方が、JTAG プロトコルの標準的なDR スキャンシフト内にカプセル化されているという意味では仮想的です。
SLD ノードの命令レジスターとデータレジスターは、USER1 とUSER0 のデータレジスターのサブセットです。SLD ノードIR/DR レジスターセットはJTAG プロトコルのIR/DR レジスターセットの一部ではないため、SLD ノード命令レジスター(IR)およびデータレジスター(DR)チェーンはVIR(Virtual IR)およびVDR(Virtual DR)チェーンとして知られています。以下の図は、SLD インフラストラクチャーのトランザクション・モデルを示しています。
SLD ハブ有限状態機械
VIR とVDR へのシフトはすべてDR シフト・トランザクション内にカプセル化されているため、VIR とVDR のデータパスを選択するには追加の制御信号が必要です。SLD ハブは、USER1 コマンドを使用してVIR データパスを選択し、USER0 コマンドを使用してVDR データパスを選択します。
イネーブル信号のバンクを含むこの状態情報は、各SLD ノードに転送されます。SLD ノードは、sld_hub によって提供される制御状態に従って、VIR およびVDR への更新を実行します。SLD ノードは、TDI ピンとTDO ピンの間の連続性を維持する責任があります。
以下の図は、SLD ハブ有限状態機械を示しています。 アプリケーション設計に使用できるダイレクトステート信号はありません。
仮想JTAG インターフェイスの概要
仮想JTAG IP コアは、実際のJTAG ポートを反映するポート・インターフェイスを提供します。このインターフェイスには、JTAG ポートピン、すべてのJTAG 状態のワンホットデコード出力、およびすべての仮想JTAG 状態のワンホットデコード出力が含まれます。仮想JTAG 状態は、SLD ハブ有限状態機械からデコードされた状態です。ir_in ポートとir_out ポートは、VIR との間でのパラレル入出力です。VIR ポートは、アクティブなVDR データパスを選択するために使用されます。JTAG 状態とTMS 出力ポートは、デバッグ目的でのみ提供されます。仮想 JTAG、TDI、TDO、およびIR 信号のみがIP コアの機能要素です。パラメーター・エディターを使用してこのIP コアを設定する時、TMS とデコードされたJTAG 状態を非表示にすることができます。
以下の図は、仮想JTAG IP コアの入力ポートと出力ポートを示しています。 JTAG TAP コントローラー出力とTMS 信号は、情報提供のみを目的として使用されます。これらの信号は、パラメーター・エディターのCreate primitive JTAG state signal ports オプションを使用して公開することができます。
入力ポート
ポート名 | 必須 | 概要 | 備考 |
---|---|---|---|
tdo | はい | デバイスのTDO ピンにライトします。 | |
ir_out[ ] | いいえ | 仮想JTAG 命令レジスター出力。 この値は、virtual_state_cir がHigh の度にキャプチャーされます。 | 入力ポート[SLD_IR_WIDTH-1..0] ワイド。 このバスの幅は、SLD_IR_WIDTH パラメーターで指定します。 |
出力ポート
ポート名 | 必須 | 概要 | 備考 |
---|---|---|---|
tck | はい | JTAG のテストクロックです。 | デバイスピンTCK に直接接続します。 すべての仮想JTAG インスタンス間で共有されます。 |
tdi | はい | デバイス上のTDI 入力データ。 virtual_state_sdr がHigh の時に使用されます。 | すべての仮想JTAG インスタンス間で共有されます。 |
ir_in[ ] | いいえ | 仮想JTAG 命令レジスターデータ。 この値は使用可能で、 virtual_state_uir がHigh の時にラッチされます。 | 出力ポート[SLD_IR_WIDTH-1..0] ワイド。 このバスの幅は、SLD_IR_WIDTH パラメーターで指定します。 |
ポート名 | 必須 | 概要 | 備考 |
---|---|---|---|
virtual_state_cdr | いいえ |
仮想JTAG がCapture_DR 状態にあることを示します。 |
|
virtual_state_sdr | はい |
仮想JTAG がShift_DR 状態にあることを示します。 |
この状態では、このインスタンスはこのデバイスのJTAG チェーンを確立するために必要です。 |
virtual_state_e1dr | いいえ |
仮想JTAG がExit1_DR 状態にあることを示します。 |
|
virtual_state pdr | いいえ |
仮想JTAG がPause_DR 状態にあることを示します。 |
Quartus II ソフトウェアはTcl コマンドを使用してこの状態を循環しません。 |
virtual_state_e2dr | いいえ |
仮想JTAG がExit2_DR 状態にあることを示します。 |
Quartus II ソフトウェアはTcl コマンドを使用してこの状態を循環しません。 |
virtual_state_udr | いいえ |
仮想JTAG がUpdate_DR 状態にあることを示します。 |
|
virtual_state_cir | いいえ |
仮想JTAG がCapture_IR 状態にあることを示します。 |
|
virtual_state_uir | いいえ |
仮想JTAG がUpdate_IR 状態にあることを示します。 |
ポート名 | 必須 | 概要 | 備考 |
---|---|---|---|
jtag_state_tlr | いいえ |
デバイスのJTAG コントローラーがTest_Logic_Reset 状態にあることを示します。 |
すべての仮想JTAG インスタンス間で共有されます。 |
jtag_state_rti | いいえ |
デバイスのJTAG コントローラーがRun_Test/Idle 状態にあることを示します。 |
すべての仮想JTAG インスタンス間で共有されます。 |
jtag_state_sdrs | いいえ |
デバイスのJTAG コントローラーがSelect_DR_Scan 状態にあることを示します。 |
すべての仮想JTAG インスタンス間で共有されます。 |
jtag_state_cdr | いいえ |
デバイスのJTAG コントローラーがCapture_DR 状態にあることを示します。 |
すべての仮想JTAG インスタンス間で共有されます。 |
jtag_state_sdr | いいえ |
デバイスのJTAG コントローラーがShift_DR 状態にあることを示します。 |
すべての仮想JTAG インスタンス間で共有されます。 |
jtag_state_e1dr | いいえ |
デバイスのJTAG コントローラーがExit1_DR 状態にあることを示します。 |
すべての仮想JTAG インスタンス間で共有されます。 |
jtag_state_pdr | いいえ |
デバイスのJTAG コントローラーがPause_DR 状態にあることを示します。 |
すべての仮想JTAG インスタンス間で共有されます。 |
jtag_state_e2dr | いいえ |
デバイスのJTAG コントローラーがExit2_DR 状態にあることを示します。 |
すべての仮想JTAG インスタンス間で共有されます。 |
jtag_state_udr | いいえ |
デバイスのJTAG コントローラーがUpdate_DR 状態にあることを示します。 |
すべての仮想JTAG インスタンス間で共有されます。 |
jtag_state_sirs | いいえ |
デバイスのJTAG コントローラーがSelect_IR_Scan 状態にあることを示します。 |
すべての仮想JTAG インスタンス間で共有されます。 |
jtag_state_cir | いいえ |
デバイスのJTAG コントローラーがCapture_IR 状態にあることを示します。 |
すべての仮想JTAG インスタンス間で共有されます。 |
jtag_state_sir | いいえ |
デバイスのJTAG コントローラーがShift_IR 状態にあることを示します。 |
すべての仮想JTAG インスタンス間で共有されます。 |
jtag_state_e1ir | いいえ |
デバイスのJTAG コントローラーがExit1_IR 状態にあることを示します。 |
すべての仮想JTAG インスタンス間で共有されます。 |
jtag_state_pir | いいえ |
デバイスのJTAG コントローラーがPause_IR 状態にあることを示します。 |
すべての仮想JTAG インスタンス間で共有されます。 |
jtag_state_e2ir | いいえ |
デバイスのJTAG コントローラーがExit2_IR 状態にあることを示します。 |
すべての仮想JTAG インスタンス間で共有されます。 |
jtag_state_uir |
デバイスのJTAG コントローラーがUpdate_IR 状態にあることを示します。 |
すべての仮想JTAG インスタンス間で共有されます。 |
|
tms |
デバイスのTMS 入力ピンです。 |
すべての仮想JTAG インスタンス間で共有されます。 |
パラメーター
パラメーター | 型 | 必須 | 概要 |
---|---|---|---|
SLD_AUTO_INSTANCE_INDEX | 文字列 | はい |
コンパイラーが仮想JTAG インスタンスにインデックスを自動的に割り当てるかどうかを指定します。値はYES またはNO です。NO を指定すると、quartus_map ファイルでINSTANCE_ID の自動割り当て値を見つけることができます。NO を指定する場合は、INSTANCE_INDEX を定義する必要があります。指定されたインデックスがデザイン内で一意でない場合、コンパイラーは自動的にインデックスをインスタンスに再割り当てします。デフォルト値はYES です。 |
SLD_INSTANCE_INDEX | 整数型 | いいえ |
AUTO_INSTANCE_ID がYES に指定されている場合、alt_virtual_jtag のすべてのインスタンスに固有のID を指定します。それ以外の場合は、この値は無視されます。 |
SLD_IR_WIDTH | 整数型 | はい |
この仮想JTAG の命令レジスターir_in[ ] の幅を1〜24 の間で指定します。省略すると、デフォルトは1 です。 |
仮想JTAG IP コアのデザインフロー
- 所望の命令レジスター長で仮想JTAG IP コアをコンフィグレーションし、IP コアをインスタンス化する
- アプリケーションとのインタフェースのためのグルーロジックを構築する
- ランタイム時に仮想JTAG インスタンスと通信する
仮想JTAG IP コアには、JTAG のデータパスと制御信号に加えて、VIR が含まれています。命令レジスターのサイズは、パラメーター・エディターで設定します。仮想JTAG IP コア上の命令レジスターポートは、VIR のパラレル出力です。virtual_state_uir 信号がアサートされた後、このポートから更新されたVIR 情報をリードすることができます。
IP コアをインスタンス化した後、アプリケーションとインターフェイスするVDR チェーンを作成する必要があります。これを実行するには、仮想命令出力を使用して、どのVDR チェーンがアクティブなデータパスであるかを判断してから、以下を作成します。
- VIR のためのデコードロジック
- 各VIR がマップするVDR チェーン
- VDR チェーンとアプリケーション・ロジック間のインターフェイス・ロジック
グルーロジックは、IP コアからデコードされたワンホット出力を使用して、シフトするタイミングとVDR の更新タイミングを決定します。アプリケーション・ロジックは、非シフト仮想JTAG 状態のいずれの状態中に、VDR チェーンとインタフェースします。
例えば、アプリケーション・ロジックは、virtual_state_uir 信号がアサートされた後に、JTAG ポートからシフトインされた更新値をパラレルにリードすることができます。JTAG ポートからシフトアウトする値をロードするなら、virtual_state_cdr 信号がアサートされた時にする必要があります。最後に、TDO に情報をクロックアウトするためにシフトレジスターを有効にするなら、virtual_state_sdr のアサーション中にする必要があります。
TDI-to-TDO の接続を維持することは重要です。TDI-to-TDO データパスの接続を維持するために、可能なすべての命令コードがアクティブなレジスターチェーンにマッピングされていることを確認する必要があります。アルテラは、マッピングされていないすべてのIR 値のアクティブレジスターとしてバイパスレジスターを含めることを推奨します。
TCK(アルテラ・プログラミング・ケーブルを使用する場合、最大10 MHz のクロック)は、SLD インフラストラクチャー全体のクロックを提供します。メタステーブルの問題を回避するために、JTAG クロックドメインと残りのアプリケーション・ロジックとの間の適切なクロックドメイン・クロッシング向けのベスト・プラクティスに従ってください。デコードされた仮想JTAG 状態信号は、VIR およびVDR チェーンにおける安定した出力を決定するのに役立ちます。
デザインをコンパイルしてデバイスにダウンロードした後、quartus_stp 実行可能ファイルのTcl コマンドとアルテラのプログラミング・ケーブル(例えば、USB‑Blaster™、MasterBlaster™、またはByteBlaster™ II ケーブル)を使用してVIR およびVDR チェーンに直接シフト操作を実行できます。quartus_stp 実行可能ファイルは、Quartus II ソフトウェアで使用可能なすべてのオンチップデバッグ機能用のTcl コマンドを含むコマンドライン実行可能ファイルです。
以下の図は、仮想JTAG IP コアの1 つのインスタンスを含むデザインのコンポーネントを示しています。赤で示された仮想JTAG チェーンのTDI-to-TDO データパスは、DR レジスターのバンクで構成されています。アプリケーション・ロジックへの入力は、VDR チェーンのパラレル出力です。デコードされた状態信号は、VDR 出力が準備されている時のシフト・トランザクションおよび信号の開始と停止を知らせるために使用されます。
IR_out ポート(図で示せず)は、FPGA コアロジックからVIR をパラレルにロードするために使用できるオプションの入力ポートです。
シミュレーション・モデル
ランタイム通信
これらのコマンドには、アルテラのプログラミング・ケーブルにアクセスし、各VIR およびVDR へのシフト・トランザクションを発行するための基礎となるドライバーが含まれています。以下の表は、仮想JTAG IP コアで使用できるquartus_stp 実行可能ファイル内のTcl コマンドを示しています。これらのコマンドは、カスタム・コントローラーを使用してJTAG チェーンを駆動するデザインを対象としています。
仮想JTAG IP コアの各インスタンス化には、インスタンス・インデックスが含まれています。すべてのインスタンスには順番に番号が付けられ、Quartus II ソフトウェアによって自動的に提供されます。インスタンス・インデックスは、インスタンス・インデックス0 から始まります。以下の表に記載されているVIR およびVDR シフトコマンドは、インスタンス・インデックスをデコードし、IP コア・インスタンスごとにSLD ハブにアドレスを提供します。IP コアのコンフィグレーション中にQuartus II ソフトウェアが提供するデフォルトのインデックスを上書きすることができます。
以下の表は、仮想JTAG IP コアで使用できるquartus_stp 実行可能ファイル内のTcl コマンドを示しています。これらのコマンドは、カスタム・コントローラーを使用してJTAG チェーンを駆動するデザインを対象としています。
コマンド |
引数 |
概要 |
---|---|---|
Device virtual ir shift |
-instance_index <instance_index> -ir_value <numeric_ir_value> -no_captured_ir_value 1 -show_equivalent_device_ir_dr_shift 1 |
instance_index で指定された仮想JTAG インスタンスに対してIR シフト操作を実行します。ir_value は数値引数を取ることに注意してください。 |
Device virtual dr shift |
-instance_index <instance_index> -dr_value <dr_value> -length <data_register_length> -no_captured_dr_value 1 -show_equivalent_device_ir_dr_shift -value_in_hex 1 |
仮想JTAG インスタンスに対してDR シフト操作を実行します。 |
Get hardware names |
なし |
使用可能なすべてのプログラミング・ケーブルを問い合わせます。 |
Open device |
-device_name <device_name> -hardware_name <hardware_name> |
JTAG チェーン上のアクティブデバイスを選択します。 |
Close device |
なし |
アクティブなJTAG デバイスとの通信を終了します。 |
Device lock |
-timeout <timeout> |
JTAG チェーンとの排他的な通信を取得します。 |
Device unlock |
なし |
device_lock を解放します。 |
Device ir shift |
-ir_value <ir_value> -no_captured_ir_value |
IR シフト操作を実行します。 |
Device dr shift |
-dr_value <dr_value> -length <data register length> -no_captured_dr_value -value_in_hex |
DR シフト操作を実行します。 |
仮想JTAG IP コアの中心は、device_virtual_ir_shift コマンドとdevice_virtual_dr_shift コマンドです。これらのコマンドは、各VIR/VDR へのシフト操作を実行し、アドレスをアクティブなJTAG データパスのSLD ハブに提供します。
各device_virtual_ir_shift コマンドは、JTAG 命令レジスターにUSER1 命令を発行し、続いて正しいSLD ノード・インスタンスをターゲットにするためにアドレスビットによって先頭に付けられたir_value 引数によって提供されるVIR 値を含むDR シフトを発行します。
現在のVIR 値の内容をシフトアウトすることに気にしない場合は、-no_captured_ir_value 引数を使用します。この引数を有効にすると、基本トランザクション内でコマンドサイクルを削除することで、VIR シフト・トランザクションの速度が向上します。
同様に、各device_virtual_dr_shift コマンドはUSER0 命令をJTAG 命令レジスターに発行し、その後にdr_value 引数によって提供されるVDR 値を含むDR シフトを発行します。これらのコマンドは、show_equivalent_device_ir_dr_shift オプションが設定された、基になるJTAG トランザクションを返します。
device_virtual_ir_shift は、ir_value 引数を数値として受け取ります。device_virtual_dr_shift は、dr_value 引数を2 進列または16 進数文字列のいずれかで受け取ります。device_virtual_dr_shift に数値を使用しないでください。
仮想JTAG チェーンによるDR シフト操作の実行
- アルテラのプログラミング・ケーブルを照会し、アクティブなケーブルを選択します。
- JTAG チェーンで目的のデバイスをターゲットに設定します。
- デバイスへの排他的な通信のためのデバイスロックを取得します。
- VIR シフトを実行します。
- VDR シフトを実行します。
- device_unlock コマンドを使用して、デバイスとの排他的なリンクを解放します。
- close_device コマンドを使用して、デバイスとの通信を終了します。
ランタイム通信
以下の図は、仮想JTAG IP コア・インスタンスのコンパイルレポートを示しています。その以下の表では、Virtual JTAG Settings コンパイルレポートの各列について説明します。
設定 |
概要 |
---|---|
Instance Index |
仮想JTAG IP コアのインスタンス・インデックス。 コンパイル時に割り当てられます。 |
Auto Index |
インデックスが自動割り当てされたかどうかを示します。 |
Index Re-Assigned |
インデックスがユーザによって割り当てられたかどうかを示します。 |
IR Width |
このIP コア・インスタンスの仮想IR レジスターの長さ。パラメーター・エディターで定義します。 |
Address |
コンパイラーによってIP コアに割り当てられたアドレス値です。 |
USER1 DR Length |
USER1 DR レジスターの長さ。 USER1 DR レジスターは、すべてのSLD ノードのVIR をカプセル化します。 |
VIR Capture Instruction |
このIP コア・インスタンスのVIR をキャプチャーする命令値です。 |
Tcl API は、device_virtual_ir_shift コマンドとdevice_virtual_dr_shift コマンドでshow_equivalent_device_ir_dr_shift 引数を使用してJTAG IR/DR トランザクションを返す方法を提供します。以下の例では、仮想IR/DR シフトの戻り値を使用して、基礎となるトランザクションの形式を示します。
Tcl API を使用してデザイン内のビットパターンを照会するには、device_virtual_ir_shift コマンドとdevice_virtual_dr_shift コマンドで show_equivalent_device_ir_dr_shift 引数を使用します。
両方の例は、単一の仮想JTAG インスタンスを持つ同じデザインからです。参照仮想JTAG インスタンスのVIR の長さは3 ビットの長さに設定されています。
キャプチャーされたIR/DR 値を返さない仮想IR/DR シフト・トランザクション
以下のTcl コマンドの例は、no_captured_value オプションが設定されたVIR/VDR トランザクションを示しています。これらのコマンドは、発生する基になるJTAG シフト・トランザクションを返します。
no_captured_value オプションでの仮想IR シフト |
---|
device_virtual_ir_shift -instance_index 0 -ir_value 1 \ -no_captured_ir_value -show_equivalent_device_ir_dr_shift ↵ |
Returns: Info: Equivalent device ir and dr shift commands Info: device_ir_shift -ir_value 14 Info: device_dr_shift -length 5 -dr_value 11 -value_in_hex |
no_captured_value オプションでの仮想DR シフト |
---|
device_virtual_dr_shift -instance_index 0 -length 8 -dr_value \ 04 -value_in_hex -no_captured_dr_value \ -show_equivalent_device_ir_dr_shift ↵ |
Returns: Info: Equivalent device ir and dr shift commands Info: device_ir_shift -ir_value 12 Info: device_dr_shift -length 8 -dr_value 04 -value_in_hex |
以下の図のVIR 値フィールドは、VIR の長さが3 ビット長に設定されていても、4 ビット長で、VIR/VDR スキャンに関連するビット値とフィールドを示しています。すべてのアルテラFPGA およびCPLD の命令レジスターの長さは10 ビットです。すべてのアルテラFPGA およびCPLD では、USER1 の値は0x0E で、USER0 の値は0x0C です。VIR スキャンのDR スキャンシフトに含まれるアドレスビットは、Quartus II ソフトウェアによって決定されます。
すべてのUSER1 DR チェーンは、一様な長さでなければなりません。VIR 値のフィールド長の長さは、デザインでインスタンス化されたすべてのSLD ノードの最長VIR レジスターの長さによって決まります。SLD ハブVIR は4 ビット長であるため、デザイン内のすべてのSLD ノードのVIR 値フィールドの最小長は少なくとも4 ビットの長さです。Quartus II Tcl API は、シフト・トランザクションのサイズを自動的に正しい長さに調整します。VIR レジスターの長さは、Virtual JTAG Settings コンパイルレポートで提供されます。カスタム・コントローラーでJTAG インターフェイスを駆動する場合、USER1 DR チェーンのサイズに注意する必要があります。
現在のVIR/VDR 値をキャプチャーする仮想IR/DR シフト・トランザクション
仮想IR シフト |
---|
device_virtual_ir_shift -instance_index 0 -ir_value 1 \ -no_captured_ir_value -show_equivalent_device_ir_dr_shift Returns: Info: Equivalent device ir and dr shift commands Info: device_ir_shift -ir_value 14 Info: device_dr_shift –length 5 –dr_value 0B –value_in_hex Info: device_dr_shift -length 5 -dr_value 11 -value_in_hex |
仮想DR シフト |
---|
device_virtual_dr_shift -instance_index 0 -length 8 -dr_value \ 04 -value_in_hex -show_equivalent_device_ir_dr_shift Returns: Info: Equivalent device ir and dr shift commands Info: device_ir_shift -ir_value 12 Info: device_dr_shift -length 8 -dr_value 04 -value_in_hex |
以下の図は、キャプチャーされたIR 値を含むVIR/VDR シフトコマンドの例を示しています。DR Scan Shift 1 はVIR_CAPTURE コマンドです(下図参照)。これはsld_hub のVIR を対象としています。このコマンドは、jtag_state_cir がアサートされた後にシフトするアクティブなVIR チェーンを選択するアドレスサイクルです。HUB_FORCE_IR キャプチャーは、現在のアクティブノードとは異なるターゲットSLD ノードからVIR をキャプチャーするたびに発行する必要があります。DR Scan Shift 1 は、SLD ハブVIR をターゲットにして、仮想JTAG インスタンス1 から取得した値を強制的に出力し、VIR_CAPTURE コマンドとして表示されます。DR Scan Shift 2 は仮想JTAG インスタンスのVIR を対象とします。
JTAG チェーンおよび仮想JTAG IP コア・インスタンス用のコントローラーとしてエンベデッド・プロセッサーを使用する場合は、JAM STAPL(標準テストおよびプログラミング言語)の使用を検討してください。JAM STAPL は、JTAG 通信トランザクションをサポートする業界標準のフロー制御ベースの言語です。JAM STAPL はオープンソースで、アルテラのWeb サイトからソフトウェアのダウンロードとソースコードを入手できます。
カスタムJTAG コントローラーを使用する場合のリセットに関する考慮事項
これは、SLD ハブおよびJTAG TAP コントローラーの制御状態がロックステップにない、以下の2 つの状況を引き起こす可能性があります。
- デバイス全体のグローバルリセット信号のアサーション(DEV_CLRn)
- TRST 信号のアサーション(デバイス上で利用可能な場合)
DEV_CLRn はSLD ハブをリセットしますが、ハードTAP コントローラー・ブロックをリセットしません。TAP コントローラーは、USER モードのデバイス動作から分離してバウンダリー・スキャン動作を実行するために用いられています。グローバルリセット信号をアサートしてもBST(バウンダリー・スキャン・テスト)動作が中断されることはありません。
逆に、TRST 信号は利用可能であれば、JTAG TAP コントローラーをリセットしますが、SLD ハブをリセットしません。TRST 信号は、PLD のコア・プログラマブル・ロジックにルーティングされません。
JTAG TAP コントローラーとSLD ハブ・ステートマシンの状態が適切に同期されることを保証するために、TAP コントローラーまたはシステムロジックの意図的なリセット後に、少なくとも5 クロックサイクルにわたってTMS をHigh に保持する必要があります。JTAG TAP コントローラーとsld_hub コントローラーの両方が、TMS の5 クロックサイクルがHigh に保持された後、Test Logic Reset 状態になることが保証されています。
仮想JTAG IP コアのインスタンス化
- Quartus II ソフトウェア
- USB-Blaster ケーブルなどのアルテラ・ダウンロード・ケーブル
ダウンロード・ケーブルは、quartus_stp 実行可能ファイルを実行するホストから仮想JTAG IP コアと通信するために必要です。
IP Catalog とパラメーター・エディター
- IP Catalog をShow IP for active device familyまたはShow IP for all device familiesでフィルターします。プロジェクトを開いていない場合は、IP Catalog 内でDevice Familyを選択します。
- IP Catalog に完全な、または部分的な IP コア名を検索フィールドに入力し、検索します。
- IP コアを右クリックしてサポートされるデバイスの詳細を表示し、IP コアのインストール・フォルダーを開いて、IP ドキュメントへのリンクをクリックします。
- Search for Partner IPをクリックし、アルテラのウェブサイト上でパートナーの IP 情報へアクセスします。
パラメーター・エディターは、IP バリエーション名、オプションのポート、出力ファイルの生成オプションを指定するように促します。パラメーター・エディターは、・プロジェクト内で IP バリエーションのトップレベルの IP ファイル (.ip) を生成します。パラメーター・エディターは、・プロジェクト内で IP バリエーションのトップレベルの Quartus IP ファイル (.qip) を生成します。これらのファイルは、プロジェクト内の IP バリエーションを表し、パラメーター化の情報を格納します。
パラメーター・エディター
- Presetsウィンドウを使用し、特定のアプリケーションでプリセットのパラメーター値を適用します。 ( 選択コア向け )
- Detailsウインドウを使用し、ポートとパラメーターの説明を表示してドキュメントへのリンクをクリックします。
- Generate > Generate Testbench Systemをクリックし、テストベンチ・システムを生成します。( 選択コア向け )
- Generate > Generate Example Designをクリックし、選択したコアのサンプルデザインを生成します。( 選択コア向け )
- Validate System Integrityをクリックし、コンパニオン・ファイルに対してシステムの汎用コンポーネントを検証します。 (Qsys Proシステムのみ )
- Sync All System Infosをクリックし、コンパニオン・ファイルに対しシステムの汎用コンポーネントを検証します。(Qsys Proシステムのみ)
IP Catalog は、Qsys およびQsys Pro (View > IP Catalog) でも使用可能です。Qsys IP Catalog には、専用のシステム・インターコネクト、ビデオと画像の処理、および IP Catalog で使用不可の他のシステムレベルの IP が含まれています。Qsys およびQsys Proの IP 使用の情報については、Creating a System with Qsys Pro またはCreating a System with Qsysを参照してください。
IP コアのパラメーターとオプションの指定
- Qsys IP Catalog(Tools > IP Catalog)内で、カスタマイズする IP コア名を検索し、ダブルクリックします。パラメーター・エディターが表示されます。
- カスタム IP バリエーションのトップレベル名を指定します。この名前は、プロジェクトの IP コア・バリエーションのファイル名になります。プロンプトが表示されたら、対象のFPGA デバイスファミリーと出力ファイルの HDL プリファレンスも指定します。OKをクリックします。
-
IP バリエーションのパラメーターとオプションを指定します。
- 必要に応じてプリセット・パラメーター値を選択します。プリセットは、( 提供されている) 特定のアプリケーションのすべての初期パラメーター値を指定します。
- IP コアの機能、ポートの構成、およびデバイス固有の機能を定義するパラメーターを指定します。
- タイミング・ネットリスト、シミュレーション・モデル、テストベンチ、またはデザイン例 ( 該当する場合 ) の生成オプションを指定します。
- 他の EDA ツールで IP コアのファイルを処理するオプションを指定します。
- Finishをクリックし、IP バリエーションの仕様に一致する合成およびその他のオプションファイルを生成します。パラメーター・エディターは、合成とシミュレーションのためのトップレベルの.qip IP バリエーション・ファイルと HDL ファイルを生成します。また、一部の IP コアは、ハードウェアをテストするにあたり、テストベンチやデザイン例を同時に生成します。
- シミュレーション・テストベンチを生成するために、Generate > Generate Testbench Systemをクリックします。シミュレーション・テストベンチを提供していない一部の IP コアではGenerate Testbench Systemは使用できません。
- ハードウエア検証のトップレベル HDL 例を生成するために、Generate > HDL Exampleをクリックします。一部の IP コアではGenerate > HDL Exampleは使用できません。
トップレベルの IP バリエーションは、現在のプロジェクトに追加されます。.qsysファイルをプロジェクトに手動で追加するために、Project > Add/Remove Files in Projectをクリックします。ポートを接続するため、適切なピン割り当てを行ってください。
アルテラIP コア向けに生成されるファイル(Legacy Parameter Editor)
HDL で直接インスタンス化する
- 仮想JTAG IP コアからのtck 出力は、TDI ピンとTDO ピンでのデータの入出力に使用されるクロック
- 仮想JTAG IP コアのTMS 出力は、メインJTAG 回路へのTMS 入力を反映している
- 仮想JTAG IP コアのir_in 出力ポートは、仮想JTAG インスタンスの仮想IR にシフトされる内容のパラレル出力。このポートは、ロジックのデコードに使用され、アクティブな仮想DR チェーンを選択する
この例で仮想JTAG インスタンスをインスタンス化する目的は、Tcl コマンドとquartus_stp 実行可能ファイルで構築されたソフトウェア・アプリケーションを使用して、JTAG ポートを介してmy_counter をロードすることです。このデザインでは、仮想JTAG インスタンスはmy_vji と呼ばれます。仮想JTAG IP コアがデザインでインスタンス化される時は、通常、デコード・ロジックブロック、TDO ロジックブロック、およびデータレジスター・ブロックの3 つのロジックブロックが必要です。以下の例は、仮想JTAG インスタンス、デコード・ロジックブロック、TDO ロジックブロック、およびデータレジスター・ブロックを組み合わせたものです。
以下のVerilog HDL テンプレートは、デザイン内のIP コアのさまざまな信号をインスタンス化して接続するためのガイドとして使用できます。
module counter (clock, my_counter); input clock; output [3:0] my_counter; reg [3:0] my_counter; always @ (posedge clock) if (load && e1dr) // decode logic: used to load the counter my_counter my_counter <= tmp_reg; else my_counter <= my_counter + 1; // Signals and registers declared for VJI instance wire tck, tdi; reg tdo; wire cdr, eldr, e2dr, pdr, sdr, udr, uir, cir; wire [1:0] ir_in; // Instantiation of VJI my_vji VJI_INST( .tdo (tdo), .tck (tck), .tdi (tdi), .tms(), .ir_in(ir_in), .ir_out(), .virtual_state_cdr (cdr), .virtual_state_e1dr(e1dr), .virtual_state_e2dr(e2dr), .virtual_state_pdr (pdr), .virtual_state_sdr (sdr), .virtual_state_udr (udr), .virtual_state_uir (uir), .virtual_state_cir (cir) ); // Declaration of data register reg [3:0] tmp_reg; // Deocde Logic Block // Making some decode logic from ir_in output port of VJI wire load = ir_in[1] && ~ir_in[0]; // Bypass used to maintain the scan chain continuity for // tdi and tdo ports bypass_reg <= tdi; // Data Register Block always @ (posedge tck) if ( load && sdr ) tmp_reg <= {tdi, tmp_reg[3:1]}; // tdo Logic Block always @ (tmp_reg[0] or bypass_reg) if(load) tdo <= tmp_reg[0] else tdo <= bypass_reg; endmodule
デコードロジックは、仮想JTAG IP コアのIR が01 の場合にワイヤーload をアクティブHigh にすることによって生成されます。IR スキャンシフトは、仮想JTAG IP コアのIR にデータをロードするために使用されます。ir_in 出力ポートはIR の内容を反映します。
データレジスター・ロジックには、tmp_reg という名前の4 ビット・シフトレジスターが含まれています。データレジスター・ロジックに示されているalways ブロックには、load 信号とsdr 信号で構成されるデコードロジックも含まれています。sdr 信号は、DR スキャンシフト動作中にHigh にアサートされた仮想JTAG IP コアの出力です。sdr 出力がHigh にアサートされる時間は、tdi 上のデータが有効である時間です。その期間中、データはtmp_reg シフトレジスターにシフトされます。したがって、tmp_reg は、DR スキャン動作中にtdi 出力ポート上の仮想JTAG IP コアからデータを取得します。
bypass_reg という名前の1 ビット・レジスターがあり、その出力は、仮想JTAG IP コアのアイドルまたはIR スキャンシフト動作中にスキャンチェーンの連続性を維持するためにtdo ロジックに接続されています。tdo ロジックは、tmp_reg とbypass_reg から来て、仮想JTAG IP コアのtdo 入力に接続する出力から成ります。tdo ロジックは、DR スキャンシフト動作中にtmp_reg から仮想JTAG IP コアにデータを渡します。
4 ビット・カウンターのalways ブロックもまた、いくつかのデコードロジックで構成されています。このデコードロジックは、仮想JTAG IP コアのload 信号とe1dr 出力信号を使用して、tmp_reg の内容でカウンターをロードします。すべてのデータが完全にtmp_reg にシフトし、sdr がデアサートされた時、仮想JTAG 出力信号のe1dr は、DR スキャンシフト動作中にHigh にアサートされます。sdr とe1dr に加えて、仮想JTAG IP コアの他の出力は、TAP コントローラーのさまざまな状態と仮想JTAG IP コアの内部状態を示すためにHigh にアサートされます。これらの信号はすべて、デザインで必要に応じて異なるロジック動作を実行するために使用できます。
シミュレーション・サポート
実装では、仮想JTAG IP コアは一方でデザインに接続し、もう一方でJTAG ハブを介してJTAG ポートに接続します。ただし、シミュレーション・モデルはデザインにのみ接続します。JTAG 回路向けのシミュレーション・モデルはありません。したがって、シミュレーションで仮想JTAG IP コアのスキャンシフト動作を模倣するためにデバイスのJTAG ポートからスティミュラスを提供することはできません。
シミュレーションにおけるスキャン動作は、シミュレーション・モデルを用いて実現されます。シミュレーション・モデルは、信号生成装置、SLD ハブのモデル、および仮想JTAG モデルから構成されています。ウィザードで定義されたスティミュラスは、バリエーション・ファイルからこのシミュレーション・モデルにパラメーターとして渡されます。シミュレーション・パラメーターは以下の表の通りです。信号生成装置は続いて、tck、tdi、tms などの仮想JTAG IP コア出力に必要な信号を生成します。
このモデルは、無制限数の仮想JTAG インスタンスのシミュレーションを可能にするようにパラメーター化されています。パラメーターsld_sim_action は、IR とDR スキャンシフトに使用される文字列を定義します。各仮想JTAG のバリエーション・ファイルは、これらのパラメーターを仮想JTAG コンポーネントに渡します。仮想JTAG のバリエーション・ファイルは、異なるスティミュラスを生成するためにいつでも編集できますが、DR およびIR スキャンシフトのスティミュラスを指定する方法として推奨されるのは、パラメーター・エディターを使用することです。
機能シミュレーションとタイミング・シミュレーションを実行するには、<Quartus II installation directory>\eda\sim_lib ディレクトリーにあるaltera_mf.v ライブラリーを使用する必要があります。VHDL の場合は、<Quartus II installation directory>eda\sim_lib ディレクトリーにあるaltera_mf.vhd ライブラリーを使用する必要があります。VHDL component 宣言ファイルは、<Quartus II installation directory>\eda\sim_lib ディレクトリーのaltera_mf_components.vhd ライブラリーにあります。
パラメーター |
概要 |
---|---|
SLD_SIM_N_SCAN |
シミュレーション・モデルのシフト数を指定します。 |
SLD_SIM_TOTAL_LENGTH |
IR シフトまたはDR シフトのいずれかでシフトされるビットの総数。 この値は、SLD_SIM_ACTION 文字列で指定されたすべてのlength 値の合計と等しくなければなりません。 |
SLD_SIM_ACTION |
命令レジスター(IR)およびデータレジスター(DR)のスキャンシフトに使用される文字列を指定します。 文字列の形式は次のとおりです。 ((time,type,value,length), (time,type,value,length), ... (time,type,value,length)) ここでは、
エントリーは16 進形式です。 |
シミュレーションには以下の制限があります。
- スキャンシフト(IR またはDR)は、シミュレーション時に少なくとも1 ミリ秒離れている必要がある
- このIP コアには、動作レベルまたは機能レベルのシミュレーション・サポートのみが存在する。ゲートレベルまたはタイミングレベルのシミュレーションはサポートされない
- 動作シミュレーションでは、スティミュラスは、仮想JTAG モデルの信号生成装置モデルに、tck、tms、tdi などに対して必要な出力を生成するために必要な信号のシーケンスを生成するよう指示する。デバイスのJTAG ピンでスティミュラスを与えることはできない
- シミュレーションで使用されるtck クロック周期は、50% のデューティサイクルで10 MHz。ハードウェアでは、tck クロックサイクルの周期は変化しうる
- 実際のシステムでは、仮想JTAG IP コアの各インスタンスは独立して動作する。 シミュレーションでは、複数のインスタンスが同時に動作することができる。例えば、仮想JTAG インスタンス番号1 のスキャンシフトを3 ミリ秒で、仮想JTAG インスタンス番号2 のスキャンシフトを同時に実行するように定義した場合、シミュレーションは正しく機能できる
ModelSim-Altera シミュレーターを使用している場合は、altera_mf.v およびaltera_mf.vhd ライブラリーがコンパイル済みの形式でシミュレーターに提供されます。
以下の図は、典型的なIR スキャンシフト動作中における仮想JTAG IP コアの入力と出力を示しています。
以下の図は、典型的なDR スキャンシフト動作中における仮想JTAG IP コアの入力と出力を示しています。
デザインのコンパイル
これらの一意のID は、Quartus II Tcl API がIP コアの各インスタンスに適切に対処するために必要です。
仮想JTAG IP コアを追加すると、デザインのロジックリソースが使用されます。Compilation Report のFitter Resource セクションには、以下の図に示すように、ロジックリソースの使用状況が表示されます。
サードパーティー製の合成ツールのサポート
例えば、my_vji.v ファイルを作成すると、my_vji_bb.v ファイルも作成されます。サードパーティー合成では、プロジェクトを合成するために、このブラックボックス・ファイルをデザインファイルに含めます。VQM ファイルは、通常、サードパーティーの合成ツールによって生成されます。このVQM ネットリストと仮想JTAG IP コアのバリエーション・ファイルは、さらにコンパイルするためにQuartus II ソフトウェアに入力されます。
SLD_NODE 検出と列挙
命令 |
バイナリーパターン |
---|---|
USER0 |
00 0000 1100 |
USER1 |
00 0000 1110 |
USER1 命令は、sld_hub またはSLD ノードの仮想IR を対象としています。つまり、USER1 命令がデバイスに発行されると、後続のDR スキャンは、DR スキャン内に含まれるアドレスフィールドに基づいて、特定の仮想IR チェーンをターゲットにします。以下の表は、USER1 命令のDR ターゲット、仮想IR がどのように解釈されるかを示しています。
以下の表のVIR_VALUE は、ターゲットSLD ノードの仮想IR 値です。このフィールドの幅はm ビット長であり、m はデザイン内のすべてのSLD ノードの最大VIR の長さです。VIR の長さがm ビット未満のすべてのSLD ノードは、VIR_VALUE に長さm までのゼロを充填する必要があります。
m + n – 1 |
m |
m – 1 |
0 |
---|---|---|---|
ADDR [(n – 1)..0] |
VIR_VALUE [(m – 1)..0] |
ADDR ビットは、仮想IR シフトがターゲットとするアクティブSLD ノードに信号を送信するためのアドレス値として機能します。ADDR の長さはn ビットです。n ビットは、以下に示すように、デザイン内のすべてのSLD ノードをエンコードするのに十分な長さでなければなりません。
n = CEIL(log2(Number of SLD_nodes +1))
以下に示すように、アドレスマップのSLD ハブは常に0 です。
ADDR[(n -1)..0] = 0
デザイン内のSLD インスタンスの検出と列挙には、USER1 DR(m およびn)の寸法を決定するためのsld_hub の問い合わせと、各SLD インスタンス、具体的には仮想JTAG IP コア・インスタンスと、USER1 DR のADDR ビットに含まれるアドレス値との関連付けが必要とされます。
検出と列挙のプロセスは、次の手順からなります。
- HUB_INFO 命令でSLD ハブに問い合わせます。
- 32 ビットのHUB IP コンフィグレーション・レジスターをシフトアウトして、デザイン内のSLD ノードの数とUSER1 DR の寸法を決定します。
- デザイン内の各SLD ノードの32 ビットSLD_NODE_INFO レジスターをシフトアウトすることによって、仮想JTAG インスタンス・インデックスをADDR 値に関連付けます。
HUB_INFO 命令の発行
SLD_NODE_INFO レジスターは、デザイン内の仮想JTAG インスタンスのアドレスマッピングを決定するために使用されます。このレジスターセットは、HUB_INFO 命令を発行することによってシフトアウトされます。SLD ハブおよびHUB_INFO 命令のADDR ビットはともに0 × 0 です。
この時点ではm とn は未知であるため、DR レジスター(ADDR bits + VIR_VALUE)がゼロで満たされる必要があります。64 個のゼロのシーケンスをUSER1 DR にシフトするだけで、m とn に対して最も保守的な場合をカバーするのに十分です。
HUB IP コンフィグレーション・レジスター
HUB IP コンフィグレーション・レジスターは、DR レジスターの8 回の4 ビット・ニブルスキャンを使用してシフトアウトされます。各4 ビットスキャンは、次の4 ビットスキャンの前にUPDATE_DR 状態を通過しなければなりません。8 回のスキャンは、以下の表に示す定義で32 ビットの値にアセンブルされます。
Nibble7 |
Nibble6 |
Nibble5 |
Nibble4 |
Nibble3 |
Nibble2 |
Nibble1 |
Nibble0 |
||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
31 |
27 |
26 |
19 |
18 |
8 |
7 |
0 |
||||||||
HUB IP version |
N |
ALTERA_MFG_ID (0 × 06E) |
m |
n = CEIL(log2(N+1)) m = SUM(m,n) – n
SLD_NODE Info レジスター
DR ニブルシフトは、Hub IP コンフィグレーション・レジスターをシフトアウトするために使用されるHUB_INFO DR シフトの続きです。
ノードのADDR 値は、ノードがシフトアウトされる順に、つまり、最初のノードSLD_NODE_INFO のシフトアウトから始まり、ハブ上の最後のノードを含むまでによって決定されます。以下の表は、SLD_NODE_INFO レジスターとその機能の説明を示しています。
31 |
27 |
26 |
19 |
18 |
8 |
7 |
0 |
---|---|---|---|---|---|---|---|
Node Version |
NODE ID |
NODE MFG_ID |
NODE_INST_ID |
フィールド |
機能 |
---|---|
Node Version |
SLD ノードのバージョンを識別します。 |
NODE ID |
NODE IP のタイプを識別します(仮想JTAG IP コアでは0x8)。 |
NODE MFG_ID |
SLD ノード製造者ID(仮想JTAG IP コアでは0x6E)です。 |
NODE_INST_ID |
同じIP の複数のインスタンスを区別するために使用されます。 パラメーター・エディターで割り当てられたインスタンス・インデックスに対応します。 |
デザイン内の各仮想JTAG インスタンスは、NODE ID とNODE_INST_ID をデコードすることによって識別できます。仮想JTAG IP コアは、NODE ID = 8 を使用します。NODE_INST_ID は、パラメーター・エディターで設定したインスタンス・インデックスに対応します。各仮想JTAG ノードのADDR ビットは、各仮想JTAG インスタンスを、SLD_NODE_INFO レジスターがシフトアウトされるシーケンス番号と照合することによって決定されます。
仮想IR 命令レジスターのキャプチャ-
各NODE VIR レジスターは、USER1 DR チェーンへのパラレル・ホールド・ランク・レジスターとして機能します。sld_hub は、VIR シフト値の先頭にあるビットを使用して、正しいSLD NODE VIR レジスターをターゲットにします。SLD_state_machine がvirtual_update_IR をアサートした後、アクティブSLD ノードはUSER1 DR レジスターのVIR_VALUE をラッチします。
以下の図は、USER1 DR レジスターとSLD ノードVIR の相互作用の機能モデルを示しています。ADDR ビットは、sld_hub FSM がvirtual_update_IR 状態を終了した後に、図の選択マックスをターゲットにします。次のUSER1 DR トランザクションでは、USER1 DR チェーンは最後のアクティブなSLD_NODE のVIR をラッチしてTDO からシフトアウトします。したがって、前のシフトサイクルで扱ったノードとは異なるSLD ノードのVIR を取得する必要がある場合は、VIR_CAPTURE 命令を発行する必要があります。sld_hub へのVIR_CAPTURE 命令はアドレスサイクルとして動作し、マックスへの更新を強制します。
VIR_CAPTURE 命令を構成するには、次の命令形式を使用します。
VIR_CAPTURE = ZERO [ (m – 4)..0] ## ADDR [(n – 1)..0] ## 011
この形式では、ZERO[ ] は0 の配列で、## は連結演算子で、m はVIR_VALUE の幅で、n はADDR ビットの幅です。
AHDL 関数プロトタイプ
ポート名と順序は、Verilog HDL にも適用されます。
FUNCTION sld_virtual_jtag( ir_out[sld_ir_width-1..0], tdo ) WITH( lpm_hint, lpm_type, sld_auto_instance_index, sld_instance_index, sld_ir_width, sld_sim_action, sld_sim_n_scan, sld_sim_total_length ) RETURNS( ir_in[sld_ir_width-1..0], jtag_state_cdr, jtag_state_cir, jtag_state_e1dr, jtag_state_e1ir, jtag_state_e2dr, jtag_state_e2ir, jtag_state_pdr, jtag_state_pir, jtag_state_rti, jtag_state_sdr, jtag_state_sdrs, jtag_state_sir, jtag_state_sirs, jtag_state_tlr, jtag_state_udr, jtag_state_uir, tck, tdi, tms, virtual_state_cdr, virtual_state_cir, virtual_state_e1dr, virtual_state_e2dr, virtual_state_pdr, virtual_state_sdr, virtual_state_udr, virtual_state_uir );
VHDL コンポーネント宣言
component sld_virtual_jtag generic ( lpm_hint : string := "UNUSED"; lpm_type : string := "sld_virtual_jtag"; sld_auto_instance_index : string := "NO"; sld_instance_index : natural := 0; sld_ir_width : natural := 1; sld_sim_action : string := "UNUSED"; sld_sim_n_scan : natural := 0; sld_sim_total_length : natural := 0 ); port( ir_in : out std_logic_vector(sld_ir_width-1 downto 0); ir_out: in std_logic_vector(sld_ir_width-1 downto 0); jtag_state_cdr : out std_logic; jtag_state_cir : out std_logic; jtag_state_e1dr : out std_logic; jtag_state_e1ir : out std_logic; jtag_state_e2dr : out std_logic; jtag_state_e2ir : out std_logic; jtag_state_pdr : out std_logic; jtag_state_pir : out std_logic; jtag_state_rti : out std_logic; jtag_state_sdr : out std_logic; jtag_state_sdrs : out std_logic; jtag_state_sir : out std_logic; jtag_state_sirs : out std_logic; jtag_state_tlr : out std_logic; jtag_state_udr : out std_logic; jtag_state_uir : out std_logic; tck : out std_logic; tdi : out std_logic; tdo : in std_logic; tms : out std_logic; virtual_state_cdr : out std_logic; virtual_state_cir : out std_logic; virtual_state_e1dr : out std_logic; virtual_state_e2dr : out std_logic; virtual_state_pdr : out std_logic; virtual_state_sdr : out std_logic; virtual_state_udr : out std_logic; virtual_state_uir : out std_logic ); end component;
VHDL LIBRARY-USE 宣言
LIBRARY altera_mf; USE altera_mf.altera_mf_components.all;
TAP コントローラー・ステートマシン・デザイン例
以下の図は、TAP コントローラー・ステートマシンを示しています。図の下にある表は、各状態の説明を示しています。
TAP コントローラー状態 |
機能の説明 |
---|---|
Test-Logic-Reset |
JTAG スキャンチェーンのテストロジックは無効になっています。 |
Run-Test/Idle |
これはホールド状態です。一度入ると、TMS がLow に保たれている限り、コントローラーはこの状態のままです。 |
Select DR-Scan/Select IR Scan |
これらは一時的なコントローラーの状態です。 DR 状態またはIR 状態に入るかここで決定されます。 |
Capture DR/Capture IR |
これらの状態は、TCK の立ち上がりエッジでシフトレジスターをホールドレジスターからパラレルロードすることを可能にします。 |
Shift DR/Shift IR |
これらの状態は、DR チェーンおよびIR チェーンのシフトを可能にします。 |
Exit1 DR/Exit1 IR |
一時的なホールド状態。 これらの状態では、Update 状態またはPause 状態に進むことが決定されます。 |
Pause DR/Pause IR |
このコントローラー状態は、命令レジスターおよびデータレジスターのシフトを一時的に停止させます。 |
Exit2 DR/Exit2 IR |
一時的なホールド状態。 これらの状態では、Update 状態に進むことが決定されます。 |
Update DR/Update IR |
これらの状態は、ホールドレジスターをシフトレジスターからパラレルロードすることを可能にします。TCK の立ち下がりエッジで更新が発生します。 |
ランタイムにおけるDCFIFO 内容の変更デザイン例
仮想JTAG IP コアとともに出荷されるTcl API は、ランタイム時にデータ値を更新したり、制御ビットをトグルするために使用できるコマンドライン・スクリプトを開発するのに理想的なソリューションです。FPGA へのこの可視性は、特に外部機器がスティミュラスを提供することができない場合に、デザインのプロトタイプ段階でデバッグクロージャを迅速に行うのに役立ちます。
このデザイン例は、DCFIFO を実装するQuartus II プロジェクト・ファイルと、ランタイム時にFIFO の内容を変更するために使用されるコマンドライン・スクリプトで構成されています。
RTL は、JTAG 回路と通信する仮想JTAG IP コアの単一インスタンス化で構成されています。DCFIFO のリードポートとライトポートは両方とも50 MHz でクロックされます。SignalTap II Logic Analyzer のインスタンスは、DCFIFO のデータ出力バスをタップして、DCFIFO からのバースト・トランザクションをリードします。以下の項では、RTL 実装およびTcl API を使用したDCFIFO のランタイム制御について説明します。
ライトロジック
命令レジスター値 |
機能 |
---|---|
PUSH |
DCFIFO のライト側ロジックに単一の値をライトする命令です。 |
POP |
DCFIFO のリード側ロジックから単一の値をリードする命令です。 |
FLUSH |
FIFO から空になるまでバーストリード・トランザクションを実行する命令です。 |
IR デコードロジックは、PUSH 命令がIR ポートにあり、virtual_state_sdr がアサートされると、Push_in 仮想DR チェーンをシフトします。write_clock に同期したライトイネーブル・パルスは、virtual_state_udr 信号がHigh になった後にアサートされます。virtual_state_udr 信号は、仮想DR チェーンからの安定性を保証します。以下の図は、DCFIFO のライト側ロジックを示しています。
リードロジック
FLUSH 命令が仮想JTAG インスタンスにシフトされると、IR デコードロジックはFIFO が空になるまでread_req ラインをアサートします。バイパスレジスターは、FLUSH 命令がアクティブでTDI-TDO の接続を維持する時に選択されます。以下の図は、DCFIFO のリード側ロジックを示しています。
ランタイム通信
プロシージャー |
概要 |
---|---|
push [value] |
IR はPUSH 命令をシフトし、その後にValue 引数のDR シフトを実行します。 Value は256 未満の整数でなければなりません。 |
pop |
IR はPOP 命令をシフトし、その後に8 ビットのDR シフトを実行します。 |
flushfifo |
IR はFLUSH 命令をシフトします。 |
以下の図は、DCFIFO およびflushfifo コマンドにプッシュされた8 つの値のランタイム実行と、フラッシュ操作でのSignalTap II Logic Analyzer のトリガーキャプチャーを示しています。


ハードワイヤード・リビジョン情報のオフロードデザイン例
Quartus II ソフトウェアにはTcl/Tk のインストールが付属しているため、Tk パッケージを使用してデザインとやりとりするためのカスタムGUI を構築できます。多くの場合、JTAG ポートはデバッグ目的でほとんどのデザインに存在するため、使用するのに便利なインターフェイスです。Tk と仮想JTAG インターフェイスを活用することで、仮想フロントパネルの作成や簡単なソフトウェア・アプリケーションの作成など、ラピッド・プロトタイピングを実行できます。以下の図はデザインの構成を示しています。
Tcl スクリプトは、プロジェクトが完全にコンパイルされる度に、ハードコードされたバージョン管理情報を含むVerilog ファイルを作成して更新します。Tcl スクリプトは、プロジェクトの.qsf ファイルに次のアサインメントを追加することによって自動的に実行されます。
このデザイン例でシフトアウトされたUSERCODE 値は、ユーザが設定可能な32 ビットのJTAG レジスターです。この値は、Device and Pin Options ダイアログボックスを使用してQuartus II ソフトウェアで設定されます。
JTAG User Code 設定のコンフィグレーション
- Assignment メニューでSettings をクリックします。
- Settings ページの Category リストで、Device をクリックします。
- Device ダイアログボックスが表示されます。 Device and Pin Options をクリックします。
- Device and Pin Options ダイアログボックスの General タブで、JTAG user code が表示されます。 ユーザーコードを32 ビットの16 進数形式で入力します。
- OK をクリックします。
改訂履歴
日付 |
バージョン |
変更内容 |
---|---|---|
2016年10月 | 2016.10.31 | IP コアのアップグレード の項を削除 |
2015年11月 | 2015.11.20 | JTAG TAP コントローラー・ステートマシン の図でEXIT2_DR からSHIFT_DR へのフローを修正 |
2014年7月 | 2014.07.08 |
|
2014年3月 |
2014.03.19 |
「仮想JTAG メガファンクションのパラメーター」表でSLD_IR_WIDTH パラメーターの説明を更新 |
2014年2月 |
2014.02.25 |
|