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結果の対応は次回にします。
|