KR19990079373A - 마이크로컨트롤러의 바운더리 스캔 스탠다드 인터페이스를 이용한 디버깅 방법 - Google Patents

마이크로컨트롤러의 바운더리 스캔 스탠다드 인터페이스를 이용한 디버깅 방법 Download PDF

Info

Publication number
KR19990079373A
KR19990079373A KR1019980011941A KR19980011941A KR19990079373A KR 19990079373 A KR19990079373 A KR 19990079373A KR 1019980011941 A KR1019980011941 A KR 1019980011941A KR 19980011941 A KR19980011941 A KR 19980011941A KR 19990079373 A KR19990079373 A KR 19990079373A
Authority
KR
South Korea
Prior art keywords
state
register
debug
core
scan chain
Prior art date
Application number
KR1019980011941A
Other languages
English (en)
Inventor
김윤범
Original Assignee
윤종용
삼성전자 주식회사
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 윤종용, 삼성전자 주식회사 filed Critical 윤종용
Priority to KR1019980011941A priority Critical patent/KR19990079373A/ko
Publication of KR19990079373A publication Critical patent/KR19990079373A/ko

Links

Landscapes

  • Test And Diagnosis Of Digital Computers (AREA)
  • Debugging And Monitoring (AREA)

Abstract

본 발명은 내장 에뮬레이터를 구비한 마이크로컨트롤러에 관한 것으로, 32 비트 RISC 마이크로컨트롤러의 JTAG 인터페이스를 이용하여 마이크로컨트롤러의 디버깅 방법을 구현한다. 그리고 이에 따른 코어의 동작 상태의 정보를 저장 및 복구하는 방법을 구현한다. 이는 JTAG 인터페이스의 두 개의 스캔 체인을 선택하고, 이를 통해 명령어를 입력하여 내장 에뮬레이터의 디버깅 프로그램을 수행한다. 따라서 마이크로컨트롤러의 에뮬레이션을 위한 하드웨어 블럭을 줄일 수 있으며, 처리 속도를 향상시킨다.

Description

마이크로컨트롤러의 바운더리 스캔 스탠다드 인터페이스를 이용한 디버깅 방법(DEBUGGING METHOD USED BY JTAG INTERFACE OF MICROCONTROLLER)
본 발명은 마이크로컨트롤러의 디버깅 방법에 관한 것으로, 좀 더 구체적으로 32 비트 RISC 마이크로컨트롤러의 바운더리 스캔 스탠다드(boundary scan standard) 즉, JTAG(Joint Test Access Group) 인터페이스를 이용한 디버깅 방법에 관한 것이다.
마이크로컨트롤러가 고속화, 대규모화, 복잡화 되어감에 따라 이에 대한 에뮬레이션, 디버그 등의 테스트 문제가 중요한 문제로 대두되고 있다. 이는 앞으로 집적도가 점점 높아짐에 따라 발생 가능한 고장의 수가 증가할 수 있기 때문에 에뮬레이션, 디버그 등의 테스트 문제의 해결 방안은 더욱 중요한 문제로 부각되고 있다.
그러나 이러한 테스트 방법은 칩의 집적도가 점점 높아짐에 따라 외부 핀수의 제약 등으로 인하여 칩 내부의 특정 모듈들에 대한 테스트 수행이 어려워지고 있다. 또한 이 문제를 해결하기 위한 하나의 방법으로 다수의 모듈을 갖는 칩 내부의 특정 모듈들에 대응하여 다수의 스캔 체인(scan chain)들을 구비하고, 이들을 직렬 스캔 패스(scan path)로 형성하여 JTAG 인터페이스 회로를 구비한다. 이는JTAG(Joint Test Action Group)에서 제안한 다수의 제어 신호(예컨데 테스트 데이터 입출력 신호, 클럭 신호 및 선택 신호 등)를 이용하여 테스트하고 있다.
또한 마이크로컨트롤러의 대부분의 코어는 내장 에뮬레이션 블럭(in-circuit emulation block)을 갖고 있지 않기 때문에, 이런 코어의 외부에는 내장 에뮬레이터(in-circuit emulator)를 구비한다. 그리고 내장 에뮬레이터는 코어의 입출력 신호들을 이용하여 해당 에뮬레이션 기능을 수행한다.
그러나 32 비트 마이크로컨트롤러인 경우에는 코어의 어드레스 버스, 데이터 버스 및 제어 버스들이 복잡해서 외부의 하드웨어 블럭이 커지게 되고, 그 결과 처리 속도가 지연되는 문제가 발생된다.
본 발명의 목적은 상술한 문제점을 해결하기 위한 것으로, JTAG 인터페이스를 이용하는 내장 에뮬레이터를 갖는 32 비트 마이크로컨트롤러의 디버깅 방법을 구현하는데 있다.
이에 따라 마이크로컨트롤러의 코어의 동작 상태에 따른 정보들을 저장하거나 복구하는 방법을 구현하는데 있다.
또한, 상술한 방법의 구현을 위해서 다음 수행할 어드레스를 억세스하기 위한 어드레스를 계산하고, 계산된 특정 어드레스로 점프(JUMP)(또는 브랜치 : BRANCH))하기 위한 점프 코드를 계산하는 방법을 구현한다.
도 1은 ARM 사의 마이크로컨트롤러의 일예로서 ARM7TDMI 구성을 도시한 블럭도;
도 2는 본 발명의 실시예에 따른 마이크로컨트롤러의 디버깅 수순을 나타내는 흐름도;
도 3a는 스캔 체인 1을 이용하여 내장 에뮬레이터를 프로그래밍하는 수순을 도시한 흐름도;
도 3b는 스캔 체인 2를 이용하여 내장 에뮬레이터를 프로그래밍하는 수순을 도시한 흐름도;
도 4는 도 2에 도시한 코어의 동작 상태를 나타내는 정보들을 저장하는 수순을 도시한 흐름도; 그리고
도 5는 도 2에 도시한 코어의 동작 상태를 나타내는 정보들을 복구 및 디버그 상태를 종료하는 수순을 도시한 흐름도이다.
*도면의 주요 부분에 대한 부호 설명*
10 : 마이크로컨트롤러 12 : 코어
14 : 레지스터 뱅크 16 : 스캔 체인 0
18 : 스캔 체인 1 20 : 스캔 체인 2
22 : TAP 컨트롤러 24 : ICE 블록
26 : 디버그 상태/제어 레지스터
상술한 목적을 달성하기 위한 본 발명의 일 특징에 의하면, 복수 개의 JTAG 스타일 스캔 체인들 및 TAG 컨트롤러를 이용하는 내장 에뮬레이터를 갖는 마이크로컨트롤러의 디버깅 방법에 있어서: 상기 에뮬레이터로부터 상기 스캔 체인들 중에 제 1 스캔 체인(스캔 체인 2)을 통해서 디버그 상태 레지스터의 DBGACK 비트를 독출하여 상기 코어의 동작 상태가 디버그 상태인지를 판별하는 단계와; 디버그 상태이면, 상기 제 1 스캔 체인(스캔 체인 2)을 통해 명령어를 받아서, 상기 디버그 제어 레지스터를 클리어하는 단계와; 상기 제 1 스캔 체인(스캔 체인 2)을 통해서 상기 디버그 상태 레지스터의 TBIT 비트를 저장하는 단계와; 상기 제 1 (스캔 체인 2)및 제 2 스캔 체인(스캔 체인 1)을 통해서 상기 디버그 상태 직전 코어의 동작 상태에 대한 정보들을 저장하는 단계와; 상기 에뮬레이터가 상기 코어의 디버깅을 수행하는 단계 및; 상기 디버그 상태 직전 코어의 동작 상태에 대한 정보들에 의해 코어의 디버그 상태 전의 상태로 복구하는 단계를 포함한다.
이 특징의 바람직한 실시예에 있어서, 상기 정보들을 저장하는 단계는: 상기 코어의 디버그 상태가 THUMB 모드인지를 판별하는 단계와; THUMB 모드이면, THUMB 코드를 이용하여 특정의 레지스터들의 정보를 독출하는 단계와; 상기 독출된 정보들을 이용하여 다음 어드레스를 계산하는 단계와; THUMB 코드를 이용하여 ARM 상태로 전환하는 단계와; CPSR 레지스터를 독출하여 상기 디버그 상태가 THUMB 모드였는지를 판별하는 단계 및; THUMB 모드였으면, CPSR 레지스터를 보정하는 단계를 포함한다.
이 실시예에 있어서, 상기 코어의 상태가 ARM 모드이면, ARM 코드를 이용하여 상기 특정 레지스터들을 독출하는 단계와; 상기 독출된 정보들을 이용하여 다음 어드레스를 계산하는 단계를 포함한다.
이 특징의 바람직한 실시예에 있어서, 상기 복구하는 단계는: ARM 모드 또는 THUMB 모드에 대응하여 상기 다음 어드레스로부터 제 1 및 제 2 어드레스를 계산하는 단계와; 프로그램 카운터를 상기 다음 어드레스로 변경하는 단계와; 특정의 레지스터들을 복구하는 단계와; ARM 모드 또는 THUMB 모드에 대응하여 점프 코드를 계산하는 단계 및; 디버그 상태를 종료하는 단계를 포함한다.
이 실시예에 있어서, 상기 레지스터들을 복구하는 단계는: 상기 R0 레지스터를 복구하는 단계와; 상기 CPSR 레지스터의 상태 코드 플래그들을 복구하는 단계와; 상기 CPSR 레지스터의 제어 비트들을 복구하는 단계를 포함한다.
이 특징의 바람직한 실시예에 있어서, 상기 제 2 스캔 체인(스캔 체인 1)을 이용하여 명령을 입력하는 방법은: 상기 제 2 스캔 체인(스캔 체인 1)을 선택하는 단계와; 상기 TAG 컨트롤러의 명령 레지스터에 INTEST 명령을 입력하는 단계 및; 다음 수행할 명령어 및 제어 신호를 입력하는 단계를 포함한다.
이 특징의 바람직한 실시예에 있어서, 상기 제 1 스캔 체인(스캔 체인 2)을 이용하여 상기 TAG 컨트롤러로 접근 가능한 레지스터를 기입, 독출하는 방법은: 상기 제 1 스캔 체인(스캔 체인 2)를 선택하는 단계와; 상기 명령 레지스터에 INTEST 명령을 입력하는 단계 및; 상기 ICE 블럭으로부터 해당 레지스터의 기입, 독출을 위한 상기 레지스터의 어드레스 및 데이터를 입력하는 단계를 포함한다.
따라서 본 발명에 의하면, JTAG 인터페이스의 두 개의 스캔 체인을 선택하고, 이를 통해 명령어를 입력한다. 그리고 코어의 디버그 상태를 판별하여 ARM 모드 또는 THUMB 모드에 대응하는 디버깅 동작을 수행한다. 그리고 디버그 전 상태에 대한 정보들을 이용하여 디버그 전 상태로 복구한다.
이하 본 발명의 실시예를 첨부된 도면에 의거하여 상세히 설명한다.
본 발명을 구현하기 위한 일실시예에 따른 32 비트 마이크로컨트롤러(예를 들어, ARM 사의 ARM7TDMI)는 32 비트 코어의 내부에 내장 에뮬레이터 블럭(In-Circuit Emulation block)을 구비하고 있다. 그리고 코어의 바운더리 스캔 스탠다드(JTAG) 인터페이스를 이용하여 대부분의 에뮬레이션 기능을 구현한다.
그리고 JTAG 인터페이스는 코어와 5 개 신호들을 이용하므로 메모리 인터페이스 블럭 등과 같은 하드웨어적인 부담을 줄일 뿐 만 아니라, 코어 내부의 에뮬레이션 블럭을 통하여 에뮬레이션 기능을 수행할 수 있어서 처리 속도에도 문제가 발생되지 않는다.
도 1을 참조하면, ARM 사의 32 비트 RISC ARM7TDMI 마이크로컨트롤러(10)는 32 비트 RISC 구조의 코어(12)와 JTAG 인터페이스(16, 18, 20 및 22) 및 ICE 블럭(24)를 포함하고 있다.
상기 코어(12)는 내부적으로 에뮬레이션 기능을 제어하는 레지스터 뱅크(14)를 포함하고 있다. 그리고 상기 레지스터 뱅크(14)는 다수의 레지스터들을 구비하고 있다. 예컨대, 37 개의 레지스터들을 구비하고, 31 개의 범용(general purpose) 레지스터들과 6 개의 상태(state) 레지스터들을 포함한다.
그리고 상기 JTAG 인터페이스는 3 개의 JTAG 스타일 스캔 체인(SCAN CHAIN 0, 1, 및 2)(16, 18, 20)들과 TAP(Test Acess Port) 컨트롤러(22)를 구비하고 있다. 그리고 JTAG 인터페이스를 이용하여 테스팅, 디버깅 또는 ICE 블럭 프로그래밍 등의 에뮬레이션 기능에 따른 기입, 독출 동작을 수행한다.
따라서 본 발명에 의하면, 상기 스캔 체인들 중에 2 개의 스캔 체인 즉, 스캔 체인 1, 2(18, 20)를 이용하여 마이크로컨트롤러(10) 전체적인 디버깅 방법을 구현한다.
도 2는 본 발명의 실시예에 따른 마이크로컨트롤러의 디버깅 수순을 도시한도면으로서, 상기 스캔 체인 1(18)을 이용하여 ICE 블럭(24)을 프로그래밍하는 방법(이하 제 1 방법이라 한다)과, 상기 스캔 체인 2(20)를 이용하여 ICE 블럭(24)을 프로그래밍하는 방법(이하 제 2 방법이라 한다)을 통하여 마이크로컨트롤러(10) 전체적인 디버깅 방법을 구현하고 있다.
상기 제 1 방법에 의하면, 스캔 체인 1(18)은 스캔 체인 0(16)으로 엑세스되는 코어(12)의 출력 신호들 중에 브레이크포인트 신호(BREAKPT), 데이터 버스 신호(D[31:0])를 직접 억세스 할 수 있다. 따라서 32 비트로 동작하는 ARM 상태(ARM state)와 16 비트로 동작하는 THUMB 상태(THUMB state)의 명령어들을 스캔 체인 1(18)에 입력하여 해당 명령을 수행시킬 수 있다.
그리고 이들은 직렬 스캔 패스(serial scan path)로 처리되기 때문에 상술한 신호들을 순차적으로 스캔 체인 1(18)에 입력된다.
또한 마이크로컨트롤러(10)는 디버그 상태(debug state)에서 DCLK 클럭 신호로 동작되고, 정상 상태에서는 MCLK 신호로 동작되기 때문에, 디버그 상태에서 상기 마이크로컨트롤러(10)의 명령어가 수행될 때는 DCLK 신호를 ECLK 신호로 전환하여 출력된다.
도 3a 내지 도 3b는 상기 제 1(S30) 내지 제 2 방법(S40)에 따른 동작 수순을 도시하고 있다. 그리고 이들 수순은 상기 ICE 블럭(24)에 구비되는 프로그램에 의해 수행된다.
도 3a를 참조하면, 상기 제 1 방법은 단계 S32에서 ICE 블럭(24)는 상기 스캔 체인 1(18)을 선택한다. 그리고 단계 S34에서 TAG 컨트롤러(22)의 IR(Instruction Register)에 INTEST 명령을 입력한다. 이 때, TAP 컨트롤러(22)는 RUN-TEST/IDLE 상태에서 다음 상태로 전이되는 순간에 상기 TAP 컨트롤러(22)에 입력되는 테스트 클럭 신호(TCK)를 받아서 DCLK 클럭 신호를 발생한다.
이어서 단계 S36에서 수행하려는 BREAKPT 1 비트와 명령어 32 비트를 입력한다.
즉, 상기 단계(S36)에서 입력된 명령어는 입력된 순간 코어(12)가 프리-패치(PRE-FETCH) 상태인 경우에만 상기 입력된 명령어를 코어(12)의 명령어 파이프라인(pipeline)(미도시됨)으로 입력된다. 그리고 입력된 순간 코어(12)가 프리-패치(PRE-FETCH) 상태가 아닌 경우에는 상기 입력된 명령어가 수행되지 않는다.
이 때, 디버그 상태에서 수행 가능한 명령어들은 TEQP 명령을 제외한 모든 데이터 처리 동작과, 로드(LOAD) 명령, 스토어(STORE) 명령, MSR 및 MRS 명령 등이 있다. 그리고 상술한 명령어들은 크게 2 가지 속도로 처리된다. 즉, DCLK 신호에 의해 동작되는 디버그 속도(debug speed)와 DCLK 신호에서 순간적으로 MCLK 신호로 스위칭한 후, MCLK 신호에 의해 동작되는 시스템 속도(system speed)에 의해 수행된다.
메모리 억세스 명령어를 디버그 속도로 수행하는 경우에는 nMREQ 신호가 항상 하이(HIGH) 로직 레벨이 된다. 그 결과, 실질적으로 기입, 독출에 따른 메모리 억세스가 이루어지지 않는다. 따라서 메모리 억세스를 위해서는 시스템 속도로 수행해야 한다. 명령어를 시스템 속도로 수행하려면, 상기 ICE 블럭(24)은 그 명령어 전에 입력되는 명령어의 BREAKPT 신호를 하이(HIGH) 로직 레벨으로 입력한다. 이어서 수행하려는 명령어 입력 후에는 IR(Instruction Register)에 RESTART 명령어를 입력한다. 이로서 코어(12)는 클럭 신호가 DCLK 신호에서 MCLK 신호로 스위칭되어 RESTART 명령을 수행하고, 다시 클럭 신호는 DCLK 신호로 스위칭된다. 따라서 마이크로컨트롤러(10)는 디버그 상태가 된다.
도 3b를 참조하면, 상기 제 2 방법(S40)은 상기 스캔 체인 2(20)를 이용하여 상기 ICE 블럭(24)을 프로그래밍하는 수순으로, 단계 S42에서 상기 ICE 블럭(24)은 스캔 체인 2(20)를 선택한다. 그리고 단계 S44에서 IR에 INTEST 명령을 입력한다. 단계 S46에서는 ICE 블럭(24)으로부터 레지스터 기입, 독출을 위하여 상기 레지스터의 어드레스 및 데이터를 입력한다. 즉, 상기 TAG 컨트롤러(22)로 접근 가능하기 위하여 레지스터들(예컨데, 디버그 상태 레지스터, 디버그 제어 레지스터)을 기입, 독출한다.
이 때, ICE 블럭(24)에서 기입, 독출할 수 있는 레지스터들은 와칭포인트(watchingpoint) 레지스터와 디버그 제어(control)/상태(state) 레지스터 및 디버그 통신 채널(communication channel) 레지스터 등이 있다. 이중에서 디버그 제어/상태 레지스터(26)를 이용하여 마이크로컨트롤러(10)의 코어(12) 상태를 확인하고, 디버그 요청(Debug Request) 또는 인터럽트 디세이블(Interrupt Disable) 신호를 코어에 인가한다.
상기 제 2 방법(S40)은 상기 제 1 방법(S30)과 그 수순은 동일하며, 단지 단계 S42에서 스캔 체인 2(20)를 선택하는 것만 다르다.
다시 도 2를 참조하면, 상기 디버깅 방법은 단계 S100에서 상기 제 2 방법(S40)에 의해서 명령어를 받아 상기 ICE 블럭(24)의 디버그 상태 레지스터(26)를 판독한다. 즉, DBGACK 비트를 독출하여 이 비트가 "1"이면, 단계 S200으로 진행하여 상기 제 2 방법(S40)을 이용하여 디버그 제어 레지스터(26)를 클리어(clear)하기 위하여 "0"로 기입한다.
이어서 단계 S300에서 상기 제 2 방법(S40)을 이용하여 명령어를 받아서 디버그 상태 레지스터(26)를 판독하고, TBIT 비트를 저장한다. 즉, 디버그 상태로 동작되기 직전의 TBIT 비트의 상태를 THUMB 상태로 저장한다.
단계 S400에서는 상기 제 1 및 제 2 방법(S30, S40)으로 R0, PC 및 CPSR을 독출하여 저장한다. 따라서 상술한 단계(S100∼S400)들에 의해 마이크로컨트롤러(10)의 모니터링 동작을 위한 준비가 완료된 상태이다. 이어서 단계 S500에서는 디버그 상태로 동작하기 직전의 레지스터 또는 메모리 값들을 독출한다. 그리고 디버그 동작을 수행한다. 계속해서 단계 S600에서는 디버그 기능이 종료되면, 다시 정상 동작 상태로 복귀하기 위해서 R0, CPSR 레지스터들을 단계 S400에서 저장된 값으로 복구시킨다. 따라서 단계 S800에서 디버그 상태가 종료되며, 다음 수행할 명령어가 있는 어드레스로 점프한다.
그리고 상기 단계 S400와 단계 S600은 다음의 도 4 및 도 5에 상세히 도시되어 있다.
도 4를 참조하면, 상기 코어(12)의 상태를 나타내는 정보들을 저장하는 수순은 단계 S402으로 진행하여 디버그 상태 직전이 ARM 모드 또는 THUMB 모드인지를 판별한다. 이어서 ARM 모드이면, 단계 S418으로 진행하여 상기 제 1 방법으로 명령어를 받아 R0 레지스터를 독출하고, 이어서 단계 S420에서는 프로그램 카운터(PC)를 독출한다. 이 때 입력되는 명령어는 아래의 [표 1]에 도시되어 있다.
[표 1]
R0 레지스터 독출 R15 레지스터 독출
STR R0, [R15]MOV R0, R0MOV R0, R0MOV R0, R0 STR [R15], R15MOV R0, R0MOV R0, R0MOV R0, R0
단계 S422에서는 상기 [표 1]에서 읽어들인 PC 값을 통하여 DBGRQ 에 의한 디버그 상태인 경우와 BREAKPT 에 의한 디버그 상태인 경우에 따라서 다음의 [표 2]에 의해 다음 수행할 어드레스(next address)를 계산한다.
[표 2]
DBGRQ에 의한 디버그 상태인 경우 BREAKPT에 의한 디버그 상태인 경우
Next Addr = PC 값 - 0x20 Next Addr = PC 값 - 0x24
그리고 THUMB 모드이면, 단계 S404, S406으로 진행하여 상기 제 1 방법(S30)에 의해 R0 레지스터 및 프로그램 카운터(PC)를 독출한다. 이 때, 입력되는 명령어는 THUMB 코드이고, 각각 [표 3]과 같다.
[표 3]
R0 레지스터 독출 R15 레지스터 독출
STR R0, [R14]MOV R13, R13MOV R13, R13MOV R13, R13 MOV R0, PCSTR R0, [R14]MOV R0, R0MOV R0, R0MOV R0, R0
그리고 단계 S408에서 상기 [표 3]에서 읽어들인 PC 값을 통하여 DBGRQ 에 의한 디버그 상태인 경우와 BREAKPT 에 의한 디버그 상태인 경우에 따라서 [표 4]에 의해 다음 수행할 어드레스(next address)를 계산한다.
[표 4]
DBGRQ에 의한 디버그 상태인 경우 BREAKPT에 의한 디버그 상태인 경우
Next Addr = PC 값 - 0xE Next Addr = PC 값 - 0x10
이어서 단계 S410으로 진행하여 THUMB 코드를 이용하여 ARM 모드로 전환한다. 이 때, THUMB 코드는 [표 5]에 나타낸 명령어를 입력한다.
[표 5]
BX PCMOV R13, R13MOV R13, R13
여기서 BX(Branch and Exchange) 명령은 코어의 상태를 스위치하거나 이를 위해서 브랜치하는 동작을 수행한다.
계속해서 단계 S412에서는 CPSR 레지스터를 [표 6]에 나타낸 명령어를 입력하여 독출한다.
[표 6]
MRS R0, CPSRSTR R0, [R15]MOV R0, R0MOV R0, R0MOV R0, R0
여기서 MRS 명령은 PSR 상태/플래그들의 정보를 레지스터로 이동시키는 명령으로서, CPSR(Current Program State Register) 레지스터의 정보를 R0 레지스터로 전달한다.
이어서 단계 S414에서는 상기 단계(S402)에서 디버그 상태 전의 상태가 THUMB 모드였는지를 판별하고, THUMB 모드인 경우에는 단계 S416으로 진행하여 저장된 CPSR 값의 제어 비트 중에 TBIT를 "1"로 설정한다. 그러므로 상기 수순에 의해서 코어의 현재 상태에 대한 정보를 저장한다.
계속해서, 도 5는 코어의 상태 복구 및 디버그 상태 종료에 따른 동작 수순을 도시하고 있다.
도면을 참조하면, 단계 S602에서 디버그 상태 종료 후의 수행할 어드레스를 계산하기 위하여 arm_addr와 raddr를 계산한다. 즉, ARM 상태인 경우에는 어드레스 비트 1이 항상 "0"이기 때문에 arm_addr가 다음 수행할 어드레스, 즉 NextAddr와 일치하고, raddr은 항상 "0"이다. THUMB 상태인 경우에는 하프 워드(half word, 즉 16 비트) 어드레스이기 때문에 어드레스 비트 1의 값은 매우 중요하다. 따라서 이 비트 1의 값을 아래의 [표 7]에 나타낸 바와 같이 계산하여 raddr에 대입한다.
[표 7]
arm_addr = NextAddr & 0xfffffffcraddr = NextAddr - arm_addrraddr = raddr >> 1;
이어서 단계 S604에서 R0에 32 비트 arm_addr 값을 기입한다. 즉, R0를 이용하여 PC를 arm_addr로 갱신하기 위하여 다음의 [표 8]에 나타낸 명령어를 입력한다.
[표 8]
BX R0MOV R0, R0MOV R0, R0MOV R0, R0
단계 S606에서는 저장해 둔 R0 레지스터를 복구한다. 즉, R0 레지스터에 원래의 32 비트 값을 기입한다. 그리고 단계 S608에서 [표 9]의 명령어를 입력하여 CPSR 레지스터의 상태 코드 플래그들을 복구한다. 그리고 단계 S610에서 [표 10]의 명령어를 입력하여 CPSR 레지스터의 제어 비트들을 복구한다.
[표 9]
0xE328F200 : (cpsr >> 28)
[표 10]
0xE321F000 : (cpsr & 0xff)
이 때, TBIT 비트도 같이 복구한다. 따라서 이 명령어를 수행한 후 원래의 상태로 전환된다. 그리고 THUMB 상태인 경우에는 다음 [표 11]의 명령어를 입력한다.
[표 11]
MOV R0, R0 (ARM 코드)MOV R13, R13 (THUMB 코드)MOV R13, R13 (THUMB 코드)MOV R13, R13 (THUMB 코드)
만약 ARM 모드인 경우에는 [표 12]에 나타낸 ARM 코드를 입력한다. 이때, 마지막에 입력되는 명령어는 BREAKPT 비트를 "1"로 입력한다.
[표 12]
MOV R0, R0MOV R0, R0MOV R0, R0MOV R0, R0
그리고 단계 S612에서 jmpcode(JUMP 코드)를 다음의 [표 13]과 같이 계산한다.
[표 13]
THUMB 모드 ARM 모드
jmpval = -28+raddr;jmpcode = (ulong)(0xE000:(jmpval &0x7ff));jmpcode: = (ulong)(jmpcode<<16); jmpval = -16;jmpcode = (0xea000000:(jmpval &0x00ffffff));
이어서 단계 S614에서 상기 [표 13]에 의해 계산된 JUMP 코드를 입력하고, JTAG 인터페이스의 IR 레지스터에 RESTART 명령을 입력한다. 그러므로 코어의 디버그 상태가 종료되고, 디버그 전 상태로 복구된다.
상술한 바와 같이 본 발명은 JTAG 인터페이스를 이용하여 32 비트 마이크로프로세서를 디버깅하는 ICE 블럭의 디버깅 방법을 제공하므로서, 마이크로프로세서의 하드웨어적인 부담을 줄일 뿐 만 아니라, ICE 블럭의 디버깅 프로그램과 코어 내부의 에뮬레이션 블럭을 통해 디버그 기능을 수행하여 처리 속도에도 문제가 발생되지 않는다.

Claims (7)

  1. 복수 개의 JTAG 스타일 스캔 체인(16, 18, 20)들 및 TAG 컨트롤러(22)를 이용하는 내장 에뮬레이터(24)를 갖는 마이크로컨트롤러(10)의 디버깅 방법에 있어서:
    상기 에뮬레이터(24)로부터 상기 스캔 체인들 중에 제 1 스캔 체인(20)을 통해서 디버그 상태 레지스터(26)의 DBGACK 비트를 독출하여 상기 코어(12)의 동작 상태가 디버그 상태인지를 판별하는 단계(S100)와;
    디버그 상태이면, 상기 제 1 스캔 체인(20)을 통해서 명령어를 받아서, 상기 디버그 제어 레지스터(26)를 클리어(clear)하는 단계(S200)와;
    상기 제 1 스캔 체인(20)을 통해서 상기 디버그 상태 레지스터(26)의 TBIT 비트를 저장하는 단계(S300)와;
    상기 제 1(20) 및 제 2 스캔 체인(18)을 통해서 상기 디버그 상태 직전 코어의 동작 상태에 대한 정보들을 저장하는 단계(S400)와;
    상기 에뮬레이터(24)가 상기 코어(12)의 디버깅을 수행하는 단계(S500) 및;
    상기 디버그 상태 직전 코어(12)의 동작 상태에 대한 정보들에 의해 코어(12)의 디버그 상태 전의 상태로 복구하는 단계(600)를 포함하는 마이크로컨트롤러의 디버깅 방법.
  2. 제 1 항에 있어서,
    상기 정보들을 저장하는 단계(S400)는:
    상기 코어(12)의 디버그 상태가 THUMB 모드인지를 판별하는 단계(S402)와;
    THUMB 모드이면, THUMB 코드를 이용하여 특정의 레지스터들의 정보를 독출하는 단계(S404, S406)와;
    상기 독출된 정보들을 이용하여 다음 어드레스를 계산하는 단계(S408)와;
    THUMB 코드를 이용하여 ARM 상태로 전환하는 단계(S410)와;
    CPSR 레지스터를 독출하여 상기 디버그 상태가 THUMB 모드였는지를 판별하는 단계(S412, S414) 및;
    THUMB 모드였으면, CPSR 레지스터를 보정하는 단계(S416)를 포함하는 마이크로컨트롤러의 디버깅 방법.
  3. 제 2 항에 있어서,
    상기 코어(12)의 상태가 ARM 모드이면, ARM 코드를 이용하여 상기 특정 레지스터들을 독출하는 단계(S418, S420)와;
    상기 독출된 정보들을 이용하여 다음 어드레스를 계산하는 단계(S422)를 포함하는 마이크로컨트롤러의 디버깅 방법.
  4. 제 1 항에 있어서,
    상기 복구하는 단계(S600)는:
    ARM 모드 또는 THUMB 모드에 대응하여 상기 다음 어드레스(Next Address)로부터 제 1(arm_addr) 및 제 2 어드레스(raddr)를 계산하는 단계(S602)와;
    프로그램 카운터(PC)를 상기 다음 어드레스로 변경하는 단계(S604)와;
    특정의 레지스터들(R0, CPSR)을 복구하는 단계(S606, S608, S610)와;
    ARM 모드 또는 THUMB 모드에 대응하여 점프 코드(JUMP code)를 계산하는 단계(S612) 및;
    디버그 상태를 종료하는 단계(S614)를 포함하는 마이크로컨트롤러의 디버깅 방법.
  5. 제 4 항에 있어서,
    상기 레지스터들을 복구하는 단계는:
    상기 R0 레지스터를 복구하는 단계(S606)와;
    상기 CPSR 레지스터의 상태 코드 플래그들(state code flags)을 복구하는 단계(S608)와;
    상기 CPSR 레지스터의 제어 비트(control bit)들을 복구하는 단계(S610)를 포함하는 마이크로컨트롤러의 디버깅 방법.
  6. 제 1 항에 있어서,
    상기 제 2 스캔 체인(18)을 이용하여 명령을 입력하는 방법(S30)은:
    상기 제 2 스캔 체인(18)을 선택하는 단계(S32)와;
    상기 TAG 컨트롤러(22)의 명령 레지스터(IR : Instruction Register)에 INTEST 명령을 입력하는 단계(S34) 및;
    다음 수행할 명령어 및 제어 신호(BREAKPT)를 입력하는 단계(S36)를 포함하는 마이크로컨트롤러의 디버깅 방법.
  7. 제 1 항에 있어서,
    상기 제 1 스캔 체인(20)을 이용하여 상기 TAG 컨트롤러(22)로 접근 가능한 레지스터를 기입, 독출하는 방법(S40)은:
    상기 제 1 스캔 체인(20)를 선택하는 단계(S42)와;
    상기 명령 레지스터(IR : Instruction Register)에 INTEST 명령을 입력하는 단계(S44) 및;
    상기 에뮬레이터(24)로부터 해당 레지스터의 기입, 독출을 위한 상기 레지스터의 어드레스 및 데이터를 입력하는 단계(S46)를 포함하는 마이크로컨트롤러의 디버깅 방법.
KR1019980011941A 1998-04-04 1998-04-04 마이크로컨트롤러의 바운더리 스캔 스탠다드 인터페이스를 이용한 디버깅 방법 KR19990079373A (ko)

Priority Applications (1)

Application Number Priority Date Filing Date Title
KR1019980011941A KR19990079373A (ko) 1998-04-04 1998-04-04 마이크로컨트롤러의 바운더리 스캔 스탠다드 인터페이스를 이용한 디버깅 방법

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR1019980011941A KR19990079373A (ko) 1998-04-04 1998-04-04 마이크로컨트롤러의 바운더리 스캔 스탠다드 인터페이스를 이용한 디버깅 방법

Publications (1)

Publication Number Publication Date
KR19990079373A true KR19990079373A (ko) 1999-11-05

Family

ID=65861057

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1019980011941A KR19990079373A (ko) 1998-04-04 1998-04-04 마이크로컨트롤러의 바운더리 스캔 스탠다드 인터페이스를 이용한 디버깅 방법

Country Status (1)

Country Link
KR (1) KR19990079373A (ko)

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR100324315B1 (ko) * 1998-12-12 2002-05-13 김영환 에뮬레이터를이용한오류수정장치
KR100606750B1 (ko) * 1999-12-31 2006-07-31 엘지전자 주식회사 휴대 전화기용 프로그램 다운로딩 장치
CN116361195A (zh) * 2023-05-24 2023-06-30 麒麟软件有限公司 一种调试Linux内核的方法

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR100324315B1 (ko) * 1998-12-12 2002-05-13 김영환 에뮬레이터를이용한오류수정장치
KR100606750B1 (ko) * 1999-12-31 2006-07-31 엘지전자 주식회사 휴대 전화기용 프로그램 다운로딩 장치
CN116361195A (zh) * 2023-05-24 2023-06-30 麒麟软件有限公司 一种调试Linux内核的方法
CN116361195B (zh) * 2023-05-24 2023-08-22 麒麟软件有限公司 一种调试Linux内核的方法

Similar Documents

Publication Publication Date Title
US7080283B1 (en) Simultaneous real-time trace and debug for multiple processing core systems on a chip
US5596734A (en) Method and apparatus for programming embedded memories of a variety of integrated circuits using the IEEE test access port
JP4190114B2 (ja) マイクロコンピュータ
US6668339B1 (en) Microprocessor having a debug interruption function
JPH02133834A (ja) インサートキットエミュレータ
US6691270B2 (en) Integrated circuit and method of operation of such a circuit employing serial test scan chains
CN108899061A (zh) 一种电源常开芯片中的存储器内建自测试方法和系统
JPH02154399A (ja) メモリ試験装置
KR100407548B1 (ko) 트레이스 제어 회로
US5515530A (en) Method and apparatus for asynchronous, bi-directional communication between first and second logic elements having a fixed priority arbitrator
KR19990079373A (ko) 마이크로컨트롤러의 바운더리 스캔 스탠다드 인터페이스를 이용한 디버깅 방법
US6704858B1 (en) Information processor and method for switching those register files
JP2001184212A (ja) トレース制御回路
CN114487793A (zh) 芯片功能性测试单元、测试方法、芯片和自动测试系统
US20090157761A1 (en) Maintaining data coherency in multi-clock systems
JP2004094451A (ja) オンチップjtagインタフェース回路およびシステムlsi
JPH0812226B2 (ja) 半導体装置
EP0142562B1 (en) Pipeline system for microprogram control unit
JP2824853B2 (ja) パターンデータ書込み方式
JPH1040130A (ja) マイクロコンピュータ
JPH10106293A (ja) 半導体メモリ試験方法及びその装置
JPS646489B2 (ko)
JPH1011315A (ja) インサーキットエミュレータ装置およびインサーキットエミュレーション方法
KR100557918B1 (ko) 조인트 테스트 액세스 그룹을 이용한 오류수정장치
CN100435112C (zh) 单片机开发系统用户软件程序断点设置方法

Legal Events

Date Code Title Description
WITN Withdrawal due to no request for examination