仮想JTAG(altera_virtual_jtag)IP コアのユーザーガイド

ID 683705
日付 10/31/2016
Public
ドキュメント目次

1.5.3. HDL で直接インスタンス化する

仮想JTAG IP コアをデザインに正しく接続するには、以下の基本的な接続ルールに従う必要があります。
  • 仮想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_regbypass_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 にアサートされます。sdre1dr に加えて、仮想JTAG IP コアの他の出力は、TAP コントローラーのさまざまな状態と仮想JTAG IP コアの内部状態を示すためにHigh にアサートされます。これらの信号はすべて、デザインで必要に応じて異なるロジック動作を実行するために使用できます。