JTAG
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.
1. 개요
JTAG(Joint Test Action Group)는 집적 회로(IC)의 제조 및 현장 결함을 발견하기 위해 1985년에 개발된 기술이다. 1990년 IEEE 1149.1 표준으로 제정되었으며, 칩 내부의 경계 스캔을 통해 핀 연결을 테스트하고, 디버깅, 펌웨어 프로그래밍 등에 활용된다. JTAG는 4~5개의 핀(TDI, TDO, TCK, TMS, TRST)을 사용하여 직렬 통신하며, EXTEST, INTEST, BYPASS, IDCODE 등의 명령어를 지원한다. 최근에는 핀 수를 줄인 cJTAG(IEEE 1149.7)도 개발되었으며, ARM, FPGA, CPLD, 마이크로컨트롤러 등 다양한 임베디드 시스템에서 사용된다. JTAG는 JTAG 어댑터와 JTAG 지원 애플리케이션을 통해 접근하며, USB, 이더넷 등의 인터페이스를 지원하는 다양한 하드웨어와 소프트웨어 개발 환경이 존재한다.
더 읽어볼만한 페이지
- 하드웨어 테스트 - 환경 스트레스 스크리닝
환경 스트레스 스크리닝(ESS)은 제품의 작동 수명 동안 겪을 물리적 환경 조건을 인위적으로 조성하여 제품 신뢰성을 사전에 검증하고 초기 불량률을 감소시켜 품질을 향상시키는 시험 과정이다. - 하드웨어 테스트 - USB 킬러
USB 킬러는 USB 포트에 연결하여 고전압을 발생시켜 컴퓨터의 호스트 어댑터와 사우스브리지를 손상시키는 장치이다. - 전자공학 제조 - 납땜
납땜은 땜납을 사용하여 금속을 접합하는 기술로, 전자제품 조립, 배관, 보석 세공 등 다양한 분야에서 활용되며, 재료의 납땜성, 땜납 종류, 가열 방식, 플럭스 사용 등 여러 요인이 성공에 영향을 미친다. - 전자공학 제조 - 스루홀 기술
스루홀 기술은 인쇄회로기판의 구멍에 전자 부품을 삽입하여 납땜하는 실장 방식으로, 기계적 결합력이 높지만 생산 비용이 높아 SMT 기술로 대체되었으나, 특정 분야에서 여전히 사용되며 자동화 기술을 통해 발전을 모색하고 있다. - 디지털 회로 - 클럭 신호
클럭 신호는 디지털 회로의 동작을 동기화하는 주기적인 신호로, 수정 발진기나 위상동기회로를 통해 생성되며 마이크로프로세서의 동작 속도를 결정하고 전력 효율을 위한 동적 주파수 변경 기술과 잡음 감소를 위한 사인파 클럭이 사용되기도 하며, 칩 내부 분배 효율성이 중요하다. - 디지털 회로 - 타이머
타이머는 시간 간격을 측정하거나 제어하는 장치 또는 기능으로, 기계식부터 전자식, 디지털, 소프트웨어 방식 등 다양한 형태로 존재하며, 독립적으로 사용되거나 시스템 내부에 내장되어 폭넓게 활용되고, 작동 방식과 구현 방식에 따라 여러 종류로 나뉘며, 최근에는 모바일 기반 타이머와 인공지능 기술을 활용한 효율적인 시간 관리 기능으로 발전하고 있다.
| JTAG | |
|---|---|
| JTAG (Joint Test Action Group) | |
| 유형 | 직렬 인터페이스 |
| 용도 | 집적 회로 테스트 |
| 관련 표준 | IEEE 1149.1 |
| 주요 기능 | 바운더리 스캔 테스트 온칩 디버깅 플래시 메모리 프로그래밍 |
| 응용 분야 | 임베디드 시스템 개발 펌웨어 디버깅 시스템 온 칩 (SoC) 테스트 |
| 역사 | 1985년: Joint Test Action Group (JTAG) 결성 1990년: IEEE 1149.1 표준 발표 |
| 특징 | 칩 레벨 및 시스템 레벨 테스트 지원 디버깅 및 프로그래밍 기능 제공 표준화된 인터페이스 |
| 주요 신호 | TDI (Test Data In): 테스트 데이터 입력 TDO (Test Data Out): 테스트 데이터 출력 TCK (Test Clock): 테스트 클럭 TMS (Test Mode Select): 테스트 모드 선택 TRST (Test Reset): 테스트 리셋 (선택 사항) |
| 장점 | 칩 내부 접근 용이 시스템 레벨 테스트 가능 디버깅 효율성 향상 |
| 단점 | 추가적인 핀 필요 설계 복잡성 증가 가능성 |
| 활용 예시 | ARM 아키텍처 기반 시스템 디버깅 FPGA 프로그래밍 라우터 및 스위치 테스트 |
| 참고 자료 | IEEE 1149.1-2001 Neal Stollon, "On-Chip Instrumentation", Springer, 2011 |
2. 역사
1980년대 집적 회로(IC) 기술이 발전하면서 칩 핀 간격이 좁아져 프로브를 이용한 검사가 어려워졌고, BGA 같은 패키지는 물리적으로 검사가 불가능했다. 이에 칩 내부 회로를 연결해 상태를 읽는 바운더리 스캔(Boundary scan영어)이 고안되었고, 이를 규격화한 것이 JTAG이다. JTAG는 1990년 IEEE 1149.1로 표준화되었다.[3]
최근에는 검사 목적 외에 임베디드 시스템의 소프트웨어 디버깅 등 ICE의 일종으로 CPU나 FPGA에 접근하는 수단으로도 활용되나, 실시간 관측은 재현되지 않을 수 있다.
2. 1. 개발 배경
1980년대에는 다층 회로 기판과 집적 회로(IC)가 볼 그리드 어레이(BGA)와 같은 새로운 패키징 기술을 사용하면서, 프로브를 사용할 수 없는 IC 간의 연결이 이루어지고 있었다. 회로 기판 제조 및 현장 결함의 대부분은 기판의 불량한 납땜 접합부, 기판 연결 간의 결함, 또는 IC 패드에서 핀 리드 프레임으로의 본드 및 본드 와이어 때문이었다.[3] 이러한 결함을 발견하기 위해 1985년에 Joint Test Action Group(JTAG)이 결성되어 IC 간의 연결을 테스트할 수 있는 바운더리 스캔 기술을 개발했다.[3]2. 2. 표준화
1990년에 IEEE Std. 1149.1-1990[3]으로 IEEE 표준이 되었다. 같은 해에 인텔은 JTAG가 탑재된 최초의 중앙 처리 장치인 80486을 출시하여 모든 제조업체의 더 빠른 산업 채택을 이끌었다. 1994년에는 경계 스캔 설명 언어(BSDL)에 대한 설명이 포함된 보충 자료가 추가되었다. 2001년에는 EXTEST에 대한 모든 0 사용, SAMPLE과 PRELOAD의 분리, OBSERVE_ONLY 셀에 대한 더 나은 구현과 관련된 추가 개선 사항이 발표되었다.[4] 1990년 이후 이 표준은 전 세계 전자 회사에서 채택되었다. 경계 스캔은 이제 JTAG와 거의 동의어가 되었지만, JTAG는 제조 응용 분야 외에도 필수적인 용도로 사용된다. 2013년[5] 개정판인 IEEE Std. 1149.1은 광범위한 선택적 기능, BSDL에 대한 관련 확장 및 Tcl을 기반으로 하는 새로운 절차적 설명 언어(PDL)를 도입했다.3. 구성 및 작동 방식
JTAG은 칩 내부에 바운더리 셀(Boundary Cell)을 만들고, 이것을 외부 핀과 일대일로 연결하여 프로세서가 할 수 있는 동작을 중간의 셀을 통해 인위적으로 수행할 수 있도록 하는 방식으로 작동한다. 이러한 방식으로 JTAG은 다양한 하드웨어의 테스트나 연결 상태 등을 확인할 수 있다.[7]
JTAG 라인(엄밀하게 이야기하면 바운더리 스캔 셀)을 통해 칩 내부를 조사(Capture 기능) 및 제어(INTEST 기능)를 할 수 있다. EXTEST 기능을 이용하여 임베디드 시스템의 다른 칩(예: ROM, NAND Flash)을 제어하여, 리눅스 부트로더 등을 다운로드해 아무런 코드가 없는 임베디드 시스템을 부팅하게 할 수도 있다.[7]
프로세서(CPU)의 상태와는 상관없이 디바이스의 모든 외부 핀을 구동시키거나 값을 읽어 들일 수 있다.[9]
3. 1. 구성
JTAG 인터페이스는 칩 내부에 구성되며, 다음과 같은 핀들로 이루어진다.
데이터 라인이 하나만 사용 가능하므로, 프로토콜은 시리얼 방식을 사용한다. 클럭 입력은 TCK 핀을 통해 이루어지며, TCK 상승 에지마다 한 비트의 데이터가 TDI에서 입력되고 TDO로 출력된다. TMS 핀을 통해 설정을 변경하여 표준화된 JTAG 상태 머신을 거치게 된다. JTAG 상태 머신은 리셋하거나, 명령 레지스터에 접근하거나, 명령 레지스터에 의해 선택된 데이터에 접근할 수 있다.[7]
TCK의 최대 작동 주파수는 체인 내의 모든 칩에 따라 다르지만(가장 낮은 속도를 사용해야 함), 일반적으로 10-100 MHz (비트당 10-100 ns)이다. TCK 주파수는 보드 레이아웃과 JTAG 어댑터 기능 및 상태에 따라 달라질 수 있다.[7]
JTAG 플랫폼은 IEEE 1149.1 사양에 정의된 신호 외에 추가적인 신호를 포함하기도 한다. 예를 들어, 시스템 리셋 (SRST) 신호는 디버거가 JTAG를 지원하는 부분뿐만 아니라 전체 시스템을 리셋할 수 있게 한다.[7]
축소된 핀 수의 JTAG는 클럭 와이어와 데이터 와이어, 단 두 개의 와이어만 사용하며, cJTAG(컴팩트 JTAG)라고도 불린다. 이는 IEEE 1149.7 표준의 일부로 정의된다. 2개의 와이어 인터페이스는 핀 수에 대한 부담을 줄였으며, 장치는 스타형 토폴로지로 연결될 수 있다.
| 핀 이름 | 설명 |
|---|---|
| TMSC (테스트 직렬 데이터) | 테스트 직렬 데이터 |
| TCK (테스트 클럭) | 테스트 클럭 |
3. 2. 작동 방식
JTAG의 작동 방식은 칩 내부에 바운더리 셀(Boundary Cell)을 만들고, 이것을 외부 핀과 일대일로 연결하여 프로세서의 동작을 제어하는 것이다. 이러한 방식으로 JTAG은 다양한 하드웨어의 테스트나 연결 상태 등을 확인할 수 있다.각 셀은 바운더리 스캔 레지스터(BSR)를 형성하기 위해 서로 연결된다. 전체 인터페이스는 다음 5개의 핀을 통해 제어된다.[9]
| 핀 이름 | 설명 |
|---|---|
| TDI (데이터 입력) | 테스트하기 위한 데이터 신호. TMS에 의해 전이된 TAP 상태에 따라 TDI가 명령/데이터로 결정됨. |
| TDO (데이터 출력) | 테스트 결과를 외부에서 모니터링하기 위한 핀. TAP 상태에 따라 주소/데이터가 될 수 있음. |
| TCK (클럭) | 테스트 클럭 |
| TMS (모드) | 테스트 모드로 전환하기 위한 제어 신호 |
| TRST (리셋) | 테스트 리셋 (선택 사항) |
데이터 라인은 하나만 사용 가능하므로, 프로토콜은 시리얼 방식을 사용한다. 클럭 입력은 TCK 핀으로, 설정은 TMS 핀을 사용하며, 일반적인 작동 주파수는 10-100MHz (10-100ns/bit)이다.
JTAG 라인을 통해 칩 내부를 조사(Capture 기능) 및 제어(INTEST 기능)를 할 수 있다. 또한, EXTEST 기능을 이용하여 임베디드 시스템의 다른 칩(예: ROM, NAND Flash)을 제어할 수도 있다. 예를 들어, 리눅스의 부트로더 등을 다운로드하여 아무런 코드도 없는 임베디드 시스템을 부팅하게 만들 수 있다.
경계 스캔 기술은 장치 핀을 포함하여 복잡한 집적 회로의 많은 논리 신호에 대한 액세스를 제공한다. 신호는 TAP를 통해 액세스할 수 있는 BSR에 표시된다. 이를 통해 테스트를 수행하고 테스트 및 디버깅을 위해 신호 상태를 제어할 수 있다. 따라서 소프트웨어 및 하드웨어(제조) 결함을 모두 찾을 수 있으며 작동 중인 장치를 모니터링할 수 있다.
BIST와 결합하면 JTAG 스캔 체인은 특정 정적 결함(단락, 단선 및 논리 오류)에 대해 IC를 테스트하기 위한 낮은 오버헤드, 내장형 솔루션을 가능하게 한다. 스캔 체인 메커니즘은 일반적으로 타이밍, 온도 또는 발생할 수 있는 기타 동적 작동 오류를 진단하거나 테스트하는 데 도움이 되지 않는다. 테스트 케이스는 종종 SVF 또는 해당 바이너리 자매 XSVF와 같은 표준화된 형식으로 제공되며 생산 테스트에 사용된다.
축소된 핀 수의 JTAG는 클럭 와이어와 데이터 와이어, 단 두 개의 와이어만 사용하며, cJTAG(컴팩트 JTAG)라고 불린다. 이는 IEEE 1149.7 표준의 일부로 정의된다. 2개의 와이어 인터페이스는 핀 수에 대한 부담을 줄였으며, 장치는 스타형 토폴로지로 연결될 수 있다.[8]
4. 기능
JTAG는 프로세서(CPU)의 상태와 관계없이 디바이스의 모든 외부 핀을 구동하거나 값을 읽을 수 있는 기능을 제공한다. 이를 통해 디바이스 간의 연결 상태를 테스트하거나, 플래시 메모리에 퓨징(fusing)을 할 수 있다.[6]
JTAG는 원래 보드 레벨 테스트를 위해 설계되었지만, 현재는 집적 회로의 서브 블록에 접근하는 주요 수단으로 사용되고 있다. 특히, 임베디드 시스템의 디버깅에 필수적인 메커니즘으로, CPU 내부의 온칩 디버그 모듈에 접근하여 소프트웨어 디버깅을 수행할 수 있다.
FPGA 개발에도 JTAG가 사용되는데, FPGA 내부의 디지털 설계 블록을 디버깅하는 데 활용된다.[6] JTAG는 장치 프로그래머 하드웨어를 통해 CPLD와 같은 내부 비휘발성 장치 메모리에 데이터를 전송하는 데에도 사용된다. 일부 장치 프로그래머는 장치 프로그래밍과 디버깅을 동시에 수행하기도 한다.
JTAG 프로그래머는 플래시 메모리에 소프트웨어 및 데이터를 쓰는 데에도 사용된다. 이는 CPU가 사용하는 데이터 버스 접근을 이용하거나, 메모리 칩 자체에 JTAG 인터페이스가 있는 경우 이를 통해 이루어진다.
5. 통신 모델
JTAG에서 장치는 하나 이상의 ''테스트 액세스 포트''(TAP)를 통해 외부와 통신한다. 여러 TAP는 데이지 체인 형태로 연결되어 ''스캔 체인''을 형성한다. 스캔 체인의 길이는 다양할 수 있지만, 실제로는 20개의 TAP가 매우 긴 편이다.
JTAG를 사용하려면 호스트는 ''JTAG 어댑터''를 통해 타겟의 JTAG 신호(TMS, TCK, TDI, TDO 등)에 연결된다. 어댑터는 USB, PCI, 이더넷 등과 같은 인터페이스를 사용하여 호스트에 연결되며, 레벨 시프팅 및 갈바닉 절연과 같은 문제를 처리할 수 있다.
호스트는 TCK와 함께 TMS 및 TDI를 조작하고 TDO를 통해 결과를 읽음으로써 TAP와 통신한다. TDO는 표준 호스트 측 입력이다. TMS/TDI/TCK 출력 전이는 상위 계층 프로토콜이 구축되는 기본적인 JTAG 통신 요소를 만든다.
JTAG 통신의 기본 요소는 다음과 같다.
- 상태 전환: 모든 TAP는 동일한 상태에 있으며, TCK 전이 시 해당 상태가 변경된다. JTAG 상태 머신은 16개의 상태를 포함하며, TMS를 안정적으로 유지하면 상태가 변경되지 않는 6개의 안정적인 상태가 있다. 다른 모든 상태에서 TCK는 항상 해당 상태를 변경한다. TRST를 어설션하면 TMS를 높게 유지하고 TCK를 다섯 번 순환시키는 것보다 약간 더 빠르게 안정적인 상태 중 하나(Test\_Logic\_Reset)로 진입할 수 있다.
- 시프트: JTAG 상태 머신의 대부분은 데이터를 전송하는 데 사용되는 두 개의 안정적인 상태(Shift\_IR, Shift\_DR)를 지원한다. 각 TAP에는 ''명령 레지스터''(IR)와 ''데이터 레지스터''(DR)가 있다. 이 레지스터들의 크기는 TAP에 따라 다르며, TDI와 TDO를 통해 결합되어 큰 시프트 레지스터를 형성한다. DR의 크기는 해당 TAP의 현재 IR 값과 SCAN\_N 명령으로 지정된 값에 따라 달라진다. 시프트 레지스터에 대해 정의된 세 가지 작업은 다음과 같다.
- 임시 값 캡처:
- ''Shift\_IR'' 안정 상태로 진입하면 Capture\_IR 상태를 거쳐 시프트 레지스터에 부분적으로 고정된 값(현재 명령이 아님)이 로드된다.
- ''Shift\_DR'' 안정 상태로 진입하면 Capture\_DR 상태를 거쳐 TAP의 현재 IR에 의해 지정된 데이터 레지스터의 값이 로드된다.
- Shift\_IR 또는 Shift\_DR 안정 상태에서 비트 단위로 해당 값을 시프트: TCK 전이는 시프트 레지스터를 TDI에서 TDO 방향으로 한 비트씩 시프트하며, 이는 SPI 모드 1 데이터 전송과 같다(TMS=0은 칩 선택 신호, TDI는 MOSI 등과 같이 작동).
- Update\_IR 또는 Update\_DR 상태를 통해 전환 시 시프트된 임시 값에서 IR 또는 DR을 업데이트: 쓰고(업데이트) 읽지(캡처) 않고, 그 반대의 경우도 마찬가지다. 일반적인 관용구는 업데이트에 부작용이 있어야 하는지 또는 하드웨어가 이러한 부작용을 실행할 준비가 되었는지 여부를 나타내는 플래그 비트를 추가한다.
- 실행: 하나의 안정 상태를 Run\_Test/Idle이라고 한다. 이 구별은 TAP별로 다르다. Idle 상태에서 TCK를 클럭하는 것은 특별한 부작용이 없지만, Run\_Test 상태에서 클럭하는 것은 시스템 상태를 변경할 수 있다. 예를 들어, 일부 ARM9 코어는 Run\_Test 상태에서 TCK 사이클이 명령어 파이프라인을 구동하는 디버깅 모드를 지원한다.
JTAG를 사용하면 명령과 관련 데이터 레지스터를 읽고 쓰는 작업이 포함되며, 때로는 여러 테스트 사이클을 실행하는 작업도 포함된다. 이러한 레지스터 뒤에는 JTAG에서 지정되지 않은 하드웨어가 있으며, JTAG 활동의 영향을 받는 자체 상태를 가지고 있다.
대부분의 JTAG 호스트는 어댑터의 특성으로 인해 제약될 수 있는 두 상태 사이의 최단 경로를 사용한다. JTAG 위에 구축된 일부 계층은 상태 전이를 모니터링하고 상위 수준 작업을 트리거하기 위해 일반적이지 않은 경로를 사용하기도 한다. IEEE 1149.7[9]에서는 Zero Bit Scan(ZBS) 시퀀스를 사용하여 TAP를 스캔 체인으로 전환 및 전환 해제, 전원 관리 및 다른 2선 모드와 같은 고급 기능에 접근한다.
6. IEEE 1149.1 (경계 스캔) 명령어
IEEE 1149.1 (JTAG) 표준은 경계 스캔 응용 프로그램을 지원하기 위해 여러 명령어를 정의한다. 이 명령어들 중 일부는 ''필수''이지만, 경계 스캔 테스트 대신 디버깅에 사용되는 TAP는 이러한 명령어에 대한 지원을 최소화하거나 전혀 제공하지 않는 경우가 있다.
- 필수 명령어[4]
- EXTEST: 보드 레벨 동작을 조사하기 위해 핀을 사용하는 것과 같은 외부 테스트용 명령어이다.
- PRELOAD: EXTEST 전에 핀 출력 값을 로드한다. (SAMPLE과 결합되는 경우도 있음)
- SAMPLE: 핀 값을 경계 스캔 레지스터로 읽는다.
- 선택적 명령어[4]
- CLAMP: PRELOAD된 값을 사용하여 출력 핀을 구동하는 BYPASS의 변형 명령어이다.
- HIGHZ: 모든 핀의 출력을 비활성화한다.
- INTEST: 핀을 사용하여 온칩 동작을 조사하는 것과 같은 내부 테스트용 명령어이다.
- RUNBIST: 칩을 자체 테스트 모드로 배치한다.
- USERCODE: 활성 FPGA 이미지를 식별하는 데 사용되는 사용자 정의 코드를 반환한다.
- IDCODE: 구현자가 정의한 연산 코드를 가지며, 32비트 레지스터(IDCODE)와 연결된다. 데이터는 JEDEC의 ''표준 제조업체 식별 코드'' 표준(JEP-106)에서 파생된 제조업체 코드, 제조업체에서 할당한 부품 번호, 부품 버전 코드를 포함하는 표준화된 형식을 사용한다. IDCODE는 널리 지원되지만, 모든 경우에 지원되는 것은 아니다.
- BYPASS: TAP의 명령어 레지스터 크기에 관계없이 모든 1로 구성된 연산 코드를 가지며, 모든 TAP에서 지원해야 한다. 이 명령어는 단일 비트 데이터 레지스터(BYPASS)를 선택한다. 이 명령어는 스캔 경로의 다른 장치가 작동하는 동안 이 장치를 바이패스(아무것도 하지 않음)할 수 있게 해준다.
장치는 더 많은 명령어를 정의할 수 있으며, 이러한 정의는 제조업체에서 제공하는 BSDL 파일의 일부여야 한다. 이러한 명령어는 종종 PRIVATE로만 표시된다.[4]
7. 경계 스캔 레지스터(BSR)
경계 스캔을 지원하는 장치는 각 신호 핀에 시프트 레지스터 셀을 포함한다. 이 레지스터들은 장치의 경계 주변에 전용 경로로 연결되어 있어서 경계 스캔이라는 이름이 붙었다. 이 경로는 일반적인 입출력을 우회하여 장치를 직접 제어하고 신호에 대한 상세한 가시성을 제공하는 가상 액세스 기능을 만든다.[10]
이러한 셀들은 함께 연결되어 경계 스캔 시프트 레지스터(BSR)를 형성하고, TAP 컨트롤러에 연결된다. BSR은 대부분의 Verilog 또는 VHDL 라이브러리의 일부이다.
신호 입출력(I/O) 기능을 포함하는 BSR의 내용은 일반적으로 제조업체의 부품별 BSDL 파일에 설명되어 있다. 이러한 파일은 CAD/EDA 시스템의 설계 '넷리스트'와 함께 사용하여 보드 제조에 사용되는 테스트를 개발한다. 상업용 테스트 시스템은 결함을 그래픽 방식으로 묘사하는 회로도나 레이아웃 뷰어를 제공하기도 한다.
8. 디버깅
JTAG는 집적 회로의 서브 블록에 접근하는 주요 수단이며, 임베디드 시스템의 디버깅에 필수적인 메커니즘이다.[6] 대부분의 시스템에서 JTAG 기반 디버깅은 CPU 리셋 후 첫 번째 명령어부터 사용할 수 있으므로, 초기 부팅 소프트웨어 개발에 유용하다.[6] 인서킷 에뮬레이터(JTAG 어댑터)는 JTAG를 통해 대상 CPU 내부의 온칩 디버그 모듈에 접근한다. 소프트웨어 개발자는 JTAG를 통해 머신 명령어 수준 또는 고급 언어 소스 코드 형식으로 임베디드 시스템의 소프트웨어를 디버그할 수 있다.
PowerPC, MIPS, ARM, x86과 같은 많은 실리콘 아키텍처는 JTAG 프로토콜을 중심으로 소프트웨어 디버그, 명령어 추적 및 데이터 추적 인프라를 구축했다. ARM CoreSight 및 Nexus, Intel의 BTS (Branch Trace Storage), LBR (Last Branch Record), IPT (Intel Processor Trace) 등이 그 예시이다.[6]
일반적으로 프로세서는 중단, 단일 단계 실행 또는 자유롭게 실행될 수 있다. RAM 또는 ROM/플래시에서 코드에 대한 코드 중단점을 설정할 수 있고, 데이터 중단점도 사용할 수 있다. 대부분 '정지 모드 디버깅'을 지원하지만, 일부는 디버거가 코어를 정지하지 않고 레지스터 및 데이터 버스에 접근할 수 있도록 허용한다.
때로는 FPGA 개발자도 JTAG를 사용하여 디버깅 도구를 개발한다.[6] CPU 내 소프트웨어 디버깅에 사용되는 JTAG 기술은 FPGA 내부의 다른 디지털 설계 블록 디버깅에도 도움이 된다.[6] FPGA 내부 임의 신호 집합에서 구성된 레지스터를 읽어 경계 스캔 작업에서 보이지 않는 동작을 볼 수 있게 하거나, 레지스터에 써서 제어 기능을 제공할 수 있다.
최신 소프트웨어는 단일 스레드 모델로 작동하기 복잡한 경우가 많다. 예를 들어, 모터를 제어하는 프로세서는 안전하게 정지 모드로 들어갈 수 없을 수 있다. 인터럽트를 계속 처리해야 할 수 있기 때문이다. ARM 프로세서는 ''모니터 모드''라는 대체 디버그 모드를 지원한다. 중단점과 감시점은 ''디버그 모니터''로 제어 권한을 이전하는 특수 하드웨어 예외를 트리거한다. 이 모니터는 DCC를 사용하여 디버거와 통신하며, 다른 프로세스가 계속 실행되는 동안 단일 프로세스만 단일 단계로 실행하도록 할 수 있다.
마이크로프로세서 제조업체는 자체 코어별 디버깅 확장을 정의해 왔다. 인피니언, MIPS 등이 그 예시이다. ARM은 CoreSight라는 광범위한 프로세서 코어 디버그 아키텍처를 가지고 있으며, 멀티 코어 및 멀티 스레드 트레이싱을 지원한다. 넥서스는 공급업체에 독립적인 프로세서 디버그 인프라를 정의하며, 하드웨어 인터페이스 중 하나는 JTAG이다.
9. 펌웨어 저장
JTAG는 장치 프로그래머 하드웨어를 통해 CPLD와 같은 내부 비휘발성 장치 메모리에 데이터를 전송하는 데 사용될 수 있다.[11] JTAG 프로그래머는 플래시 메모리에 소프트웨어 및 데이터를 쓰는 데 사용된다.[12] JTAG를 통해 플래시(또는 플래시 대신 SRAM)에 펌웨어를 설치하면 빠른 디버그 사이클(편집, 컴파일, 다운로드, 테스트 및 디버그)을 구현하는 데 유용하다.[13] 이는 명령 저장소를 시뮬레이션하는 인-서킷 에뮬레이터가 USB 등을 통해 개발 호스트에서 매우 빠르게 업데이트될 수 있기 때문이다. 반면, 직렬 UART 포트와 부트로더를 사용하여 플래시에 펌웨어를 업로드하는 것은 이 디버그 사이클을 매우 느리게 만들고 도구 측면에서 비용이 많이 들 수 있다.[15]
10. 응용 분야
JTAG는 초기에는 보드 레벨 테스트를 위해 개발되었지만, 현재는 집적 회로 (IC)의 서브 블록에 접근하는 주요 수단으로 사용되며, 임베디드 시스템 디버깅에 필수적인 메커니즘으로 활용된다. JTAG 기반 디버깅은 CPU 리셋 후 첫 명령어부터 사용 가능하여 초기 부팅 소프트웨어 개발을 지원한다. 인서킷 에뮬레이터(JTAG 어댑터)는 JTAG를 통해 대상 CPU 내부의 온칩 디버그 모듈에 접근하여 소프트웨어 개발자가 임베디드 시스템의 소프트웨어를 디버그할 수 있도록 돕는다.
많은 실리콘 아키텍처(PowerPC, MIPS, ARM 아키텍처, x86)는 JTAG 프로토콜을 중심으로 소프트웨어 디버그, 명령어 추적 및 데이터 추적 인프라를 구축했다. ARM CoreSight 및 Nexus, 인텔의 BTS, LBR, IPT 등이 그 예시이다. 프로세서는 중단, 단일 단계 실행, 자유 실행 등이 가능하며, RAM 및 ROM/플래시 코드에 대한 코드 중단점을 설정할 수 있다.
FPGA 개발자들도 JTAG를 사용하여 디버깅 도구를 개발한다.[6] FPGA 내부의 임의 신호 집합에서 구성된 레지스터를 읽거나 쓰는 사용자 지정 JTAG 명령을 통해 경계 스캔 작업에서는 보이지 않는 동작을 관찰하고 제어할 수 있다.
JTAG는 다음과 같은 다양한 분야에서 활용된다.
- 대부분의 임베디드 시스템 플랫폼은 회로 내 디버깅, 펌웨어 프로그래밍 및 경계 스캔 테스트를 위해 JTAG 포트를 사용한다.
- ARM 아키텍처 프로세서는 JTAG를 지원하며, 2선식 SWD 변형이나 고속 추적을 지원하기도 한다.
- Atmel AVR, TI MSP430 등의 마이크로컨트롤러 칩은 JTAG 프로그래밍 및 디버깅을 지원한다. (핀 수가 적은 칩은 예외)
- 대부분의 FPGA 및 CPLD는 JTAG 포트를 통해 프로그래밍할 수 있다. (JEDEC 표준 JESD-71)
- MIPS 및 PowerPC 프로세서는 JTAG를 지원한다.
- 인텔 코어, 제온, 아톰, 쿼크 프로세서는 JTAG 프로브 모드를 지원한다. (60핀 XDP 또는 10핀 커넥터 사용)
- 네트워킹 기기, 위성 텔레비전 통합 수신기/디코더 등은 JTAG를 지원하는 마이크로프로세서를 사용하여 펌웨어 재로드를 지원한다.
- PCI 버스 커넥터 표준은 선택적으로 JTAG 신호를 포함하며, PCI 익스프레스도 JTAG 신호를 포함한다.[18][19] 특수 JTAG 카드를 사용하여 손상된 BIOS를 복구할 수 있다.
- 경계 스캔 테스트 및 시스템 내 프로그래밍 응용 프로그램은 직렬 벡터 형식, 'JAM', STAPL, IEEE Std. 1532 'ISC' 등의 형식을 사용하여 JTAG 작업을 표현한다.
- 많은 보드에는 JTAG 커넥터 또는 패드가 포함되어 제조 작업(보드 품질 확인, 플래시 메모리 또는 FPGA 초기화)을 지원한다.
- JTAG는 현장 업데이트 및 문제 해결을 지원한다.
반도체 기술의 발전으로 집적 회로 칩의 핀 간격이 좁아져 프로브를 이용한 검사가 어려워지고 있다. 특히 BGA 패키지는 물리적으로 검사가 불가능하다. 따라서 고안된 바운더리 스캔 테스트 방식이 JTAG로 표준화되었다(IEEE 1149.1, 1990년).
최근에는 검사 목적 외에도 임베디드 시스템의 소프트웨어 디버깅을 위한 ICE의 일종으로 CPU나 FPGA에 접근하는 수단으로 JTAG가 사용된다.
11. JTAG 클라이언트 지원
JTAG 인터페이스는 JTAG 지원 애플리케이션과 JTAG 어댑터 하드웨어를 사용하여 접근할 수 있다. 생산 테스트, 고속 시스템 디버깅, 저비용 마이크로컨트롤러 개발 등 다양한 목적에 최적화된 광범위한 하드웨어가 존재한다. 마찬가지로, 이러한 하드웨어를 구동하는 데 사용되는 소프트웨어도 매우 다양할 수 있다. 소프트웨어 개발자는 주로 JTAG를 사용하여 펌웨어를 디버깅하고 업데이트한다.
대부분의 임베디드 시스템 개발 환경은 JTAG 지원을 포함한다. JTAG 지원 소프트웨어는 칩 공급업체, 도구 공급업체, 오픈 소스 커뮤니티 등에서 제공한다.
| 구분 | 설명 |
|---|---|
| 칩 공급업체 | 자일링스(Xilinx), 알테라(Altera)와 같은 FPGA 공급업체, AVR8 및 AVR32 제품군을 위한 Atmel, 대부분의 DSP 및 마이크로 제품을 위한 텍사스 인스트루먼트(Texas Instruments) 등이 있다. 이들은 자체적으로 제공하는 JTAG 어댑터를 필요로 하는 도구를 제공하며, 기능이 풍부하고, FPGA 및 DSP와 같은 고도로 특화된 칩에 대한 유일한 실제 옵션일 수 있다. 저가형 소프트웨어 도구는 무료로 제공될 수 있으며, JTAG 어댑터는 개발 보드와 함께 번들로 제공되는 경우도 있다. |
| 도구 공급업체 | 여러 칩 공급업체를 지원하며 플랫폼 간 개발을 돕는다. ARM 아키텍처(ARM) 기반 제품 시장이 크며, 일부 공급업체는 MIPS 아키텍처(MIPS) 및 PowerPC와 같은 비 ARM 플랫폼도 지원한다. GNU 컴파일러 모음(GCC), GDB와 같은 자유 소프트웨어를 기반으로 이클립스 (소프트웨어)(Eclipse) GUI를 제공하기도 한다. JTAG 어댑터는 지원 번들과 함께 판매되기도 한다. |
| 오픈 소스 | GNU 컴파일러 모음(GCC)와 GDB는 훌륭한 도구 체인의 핵심이며, 이를 지원하는 GUI 환경이 있다. |
이러한 소프트웨어는 중지, 일시 중지, 단일 단계 실행, 중단점, 데이터 구조 탐색 등과 같은 기본 디버거 지원을 포함하는 경향이 있다. 상용 도구는 오픈 소스에는 없는 정밀 시뮬레이터 및 추적 분석과 같은 도구를 제공하기도 한다.
11. 1. JTAG 커넥터
JTAG 어댑터의 물리적 커넥터에 대한 공식 표준은 없지만, 몇 가지 일반적인 핀 배열이 존재한다. 개발 보드는 일반적으로 선호하는 개발 도구를 지원하기 위한 헤더를 포함한다. 생산 보드는 헤더를 생략하거나 테스트 포인트를 사용하여 JTAG 신호에 접근할 수 있도록 한다.[7]11. 2. JTAG 어댑터 하드웨어
JTAG 어댑터 하드웨어는 대상 보드의 JTAG 커넥터에 연결하기 위한 짧은 케이블, 디버깅 호스트(일반적으로 USB, PCI 또는 이더넷)에 대한 연결, 그리고 두 통신 도메인을 조정하기 위한 전자 장치(때로는 갈바닉 절연 제공)를 포함한다.[20] 별도의 전원 공급 장치가 필요할 수도 있다.JTAG 어댑터는 크게 두 가지 유형으로 나뉜다.
- "단순" 어댑터: 호스트가 모든 JTAG 작업을 결정하고 수행한다.
- "스마트" 어댑터: 어댑터 내부에서 일부 JTAG 작업이 수행된다(주로 마이크로컨트롤러에 의해 구동). "스마트" 어댑터는 단계 간 상태 변경을 폴링해야 하는 작업 시퀀스에 대한 링크 대기 시간을 제거하여 더 높은 처리량을 제공할 수 있다.
현재, 호스트에서 USB 링크를 사용하는 어댑터가 가장 일반적이다. 하이엔드 제품은 이더넷을 지원하여 디버그 호스트가 원격으로 떨어져 있을 수 있다는 장점을 제공한다. 고속 추적 포트를 지원하는 어댑터는 일반적으로 수 메가바이트의 추적 버
11. 3. 소프트웨어 개발 환경
대부분의 임베디드 소프트웨어 개발 환경은 JTAG 지원을 포함한다. 칩 공급업체, 도구 공급업체, 오픈 소스 커뮤니티 등에서 JTAG 지원 소프트웨어를 제공한다.[6] 이러한 소프트웨어는 중지, 일시 중지, 단일 단계 실행, 중단점, 데이터 구조 탐색 등과 같은 기본 디버거 지원을 포함하는 경향이 있다.[6]- '''칩 공급업체''': 자일링스(Xilinx), 알테라(Altera)와 같은 FPGA 공급업체, AVR8 및 AVR32 제품군을 위한 Atmel, 대부분의 DSP 및 마이크로 제품을 위한 텍사스 인스트루먼트(Texas Instruments) 등이 자체 JTAG 어댑터와 함께 도구를 제공한다. 이러한 도구는 기능이 풍부하며, FPGA 및 DSP와 같은 특수 칩의 경우 유일한 선택지일 수 있다. 저가형 소프트웨어 도구는 무료로 제공되기도 하며, JTAG 어댑터는 개발 보드와 함께 제공되기도 한다.[6]
- '''도구 공급업체''': 여러 칩 공급업체를 지원하며 플랫폼 간 개발을 돕는다. ARM 아키텍처(ARM) 기반 제품 시장이 크며, 일부 공급업체는 MIPS 아키텍처(MIPS) 및 PowerPC와 같은 비 ARM 플랫폼도 지원한다. GNU 컴파일러 모음(GCC), GDB와 같은 자유 소프트웨어를 기반으로 이클립스 (소프트웨어)(Eclipse) GUI를 제공하기도 한다. JTAG 어댑터는 지원 번들과 함께 판매된다.[6]
- '''오픈 소스''': GCC와 GDB는 훌륭한 도구 체인의 핵심이며, 이를 지원하는 GUI 환경이 있다.[6]
상용 도구는 오픈 소스에는 없는 정밀 시뮬레이터 및 추적 분석과 같은 도구를 제공하기도 한다.[6]
참조
[1]
서적
On-Chip Instrumentation
Springer
[2]
간행물
JTAG 101—IEEE 1149.x and Software Debug
https://web.archive.[...]
Intel Corporation
2009
[3]
간행물
IEEE 1149.1-1990
https://archive.toda[...]
IEEE
[4]
웹사이트
IEEE 1149.1-2001
https://archive.toda[...]
[5]
웹사이트
IEEE 1149.1-2013
https://standards.ie[...]
[6]
웹사이트
Select the right FPGA debug method
http://www.embeddedd[...]
2010-04-27
[7]
웹사이트
FAQ: Under what conditions can I daisy-chain JTAG?
http://www.jtagtest.[...]
[8]
웹사이트
Major Benefits of IEEE 1149.7
https://www.corelis.[...]
[9]
웹사이트
IEEE 1149.7 wiki page
http://tiexpressdsp.[...]
Texas Instruments
2014-04-06
[10]
뉴스
Introduction to JTAG
http://www.embedded.[...]
2002-10-29
[11]
간행물
ARM1136JF-S and ARM1136J-S Technical Reference Manual
http://infocenter.ar[...]
ARM
[12]
간행물
The User's Guide to DBGJTAG
http://wiki.davincid[...]
Texas Instruments
2014-12-31
[13]
문서
i.MX35 (MCIMX35) Multimedia Applications Processor Reference Manual
Freescale
[14]
간행물
ARM9EJ-S Technical Reference Manual
http://infocenter.ar[...]
ARM
[15]
웹사이트
CoreSight Components Technical Reference Manual: 2.3.2. Implementation specific details
http://infocenter.ar[...]
[16]
간행물
MMC20xx M•CORE OnCE Port Communication and Control Sequences
Freescale Semiconductor, Inc.
2004
[17]
간행물
Differences Between the EOnCE and OnCE Ports
Freescale Semiconductor, Inc.
2005
[18]
웹사이트
PCI Local Bus Technical Summary, 4.10 JTAG/Boundary Scan Pins
https://web.archive.[...]
2007-07-13
[19]
웹사이트
Serial PCI Express Bus 16x Pinout and PCIe Pin out Signal names
http://www.interface[...]
[20]
웹사이트
JTAG Pinouts
http://www.jtagtest.[...]
[21]
웹사이트
ARM Information Center
http://infocenter.ar[...]
2017-08-10
[22]
웹인용
IEEE 1149.1-2001
http://standards.iee[...]
2018-02-28
본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.
문의하기 : help@durumis.com