JTAG Boundary Scan(6)
2022/04/02
JTAGコントローラの信号リスト
  • 今回は、これから作成するJTAGコントローラの仕様(*1)を決めます。まずは外部信号(ポート)ですが、これは以前説明したようにTAP(Test Access Port)と、JTAGコントローラの外にあるBSRチェーン制御、そしてTDO IOマクロのoutput enable制御信号が対象になります。

    Table 1: JTAGコントローラの外部信号リスト
    信号名 in/out タイミング 分類 説明
    TCK input クロック TAP JTAGコントローラ及びBSRのクロック
    TMS input TCK:posedge TAP JTAGコントローラのステート制御
    TDI input TCK:posedge TAP 操作対象シフトチェーンへのシリアルデータ入力
    TDO output TCK:negedge TAP 操作対象シフトチェーンからのシリアルデータ出力
    TRST output Asynchronous TAP JTAGコントローラリセット
    0:assert, 1:de-assert
    tdo_en_n output TCK:negedge TDO制御 TDOに割り当てられた出力IOマクロのOutput Enable制御
    0:enable, 1:disable
    bsr_si output TCK:posedge BSR BSRチェーン初段のsiピンにTDI入力を伝搬する
    bsr_so input TCK:posedge BSR BSRチェーン最終段のso出力を受け取る
    bsr_capture output TCK:posedge BSR BSRチェーン Capture制御
    0:hold, 1:capture
    bsr_shift output TCK:posedge BSR BSRチェーン Shift制御
    0:hold, 1:shift
    bsr_update output TCK:posedge BSR BSRチェーン Update制御
    0:hold, 1:update
    bsr_mode_i output TCK:posedge BSR BSRチェーン Pad→Coreパス(input)BSR mode制御
    0:Pad(fin)入力, 1:Pad(fin)/Update-FF入力(*2)
    bsr_mode_o output TCK:posedge BSR BSRチェーン Core→Padパス(output)BSR mode制御
    0:Core(fin)出力, 1:Update-FF出力
    bsr_mode_e output TCK:posedge BSR BSRチェーン Core→Padパス(output enable)BSR mode制御
    0:Core(fin)出力, 1:Update-FF出力
    bsr_highz output TCK:posedge BSR BSRチェーン Core→Padパス(output enable)BSR High-Z制御
    0:通常制御, 1:強制High-Z

  • 次はDEVICE_ID/Bypass/IRといったコントローラ内部のシフトチェーンを制御する信号です。これはシフトチェーン毎にcapture/shift、そして必要ならばupdateを用意するだけです。

    Table 2: JTAGコントローラの内部信号リスト(1)
    信号名 分類 説明
    w_capture_devid DEVICE_ID DEVICE_IDチェーン Capture制御, (0:hold, 1:capture)
    w_shift_devid DEVICE_ID DEVICE_IDチェーン Shift制御, (0:hold, 1:shift)
    w_shift_bypass Bypass Bypassチェーン Shift制御, (0:hold, 1:shift)
    w_capture_ir IR IRチェーン Capture制御, (0:hold, 1:capture)
    w_shift_ir IR IRチェーン Shift制御, (0:hold, 1:shift)
    w_update_ir IR IRチェーン Update制御, (0:hold, 1:update)

JTAGコントローラのレジスタリスト
  • シフトチェーン及びステートマシンを構成するレジスタ/FFです。パラメータ(P_*)の説明は後に出てきます。

  • 初期値はステートマシン(r_state)の値がTest-Logic-Reset(P_STATE_RESET)になった際に非同期で設定される値です。そのためr_state自身に初期値はありません。TMS=1でTCKを5cyc以上入れるとTest-Logic-Resetになることを利用します。

  • r_ir_updateの初期値をP_IR_IDCODE(IDCODE命令の値)にしていますが、これはIEEE 1149.1で定められたものではなく、全体的な傾向に合わせて決めています。

    Table 3: JTAGコントローラ内のレジスタリスト
    レジスタ名 bit幅 初期値 説明
    r_state P_WD_STATE 無し JTAGステートマシンレジスタ
    r_bypass 1 1'b0 Bypassチェーンレジスタ
    r_devid P_WD_DEVID P_DEVICE_ID DEVICE_ID Capture/Shiftレジスタ
    r_ir_capture P_WD_IR {P_WD_IR{1'b0}} IR Capture/Shiftレジスタ
    r_ir_update P_WD_IR P_IR_IDCODE IR Updateレジスタ
    r_tdo_lockup 1 1'b0 TDO出力ロックアップ-FF(Negedge)
    コントローラTDO出力として接続
    r_tdo_en_n 1 1'b1 tdo_en_n出力-FF(Negedge)
    TDO output enable出力として接続

JTAGコントローラのパラメータリスト
  • JTAGコントローラ内で使用する各種パラメータの内容を説明します。IRとDEVICE_IDに関係するパラメータはIC/FPGAによって値を変える必要があります。

  • よってJTAGコントローラのインスタンスを置く際、Table 4のパラメータはBSDLの値を記述します。尚デフォルト値はXilinx Spartan-6 BGA324ピンの値です。

    Table 4: JTAGコントローラのパラメータ(1) (IC/FPGA毎に変更が必要)
    パラメータ名 デフォルト値 説明
    P_WD_IR 6 IRレジスタbit幅
    P_IR_IDCODE 6'b001001 IDCODE命令値
    P_IR_SAMPLE 6'b000001 SAMPLE/PRELOAD命令値
    P_IR_EXTEST 6'b001111 EXTEST命令値
    P_IR_BYPASS 6'b111111 BYPASS命令値
    P_IR_HIGHZ 6'b001010 HIGHZ命令値
    P_EN_HIGHZ 1'b1 HIGHZ命令 1'b1:有効, 1'b0:無効
    P_IR_CLAMP 6'b001011 CLAMP命令値 (注:Spartan-6では実装無し)
    P_EN_CLAMP 1'b1 CLAMP命令 1'b1:有効, 1'b0:無効
    P_WD_DEVID 32 DEVICE_IDレジスタbit幅
    P_DEVICE_ID 32'bxxxx010000000000010010010011 DEVICE_ID値

  • JTAGステートマシンに関係するパラメータは、IC/FPGA種類に関係なく任意の値を設定すれば良いですが、非同期リセットを持たないケースがあるためr_stateがどんな値を取っても必ず何かのステートであることが望ましい(*3)です。とは言うものの、ステートは16種なので4bitなら必ず何かのステートになります。

    Table 5: JTAGコントローラのパラメータ(2) (任意の設計値)
    パラメータ名 デフォルト値 説明
    P_WD_STATE 4 ステートマシンレジスタr_stateのbit幅
    P_STATE_RESET 4'd0 Test-Logic-Resetステート値
    P_STATE_IDLE 4'd1 Run-Test/Idleステート値
    P_STATE_SELECT_DR 4'd2 Select-DR-Scanステート値
    P_STATE_CAPTURE_DR 4'd3 Capture-DRステート値
    P_STATE_SHIFT_DR 4'd4 Shift-DRステート値
    P_STATE_EXIT1_DR 4'd5 Exit1-DRステート値
    P_STATE_PAUSE_DR 4'd6 Pause-DRステート値
    P_STATE_EXIT2_DR 4'd7 Exit2-DRステート値
    P_STATE_UPDATE_DR 4'd8 Update-DRステート値
    P_STATE_SELECT-IR 4'd9 Select-IR-Scanステート値
    P_STATE_CAPTURE_IR 4'd10 Capture-IRステート値
    P_STATE_SHIFT_IR 4'd11 Shift-IRステート値
    P_STATE_EXIT1_IR 4'd12 Exit1-IRステート値
    P_STATE_PAUSE_IR 4'd13 Pause-IRステート値
    P_STATE_EXIT2_IR 4'd14 Exit2-IRステート値
    P_STATE_UPDATE_IR 4'd15 Update-IRステート値

各制御信号の論理
  • JTAGステートマシンレジスタ(r_state)の値のみで決まる制御信号の論理です。

    Table 6: IRチェーン制御, tdo_en_n, BSR mode制御論理
    制御信号名 True条件(r_state値) タイミング
    tdo_en_n ~(P_STATE_SHIFT_DR | P_STATE_SHIFT_IR) TCK negedge
    w_capture_ir P_STATE_CAPTURE_IR TCK posedge
    w_shift_ir P_STATE_SHIFT_IR TCK posedge
    w_update_ir P_STATE_UPDATE_IR TCK posedge

  • IR Update-FF(r_ir_update)と、JTAGステートマシンレジスタ(r_state)の両方の値で決まる制御信号の論理です。変化タイミングは全てTCK posedgeです。

    Table 7: DEVICE_ID/BYPASS/BSRチェーン制御論理
    制御信号名 True条件(r_ir_update値 & r_state値)
    w_capture_devid P_IR_IDCODE & P_STATE_CAPTURE_DR
    w_shift_devid P_IR_IDCODE & P_STATE_SHIFT_DR
    w_shift_bypass (P_IR_BYPASS | P_IR_HIGHZ | P_IR_CLAMP) & P_STATE_SHIFT_DR
    bsr_capture (P_IR_EXTEST | P_IR_SAMPLE) & P_STATE_CAPTURE_DR
    bsr_shift (P_IR_EXTEST | P_IR_SAMPLE) & P_STATE_SHIFT_DR
    bsr_update (P_IR_EXTEST | P_IR_SAMPLE) & P_STATE_UPDATE_DR

  • IR Update-FF(r_ir_update)の値のみで決まる制御信号の論理です。変化タイミングは全てTCK posedgeです。

    Table 8: BSR mode制御論理
    制御信号名 True条件(r_ir_update値)
    bsr_mode_i 0固定。RUNBIST, INTEST時Trueだが今回非実装。(*4)
    bsr_mode_o (P_IR_EXTEST | P_IR_CLAMP)
    bsr_mode_e (P_IR_EXTEST | P_IR_CLAMP)
    bsr_highz P_IR_HIGHZ

TDO(r_tdo_lockup)接続論理
  • 最後はTDO出力選択、コントローラ内のr_tdo_lockupに接続するシフトチェーンの選択です。前回レポートのFigure 1に書いたセレクタを表にしただけです。

  • ステートShift-IR(P_STATE_SHIFT_IR)が最も優先度高いことと、シフトはLSB-Firstであることに注意下さい。

    Table 9: r_tdo_lockup入力選択論理
    選択条件(r_state & r_ir_update) 選択チェーン(接続信号)
    P_STATE_SHIFT_IR r_ir_capture[0]
    ~P_STATE_SHIFT_IR & P_IR_IDCODE r_devid[0]
    ~P_STATE_SHIFT_IR & (P_IR_SAMPLE | P_IR_EXTEST) bsr_so
    ~P_STATE_SHIFT_IR & (P_IR_BYPASS | P_IR_HIGHZ | P_IR_CLAMP) r_bypass
    その他 r_tdo_lockup (hold)

次回はRTLを書いてSimulationしてみる
  • 信号とパラメータの説明でお腹いっぱい感があるので、タイミングチャートとRTL Simulation結果の対応は次回にします。
Notes
  • Boundary Scanのみを意識しており、USERCODE, INTEST, RUNBIST命令は実装していない点ご注意下さい。
  • BSRのTypeによります。BC_1はPad(fin)入力, BC_2はBSR内Update-FF入力です。
  • 設定外ステートならTest-Logic-Resetになる論理を追加すれば良いですが、テスト目的の回路はなるべく小さくします。
  • 無いとは思いますが、もしASICのJTAGコントローラ設計に適用する場合、BSR自身もScanテストの対象となるので0固定はまずいです。DFT挿入時に制御FFを追加するなど対処が必要です。
2022/04/02: 初版
2022/04/03: w_capture_bypass削除, tdo_en_n論理反転, r_tdo_en_n追加
2022/04/17: P_EN_HIGHZ, P_EN_CLAMPパラメータ, TRSTポート追加
Copyright(C) 2022 Altmo
本HPについて