본문 바로가기

Job Notes/Embedded System & RTOS

JTAG의 소개 및 원리 4편

JTAG 소개 원리 4

등록: 2001-07-25 15:02:06

이제 우리는 JTAG 진짜 동작 원리를 알아야 합니다. 강좌 이후가 JTAG 어떻게 사용할수 있는 지를 알수 있죠. 다시 한번 정리해 보죠

Boundary-Scan Cell 다음과 같은 내부적 연결 단자가 있읍니다. (강좌 4 그림 참조)

 
                    ShiftDR           SO (Scan Out)    Mode
                    |                 ^                |
         ┏━━━━ |━━━━━━━━ |━━━━━━━━| ━━━┓
                  |                 |                |       
                  |                 |               +V+-+    
  PI--------→*-----|-----------------|-------------→| M |--------→PO
 (Data      |     |                 |               | U |       (Data
   In)      |     V  Sift Register  |            +→| X |        Out)
            |   +-+-+     +------+  |  +------+  |  +---+    
            +-→| M |---→|1D  Q |--+→|1D  Q |--+           
                | U |     |      |     |      |              
            +-→| X |  +→|>C1   |  +→|>C1   |              
            |   +---+  |  +------+  |  +------+              
            |          |            |    Sift Register       
            |          |            |                        
            |          |            |                        
            |          |            |                        
         ┗━ |━━━━━| ━━━━━ |━━━━━━━━━━━━┛
              |          |            |
         SI (Scan In) ClockDR       UpdateDR

PI

Parallel Input

PO

Parallel Output

SI

Scan Input

SO

Scan Output

SiftDR

PI 단자로 입력된 신호를 Sift Register 인가할것인지 아니면 PO쪽으로 인가할 것인지를 결정합니다.

ClockDR

쉬프트 레지스터로 인가된 PI신호를 랫치하여 기억 시켜 놓을지를 결정합니다.

UpateDR

쉬프트 레지스터로 기억된 상태를 PO쪽에 인가시킬 것인지를 결정합니다.

Mode

쉬프트 레지스터에서 나온 출력을 PO 인가 할것인지 아니면 PI쪽에서 출력을 PO 인가 것인지를 결정합니다.

외부에는 TAP라고 하는 단자가 있읍니다. 이단자는 다음과 같이 정의 되어 있습니다.

TDI

Test Data In

TDO

Test Data Out

TMS

Test Mode Select

TCK

Test Clock

TRST

Test Reset

여러분은 여기서 이상한 점을 것입니다.

Boundary-Scan Cell TAP 사이의 단자들은 서로 매칭이 되지 않는다는 입니다. 그렇다면? 여기에는 무언가가 숨겨져 있읍니다. 이것이 무엇일까요?...

그것이 강좌 5탄에서 그렸던 JTAG 블럭도에 표시되어 있는 TAPC (TAP Controller) 라는 것이 숨겨진 바로 그놈입니다. TAPC TMS TCK 제어를 받습니다. 그리고 TAPC 단자들과 Boundary-Scan Cell 단자들(SiftDR, ClockDR, UpateDR, Mode 단자) 연결되어 있는 것이지요. JTAG 내부에는 Boundary-Scan Cell 이외에 여러가지가 내장되어 있읍니다. 우선 강좌 5탄에 그렸던 그림을 다시 그려보죠...

 
        ┌────────────────────┐
              ■→■→■→■→■→■            
                                            
              ■ ┏━━━━━━┓ ■            
              ↑ ┃ 로직 코어  ┃ ↓            
              ■ ┃   +----+   ┃ ■            
              ↑ ┃   |    |   ┃ ↓            
              ■ ┃ ■→■→■ ┃ ■            
              ↑ ┃ | +----+ | ┃ ↓            
              ■ ┃ |특정로직| ┃ ■            
              ↑ ┗━━━━━━┛ ↓     |\    
              |     |        |    *----→| |    
              |     |        +---------→| |    
   TDI  □---*-**-----*---□-------------→| |----□ TDO
             | |        ByPass       +-→| |    
             | |       Register      |+→| |    
             | |                     ||  |/     
             | |  +----------------+ ||         
             | +->| Identification |-+|         
             |    |    Register    |  |         
             |    +----------------+  |         
             |                        |         
             |    +-----------------+ |         
             +--->|   Instruction   |-+         
                  |     Register    |           
                  +-----------------+           
                                              
                                              
                  +--------------+              
    TMS □--------> |      TAP     |              
    TCK □--------> |  Controller  |              
                  +--------------+              
                                              
        └─────────□──────────┘
                           TRST

이그림 자주 이용될겁니다. 기억 해주세요..

그림을 보면 제가 아직 설명하지 않은 것들이 있죠? 그것이 무엇인지를 이제는 설명할 떄가 된것 같습니다. 가장 하단에 TAP Controller이것은 무엇일까요? 놈이 JTAG 핵심이라고 할수 있죠 일면 TAPC라고 합니다. 이놈은 나머지를 모두 제어하죠... 그래서 이놈은 다음에 논의하기로 합시다.

Instruction Register

이놈은 내부에 4비트로 구성되어 있읍니다. 한글로 직역하면 명령 기억 장소 인데, 이놈에 의해서 TDI TDO 어디에 연결될지를 결정합니다.

Identification Register

이놈은 32비트로 구성되어 있죠.. JTAG 사용하는 장치(디바이스) 대한 정보가 기억되어 있읍니다. 레지스터를 이용하여 해당 칩셋이 어떤 것인지를 알아낼수 있읍니다. 제가 JTAG 동작을 설명할때 가장 먼저 접근할 놈이 이놈입니다.

ByPass Register

이놈은 그대로 TDI TDO 바로 연결시켜 버리는 놈입니다. 물론 TCK 한클럭 소모하기는 하지만요. 이것은 여러 CPLD 연결되어 있을때 접근 속도를 효율적으로 하기 위한 놈이죠... 물론 나중에 설명할 겁니다.

다음이 Boundary-Scan Cell Register. 이것이 우리가 그동안 접근 공부한 놈이죠. 물론 JTAG 궁극적으로 접근하려는 놈이기도 하죠...

이젠 TAPC 설명할때가 되었네요... TAPC 모르면 JTAG 모르는 것과 진배 없읍니다. 이놈을 이해해야만 하므로 여러분은 정신 바짝 차리고 읽어야 합니다. TAPC TMS TCK 이용하여 제어가 되는데 제가 TAPC 동작방식을 이해한후 감탄을 안할수가 없었읍니다. 우선 이것을 이해하기 전에 여러분은 KELP 자료실에서 JTAG 시뮬레이션 프로그램을 다운 받으신후에 실행하신후, 강좌를 계속 읽어 주시기를 부탁 드립니다. 그래야 이해가 빨리 될수 있거든요...

TAPC 내부에 자기 상태를 갖습니다. 상태에 따라 무엇을 할것인가를 결정합니다. 우선 상태도를 그려 볼까요...

저에 고생은 시작 될것 같네요....

 
+------------+
| Test-Logic |<-----------------------------------------------------+
| Reset      |                                                      |
+------------+                                                      |
    | 0                                                             |
    V                                                               |
+------------+  1       +------------+   1          +------------+ 1|
| Run-Test/  |--------->| Select-    |------------->| Select-    |--+
| IDLE       |  ^       | DR-Scan    |              | IR-Scan    |
+------------+  |       +------------+              +------------+
   ^            |              | 0                        | 0
   |            |              |                          |
   |            |              V                          V
   |            |     1 +------------+            1 +------------+
   |            |   +---| Capture-DR |          +---| Capture-IR |
   |            |   |   +------------+          |   +------------+
   |            |   |          | 0              |         | 0
   |            |   |          |                |         |
   |            |   |          V                |         V
   |            |   |   +------------+ <-+      |   +------------+> <-+
   |            | +---->| Shift-DR   | 0 |    +---->| Shift-IR   | 0 |
   |            | | |   +------------+---+    | |   +------------+---+
   |            | | |          | 0            | |         | 0
   |            | | |          |              | |         |
   |            | | |          V              | |         V
   |            | | |   +------------+ 1      | |   +------------+ 1
   |            | | +-> | Exit1-DR   |-----+  | +-> | Exit1-IR   |-----+
   |            | |     +------------+     |  |     +------------+     |
   |            | |            | 0         |  |           | 0          |
   |            | |            |           |  |           |            |
   |            | |            V           |  |           V            |
   |            | |     +------------+ <-+ |  |     +------------+> <-+ |
   |            | |     | Pause-DR   | 0 | |  |     | Pause-IR   | 0 | |
   |            | |     +------------+---+ |  |     +------------+---+ |
   |            | |            | 0         |  |           | 0          |
   |            | |            |           |  |           |            |
   |            | |            V           |  |           V            |
   |            | |   0 +------------+     |  |   0 +------------+     |
   |            | +-----| Exit2-DR   |     |  +-----| Exit2-IR   |     |
   |            |       +------------+     |        +------------+     |
   |            |              | 0         |              | 0          |
   |            |              |           |              |            |
   |            |              V           |              V            |
   |            |       +------------+     |        +------------+     |
   |            |       | Update-DR  |<----+        | Update-IR  |><----+
   |            |       +------------+              +------------+
   |            |         1 |  0 |                    1 |   0 |
   |            +-----------+----|----------------------+     |
   +-----------------------------+----------------------------+>

그렸네요... 푸하하하하....

이것이 TAPC 가질수 있는 모든 상태도 입니다. 상태도라는 것이 무엇이냐? ... 이걸 제가 설명하기에는 시간 낭비라서 그냥 진행하지요...

우선 하드웨어적으로 JTAP 리셋 시키려면, TRST단자를 LOW 떨어뜨리고 약간의 시간이 지나면 TAPC 그와 관련된 모든 상태가 초기화 됩니다. 초기화가 되면 TAPC Test-Logic Reset 상태가 됩니다. 여기서 TMS단자와 TCLK단자에 신호를 주면 TAPC 상태가 변화가 생깁니다.

우선 어떻게 신호를 주면 되는 보죠...

JTAG 신호 다이어 그램은 다음과 같습니다.

 
                 ____       ____
       TCLK    _↑   ↓____|    |____
                :    :                    (### : 데이타)
     TDI/TMS  -<###>-:---------------
                     :
       TDO    -----<###>-------------

그림에 보듯이 TDI TMS 원하는 상태로 인가한후, TCLK LOW 상태에서 HIGH 올리면 해당 상태가 JTAG내부로 인가되지요. JTAG내부에 있는 TDO 외부에 인가하려면 TCLK HIGH에서 LOW 인가하면 됩니다. 그러므로 TCLK 한클럭 LOW에서 HIGH 다시 LOW 되면, TDI TMS값이 내부로 적용되고 TDO값이 외부로 배출되는 것입니다. 저는 이것을 TAP Accept싸이클이라고 부르겠읍니다.(이건 제가 임으로 붙인 이름이므로 정식명칭이 아님을 밝힙니다. ) 동작으로 TAP 모든 동작을 제어하게 됩니다. 외부에서 연결 시켜서 동작 시키는 방식은 간단하지요?

그럼 상태도에서 TAPC Test-Logic Reset 상태로 되어 있다고 합시다. 상태를 Capure-IR상태까지로 이동시키려면 어떻게 해야 할까요.. TAPC 상태는 TDI값과는 무관합니다. 단지 TMS TCLK 조작하면 상태를 이동시킬수 있읍니다.

우리 한번 해보죠.. 이거 할때 우리는 단순 무식해져야 합니다. ^^;

그림에서 Test-Logic Reset에서 Capure-IR까지의 상태를 이동시키려면 다음과 같은 상태로 변해가야 합니다.

  1. Test-Logic Reset
  2. Run-Test/Idle
  3. Select-DR-Scan
  4. Select-IR-Scan
  5. Capure-IR

그럼 미로추적을 시작해보죠...

  • 1상태에서 2상태로 갈려면, TMS 0(LOW) 주고 한클럭 주면 됩니다. (TAP Accept 싸이클) 여기서 한클럭 준다는 것은 TCLK "Low → High → Low" 한다는 것이죠.
  • 2상태에서 3상태로 갈려면, TMS 1(HIGH) 주고 한클럭 주면 됩니다.
  • 3상태에서 4상태로 갈려면, TMS 1(HIGH) 주고 한클럭 주면 됩니다.
  • 4상태에서 5상태로 갈려면, TMS 0(LOW) 주고 한클럭 주면 됩니다.

쉽죠? 그럼 Capure-IR에서 Run-Test/Idle 이동하려면 어떻게 하여야 할까요?

  1. Capture-IR
  2. Exit1-IR
  3. Update-IR
  4. Run-Test/Idle

이렇게 가면 됩니다. (가장 최단 코스죠 ^^)

  • 1상태에서 2상태로 갈려면, TMS 1(HIGH) 주고 한클럭 주면 됩니다.
  • 2상태에서 3상태로 갈려면, TMS 1(HIGH) 주고 한클럭 주면 됩니다.
  • 3상태에서 4상태로 갈려면, TMS 1(HIGH) 주고 한클럭 주면 됩니다.
  • 4상태에서 5상태로 갈려면, TMS 0(LOW) 주고 한클럭 주면 됩니다.

이렇게 상태를 변화 시키면 됩니다. 각각의 상태는 TAPC 무언가를 하게 됩니다. 여기서 중요한것은 TAPC 어떤 상태로 되어 있든 Test-Logic-Reset상태로 이동하려면, TMS 1(HIGH) 주고 6클럭만 주면 됩니다. 그러면 어떤 경우이든 Test-Logic-Reset 됩니다. 한번 직접 한번 미로 테스트를 해보세요... 맞나 틀리나...

우선 TAPC 상태에 대하여 알아 봅시다. 상태가 하는 것이 무엇을 하는 것인지... 대부분의 상태는 무언가를 수행하는 기능은 없읍니다. 단지 원하는 상태까지 도달하기 위한 중간 상태역활이 대부분이죠. 상태에 대한 설명을 간단하게 하죠...

Test-Logic-Reset

TAPC JTAG 관련된 모든 내용을 초기화 합니다. 동시에 상태 시작점이기도 합니다.

Run-Test/Idle

JTAG 동작상태로 진입시키고 TAP 통하여 적용한 내용이 장비에 영향을 끼치게 합니다.

Select DR-Scan

명령 레지스터에 의해 선택된 Boundary-Scan Cell 제어를 할것인가 아닌가에 대한 중간 상태 값입니다. 상태 변이용 중간 상태이지 특별히 하는 기능은 없읍니다.

Capture DR

명령 레지스터에 의해 선택된 Boundary-Scan Cell PI단자 값을 내부 시프트 레지스터쪽으로 적용되게 합니다. 현재 상태를 쉬프트할수 있게 준비하는 기능입니다.

Shift DR

명령 레지스터에 의해 선택된 Boundary-Scan Cell 내부 값을 SO 출력 시키고 SI값을 내부에 적용할수 있게 합니다. 상태로 있을때 TCLK값을 클럭 줄때마다 TDI값이 명령 레지스터에 의해 선택된 Boundary-Scan Cell SI 연결되고 SO 값이 TDO 연결됩니다.

Exit1 DR

상태 변이용 중간 상태이지 특별히 하는 기능은 없읍니다.

Pause DR

상태 변이용 중간 상태이지 특별히 하는 기능은 없읍니다.

Exit2 DR

상태 변이용 중간 상태이지 특별히 하는 기능은 없읍니다.

Update DR

명령 레지스터에 의해 선택된 Boundary-Scan Cell PO단자 값에 내부 시프트 레지스터쪽의 내용을 적용시킵니다.

Select IR-Scan

명령 레지스터에 제어를 할것인가 하지 않을것인지에 대한 중간 상태 값입니다. 상태 변이용 중간 상태이지 특별히 하는 기능은 없읍니다.

Capture IR

명령 레지스터의 Boundary-Scan Cell PI단자 값을 내부 시프트 레지스터쪽으로 적용되게 합니다. 현재 상태를 쉬프트할수 있게 준비하는 기능입니다.

Shift IR

명령 레지스터의Boundary-Scan Cell 내부 값을 SO 출력 시키고 SI값을 내부에 적용할수 있게 합니다. 상태로 있을때 TCLK값을 클럭 줄때마다 TDI값이 명령 레지스터 Boundary-Scan Cell SI 연결되고 SO 값이 TDO 연결됩니다.

Exit1 IR

상태 변이용 중간 상태이지 특별히 하는 기능은 없읍니다.

Pause IR

상태 변이용 중간 상태이지 특별히 하는 기능은 없읍니다.

Exit2 IR

상태 변이용 중간 상태이지 특별히 하는 기능은 없읍니다.

Update IR

명령 레지스터에 의해 선택된 Boundary-Scan Cell PO단자 값에 내부 시프트 레지스터쪽의 내용을 적용시킵니다.

에궁 이번 강좌는 여기서 쫑을 보아야 겠네요.. 지가 약속시간이 다되서요....

항상 이야기하는 데요. 글의 지적 소유권 관계는 GPL 따릅니다. 물론 상업적인 용도로는 사용할수 없죠.... 그럼..