DFT

JTAG TAP controller

By CourseTron Team ·  6 min read ·  Updated Oct 2026 💬 𝕏 in f
Table of Contents
    ? Print / Save as PDF

    In short: The JTAG TAP controller is a 16-state synchronous finite state machine, clocked by TCK and steered by a single pin TMS, that sequences every scan access—loading the instruction register (IR) and then shifting data through a chosen data register (DR) such as the boundary-scan register—without any address bus at all.

    If you have ever probed a board that "just works" through a four-wire header, you have leaned on the IEEE 1149.1 Test Access Port. The genius of the standard is that all of its complexity collapses into one deterministic state machine. Master the 16-state TAP controller and the rest of JTAG—instructions, boundary scan, debug, and in-system programming—falls into place. This is also one of the most common DFT interview questions, so we will treat it with the rigour it deserves.

    Why a state machine and not an address bus?

    JTAG was conceived to test assembled boards where BGA balls and dense routing made bed-of-nails probing impractical. The designers wanted the absolute minimum pin cost: four mandatory pins—TCK (clock), TMS (mode select), TDI (data in), TDO (data out)—plus an optional TRST. With only one control pin (TMS), you cannot encode a command in parallel, so the standard encodes commands in time: the value sampled on TMS at each rising edge of TCK walks the controller through a fixed graph of states. No address decoding, no handshake—just a path through the FSM.

    TMS is sampled on the rising edge of TCK; TDI is also captured on the rising edge, while TDO is updated on the falling edge. That half-cycle offset is what lets devices be daisy-chained reliably—TDO of one feeds TDI of the next with set-up margin built in.

    The 16 states, grouped by column

    The controller has exactly 16 states, which fall into three logical groups: one reset/idle spine, a seven-state column for the Data Register, and a matching seven-state column for the Instruction Register. The two columns are structurally identical—Capture, Shift, Exit1, Pause, Exit2, Update, Select—which is a lovely piece of engineering economy.

    IEEE 1149.1 TAP: 16 states Test-Logic-Reset Run-Test/Idle Select-DR Select-IR Capture-DR Capture-IR Shift-DR Shift-IR Exit1-DR Exit1-IR Pause-DR Pause-IR Exit2-DR Exit2-IR Update-DR Update-IR TMS=0TMS=1 Five TMS=1 clocks reach Test-Logic-Reset from any state. Update-IR also returns to Idle. CourseTron · coursetron.com
    The 16-state TAP controller: a reset/idle spine feeding symmetric DR and IR scan columns.

    From Test-Logic-Reset, holding TMS=1 for five TCK cycles guarantees reset from any state—a fact worth memorising, because it is the universal "known good" entry point. TMS=0 drops into Run-Test/Idle. Every scan operation then threads Select → Capture → Shift (loop while TMS=0) → Exit1 → Update.

    A worked IR-then-DR access

    Suppose a device has a 4-bit IR and you want to read its 32-bit IDCODE. Starting in Run-Test/Idle, the TMS sequence is: 1 (Select-DR) 1 (Select-IR) 0 (Capture-IR) 0 (Shift-IR). You now shift four bits of the IDCODE opcode LSB-first on TDI while watching the captured 0...01 pattern emerge on TDO—a built-in integrity check mandated by the standard. Then 1 (Exit1-IR) 1 (Update-IR) latches the new instruction. A second pass through the DR column shifts 32 clocks in Shift-DR to read the device ID.

    In Capture-IR the two least-significant bits must load as 01. If your scan chain returns anything else, you have a broken TDI→TDO path or a stuck TCK—this is the first thing an ATE or a tool like Siemens Tessent flags during chain integrity verification.

    TMS path from Run-Test/Idle to Update-IR Run-Test/Idle Select-DR Select-IR Capture-IR Shift-IR Exit1-IR Update-IR TMS=1TMS=1TMS=0TMS=0TMS=1TMS=1 4 opcode bits, LSB firstopcode latched CourseTron · coursetron.com
    TMS sequence from Run-Test/Idle to Update-IR: 1, 1, 0, 0, shift four bits, then 1, 1.

    Instructions and the registers they select

    InstructionSelects DRPurposeMandatory?
    BYPASS1-bit bypassSkip a device in the chainYes
    IDCODE32-bit ID regRead manufacturer/part IDOptional
    SAMPLE/PRELOADBoundary-scan regSnapshot or preload pin valuesYes
    EXTESTBoundary-scan regDrive/observe board interconnectYes
    INTESTBoundary-scan regTest internal core logicOptional

    The all-ones opcode is reserved for BYPASS so that an uninitialised chain still has a defined one-bit path. Tools such as Synopsys TetraMAX/Spyglass DFT and Cadence Modus generate the vectors and the BSDL-driven patterns; the TAP FSM is the hardware contract they rely on.

    Boundary scan: EXTEST in motion

    Boundary scan inserts a shift-register cell between every functional pin and the core. Under EXTEST, you preload the cells (SAMPLE/PRELOAD), latch them on Update-DR, and the cells drive the physical pins—letting you test the copper between two chips with no core cooperation. The animation below shows a serial bit streaming through four such cells during Shift-DR.

    Boundary-scan register in Shift-DR TDITDO cell0 pin 0 cell1 pin 1 cell2 pin 2 cell3 pin 3 One bit moves one cell per TCK edge while the TAP is in Shift-DR. CourseTron · coursetron.com
    One data bit propagating through the boundary-scan register, one TCK edge per cell, while the TAP sits in Shift-DR.

    For deeper treatment of cell types (observe-only, control, bidirectional) and BSDL files, see our companion piece on boundary scan with JTAG, and for how scan paths are stitched at RTL, read scan chain insertion. Teams building real silicon test flows often pair this theory with hands-on labs from ChipXpert's VLSI training.

    Want to walk the full 16-state graph on a live simulator, write BSDL, and debug a broken chain? Our DFT track covers TAP, boundary scan and ATPG end to end — explore the CourseTron DFT course.

    Frequently asked questions

    How many TMS=1 clocks reset the TAP from any state?

    Five. Holding TMS high for five rising TCK edges forces the controller to Test-Logic-Reset regardless of the current state, which is why most drivers begin every session that way instead of relying on the optional TRST pin.

    Why are Capture and Update separate states?

    Capture loads the shift register from a parallel source (pin values or IDCODE) at the start of a scan; Update latches the shifted result to a parallel output after shifting. Separating them means pins never glitch mid-shift—the output holds its old value until Update-DR.

    What do Pause-DR and Pause-IR achieve?

    They let a host temporarily halt shifting—for example to refill a buffer over slow USB—without losing register contents or leaving the shift path. You enter via Exit1, sit in Pause indefinitely, then resume through Exit2 back into Shift.

    Can multiple chips share one TAP?

    Yes—devices daisy-chain TDO-to-TDI. Each device not under test is loaded with BYPASS (a single register bit), so the host accounts for the extra bits and addresses any one device by position in the chain.

    Advertisement