본문 바로가기

Job Notes/Embedded System & RTOS

JTAG의 소개 및 원리 1편

JTAG 소개 원리 1

등록: 2001-07-25 15:00:34

제가 JTAG 소개하는 글을 올리기 이전에 투정 한번하죠... 솔찍히 하드웨어를 소개하는 글은 텍스트 에디터로 쓰기는 정말 힘들어요..

?

그림이 많이 들어가야 이해가 쏙쏙 되는데, 그림을 그리는 것이 그리 쉬운 것이 아니거든요... 그래서 말인데요... 이글의 내용에 JTAG관련 그림을 그리는 정성이 보통 정성이 아니라는 알아주세요.. 만약 알아주면 이제 그만 쓸렵니다. ^^;

그럼 JTAG라는 것이 무엇일까요?

소개하기 이전에, 이글을 읽으시는 분은 하드웨어에 관련된 것을 아주 아주 쬐금 알고 있는 것이 편하실거예요.. 그럼 시작하죠...

제가 알고 있던 하드웨어 동네는요. 원시인 동네였던 같네요. 거의 수작업화 했던 디버그 방법을 가지고 있었던 같다는 것이 강좌를 시점의 생각입니다. 예전에는 (물론 지금도 이렇게 하시는 분들은 많습니다만) 보드 설계를 하고 PCB 뜨고 IC 납땜하고 이것을 테스트합니다. 순서는 이렇습니다.

우선 디바이스별 전원의 공급 선이 이상이 없는가를 확인합니다. 물론 테스터기나 점퍼 테스터를 이용하여 하나씩 핀들의 연결 관계를 시험 하지요... 여기서 단자들끼리 납땜이 되어 있나, 전원 공급이 제대로 있나를 일일이 확인합니다. 전원 공급 배선들이 붙어 있거나 하면 디바이스에 손상이 생기기 때문이죠..

다음에 하드웨어 테스트용 프로그램을 하나 짜지요... 물론 아주 간단하게 LED 기타 IO핀을 억세스해서 토글링하게 하죠. 토글링한다는 것은 이런 파형이 주기적으로 나타나게 하는 것이지요...

 
    |
 5V |---+        +---------+        +---------+        +---
    |   |        |         |        |         |        |
 0V |   +--------+         +--------+         +--------+
   -+--------------------------------------------------------
    |

그래서 오실로스코프를 이용하여 관찰하는 것입니다. 만약 이런 파형이 나오지 않는다면? 오호~ 그것은 하드웨어 설계자한테는 죽음의 시간이 시작된 겁니다. 일단 CPU 살아야 하든 하지 않겠읍니까?

칩일 경우야 거의 외부 디바이스와 독립된 동작이 가능하기 때문에,

  • 전원 공급선에 이상이 없는가...
  • 오실레이터 와의 연결이 제대로 되어 있는가..
  • 인터럽트 핀에 다른 신호가 들어가지 않는가.
  • 리셋 핀에 이상이 없는가를 확인하면 되지만..

롬이나 램에 연결되어 동작되어야 하는 회로 구성이라면,

  • 롬에 배선 연결이 제대로 되어 있는가?
  • 롬에 칩셀렉트와의 연결이 제대로 되어 있는가?
  • 어드레스 버스가 롬에 제대로 연결되어 있는가?
  • 어드레스 디코더가 동작하는 ?
  • 리드 라이트 단자에 제대로 신호가 들어 가는 하는 것을

알고 있던 경험과 지식을 바탕으로 이리저리 검사하게 되지요.. 물론 이것을 위해서 리셋 버튼이나 전원 스위치를 수도 없이 키고 끄게 됩니다.

이렇게 하드웨어의 연결이 이상없으면, 시험용 프로그램을 이리 저리 짜서 보드의 디바이스들을 시험합니다. 이때에 수많은 롬을 굽게 되거나 원칩을 굽게 되지요.. 많은 회사에 있는 개발자라면 전용 개발툴을 사용해서 쉽게 있지만 그렇지 못한 회사가 많다는 것이 국내 산업의 현실이지요... 그래서 아직도 이렇게 시험하는 알았습니다. 그런데 이건 LSI칩들을 조합하는 보드에서나 가능한 일이지만 회로가 PLD CPLD같은 대규모 칩에 내장되는 경우는 연결 핀을 일일이 찍어서 시험하기도 힘들고 (핀사이의 간격이 얼마나 조밀한지 여러분은 아시겠지요? 이곳에 오실로 스코프 한번 밀어 넣어서 찍어보세요.. 귓구멍에 전봇대 넣는 것이 쉬울 지도 모르죠...) 내부 회로의 연결 관계들을 검사하기도 힘듭니다.

이런 고민은 저희 나라만 했겠읍니까? 우리나라 보다 손가락이 길고 두꺼운 미국사람들은 우리보다 고역이 심하면 심했지 쉽지는 않았을 겁니다. 역시 필요는 발명의 어머니라고... 개발자의 게으름은 기어코 JTAG라는 것을 만들게 되지요...

여기서 JTAG라는 것이 무슨 약자인지 궁금하지 않으십니까?

JTAG Joint Test Access Group 약자입니다.

이게 한글로는 무슨 뜻인지 모르겠습니다. 그런데 웹상에서 JTAG라는 키워드로 글을 찾는 것보다는 Boundary-Scan이라는 키워드로 글을 찾는 것이 쉽습니다. 일반적으로 JTAG 말보다 Boundary-Scan이란 말이 많이 사용되고 있죠....

그럼 영어를 못하는 저의 입장에서 Boundary-Scan이라는 뜻을 해석해보죠.. 직역하면 "주변을 훑어본다" 것이 됩니다. 이말이 JTAG 설명하는 말이 처음이자 끝이 됩니다.

내용을 구체적으로 살펴보기 이전에 Boundary-Scan 역사를 살펴보면

1980년대 후반의 JTAG라는 곳에서 연구 중이던 Boundary-scan 설계를 IEEE에서 1990년에 표준화하였고 IEEE std 1149.1 제정되었습니다.

영문서에 보면 이렇게 되어 있습니다.

IEEE Standard 1149.1-1990 "Test Access Port and Boundary-Scan Architecture," available from the IEEE, 445 Hoes Lane,PO Box 1331, Piscataway, New Jersey 08855-1331,USA

그러면 Boundary-Scan 이라는 뜻을 좀더 구체적으로 살펴 봅시다.

개발자가 하드웨어를 테스트 하다 보면 문제의 원인을 알아내기 위해서 특정 단자의 상태를 임으로 설정해 필요가 생깁니다. 그런데 디바이스는 PCB상태에서 이미 다른 디바이스와 연결되어 있어서 강제로 인가하려면 핀의 연결을 같은 것으로 끊고 강제로 인가하는 수밖에 없습니다. 그런데 여러 조건을 시험하려면 이렇게 하는 것이 그리 쉽지 않죠.... CPU칩에 수많은 배선을 끊고 있고 하는 것이 쉽겠읍니까? 현미경이나 갖다 놓고 해야 하지 않을까요? 잠깐 그림으로 볼까요?

 
                                   +------+
                         +---------|      |-
        +------+         | +-------|  LSI |-
       -|      |---------+ |      -|  #2  |-
       -|  LSI |-----------+      -|      |-
       -|  #1  |-----------+       +------+
       -|      |---------+ |       +------+
        +------+         | +-------|      |-
                         +---------|  LSI |-
                                -|  #3  |-
                      강제로 인가 -|      |-
                      하고 싶은곳  +------+

여기서 우린 LSI #3번에 입력되고 있는 신호가 이상한지 LSI 디바이스 칩이 이상한지가 궁금한 겁니다. 시스템이 동작 중에는 이런 행위를 없죠? 그렇다면 이곳에 이런 장치가 있다고 가정합시다.

 
                                   +------+
                         +---------|      |-
        +------+         | +-------|  LSI |-
       -|      |---------+ |      -|  #2  |-
       -|  LSI |-----------+      -|      |-
       -|  #1  |-----------+       +------+
       -|      |--+        |       +------+
        +------+  |        +-------|      |-
                  |        +-------|  LSI |-
                  | 입력쪽 |      -|  #3  |-
                  |상태표시|      -|      |-
                  |      |       +------+
                  +---□---+
                      
                출력쪽 상태 강제 인가

이런 장치를 붙이면 LSI#1에서 나온 출력 신호를 볼수도 있고 LSI#3쪽에 입력되는 신호를 개발자 임의대로 넣을 있으면 굳이 배선을 끊지도 않아도 되고 좋겠죠? 문제는 이런 회로를 일일이 집어 넣는 것도 역시 문제고 자체가 문제를 일으킬 소지가 있다는 것입니다.

그래서 절충안으로 나온 것이 CPLD 같은 대규모 LSI 넣으려는 코어 로직에 아예 그림같은 기능을 하는 로직을 집어 넣어 버리는 것입니다. 그러면 물론 CPLD 넣을 있는 용량의 일부분을 낭비하는 결과를 초래할 수는 있지만 그에 비해 하드웨어 체크를 하기 위해 소모하는 시간에 비하면 절대 아까운것이 아닐지도 모르죠...

그러면 모든 로직 연결마다 하느냐? 물론 그러면 아깝죠.. 개발자 경험상 입력과 출력 쪽만 이런 장치를 하면 대부분의 문제가 해결된다는 것을 알죠... 그래서 주변에만 위와 같은 회로를 추가하는 것입니다. 그래서 Boundary라는 말이 붙은것이지요...

그러면 Scan 붙을까요? 우선 그림에 입력 상태를 표시하고 출력 상태를 강제로 인가할 있는 기능을 작는 로직의 이름을 한번 붙여 봅시다. 이름하여 "Boundary-Scan Cell" 이라고요 .....

화장실을 잠깐 가야 하는 이유로 인하여 일단 3탄은 여기서 접죠.

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