KR20010006193A - 소형의 트레이스 기록 기억장치를 포함하는 디버그 인터페이스 - Google Patents
소형의 트레이스 기록 기억장치를 포함하는 디버그 인터페이스 Download PDFInfo
- Publication number
- KR20010006193A KR20010006193A KR1019997009273A KR19997009273A KR20010006193A KR 20010006193 A KR20010006193 A KR 20010006193A KR 1019997009273 A KR1019997009273 A KR 1019997009273A KR 19997009273 A KR19997009273 A KR 19997009273A KR 20010006193 A KR20010006193 A KR 20010006193A
- Authority
- KR
- South Korea
- Prior art keywords
- trace
- debug
- data
- tcode
- processor
- Prior art date
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/362—Software debugging
- G06F11/3648—Software debugging using additional hardware
- G06F11/3652—Software debugging using additional hardware in-circuit-emulation [ICE] arrangements
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/362—Software debugging
- G06F11/3636—Software debugging by tracing the execution of the program
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/30—Monitoring
- G06F11/34—Recording or statistical evaluation of computer activity, e.g. of down time, of input/output operation ; Recording or statistical evaluation of user activity, e.g. usability assessment
- G06F11/3466—Performance evaluation by tracing or monitoring
- G06F11/348—Circuit details, i.e. tracer hardware
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/362—Software debugging
- G06F11/3648—Software debugging using additional hardware
- G06F11/3656—Software debugging using additional hardware using a specific debug interface
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/22—Detection or location of defective computer hardware by testing during standby operation or during idle time, e.g. start-up testing
- G06F11/26—Functional testing
- G06F11/261—Functional testing by simulating additional hardware, e.g. fault simulation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/30—Monitoring
- G06F11/34—Recording or statistical evaluation of computer activity, e.g. of down time, of input/output operation ; Recording or statistical evaluation of user activity, e.g. usability assessment
- G06F11/3409—Recording or statistical evaluation of computer activity, e.g. of down time, of input/output operation ; Recording or statistical evaluation of user activity, e.g. usability assessment for performance assessment
- G06F11/3419—Recording or statistical evaluation of computer activity, e.g. of down time, of input/output operation ; Recording or statistical evaluation of user activity, e.g. usability assessment for performance assessment by assessing time
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/30—Monitoring
- G06F11/34—Recording or statistical evaluation of computer activity, e.g. of down time, of input/output operation ; Recording or statistical evaluation of user activity, e.g. usability assessment
- G06F11/3466—Performance evaluation by tracing or monitoring
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2201/00—Indexing scheme relating to error detection, to error correction, and to monitoring
- G06F2201/86—Event-based monitoring
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2201/00—Indexing scheme relating to error detection, to error correction, and to monitoring
- G06F2201/88—Monitoring involving counting
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2201/00—Indexing scheme relating to error detection, to error correction, and to monitoring
- G06F2201/885—Monitoring specific for caches
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Computer Hardware Design (AREA)
- General Engineering & Computer Science (AREA)
- Quality & Reliability (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Debugging And Monitoring (AREA)
Abstract
내부 회로 에뮬레이터(ICE) 및 소프트웨어 디버그 장치가 목표 프로세서를 호스트 시스템에 인터페이스하는 디버그 인터페이스에 의하여 프로세서내에 포함된다. 목표 프로세서 내에 위치되는 디버그 인터페이스는, 지정된 조건을 검출하기 위하여 목표 프로세서에 의해 생성된 신호를 모니터하며, 조건의 표시 및 조건에 관련된 선택 정보를 포함하는 지정된 조건의 트레이스 기록을 생성하는 트레이스 컨트롤러를 포함한다. 트레이스 컨트롤러는 트레이스 정보 기록을 포맷하며, 이 트레이스 정보 기록을 다수의 트레이스 데이터 저장 엘리먼트 내의 트레이스 버퍼에 저장한다. 트레이스 데이터 저장 엘리먼트는 트레이스 정보의 타입을 나타내는 트레이스 코드(TCODE) 필드 및 트레이스 정보 데이터의 타입을 나타내는 트레이스 데이터(TDATA) 필드를 포함하는 포맷을 갖는다.
Description
프로세서 클럭 속도의 증가와 함께 소프트웨어 복잡성의 증가는 응용 소프트웨어 개발자들에게 부담을 증가시켜 왔다. 새로운 소프트웨어 제품의 개발 및 디버깅 비용은 이제 프로세서를 선택함에 있어서 중요한 요소가 되었다. 프로세서에 적절한 소프트웨어 디버그 기능을 포함하지 못하게 되면 고객 개발 횟수를 더 길게 하며 프로세서를 산업에 이용할 때의 장점을 감소시킨다. 소프트웨어 디버그 지원은 특히, 특정화된 온칩 회로가 종종 프로세서 코어에 결합되는 내장형 제품 산업(embeded product industry)에 유용하다.
프로세서의 소프트웨어 디버그 툴 구조는 프로세서 위에서의 실행을 위한 프로그램 코드를 개발하는 개발자 외에 몇몇 분야의 필요성을 제기한다. “트레이스”알고리즘 개발자는 프로세서 내에서의 명령 실행 흐름을 나타내는 포획된(captured) 소프트웨어 트레이스 데이터를 통하여 검색한다. 내부 회로 에뮬레이터(in-circuit emulator) 개발자는 신호 동기화, 클럭 주파수 및 트레이스 대역폭의 문제를 다룬다. 프로세서 제조업자는 프로세서 비용의 증가 또는 디자인 및 개발의 복잡성을 피하는 소프트웨어 디버크 툴 해결책을 찾는다.
탁상용 시스템에서, 복잡한 병행성 운용체제(multitasking operating system)가 일반적으로 소프트웨어 디버깅을 지원하는 데에 유용하다. 그러나, 운용체제를 확실하게 가동시키는 초기의 작업은 종종 특별한 개발 장비를 요구한다. 탁상용 환경에서 표준은 아니지만, 가령 논리 분석기, 판독 전용 메모리(ROM) 에뮬레이터, 및 내부 회로 에뮬레이터(ICE)와 같은 개발 장비가 종종 내장형 제품 산업에 이용된다. 내부 회로에뮬레이터는, 메모리 및 레지스터 내용을 통한 완전한 제어 및 가시성을 포함하며, 시스템 메모리가 부족하다면 오버레이 및 트레이스 메모리를 공급하는 다른 디버그 환경을 능가하는 몇 가지의 장점들을 갖는다.
전형적인 내부 회로 에뮬레이터는 에뮬레이션 장비와 타겟 시스템간의 통신을 가능하게하기 위하여 주문형 에뮬레이터 백 엔드를 프로세서 소켓에 인터페이싱함으로써 이용된다. 제품의 라이프 싸이클이 줄어들고 비표준 및 외국의 집적 회로 패키지가 현재의 프로세서 디자인에서 지배적이기 때문에, 에뮬레이터 인터페이스의 주문형 디자인은 더욱 더 비현실적이며 비싸게 되었다.
소수의 공지된 프로세서 제조 기술은 적절하고 완전한 기능의 내부 회로 에뮬레이션 기능을 지원하는 데에 유용하다. 개인용 컴퓨터(PC) 시스템 내의 대부분의 프로세서는, 소프트웨어 디버그 애플리케이션에서의 교번적인 이용을 위하여 종래의 핀들이 다중화되는 다중화된 접근을 이용하여 에뮬레이션 기능을 실행한다. 핀들의 다중화는, 본래부터 핀 기능의 과부하를 받는 내장형 컨트롤러에서는 바람직하지 않다.
몇몇 진보된 프로세서들은, 예를 들어 분기 목표 어드레스(BTA) 싸이클 동안 소프트웨어 트레이스 정보를 기록하기 위하여 어드레스 버스를 이용함으로써 디버그 핀들을 적절한 때에 다중화한다. BTA-싸이클은 규칙적인 버스 동작 싸이클로부터 얻어진다. 그러나, 높은 분기 활동 및 낮은 캐시 히트 레이트를 갖는 디버그 환경에서, BTA-싸이클은 종종 취급 분기들(handling branches)에 의해 완전하게 사용되며, 이는 명령 트레이스 정보의 손실을 막기 위하여 프로세서 “쓰로틀 백”을 필요로 하는 어드레스 버로스로의 액세스 동안 충돌을 일으킨다. 예를 들어, 통신 산업에서의 소프트웨어는 분기 집중형(branch-intensive)이며, 캐시 이용이 빈약하여 종종 20% 또는 그 이상의 쓰로틀 백, 및 실시간 구속을 받기쉬운 내장형 제품들에 대해서는 필요한 양을 수용할 수 없게 된다.
다른 접근에서, 제 2 “트레이스”또는 “슬레이브”프로세서는 보조를 맞추어 동작하는 2개의 프로세서에 의하여 메인 프로세서에 결합된다. 단지 메인 프로세서만이 명령을 페치한다. 제 2 슬레이브 프로세서는 데이터 버스 위에서 페치된 명령을 모니터하며 메인 프로세서와 동기를 이루어 내부 상태를 유지한다. 슬레이브 프로세서의 어드레스 버스는 트레이스 정보를 공급한다. 파워업된 후, JTAG(조인트 테스트 액션 그룹) 입력부에 의하여, 제 2 프로세서는 슬레이브 동작 모드로 스위치된다. 명령 페치 실행이 없는 슬레이브 프로세서는 트레이스 정보를 이용하기 위하여 슬레이브 프로세서 어드레스 버스 및 다른 핀들을 이용한다.
종래의 또 다른 디버그 방법은 시스템내 모든 프로세서로에 디버그 지원 실행을 이용하는데, 단지 한정된 수의 패키지내의 본드아웃 신호 핀들에 대해서만 이용된다. 프로세서의 본드아웃 변형은 디버그 동안 이용되며 최종 제품에 대하여 유사한 패키지로 대체된다. 본드아웃 접근은, 특히 상당한 수의 여분의 핀들이 디버그 지원 변형에 의하여 요구된다면, 모든 제조되는 장치들내의 부가적인 본드 경로 사이트, 작은 패키지의 부담, 및 패드 한정 설계의 필요성을 갖게 된다. 게다가, 특별하게-패키지된 프로세서의 디버그 성능은 전형적인 프로세서-기본 제조 시스템에서 이용할 수 없다.
또 다른 접근에서, 한정된 온칩 회로, 특히 모토로라 주식회사에 의해 실행된 백그라운드 디버그 모드(BDM)는 기본 가동 제어에 대하여 실행된다. BDM 접근은 부가적인 핀들을 갖는 전용 직렬 링크를 이용하고, 디버거가 목표 시스템을 시동 및 정지할 수 있게 하며, 시스템 메모리에 특별한 명령을 삽입함으로써 기본 코드 중지점(break poing)을 적용한다. 일단 정지되면, 메모리 변수 및 레지스터 내용을 검사하기 위하여 특별한 명령이 이용된다. BDM 시스템은 트레이스 지원을 포함하지만, 편리하게 직렬 링크를 이용하지는 않는다. 대신에, BDM 시스템은 부가적인 전용 핀들을 통한 트레이스 지원, 및 명령 트레이스 데이터를 전송하는 외부 트레이스 포획 하드웨어를 공급한다.
따라서, 소프트웨어 디버깅에 대한 오늘날의 기술은 증가된 패키지 및 개발 비용, 회로 복잡성, 프로세서 쓰로틀링, 및 대역폭 정합의 어려움을 포함한 여러가지의 제한들을 받게 된다. 또한, 트레이스 정보를 제공하기 위한 어떠한 적절한 저비용 절차도 현재 이용가능하지가 않다. 종래 해결책에 있어서의 이와같은 제한은 내부 프로세서 클록 주파수가 계속하여 증가하기 때문에 앞으로 더 악화될 것 같다.
소프트웨어 디버그 시스템, 및 개선된 트레이스 성능을 포함하는 동작 절차가 필요하다.
본 출원은, 본 원의 참조로서 인용되며 1997년 8월 8일 출원된 미합중국 특허 출원 제60/043,070호를 우선권으로 주장한다.
본 발명은 가령 마이크로프로세서와 같은 컴퓨터 시스템에 관한 것으로, 특히 소프트웨어 디버그 지원 시스템 및 프로세서에서의 동작 방법에 관한 것이다.
첨부된 도면을 참조하여 본 발명을 좀 더 잘 이해할 수 있을 것이며, 당업자에게 본 발명의 많은 목적들, 특징들, 및 장점들이 명확해질 것이다.
도 1은 본 발명의 실시예에 따라 소프트웨어 디버그 포트를 이용하는 소프트웨어 디버그 환경을 보여주는 블록도이다.
도 2는 본 발명에 따라 소프트웨어 디버그 포트를 통합하는 예시적인 내장형 프로세서 제품의 세부사항을 도시한 블록도이다.
도 3은 본 발명에 따라 예시적인 명령 트레이스 버퍼와 내장형 프로세서 제품의 다른 구성요소간의 관계를 도시한 단순화된 블록도이다.
도 4는 본 발명의 제 1 실시예에 따라 소프트웨어 디버그 명령 통과를 설명하는 순서도이다.
도 5는 본 발명의 제 2 실시예에 따라 개선된 소프트웨어 포트 명령 통과를 설명하는 순서도이다.
도 6a 내지 6g는 본 발명에 따라 명령 실행을 기록하기 위한 다양한 트레이스 버퍼 엔트리의 일반적인 포맷을 도시한다.
도 7은 표준 JTAG 인터페이스 액세스 동작 상태를 보여주는 상태도이다.
도 8은 개선된 JTAG 인터페이스 액세스 동작 상태를 보여주는 상태도이다.
도 9는 병렬 디버그 버스의 획득 및 해제를 위한 신호의 반응을 보여주는 타이밍도이다.
도 10은 병렬 포트에 의하여 통신하는 동안 호스트 시스템에 의해 동조되는 병렬 디버그 포트 인터페이스 프로토콜을 도시하는 순서도이다.
다른 도면들에 동일한 참조 번호를 사용한 것은 유사하거나 동일한 엔트리를 나타내기 위함이다.
내부 회로 에뮬레이터(ICE) 및 소프트웨어 디버그 장치가 목표 프로세서를 호스트 시스템에 인터페이스하는 디버그 인터페이스에 의하여 프로세서내에 포함된다. 디버그 인터페이스는, 지정된 조건을 검출하기 위하여 목표 프로세서에 의해 생성된 신호를 모니터하며, 조건의 표시 및 조건에 관련된 선택 정보를 포함하는 지정된 조건의 트레이스 기록을 생성하는 트레이스 컨트롤러를 포함한다. 트레이스 컨트롤러는 트레이스 정보 기록을 포맷하며, 이 트레이스 정보 기록을 다수의 트레이스 데이터 저장 엘리먼트 내의 트레이스 버퍼에 저장한다. 트레이스 데이터 저장 엘리먼트는 트레이스 정보의 타입을 나타내는 트레이스 코드(TCODE) 필드 및 트레이스 정보 데이터의 타입을 나타내는 트레이스 데이터(TDATA) 필드를 포함하는 포맷을 갖는다.
본 발명의 실시예에 따라, 목표 프로세서 내의 디버그 인터페이스는 목표 프로세서를 호스트 시스템에 인터페이스한다. 디버그 인터페이스는 목표 프로세서로 연결하고 목표 프로세서로부터 트레이스 정보를 수신하기 위한 트레이스 컨트롤러를 포함한다. 트레이스 컨트롤러는 선택된 트레이스 정보를 검출하고 선택된 트레이스 정보의 샘플을 포맷한다. 디버그 인터페이스는 또한 트레이스 컨트롤러에 연결된 트레이스 버퍼를 포함한다. 트레이스 버퍼는 트레이스 정보의 타입을 나타내는 트레이스 코드(TCODE) 필드 및 트레이스 정보 데이터의 타입을 나타내는 트레이스 데이터(TDATA) 필드를 포함하는 다수의 트레이스 데이터 저장 엘리먼트를 포함한다.
트레이스 버퍼는 필드 장비를 제어하기 위한 애플리케이션에서 매우 유용하다. 만일 예기치 않은 시스템 고장이 일어난다면, 고장까지 일어나게 된 실행 히스토리를 관찰하기 위하여 트레이스 버퍼를 검사한다. 휴대용 시스템에서, 또는 전력 소모에 관련된 다른 환경에서 사용될 때, 트레이스 버퍼는 전력 관리 회로에 의해 디스에이블된다. 트레이스 기록은 트레이스 이벤트의 기록을 포함하는 트레이스 버퍼로부터 판독된다. 트레이스 이벤트는 트레이스 기록을 발생시키는 행동이다. 트레이스 이벤트는, 예를 들어 x86 명령에 의해 야기되며, 명령은 예외, 하드웨어 인터럽트, 트레이스 동기 이벤트, 트레이스 포획의 활성 또는 비활성, 및 특권 레벨을 바꾸는 이벤트를 야기시킨다.
상기 설명된 디버그 인터페이스 및 관련된 동작 방법은 많은 장점들을 갖는다. 소형의 TCODE 및 TDATA 포맷은 중요한 동작 정보를 한정된 저장 공간에 효율적으로 저장한다. TCODE 및 TDATA 포맷은, 매우 압축되지만 상당한 양의 유용한 특징적인 정보를 기록하는 압축된 기록을 생성할 수 있도록 규정된다.
도 1은 디버그 포트(100)를 이용하는 소프트웨어 디버그 환경을 도시하는 블록도이다. 목표 시스템(101)은 시스템 메모리(106)에 결합된 내장형 프로세서 디바이스(102)를 포함한다. 내장형 프로세서 디바이스(102)는 내장형 하드웨어/소프트웨어 디버그 시스템에서 탄력적이며 고성능을 갖는 통합된 디버그 인터페이스이다. 내장형 프로세서 디바이스(102)는 프로세서 코어(104) 및 디버그 포트(100)를 포함한다. 어떠한 실시예에서, 내장형 프로세서 디바이스(102)는 특정한 애플리케이션 기능을 수행하기 위한 부가적인 회로(미도시)를 통합할 수도 있으며, 또는 독립형 프로세서 또는 디지털 신호 프로세서의 형태를 취할 수도 있다. 예시적인 실시예에서, 디버그 포트(100)는 IEEE-1149.1-1990 컴플라이언트 JTAG 인터페이스 또는 다른 유사한 표준화된 직렬 포트 인터페이스를 포함한다.
호스트 시스템(111)은 하이-레벨 명령을 전송하며 목표 시스템(101)에 의해 발생된 디버그 정보의 추출 및 분석을 제어하기 위한 디버그 제어 소프트웨어(112)를 실행하는 데에 이용된다. 개시된 본 발명 실시예의 호스트 시스템(111) 및 목표 시스템(101)은 직렬 링크(110)를 통하여 통신한다. 대부분의 컴퓨터들은, 직렬 커넥터(108)에 의하여 디버그 포트(100)에 저비용으로 연결될 수 있는 직렬 및 병렬 인터페이스를 구비하여, 대부분의 컴퓨터들이 호스트 시스템(111)으로서 기능을 할 수 있게 된다. 어떠한 실시예에서, 직렬 커넥터(108)는 더 높은 속도의 JTAG/네트워크 변환 장비로 대체된다.
도 2는 프로세서 코어(104) 및 향상된 형태의 디버그 포트(100)의 다양한 엘리먼트들을 포함하는, 내장형 프로세서 디바이스(102)를 도시한 블록도이다. 내장형 프로세서 디바이스(102)는 JTAG TAP 컨트롤러(204)의 직렬 포트, 트레이스 제어 회로(218), 및 프로세서 코어(104)간의 메시지 및 데이터를 통신하는 다수의 상태 머신을 포함한다. 어떠한 실시예에서, 내장형 프로세서 디바이스(102)는 직렬 포트(214)를 포함하며, 상태 머신은 유사하게 직렬 포트(214), 트레이스 제어 회로(218), 및 프로세서 코어(104)간의 통신을 설정한다.
상태 머신은 디버그 포트 상태 머신(206), 병렬 포트 상태 머신(226), 프로세서 인터페이스 상태 머신(202), 및 계류/종료 상태 머신(224)을 포함한다. 상태 머신은 직렬/병렬 포트로부터 명령 및 데이터를 판독하며, 명령 디코드 및 처리 블록 로직(208)에 의하여 명령의 디코드를 지시한다. 가령 메모리로부터 데이터를 판독하기 위한 명령과 같은 어떠한 명령은 프로세서 코어(104) 중재를 이용하며 프로세서 코어(104)로 적절하게 전송된다. 상태 머신은 이전 명령이 완료될 때까지 다른 명령을 받아들이지 않는다. 일단 명령이 완료되면, 호스트 시스템(111)에 명령 완료를 나타내기 위하여 디버그 레지스터(210) 블록내의 플래그가 어서트되거나 출력 핀들이 어서트된다.
디버그 포트(100)의 최소한의 실시예는, 유익하게는 제어가능성 및 관찰가능성을 달성하는 고속 JTAG 컴플라이언트 인터페이스내에 단지 종래의 JTAG 핀들 만을 지원한다. JTAG 핀들은 프로세서 코어(104)에 의해 처리하기 위한 명령을 유입하기 위하여 종래의 핀들을 이용하는 수송 메커니즘이다. 종래의 JTAG 핀들은 시험 클록 신호 TCK, 시험 모드 선택 신호 TMS, 시험 데이터 입력 신호 TDI, 및 시험 데이터 출력 신호 TDO를 포함하는 이 분야에 널리 공지된 종래의 JTAG 지원 신호를 전달한다. 종래의 JTAG 핀들은 JTAG 시험 액세스 포트(TAP) 컨트롤러(204)에 의해 구동된다.
JTAG 인터페이스는 프로세서 핀들을 스캔한다기 보다는, 소프트웨어 디버그 성능을 향상시키고 하이 레벨 명령을 프로세서 코어(104)로 전송할 수 있도록 강화된다. JTAG-컴플라이언트 직렬 인터페이스는 부가적인 측파대 신호 및 16-비트 데이터 경로를 갖는 본드아웃 병렬 인터페이스에 의한 더 높은 속도의 액세스를 위하여 증가된다. 보다 명확히 말하면, 강화된 10-핀 디버그 포트(100) 포맷을 완전하게 지원하기 위하여, 비-본드아웃 패키지 내에 JTAG 기능을 지원하는 내장형 프로세서 4개의 핀들이 디바이스(102)에 부가된다. 디버그 포트(200)의 강화된 실시예는 명령 확인 신호 CMDACK, 중지 요청/트레이스 포획 신호 BRTC, 정지 전송 신호 STOPTX, 및 표준 JTAG 인터페이스로의 트리거 신호 TRIG를 포함하는 “측파대”신호를 전달하는 4개의 부가적인 핀들을 지원한다. 부가적인 측파대 신호는 유익하게는 내부 중지점에 응답하여 외부 디바이스를 트리거하여 매우 정밀한 외부 중지점의 어셔션 및 모니터링을 달성함으로써, 그리고 JTAG 직렬 인터페이스의 상태 폴링을 제거함으로써 디버그 포트(100)의 성능 및 기능을 향상시킨다. 측파대 신호는 부가적인 기능을 제공하며 디버그 포트(100)에 대한 통신 속도를 향상시키지는 하지만, 선택적이며 종래의 JTAG 지원 신호를 이용하는 디버그 포트(100)의 가장 단순한 실시예에서는 이용되지 못한다. 예시적인 실시예에서, 측파대 신호는 내장형 프로세서 디바이스(102)의 특별한 본드아웃 변형에 대하여 제공된 선택적인 병렬 포트(214)와 함께 이용된다.
종래의 JTAG 신호를 이용하여, JTAG TAP 컨트롤러(204)는 표준 JTAG 직렬 데이터 및 제어 신호를 받는다. 공공의 JTAG DEBUG 명령이 JTAG 명령 레지스터에 기록될 때, 직렬 디버그 시프터(212)는 JTAG TAP 컨트롤러(204)에 의해 형성된 직렬 인터페이스에 연결된다. JTAG 시험 데이터 입력 신호(TDI) 및 시험 데이터 출력 신호(TDO)는, 명령 및 데이터가 디버그 레지스터(210)내로 로드되고 디버그 레지스터(210)에 의해 판독될 수 있도록, JTAG TAP 컨트롤러(204)를 통하여 직렬 디버그 시프터(212)에 의해 수신된다. 개시된 실시예에서, 디버그 레지스터(210)는 2개의 디버그 레지스터, 즉 명령 트레이스 구성 레지스터(ITCR) 및 디버그 제어 상태 레지스터(DCSR)를 전송하기 위한 레지스터(TX_DATA 레지스터) 및 송신하기 위한 레지스터(RX_DATA 레지스터)를 포함한다. 데이터는 전형적으로 JTAG TAP 컨트롤러 상태 머신 내의 포획 DR-업데이트 시퀀스를 이용하여 JTAG TAP 컨트롤러(204)로부터 판독된다.
명령 트레이스 구성 레지스터(ITCR)는 명령 트레이스 디버그 기능들의 인에이블, 디스에이블, 및 구성을 제어하기 위하여 기록된다. ITCR은 직렬/병렬 디버그 레비스터 기록/판독 명령을 통하여 또는 지정된 명령 LDTRC를 이용하여 액세스된다.
디버그 제어/상태 레지스터(DCSR)는 언제 프로세서 코어(104)가 디버그 모드로 들어가며 프로세서 코어(104)가 강화된 JTAG 인터페이스를 이용하여 디버그 모드가 되는 지를 나타낸다. DCSR은 단지 직렬/병렬 디버그 레지스터 기록/판독 명령을 통해서만 액세스가능하다.
디버그 포트 상태 머신(206)은 직렬 디버그 시프터(212)와 디버그 레지스터(210)간의 데이터의 로딩 및 리딩을 조정한다. 디버그 포트 상태 머신(206)은 병렬 포트 상태 머신(226)에 의하여 JTAG TAP 컨트롤러(204)로 인터페이스 된다. 명령 디코드 및 처리 블록(208) 및 프로세서 인터페이스 상태 머신(202)은 함께 명령 및 데이터를 디코드하며, 프로세서 코어(104) 및 트레이스 제어 회로(218)와 번갈아 통신하는 데이터 스티어링 회로(222)로 명령 및 데이터를 디스패치한다. 프로세서 인터페이스 상태 머신(202)은 프로세서 코어(104) 및 트레이스 제어 회로(218)과 바로 통신한다. 병렬 포트(214)는 내장형 프로세서 디바이스(102)의 선택적인 본드아웃 변형에서 병렬 데이터 판독 및 기록 동작을 수행하기 위하여 디버그 포트 상태 머신(206) 및 데이터 스티어링 회로(222)와 통신한다.
트레이스 제어 회로(218)는 프로세서 코어(104)내에 명령 실행 흐름을 재구성하기 위한 트레이스 기록 정보를 발생시킨다. 트레이스 제어 회로(218)는 프로세서 코어(104)로 인터페이스 되며, DEBUG 트레이스 포트(220)로서 또한 불리는 트레이스 패드 인터페이스 포트(22) 또는 내부 트레이스 버퍼(200)로의 트레이싱을 지원하고, 트레이스 기능을 선택적으로 활성 및 비활성하기 위한 사용자 제어를 실행한다. 트레이스 제어 회로(218)는, 예시적인 실시예에서 병렬 포트(214)의 통신 라인을 공유하는 트레이스 패드 인터페이스 포트(220)를 제어한다. 이용시, 클록 동기 및 다른 어려움이 발생할 수 있음에도 불구하고, 프로세서(104)가 명령을 실행하는 동안 트레이스 패드 인터페이스 포트(220)는 트레이스 데이터를 공급한다. 트레이스 제어 회로(218)는 동기 어드레스 발생 및 사용자 지정 트레이스 기록의 프로그램가능성을 포함하는 다른 특징들을 가능하게 한다.
프로세서 코어(104)는 트레이스 기록을 발생시키기 위하여 사용되는 트레이싱 정보를 공급한다. 디버그 포트 인터페이스(100)는 트레이스 기능을 인에이블 및 디스에이블시키기 위하여, 그리고 프로세서 코어(104)로부터의 트레이스 버퍼를 판독할 수 있도록 ITCR 명령에 의해 트레이스 포획 온 및 오프를 바꾸기 위하여 명령을 공급한다. 트레이그 기록의 발생을 시작하기 위하여, 트레이싱이 인에이블되며 트레이스 포획이 턴온된다. 프로세서 코어(104)가 디버그 모드로 들어갈 때, 트레이스 포획이 턴오프된다. 프로세서 코어(104)가 디버그 모드를 빠져나갈 때, 트레이스 포획 상태는 디버그 모드로 들어가기 전의 상태로 되돌아간다.
트레이싱은 ITCR 내에 GTEN 비트를 설정함으로써 인에이블 된다. 트레이싱은 GTEN 비트를 리셋함으로써 디스에이블 된다. 트레이싱이 디스에이블될 때, 트레이스 버퍼(200)는 모든 트레이스 기록을 버린다. 트레이스 포획은 ITCR 내에 TRON 비트를 설정함으로써 턴온된다. 트레이스 포획은 TRON 비트를 리셋함으로써 턴오프된다. TRON 비트는, 트레이스 포획을 제어하기 위하여, 그리고 DRO-DR3 레지스터의 사용에 의하여 ITCR내의 옵션을 인에이블시킴으로써 트레이스 포획 온/오프를 바꾸기 위하여 BTRC가 DCSR 내에서 인에이블된다면, 중단 요청/트레이스 포획 신호 BRTC를 인가하는 TRON 레지스터로의 직접적인 기록을 포함하는 몇 가지의 방법 중 하나로 변형된다.
트레이스 개더링(gathering)의 디스에이블링은, 유익하게는 프로세서의 전력 소모를 줄이고 자연적인 쓰로틀-백 경향을 없애는 소프트웨어 옵션이다. 트레이스 개더링은 호스트 시스템(111) 및 목표 시스템(101)로부터 인에이블 된다. 트레이스 정보는 프로세서가 디버그 모드에서 동작하고 있을 때는 발생되지 않는다. 만일 적절한 스위치가 설정된다면, 다른 모든 모드들은 “트레이스”될 수도 있다.
트레이싱이 디스에이블될 때, 트레이스 버퍼(200)의 내용은 손실된다. 그러나, 명령 또는 트레이스/중지점 제어 레지스터가 축적을 일시적으로 정지/시작하는 데에 이용될 때, 트레이스 버퍼(200)는 플러쉬되지 않는다.
트레이스 제어 회로(218)는 컨트롤러가 트레이스 이벤트에 관련된 기록을 어떻게 처리하느냐가 다른 2개의 모드, 즉 외부 트레이스 모드 및 내부 트레이스 모드 중 하나에서 동작한다. 외부 트레이스 모드는 본드아웃 칩상에서 이용가능하다. 외부 트레이스 모드에서, 트레이스 기록은 트레이스 포트(220)로 전달된다. 외부 트레이스 모드는 ITCR에 ITM=1을 설정함으로써 인에이블 된다. 내부 트레이스 버퍼는, 프로세서 코어(104)에 의해 기록이 발생되는 것과 같은 속도로 트레이스 포트로 전달될 수 없는 트레이스 기록을 일시적으로 저장한다.
내부 트레이스 모드는 본드아웃 및 비-본드아웃 집적 회로에서 이용가능하다. 내부 트레이스 모드에서, 트레이스 기록은 내부 트레이스 버퍼(200)에 저장된다. 내부 트레이스 모드는 ITCR내에 ITM=0을 설정함으로써 인에이블 된다. 트레이스 버퍼(200)의 내용은 디버그 포트 명령을 통하여 또는 강화된 x86 명령 STBUF를 통하여 액세스된다.
트레이스 버퍼(200)는 대역폭 정합을 개선하며 프로세서 코어(104)내에 쓰로틀-백 회로를 통합해야하는 필요성을 줄인다. 일 실시예에서, 트레이스 버퍼(200)는 256 엔트리 선입선출(FIFO) 원형 캐시이다. 트레이스 버퍼(200)의 크기 증가는 포획되는 소프트웨어 트레이스 정보의 양을 증가시킨다.
프로세서 코어(104)가 디버그 트랩을 취할 때, 트레이스 버퍼는 트레이스 기록을 포함할 수도 있다. 프로세서 코어(104)는 버퍼가 빌때까지 트레이스 포트(220)로 트레이스 기록을 계속하여 보낼 것이다. 만일 TBUS 신호가 병렬 디버그 포트(214)와 공유된다면, 트레이스 포트(220)는 트레이스 버퍼(220)가 빌때까지 병렬 포트(214)로 스위치를 넣지 않는다. 트레이스 버퍼(220)는 내부 트레이스 동작 모드를 위한 원형 버퍼로서 기능적으로 사용된다. 트레이스 기록은 기록이 트레이스 버퍼(200)에 기록된 후 기존의 데이터를 덮어쓴다.
JTAG TAP 컨트롤러(204)는 최대 25MHz의 TCK 속도까지 호스트 프로세서(111)와 목표 프로세서간의 주요 통신 모드로서 작용하는 IEEE-1149.1-1990-컴플라이언트 직렬 명령 포트로서 작용한다. 디버그 정보가 단지 종래의 JTAG 신호만을 이용하여 디버그 포트(100)를 통해 통신하기 전에, 공공의 JTAG 명령 DEBUG를 JTAG TAP 컨트롤러(204)내에 포함된 JTAG 명령 레지스터내에 기록함으로써 포트(100)가 인에이블 된다. JTAG 명령 레지스터는 32 비트 데이터 필드 debug_data[31:0], 다양한 내부 레지스터 및 디버그 포트(100)에 의해 제공되는 기능들을 지시하는 4 비트 커맨드 필드 cmd[3:0], 커맨드 계류 플래그(P), 및 커맨드 종료 플래그(F)를 포함하는 38 비트 레지스터이다. 얼마의 커맨드는 사용가능한 커맨드의 수를 늘리기 위하여 서브-필드로서 debug_data 필드의 비트를 이용한다. 계류 및 종료 플래그는 JTAG TAP 컨트롤러(204)에 연결된 계류/종료 상태 머신(224)에 의해 제어된다.
이 JTAG 명령 레지스터는 시험 모드 선택 신호(TMS)를 토글하여 선택된다. 시험 모드 선택 신호(TMS)는 클럭의 JTAG 경로를 스캔 경로에서 변경되게 하여, 변동 길이를 갖는 복수의 경로들이 사용되도록 인에이블한다. 바람직하게는, JTAG 명령 레지스터는 짧은 경로를 경유하여 액세스된다. 이 레지스터는 특정 시험 레지스터들내에 로드되거나 이 레지스터들로부터 수신될 값들을 홀드하기 위해 소프트 레지스터를 포함하도록 구성된다.
도 3을 참조하면, 본 발명을 따르는 전형적인 명령 트레이스 캐시(200)와 내장형 프로세서 장치(102)의 다른 구성요소간의 관계를 도시하는 간략화된 블록도가 도시된다. 본 발명의 일 실시예에서, 트레이스 캐시(200)는 가장 최근의 트레이스 엔트리들을 기록하는 256 엔트리 선입선출(FIFO) 원형 캐시다. 트레이스 캐시(200)의 크기의 증가는, 필요한 실리콘의 양이 증가될 수도 있기는 하지만, 포획될 수 있는 명령 트레이스 정보량을 증가시킨다.
트레이스 버퍼(200)는 명령들이 프로세서 코어(104)에 의해 실행되는 순서를 지시하는 다수의 20비트(또는 이상) 트레이스 엔트리들을 저장한다. 태스크 식별자들 및 트레이스 포획 정지/시작 정보와 같은 다른 정보가 트레이스 캐시(200)내에 배치될 수 있다. 트레이스 캐시(200)의 내용들은 직렬 또는 병렬 트레이스 핀들(230)에 의해 호스트 시스템(111)과 같은 외부 하드웨어에 공급된다. 변형예로서, 목표 시스템(101)은 트레이스 캐시(200)의 내용들을 내부적으로 검사하도록 구성될 수 있다.
도 4는 표준 JTAG 인터페이스를 이용할 시 커맨드 통과의 상위 레벨 순서도를 제공한다. 디버그 모드가 단계(400)로 들어가자마자, DEBUG 명령은 단계(402)에서 TAP 제어기(204)에 기록된다. 단계(404)에서, 38비트 직렬 값은 데이터 필드에서 커맨드 계류 플래그 세트와 바람직한 데이터(적용할 수 있는 경우, 그렇지 않은 경우 0)를 갖고 내부에서 전체적으로 이동된다. 계류 커맨드가 로드/언로드되며 명령 종료 플래그가 검사되는 단계(406)로 진행되도록 제어된다. 커맨드 완성은 전형적으로 데이터 레지스터와 프로세서 레지스터 또는 메모리/IO 위치간의 값의 전달을 포함한다. 커맨드가 완성된 후에, 프로세서(104)는 커맨드 계류 플래그를 클리어하여 커맨드 종료 플래그를 설정함과 동시에, 적용할 수 있는 경우 값을 데이터 필드에 저장한다. 전체 38비트 레지스터는 커맨드 종료 플래그 및 커맨드 계류 플래그를 검사하도록 스캔된다. 계류 플래그가 0으로 재설정되고 그리고 종료 플래그가 1로 설정되는 경우, 이전 커맨드는 종료된다. 플래그들의 상태는 제어 인터페이스 상태 머신(206)에 의해 포획된다. 플래그 상태의 슬레이브 복사본은 다음 명령이 로드되어야 하는 지를 내부적으로 결정하기 위하여 저장된다. 슬레이브 복사본은 TAP 제어기(204) 상태들간의 플래그 상태들의 변경 가능성 때문에 보존되며, 이는 다음 명령을 로드하기 전에 이전 명령이 종료되었는 지를 프로세서(104)가 결정할 수 있게 한다.
종료 플래그가 단계(408)에서 결정된 것으로 설정되지 않은 경우, 제어는 단계(410)로 진행하여 38비트 커맨드의 로딩/언로딩이 반복된다. 커맨드 종료 플래그가 또한 검사된다. 이후, 단계(408)로 돌아가도록 제어된다. 종료 플래그가 단계(408)에서 결정된 것으로 설정되는 경우에는, 다음 커맨드를 처리하기 위해 단계(406)로 돌아가도록 제어된다. 통상적인 JTAG 프로세서에 의해 DEBUG 모드를 빠져나간다.
도 2를 참조하면, 선택적인 측파대 신호들은 특별한 기능을 제공하기 위해서 개선된 디버그 포트(100)에서 이용된다. 선택적인 측파대 신호들은 중단 요청/트레이스 포획 신호(BRTC)를 포함할 수 있으며, 상기 포획 신호(BRTC)는 중단 요청 신호 또는 디버그 제어/상태 레지스터에 설정된 비트의 상태에 의존하는 트레이스 포획 인에이블 신호로서 작용할 수 있다. 중단 요청/트레이스 포획 신호(BRTC)가 중단 요청 신호로 작용하도록 설정되는 경우, 이 신호(BRTC)는 프로세서(104)가 디버그 모드로 들어가게 하도록 어서트된다. 프로세서(104)는 또한 JTAG 신호 규정에 의해 정지 커맨드에서 스캐닝함으로써 정지될 수 있다. 트레이스 포획 인에이블 신호로서 작용하도록 설정되는 경우, 중단 요청/트레이스 포획 신호(BRTC)가 트레이스 포획을 인에이블하도록 어서트된다. 이 신호를 디어서트(deassert)함으로써 트레이스 포획을 턴오프한다. 이 신호는 검출되어 내부 프로세서 클럭으로 동기화된 후에 다음 명령 경계에 영항을 미친다. 중단 요청/트레이스 포획 신호(BRTC)는 언제라도 어서트될 것이다.
트리거 신호(TRIG)는 내부 프로세서 중지점이 어서트됐을 때마다 펄스를 내보내도록 구성된다. 트리거 신호(TRIG)는 논리 분석기와 같은 외부 포획 장비를 트리거하도록 이용될 수 있고, 트레이스 기록 포획 클럭 신호(TRACECLK)와 동기화된다. 중지점이 생성될 시, 이 이벤트는 트레이스 포획 클럭 신호(TRACECLK)와 동기화되며, 이 후에 트리거 신호(TRIG)는 트레이스 포획 지속기간 동안 액티브하게 유지된다.
정지 전송 신호(STOPTX)는 프로세서(104)가 DEBUG 모드를 등록하여 레지스터 질문/수정을 위해 준비할 때 어서트되며, 메모리 또는 I/O는 디버그 포트(100)를 통해 판독 및 기록한다. 본 발명의 개시된 실시예에서, 정지 전송 신호(STOPTX)는 비트 상태를 디버그 제어 상태 레지스터(DCSR)에 나타낸다. 정지 전송 신호(STOPTX)는 트레이스 포획 클럭 신호(TRACECLK)와 동기를 이룬다.
커맨드 확인 신호(CMDACK)는 도 5를 참조하여 설명되며, 도 5는 도 2의 개선된 디버그 포트(100)에서의 간략화된 커맨드 통과를 도시한다. 또한, 목표 시스템(111)을 DEBUG 모드에 놓기 위해서, DEBUG 명령은 단계(502)에서 TAP 제어기(204)에 기록된다. 단계(504)로 이동하도록 제어되며, 커맨드 완성 상태를 결정하기 위하여 커맨드 확인 신호(CMDACK)가 호스트 시스템(111)에 의해 모니터된다. 이 신호는 목표 시스템(111)에 의해 커맨드 종료 플래그와 동시에 하이로 어서트되어 다음의 시프트 주기가 시작할 때까지 하이로 남아 있는다. 커맨드 확인 신호(CMDACK)를 이용할 때에는, 커맨드 종료 플래그 상태를 포획하기 위해서 JTAG 명령 레지스터를 시프트 아웃할 필요가 없다. 커맨드 확인 신호(CMDACK)는 커맨드 종료 플래그가 0에서 1로 바뀐 후에 시험 클럭 신호(TCK)의 다음 상승 에지에서 하이로 변한다. 개선된 JTAG 신호를 이용할 때, 새로운 시프트 시퀀스{단계(506)}는 커맨드 확인 신호(CMDACK) 핀이 하이로 어서트될 때까지 호스트 시스템(111)에 의해 시작되지 않을 것이다. 커맨드 확인 신호(CMDACK)는 시험 클럭 신호(TCK)와 동기를 이룬다. 시험 클럭 신호(TCK)는 항상 클럭될 필요는 없지만, 이상적으로는 커맨드 확인 신호(CMDACK) 응답을 기다릴 때에 연속적으로 클럭된다.
디버그 포트(100)에 의한 운용체제/응용 통신
디버그 레지스터 블록(210)에는 또한 명령 트레이스 구성 레지스터 (ITCR)가 포함되며, 이 32비트 레지스터는 명령 트레이스 디버그 기능들을 인에이블링/디스에이블링 및 구성하기 위한 레지스터이다. 이러한 다수의 기능들은 여러개의 트레이싱 레벨, 트레이스 동기화 강제 카운트, 트레이스 초기화, 명령 트레이싱 모드들, 클럭 분할기 비율 정보 뿐만 아니라, 하기의 테이블에 나타낸 부가적인 기능들을 포함하는 것으로 고려된다. ITCR은 디버그 레지스터 블록(210)의 다른 레지스터들의 경우처럼 JTAG 명령 레지스터 기록/판독 커맨드를 통해, 또는 예약 명령에 의해 액세스된다.
비트 | 기호 | 설명 / 기능 |
31:30 | Reserved | 지정된 |
29 | RXINTEN | RX 비트가 설정될 때 인터럽트를 인에이블시킨다. |
28 | TXINTEN | TX 비트가 설정될 때 인터럽트를 인에이블시킨다. |
27 | TX | 목표 시스템(111)이 데이터를 호스트 시스템(111)에 전송할 준비가 되어 있으며 데이터가 TX_DATA 레지스터에서 이용가능함을 나타낸다. |
26 | RX | 데이터가 호스트로부터 수신되어 RX_DATA 레지스터에 배치됐음을 나타낸다 |
25 | DISL1TR | 레벨 1 트레이싱을 디스에이블한다 |
24 | DISL0TR | 레벨 0 트레이싱을 디스에이블한다 |
23 | DISCSB | 현 세그먼트 베이스 트레이스 기록을 디스에이블한다 |
22:16 | TSYNC[6:0] | 동기화 어드레스 기록이 강제되기 전에 트레이스 제어 블록(218)에 의해 출력될 수도 있는 분기 시퀀스 트레이스 기록의 최대 수를 설정한다. |
15 | TSR3 | DR3 트랩상에 트레이스 모드를 설정 또는 제거한다 |
14 | TSR2 | DR2 트랩상에 트레이스 모드를 설정 또는 제거한다 |
13 | TSR1 | DR1 트랩상에 트레이스 모드를 설정 또는 제거한다 |
12 | TSR0 | DR0 트랩상에 트레이스 모드를 설정 또는 제거한다 |
11 | TRACE3 | DR3를 이용하여 트레이스 모드 토글링을 인에이블한다 |
10 | TRACE2 | DR2를 이용하여 트레이스 모드 토글링을 인에이블한다 |
9 | TRACE1 | DR1을 이용하여 트레이스 모드 토글링을 인에이블한다 |
8 | TRACE0 | DR0을 이용하여 트레이스 모드 토글링을 인에이블한다 |
7 | TRON | 트레이스 온/오프 |
6:4 | TCLK[2:0] | 내부 프로세서 클럭과 TRACECLK간의 엔코딩된 분할기 비율 |
3 | ITM | 내부 또는 외부(본드아웃) 명령 트레이싱 모드를 설정한다 |
2 | TINIT | 트레이스 초기화 |
1 | TRIGEN | DCSR에서의 디버그 트랩 인에이블 기능과 독립적으로, 소정의 리거시(legacy) 디버그 중지점을 수신한 다음 외부 트리거 신호(TRIG)의 펄스를 보내도록 인에이블시킨다. |
0 | GTEN | 내부 트레이스 버퍼를 통한 또는 외부 (본드아웃) 인터페이스에 의한 명령 트레이싱을 위한 전체적인 인에이블 |
명령 트레이스 구성 레지스터(ITCR)
또 다른 디버그 레지스터인 디버그 제어/상태 레지스터(DCSR)는 프로세서(104)가 디버그 모드를 등록하여 프로세서(104)를 개선된 JTAG 인터페이스를 통해 강제로 DEBUG 모드로 들어가게 하는 지시를 제공한다. 하기 테이블에 나타낸 바와 같이, DCSR은 또한 준비 신호를 프로세서(104)에게 강요하고, 디버그 포트를 통해 초기화된 액세스들을 위해서 메모리 액세스 공간을 제어하고, DEBUG 모드로 등록하자 마자 캐시 플러시(flush)를 디스에이블하고, TX 및 RX 비트들, 병렬 포트(214) 인에이블, 강제 중단들, 강제된 전체적인 리셋, 및 다른 기능들과 같은 여러 가지의 제어 특성들을 인에이블한다. 여러 비트들의 순서화 또는 포함이 ITCR 또는 DCSR인 것은 전형적으로 디버그 시스템을 실행하는 애플리케이션 및 프로세서에 달려있는 설계 선택이다.
비트 | 기호 | 설명 / 기능 |
31:12 | Reserved | 지정된 |
11 | TX | 목표 시스템(111)이 데이터를 호스트 시스템(111)에 전송할 준비가 되어 있으며 데이터가 TX_DATA 레지스터에서 이용가능함을 나타낸다. |
10 | RX | 데이터가 호스트로부터 수신되어 RX_DATA 레지스터에 배치됐음을 나타낸다 |
9 | DISFLUSH | DEBUG 모드로 들어가자 마자 캐시 플러시를 디스에이블한다 |
8 | SMMSP | 디버그 포트(100)를 통해 시작된 액세스를 위해서 메모리 액세스 공간(정상 메모리 공간/시스템 관리 모드 메모리)를 제어한다. |
7 | STOP | 프로세서(104)가 (전송 신호(STOPTX)를 정지시키는 것과 등가인)DEBUG 모드에 있는 지를 나타낸다 |
6 | FRCRDY | 프로세서(104)로의 준비 신호(RDY)가 한 프로세서 클럭 동안 펄스가 발생되게하고; 프로세서(104)가 무응답 장치로부터 준비 신호를 기다리며 동작되지 않고 있을 때 유용하다. |
5 | BRKMODE | 중단 요청/트레이스 포획 신호(BRTC)(중단 요청 또는 트레이스 포획 온/오프)의 기능을 선택한다 |
4 | DBTEN | 프로세서(104) 레지스터들(DR0-DR7) 또는 다른 리거시 디버그 트랩/폴트 메커니즘에 의해 디버그 모드 또는 토글 트레이스 모드 인에이블을 트랩/폴트상에 등록하도록 인에이블한다. |
3 | PARENB | 병렬 포트(214)를 인에이블한다 |
2 | DSPC | 정지 및 멈춤 허가 상태에서의 내부 프로세서 클럭의 정지를 디스에이블한다 |
1 | FBRK | (외부 BRTC 핀에 펄스를 보내는 것과 등가인)다음 명령 경계에서 프로세서(104)가 DEBUG 모드가 되게 한다. |
0 | FRESET | 전체적인 재설정을 한다. |
디버그 제어/상태 레지스터(DCSR)
가령 도 1에 도시한 교차 디버그 환경에서 동작할 때, 목표 시스템(111) 상에서 가동하는 근원(parent) 태스크는 목표 시스템(101)을 제어하는 호스트 플랫폼에 정보를 보낸다. 이 정보는, 예를 들어 printf() 호출로부터의 문자 스트림이나 태스크 제어 블록(TCB)으로부터의 레지스터 정보로 구성될 것이다. 정보를 전달하기 위한 한 기술에서, 운용체제는 정보를 공지된 영역에 배치한 다음, 트랩 명령에 의해 DEBUG 모드가 등록되게 한다.
호스트 시스템(111)은 DEBUG 모드를 등록한 이유를 결정하며 지정된 영역으로부터 정보를 검색하여 응답한다. 그러나, 프로세서(104)가 DEBUG 모드에 있는 동안, 정상적인 프로세서 실행이 정지되는데, 이는 많은 실시간 시스템들에 바람직하지 않다.
이러한 바람직하지 않은 조건은 본 발명에 따라 데이터를 전송(TX_DATA 레지스터) 및 수신(RX_DATA 레지스터)하기 위해서 2개의 디버그 레지스터를 디버그 포트(100)내에 공급함으로써 예시적인 시스템에서 어드레스된다. TX_DATA 및 RX_DATA 레지스터는 소프트 어드레스 및 JTAG 명령 레지스터 커맨드들을 이용하여 액세스될 수 있다. 소프트 어드레스는 데이터 전송을 돕기 위하여 자동 증가된다. 호스트 시스템(111)이 디버그 명령을 JTAG 명령 레지스터에 기록한 후에, 직렬 디버그 시프터(212)는 시험 데이터 입력 신호(TDI) 및 시험 데이터 출력 신호(TDO) 선로에 연결된다.
프로세서(104)는 ITCR내의 TX 비트를 시험함으로써, 데이터를 전송하는 코드를 실행한다. TX비트가 0으로 설정된다면, 프로세서(104)는 데이터를 TX_DATA 레지스터에 전달하라는 메모리 또는 I/O 기록 명령을 실행한다. 디버그 포트(100)는 TX 비트를 DCSR 및 ITCR에 설정하여 데이터 전송을 준비하는 호스트 시스템(111)을 지시하며, STOPTX 핀은 하이로 설정된다. 호스트 시스템(111)이 TX_DATA 레지스터로부터의 전송 데이터를 판독한 후에, TX 비트는 0으로 설정된다. ITCR 내의 TXINTEN 비트는 프로세서(104)를 인터럽트하라는 신호를 생성하도록 설정된다. 이 인터럽트는 ITCR내의 TX 비트가 0으로 변경될 때에만 생성된다. TXINTEN 비트가 설정되지 않을 때, 프로세서(104)는 데이터를 더 전송하기 위한 TX 비트의 상태를 결정하기 위해서 ITCR을 폴링한다.
호스트 시스템(111)은 ITCR 내의 RX 비트를 먼저 시험함으로써 데이터를 전송한다. RX 비트가 0으로 설정된다면, 호스트 시스템(111)은 데이터를 RX_DATA 레지스터에 기록하며 RX 비트는 DCSR 및 ITCR 내에서 1로 설정된다. RXINT 비트가 프로세서(104)를 인터럽트하라는 신호를 생성하기 위해서 ITCR내에 설정된다. 이러한 인터럽트는 ITCR 내의 RX가 1로 변경될 때에만 생성된다. RXINTEN 비트가 설정되지 않을 때, 프로세서(104)는 RX 비트의 상태를 검증하기 위해서 ITCR을 폴링한다. RX 비트가 1로 설정된다면, 프로세서 명령은 RX_DATA 레지스터로부터 데이터를 판독하도록 실행된다. 데이터가 프로세서(104)에 의해 RX_DATA 레지스터로부터 판독된 후에, RX 비트는 0으로 설정된다. 호스트 시스템(111)은 데이터를 더 전달하기 위한 RX 비트의 상태를 결정하기 위해서 ITCR을 연속적으로 판독한다.
RX_DATA 및 TX_DATA 레지스터를 이용하는 이러한 정보 전송 기술은 프로세서(104) 실행을 정지시키지 않고도 운용체제 또는 애플리케이션이 호스트 시스템(111)과 통신할 수 있게 한다. 통신은 필요에 따라 온칩 응용 자원들에 최소한의 영향을 주는 디버그 포트(100)에 의하여 이루어진다. 몇몇 경우에 시스템 인터럽트를 디스에이블해야 할 필요가 있다. 이것은 RX 및 TX 비트들이 프로세서 (100)에 의해 검사될 것을 요구한다. 이경우, 통신 링크는 폴링된 모드에서 구동된다.
디버그 포트(100)로의 병렬 인터페이스
직렬 디버그 포트(SDP)는 JTAG-기반의 직렬 링크(JTAG 기반) 또는 조금 더 병렬의 인터페이스에 의해 액세스된다. 병렬 포트(214) 인터페이스는 더 높은 코드 다운로드 속도를 지원하지만, 본드아웃 부분에 포함된다. 완전한 기능의 ICE 개발자는 본드아웃 부분의 통상적인 사용자이다.
완전한 기능의 내부 회로 에뮬레이터(ICE)는 직렬 디버그 포트 단독으로 이용할 수 있는 것 보다 더 빠른 다운로드 속도를 얻기 위하여, 목표 시스템(101)으로의 빠른 속도의 액세스를 얻는 이중-포트의 포드-공간 메모리를 이용한다. 다양한 목표 프로세서에 대하여 별개인 비교적 복잡한 이중-포트 설계를 피하기 위한 변형예로서, T/P 입력 핀은 본드아웃 변형에서만 실행되며, 본드아웃 핀들을 트레이스 모드로부터 병렬 포트 모드로 스위치시키는 데에 이용된다.
몇몇 내장형 시스템들은 I/O 및 데이터 프로세싱 동작들을 지속하는 동안 명령 트레이스가 검사될 것을 조건으로 정한다. 병행성 운용체제를 이용하지 않게 되면, 내장형 프로세서 장치(102)의 선택적인 본드아웃 버전은 트레이스 데이터를 제공하는 것이 바람직한데, 만일 그렇지 않으면 디버그 포트(100)에 의한 트레이스 캐시(200)의 검사는 프로세서(104)의 중단을 요구하기 때문이다.
본 발명의 개시된 실시예에서, 병렬 포트(214)가 병렬 커맨드 및 디버그 포트(100)로의 데이터 액세스를 제공하기 위하여 내장형 프로세서 장치(102)의 선택적인 본드아웃 버전에 제공된다. 이 병렬 포트(214) 인터페이스는 트레이스 패드 인터페이스 포트(220)와 함께 다중화되는 16비트 데이터 경로를 제공한다. 특히, 병렬 포트 (214)는 16비트의 넓은 양방향 데이터 버스(PDATA[15:0]), 3비트의 어드레스 버스 (PADR[2:0]), 병렬 디버그 포트 판독/기록 선택 신호(PRW), 트레이스 유효 신호 (TV) 및 명령 트레이스 기록 출력 클럭 TRACECLOCK(TC)를 제공한다. 트레이스 패드 인터페이스 포트(220)와 공유되지 않았음에도 불구하고, 병렬 버스 요청/허가 신호 쌍 PBREQ/PBGNT(미도시)가 또한 제공된다. 병렬 포트(214)는 비트를 DCSR내에 설정함으로써 인에이블된다. 디버그 포트(100)에 의한 직렬 통신은 병렬 포트(214)가 인에이블될 때 디스에이블되지 않는다.
본드아웃 TC 핀은 다른 버스들 위에서 수행되는 포획 시스템 메모리 액세스에 또한 사용되는 클럭 신호인 트레이스 포획 클럭이다. 포획 시스템 버스 활동은 프로그램 트레이스와 관련하여 트레이스 버스 활동에 이용된다. 시스템 버스 데이터가 TC 클럭 신호에서 얻어질 수 있기 때문에 클럭 신호의 시퀀스에서 마지막에 우선적으로 액세스된다. 따라서, 다른 버스 신호들은 TC 클럭 동안 액티브로 유지되거나, ICE 프로프로세서에 래치되며 TC 클럭이 액티브일 때까지 유지된다.
트레이스 포트(220) 보다는 병렬 포트(214)가 선택될 때, TC 클럭은 디버그 레지스터(210)에 파라미터들을 기록하고 이로부터 파라미터들을 판독하는 데에 이용되며, 이는 38-비트 JTAG 명령 커맨드 레지스터로의 연속적인 클럭 데이터 보다 더 빠르게 진행된다.
병렬 포트(214)는 주로 목표 시스템(111) 메모리로/메모리로부터 빠른 다운로드/업로드를 위한 것이다. 그러나, 병렬 포트(214)는 프로세서 (104)가 정지될 때마다 목표 시스템(111)과의 모든 디버그 통신을 위해 이용될 것이다. 표준 또는 개선된 직렬 디버그 신호들은 프로세서(104)가 명령을 실행할 목표 시스템(111)으로의 디버그 액세스를 위해 이용된다.
JTAG 표준과 일치하는 방식에서, 병렬 포트(214)로의 모든 입력들은 시험 클럭 신호(TCK)의 상승 에지에서 샘플링되고, 모든 출력들은 시험 클럭 신호(TCK)의 하강 에지에서 변경된다. 개시된 실시예에서, 병렬 포트(214)는 프로세서(104)가 정지되어 트레이스 패드 인터페이스(220)가 공유된 버스로부터 연결이 끊어지는 동안에만 병렬 커맨드들이 시작될 것을 요구하기 때문에 트레이스 패드 인터페이스 (220)와 핀들을 공유한다.
병렬 버스 요청 신호(PBREQ) 및 병렬 버스 허가 신호(PBGNT)가 트레이스 캐시(200)와 병렬 포트(214)간에 공유된 버스 신호들의 다중화를 신속히 처리하도록 제공된다. 병렬 포트(214)와의 호스트 인터페이스가 병렬 버스 요청 신호(PBREQ)가 어서트될 것을 검출할 때, 호스트 인터페이스는 병렬 포트(214) 신호들을 구동하기 시작하여 병렬 버스 허가 신호(PBGNT)를 어서트한다.
몇몇 실시예에서, 인에이블된 병렬 포트(214)를 가지고 DEBUG 모드로 들어가거나 또는 이 모드를 벗어날 때, 병렬 포트(214)는 프로세서 상태 저장 및 복원 주기 동안 이용될 수도 있다. 어떠한 프로세서들은 환경 절약(context save)의 사용을 피할 수도 있다. 병렬 버스 요청 신호(PBREQ)는 DEBUG 모드의 등록에 대한 저장 상태 시퀀스의 두번째 음절을 시작하기 바로 전에 어서트된다. 마지막 복원 상태 주기상에서, 병렬 버스 요청 신호(PBREQ)는 기록 데이터를 래치한 후에 디어서트된다. 병렬 포트 (214) 호스트 인터페이스는 그것의 병렬 포트 구동기들을 3 상태로 하여 병렬 버스 허가 신호(PBGNT)를 디어서트하여 병렬 버스 요청 신호(PBREQ) 디어서션에 응답한다. 그런 다음, 병렬 포트(214)는 디버그 트레이스 포트 핀 구동기들을 인에이블하고, 마지막 복원 상태 주기를 완성하고, 커맨드 확인 신호(CMDACK)를 어서트하며, 트레이스 제어 회로(218)로의 인터페이스 제어를 귀환시킨다.
병렬 포트(214)에 의하여 통신하는 동안, 어드레스 핀들(PADR[2:0])은 JTAG 명령 레지스터의 필드 선택을 위해 이용되며, 이것은 아래 테이블에 도시된 것처럼 16비트 데이터 버스(PDATA[15:0])로 맵핑된다.
PADR[2:0] | 데이터 선택 |
0 | 선택 없음(널 동작) |
1 | 4비트 커맨드 레지스터; PDATA[3:0]상에 구동된 커맨드 |
10 | 상위 16비트의 debug_data |
11 | 하위 16비트의 debug_data |
100 - 111 | 지정된 |
절반들중 단지 하나만이 이용되는 경우(예컨대, 8비트 I/O 주기 데이터 기록) debug_data[31:0] 레지스터의 양쪽 절반들을 갱신할 필요가 없다. 커맨드 계류 플래그는 기록 동작을 4비트 커맨드 레지스터에 실행할 때 자동으로 설정되고, 커맨드 종료 플래그가 어서트될 때 클리어된다. 호스트 시스템(111)은 종료 플래그가 어서트되는 순간을 결정하기 위해서 커맨드 확인 신호(CMDACK)를 감시할 수 있다. 병렬 포트(214)의 이용은 프로세서 코어(104)를 감속할 필요없이 실행 히스토리의 충분한 가시성을 제공한다. 트레이스 캐시(200)는, 필요한 경우 소정의 대역폭 정합 문제를 완화하기 위해서 병렬 포트(214)에 대한 버퍼로서 이용되도록 구성될 수 있다.
운용체제 및 디버거 통합
예시적인 실시예에서, 트레이스 캐시(200)를 포함하는 모든 디버그 지원 특성들의 동작은 디버그 포트(100)를 통하여 또는 프로세서 명령들에 의해 제어될 수 있다. 이들 프로세서 명령들은 감시 프로그램, 목표 호스트 디버거나, 또는 통상적인 파드 웨어(pod-wear)로부터 온 것일 수 있다. 디버그 포트(100)는 프로세서 명령들보다는 직렬 데이터 포트 커맨드들에 의해 시작되는 데이터 이동을 실행한다.
통상적인 파드 스페이스(pod-space)로부터의 프로세서 동작은 DEBUG 모드에서 감시 프로그램으로부터의 동작과 매우 유사하다. 모든 디버그 동작들은 프로세서 명령들에 의해 제어될 수 있다. 이들 명령들이 파드-스페이스로부터 왔든 또는 보통 메모리로부터 왔든 전혀 차이가 없다. 이것은 부가적인 디버그 능력을 포함하도록 운용체제가 확장되도록 인에이블한다.
물론, 특권이 주어진 시스템 호출인 그러한 ptrace()에 의해, 운용체제들은 디버거들을 오랫동안 지지해왔다. 그러나, 온칩 트레이스 캐시(200)의 합체는 명령 트레이스 능력을 제공하기 위해서 운용체제를 인에이블한다. 트레이스할 능력은 종종 실시간 응용에서 중요한 것으로 고려된다. 예시적인 개선된 디버그 환경에서, 외부 논리 분석기 또는 내부 회로 에뮬레이터를 합체하지 않고도 한정된 트레이스를 지원하기 위해서 운용체제를 개선하는 것이 가능하다.
내부 로드 및 트레이스 캐시(200) 내용들의 검색을 지원하는 명령들은 로드 명령 트레이스 캐시 기록 커맨드(LITCR) 및 저장 명령 트레이스 캐시 기록 커맨드(SITCR)를 포함한다. 커맨드(LITCR)는 프로세서 코어(104)의 EAX 레지스터 내용들과 함께 트레이스 캐시 포인터(ITREC.PTR)가 명기한데로 지표(index) 기록을 트레이스 캐시(200)내에 로드한다. 트레이스 캐시 포인터(ITREC.PTR)는 미리 증가되어, 커맨드(LITCR)의 일반적인 동작은 아래와 같다.
ITREC.PTR <_ ITREC.PTR + 1
ITREC[ITREC.PTR] <_ EAX
만일 이후에 설명되는 트레이스 기록 내의 명령 트레이스 기록이 EAX 기록보다 작다면, EAX 레지스터의 일부분만이 이용된다.
유사하게, 저장 명령 트레이스 캐시 기록 커맨드(SITCR)는 지표 기록을 트레이스 캐시(200)로부터 검색하여 EAX 레지스터내에 저장하는데 이용된다. 프로세서 코어 (104)의 ECX 레지스터 내용들은 트레이스 캐시(200)내에 인덱스를 생성하기 위해서 트레이스 캐시 포인터(ITREC.PTR)에 부가되는 오프셋으로 이용된다. ECX 레지스터는 후에 증가되고, 그 동안 트레이스 캐시 포인터(ITREC.PTR)는 영향을 받지 않게 되어 다음과 같이 된다.
EAX <_ ITREC[ECX + ITREC.PTR]
ECX <_ ECX + 1
LITCR 및 SITCR 커맨드들은 계산 및 엔코딩 분야에 공지된 여러가지의 포맷으로 변형되어 구성될 수도 있다.
온칩 트레이스를 지원하기 위한 운용체제의 확장은 많은 장점들을 갖는다. 통신 산업에서, 온칩의 지원은 태스크가 트레이스되는 동안 시스템 I/O 및 통신 활동을 유지한다. 전형적으로, 내부 회로 에뮬레이터의 사용은 프로세서의 상태와 트레이스가 {ptrace()와는 달리} 검사되기 전에 프로세서가 정지될 것을 요구하는데, 이는 I/O 데이터 프로세싱의 연속적인 지원을 방해한다. 반대로, 예시된 시스템의 ptrace() 성능은 트레이스 데이터가 유용한 동안 프로세서 및 운용체제가 실행을 계속할 수 있게 한다.
트레이스 버퍼(200)는 그 분야의 장비와 함께 이용될 때 매우 유용하다. 예기치 않은 시스템 충돌이 발생할 경우, 트레이스 캐시(200)는 충돌 이벤트에 이르기까지의 실행 히스토리를 관찰하도록 검사될 수 있다. 휴대용 시스템들에서, 또는 전력 소모에 관련된 다른 환경들에 사용될 때, 트레이스 캐시(200)는 전력 관리 회로에 의해 필요에 따라 디스에이블될 수 있다. 트레이스 기록은 트레이스 이벤트들의 기록을 포함하는 트레이스 버퍼(200)로부터 판독된다. 트레이스 이벤트는 트레이스 기록을 발생시키는 행동이다. 예를 들어, 트레이스 이벤트는 x86 명령에 의해 야기되며, 명령은 예외, 하드웨어 인터럽트, 트레이스 동기 이벤트, 트레이스 포획의 활성 또는 비활성, 및 특권 레벨을 바꾸는 이벤트를 야기시킨다.
몇몇 x86 명령은 소프트웨어 인터럽트 명령, BOUND 명령, CALL 명령, 취해진 또는 취해지지 않은 인터럽트(INT/INTO) 명령, 리턴(RET) 및 인터럽트 리턴(IRET/IRETD) 명령, 점프(JMP) 및 조건부 점프(JCC) 명령, LOOP 명령, MOV CR0 명령 등을 포함하는 트레이스 기록들을 발생시킨다.
목표 어드레스가 레지스터 또는 메모리 위치에 의해 공급되는 모든 CALL 및 CALLS 명령은 TCODE=0010 엔트리를 발생시킨다. 만일 목표 어드레스가 명령(즉시 어드레스)으로부터 발생한다면 어떠한 TCODE=0010 엔트리도 사용되지 않는다. 만일 세그먼트 변화가 발생한다면(롱 어드레스), TCODE=0011 엔트리가 TOCDE=0010 엔트리의 앞에 발생된다. 세그먼트 변화 엔트리는 어떠한 목표 타겟 어드레스 엔트리도 발생하지 않을 때 조차도 발생될 수도 있다.
조건부 분기 명령 J xx는 BFIELD 트레이스 엘리먼트에 1비트 엔트리를 발생시킨다. 이 비트는 만일 분기가 취해지면 설정되고, 분기가 취해지지 않으면 설정되지 않는다.
LOOP xx와 같은 루핑 명령은 조건부 분기 명령처럼 처리된다. REP 명령 접두사는 조건부 분기처럼 처리되지 않으며, 이에 따라 어드레스 흐름을 깨뜨리지 않는 다른 명령들처럼 기록되지 않는다.
목표 어드레스가 레지스터 또는 메모리 위치에 의해 공급되는 모든 조건부 JMP 명령은 TCODE=0010을 생성하며 CALL 명령과 동일한 방법으로 처리된다.
모든 INT imm8, INT3 및 INT0 인터럽트는 인터럽트가 될 때 분기 목표 엔트리를 발생시킨다. 이 엔트리는 세그먼트 변경 엔트리 보다 앞설 수도 있다. INT0 명령은 오버플로우 플래그가 설정되었는 지에 대하여 조건적이다. 만일 이 플래그가 설정되지 않으면, 인터럽트 및 트레이스 엔트리는 발생되지 않는다.
BOUND 명령은 INT0와 마찬가지로 조건부 인터럽트이며, 인터럽트가 있을 때만이 유사하게 기록되고, BOUND는 배열 엔트리가 지정된 범위내에 있도록 보장한다.
CR0 레지스터로의 직접적인 이동은 프로세서 동작 모드를 바꾸는 데에 이용될 수도 있다. 드물게 행해지기는 하지만, 모든 변화를 일으키는 상기의 모든 이동은 트레이스 스트림 내에서 기록된다.
예외를 일으키는 명령은 트레이스 기록을 발생시킨다. 발생된 트레이스 기록은 예외를 일으키는 명령의 EIP, 이전 세그먼트의 베이스 어드레스 및 특성, 예외 핸들러의 벡터 수, 및 인터럽트 핸들러내의 목표 명령의 EIP를 알려준다.
하드웨어 인터럽트는 인터럽트가 제공되기 전에 가장 최근에 실행되었던 명령의 EIP, 이전 세그먼트의 베이스 어드레스 및 특성, 인터럽트 핸들러의 벡터 수, 및 인터럽트 핸들러내의 목표 명령의 EIP를 기록하는 트레이스 기록을 발생시킨다.
트레이스 컨트롤러에서 실행되는 트레이스 동기화 레지스터는 트레이스 동기화 이벤트를 발생시키는 데에 이용된다. 트레이스 동기화 레지스터는 ITCR이 로드될 때 마다 ITCR 레지스터의 TSYNC 비트로부터 업데이트된다. 트레이스 동기화 레지스터는 조건부 분기 트레이스 기록(TCODE=0001)이 생성될 때 1 만큼 감소된다. 다른 모든 트레이스 기록은 레지스터가 ITCR 레지스터의 TSYNC 비트로부터 다시 로드되게 한다. 레지스터는 0으로 카운트다운되며 트레이스 이벤트를 발생시킨다. 그런 다음, 트레이스 동기화가 ITCR 레지스터의 TSYNC 비트로부터 다시 로드된다. TSYNC 값은 연속적인 조건부 분기 트레이스 기록(TCODE=0001)의 최대값을 나타낸다. 0의 TSYNC 값은 트레이스 동기화 이벤트를 디스에이블시킨다.
트레이스 기록은 트레이스 포획이 턴온될 때에 발생된다. 트레이스 기록은 트레이스 포획이 턴온되었던 명령의 EIP를 기록한다.
트레이스 기록은 트레이스 포획이 턴오프될 때 발생된다. 트레이스 기록은 트레이스 포획이 턴오프되었던 명령의 EIP 및 현재 세그먼트의 베이스 어드레스와 세그먼트 특성을 기록한다. 현재 세그먼트 베이스를 갖는 트레이스 기록의 발생은 ITCR의 DISCSB 비트에 의해 제어된다. 트레이스 포획이 턴오프되었을 때 만일 코드 세그먼트가 바뀌지 않는 다면, 현재 세그먼트 베이스 트레이스 기록 발생을 디스에이블시키는 것은 여분의 트레이스 기록의 발생을 막는다.
트레이스 기록은 디버그 모드가 되면 발생된다. 트레이스 기록은 디버그 모드로 들어가기 전에 실행된 마지막 명령의 EIP, 및 선택적으로, 현재 세그먼트의 베이스 어드레스 및 세그먼트 특성을 기록한다. 현재 세그먼트 베이스를 갖는 트레이스 기록의 발생은 ITCR의 DISCSB 비트에 의해 제어된다.
트레이스 기록은 디버그 모드를 빠져나갈 때 발생된다. 트레이스 기록은 디버그 모드를 빠져나간 후 실행된 첫 번째 명령의 EIP를 기록한다.
특권 레벨 링 0 또는 1로 들어갈 때, 트레이스 포획을 멈추는 것이, 예를 들어 시스템 콜이 트레이싱되는 것을 막는 특성이 유익하다. 따라서, 하위 특권 레벨 0 및 1로 들어갈 때, 트레이싱은 ITCR 내의 DISL0TR, DISL1TR에 의하여 선택적으로 턴오프된다. 만일 하위 특권 레벨 트레이싱이 선택된다면, 하위 특권 레벨 0 및 1로 바뀌기 전에 트레이스 기록이 발생된다. 트레이스 기록은 하위 특권 레벨로 바뀌기 전에 실행된 마지막 명령의 EIP를 기록하고, 현재 세그먼트의 베이스 어드레스 및 세그먼트 특성을 선택적으로 기록한다. 현재 세그먼트 베이스를 갖는 트레이스 기록의 발생은 ITCR의 DISCSB 비트에 의해 제어된다. 콜, 점프, 및 하위 특권 레벨로의 변경을 야기하는 다른 명령은 또한 특권 트레이스 기록에 앞서서 기록된다.
하위 특권 레벨로 들어갈 때 트레이싱 오프를 바꾸는 선택이 설정된다면, 하위 특권 레벨로부터 바뀔 때 트레이스 기록이 발생하게 된다. 트레이스 기록은 하위 특권 레벨로부터 바뀌기 전에 실행된 첫 번째 명령의 EIP를 기록할 것이다.
트레이스 버퍼에 저장되지 않았거나 트레이스 포트에 기록된 계류 조건부 분기 트레이스 기록이 있었다면, 이들 모든 트레이스 기록에 대한 트레이스 기록은 조건부 분기 트레이스 기록을 앞설 수 있음을 유념하자.
전형적인 트레이스 기록 포맷
본 발명의 개시된 실시예에서, 명령 트레이스 기록은 20비트 크기이며
유효 비트 V 뿐만아니라 2개의 필드인 TCODE(트레이스 코드) 및 TDATA(트레이스 데이터)를 포함한다. 내부 기록 포인터는 버퍼 내에 기록된 마지막 위치의 트랙을 유지한다. 기록 포인터는 트레이스 기록이 버퍼에 기록되기 전에 증가된다. 기록 포인터는 ITCR의 TINIT 비트를 기록함으로써 리셋된다. V 비트는 기록 포인터가 한번씩 감기 전에 기록 포인터보다 더 큰 모든 트레이스 기록들에 대한 무효 트레이스 기록을 나타낸다. 기록 포인터가 감은 후, 모든 기록들은 다시 유효하게 판독된다. TCODE 필드는 TDATA 필드에서 데이터 유형을 식별하는 코드다. TDATA 필드는 디버그 목적을 위해 사용되는 소프트웨어 트레이스 정보를 포함한다.
일 실시예에서, 내장형 프로세서 장치(102)는 아래 테이블에 나타낸 바와 같이 11개의 서로 다른 트레이스 코드들을 기록한다.
TCODE # | TCODE 유형 | TDATA |
0 | 분실된 트레이스 | 유효하지 않은 |
1 | 조건 분기 | 분기 시퀀스를 포함한다 |
10 | 분기 목표 | 분기 목표 어드레스를 포함한다 |
11 | 이전 세그먼트 베이스 | 이전 세그먼트의 베이스 어드레스 및 속성들을 포함한다 |
100 | 현 세그먼트 베이스 | 현 세그먼트의 베이스 어드레스 및 속성들을 포함한다 |
101 | 인터럽트 | 예외 또는 인터럽트의 벡터 번호를 포함한다 |
110 | 트레이스 동기화 | 가장 최근 실행된 명령의 어드레스를 포함한다 |
111 | 다중 트레이스 | 다중의 기록들을 갖는 엔트리의 제2 또는 제3 기록을 포함한다 |
1000 | 트레이스 정지 | 트레이스 포획이 정지된 명령 어드레스를 포함한다 |
1001 | 사용자 트레이스 | 사용자 지정 트레이스 데이터를 포함한다. |
1010 | 성능 프로파일 | 성능 프로파일 데이터를 포함한다 |
트레이스 버퍼(200)는 한정된 저장 용량을 가지므로, 포획된 트레이스 데이터의 압축이 바람직하다. 트레이스 데이터는 프로그램이 목표 시스템(101) 위에서 실행될 때 얻어지며, 트레이스 데이터는 실행되는 프로그램이 호스트 시스템(111)에 유용하게 될 수 있도록 포획되는 것이다. 압축 기술의 한 예에서, 만일 어드레스가, 가령 오브젝트 모듈과 같은 액세스가능한 프로그램 이미지로부터 다른 방법으로 얻어질 수 있다면, 어드레스는 트레이스 데이터에 공급되지 않는다. 바람직하게는, 명령 흐름을 방해하는 명령들만이 기록된다. 목표 어드레스가 데이터에 의존하는 명령들만이 보고된다. 예를 들어, 파괴적인 이벤트는 목표 어드레스가 데이터 레지스터 또는 스택과 같은 다른 메모리 위치로부터 공급되는 모든 콜 명령 또는 비조건부 분기 명령을 포함한다.
CALL 명령은 거의 모든 경우 목표 어드레스가 즉시 포맷으로 명령에 의해 공급되는 분열 이벤트(disrupting event)이다. 따라서, 가령 데이터 레지스터, 또는 스택과 같은 메모리 위치로부터 공급되는 것과 같이 목표 어드레스가 데이터 의존성이 아니라면, 분기는 기록되지 않는다.
비조건부 분기 명령은 CALL 처럼 대개 즉시 포맷을 갖는 목표 어드레스를 갖는다. 비조건부 분기들은 CALL 명령과 동일한 방법으로 압축된다.
조건부 명령은 단지 2개의 레지스터-의존성 목표 어드레스를 갖는다. 따라서, 목표 어드레스는 단지 어드레스가 즉시 포맷이 아닐 때에만 기록된다. 그렇지 않으면, 분기가 취해지는지 또는 취해지지 않는 지를 나타내기 위하여 1-비트 트레이스가 사용된다.
동기 또는 비동기이든지 간에, 예외 이벤트는 비교적 드문 이벤트이다. 트랩 또는 인터럽트 핸들러의 목표 어드레스는 트레이스 기록 내에 기록된다.
리턴 명령은 새로운 명령 스트림을 시작하기 전에 스택의 목표 어드레스를 폽(pop) 한다. 목표 어드레스는 트레이스 기록 내에 공급된다.
트레이스된 어드레스 값들은 모두 논리적이며 물리적일 필요는 없다. 어드레스 정보는 실행 프로그램의 어드레스 공간에 관련된 것이며, 사용되는 어드레스 변환 설계에 관련된 것은 아니다. 오프셋 어드레스들은, 전형적으로 코드 세그먼트 및 선택기 정보에 의하여 확장된 명령 포인터(EIP) 값을 적용함으로써 물리적인 동치로 변형된다. 따라서, 세그먼트 정보는 변화가 일어날 때 마다 개별적으로 기록된다.
페이징을 이용하는 시스템에서는, 디버깅을 제어하는 프로세서에 의해 공급되는 가상 또는 논리 어드레스가 하드웨어 또는 소프트웨어 지원을 포함하는 목표 프로세서에 제시되며, 해당하는 물리적인 어드레스는 결정된 다음 디버거로 제공된다. 유감스럽게도, 해당하는 어떤 물리적인 페이지도 현재 메모리에 없다면, 물리적인 어드레스로의 변환은 어렵다. 따라서, 운용체제 연루(involvement)가 이용된다. 페이징은 내장형 프로세서 환경에서는 있음직 하지가 않다.
가장 빈번하게-기록된 트레이스 어드레스들은 절차 리턴에 의한 것이다. 리턴 어드레스들 사이에, 분기 결정으로부터의 결과를 나타내는 단일 비트들의 스트림은 전형적으로 1로 설정된 최좌비트(left most bit)를 제외하고 BFIELD가 초기에 클리어되는 조건부 분기 TCODE를 이용하여 기록되며, 15 분기 이벤트까지의 출력은 단일 트레이스 엔트리에 분류된다. 각각의 새로운 조건부 분기들을 만나게 되면, 새로운 B-비트가 왼쪽에 추가되며 엔트리들은 모두 오른쪽으로 한 비트씩 시프트된다. 가령 CALLs 및 비조건부 점프와 같은 명령들은 목표 어드레스가 즉시 형태가 아니라면 어떠한 트레이스 데이터도 생성하지 않는다.
분기 목표 어드레스가 기록되면, 5개의 엔트리가 아직 누적되지 않았다고 할지라도, 현재의 “BFIELD”엔트리가 완전하게 표시된다. 목표 어드레스는 트레이스 엔트리 쌍(pair)내에 기록된다. 쌍 내의 첫 번째 엔트리는 목표 어드레스의 상위 16비트(TADDR.H)를 공급한다. 두 번째 엔트리는 목표 어드레스의 하위 16비트(TADDR.L)를 공급한다. 분기 목표 어드레스가 조건부 점프 명령에 대하여 공급될 때, 어떠한 BFIELD 엔트리도 기록된 분기에 대하여 나타나지 않는다.
분기들이 취해졌는지 취해지지 않았는 지를 나타내는 단일 비트들을 포함하는 압축된 BFIELD 트레이스 기록은, 트레이스 엔트리들이 거의 어드레스 값들을 포함하지 않기 때문에, 트레이스 엔트리들을 동기화시키는 데에 어려움을 일으킬 가능성을 갖는다. 트레이스가 검사될 때, 데이터는 공지된 프로그램 어드레스가 이용가능한 범위까지만 특정한 어드레스와 동일시된다. 예를 들어, 트레이스 버퍼(200)내의 가장 오래된 엔트리의 처음에서, 공지된 어드레스를 포함하는 엔트리까지의 모든 엔트리들은 용도를 갖지 않으며 버려진다. 알고리즘 동기화는 목표 어드레스를 공급하는 트레이스 엔트리으로부터 시작된다. 만일 트레이스 버퍼(200)가 엔트리들을 공급하는 어떠한 어드레스도 포함하지 않는 다면, 어떠한 트레이스 분석도 가능하지 않다. 이후에 좀 더 상세하게 설명되는, 직렬 디버그 포트에 대한 TSYNC 레지스터가 어드레스 참조를 트레이스 데이터 스트림에 삽입하기 위하여 포함된다.
다른 트레이스 정보는 트랩 또는 인터럽트 핸들러의 목표 어드레스, 리턴 명령의 목표 어드레스, 데이터 레지스터 의존성인 (그렇지 않으면, 필요한 모든 것은 분기가 취해졌는지 아닌지를 나타내는 1-비트 트레이스이다) 목표 어드레스를 갖는 조건부 분기 명령, 및 가장 자주, 절차 리턴으로부터의 어드레스들을 포함한다. 가령 태스크 식별자 및 트레이스 포획 정지/시작 정보와 같은 다른 정보는 또한 트레이스 버퍼(200)에 위치될 수도 있다. 다양한 데이터 및 여러가지 특성의 정보는 트레이스 기록들에 선택적으로 포함된다.
빠뜨린 트레이스(TCODE=0000) 코드는 프로세서가 보고된 어떠한 트레이스 기록들을 빠뜨렸음을 나타내는 데에 이용된다. TDATA 필드는 어떠한 유효 데이터도 포함하지 않는다. 트레이스 실행 알고리즘은 전형적으로 어드레스 정보를 포함하는 다음의 트레이스 기록에서 재동기화함으로써 빠뜨린 트레이스 TCODE에 응답한다.
조건부 분기(TCODE=0001) 코드는 조건부 분기들의 상태를 기록하는 데에 이용된다. TDATA 필드는 각 조건부 분기에 대한 비트를 포함한다. 이 비트는 취해짐/취해지지 않음으로써 표시된다. 트레이스 기록의 포맷은 도 6A에 도시된다. 각 트레이스 기록은 최대 15개의 조건부 분기들에 대한 상태 정보를 보고한다. 기록은, 15개의 조건부 분기들이 실행되고 기록이 완전할 때, 또는 기록이 완전하지 않고 트레이스 이벤트가 발생하여 다른 타입의 트레이스 기록이 보고될 것을 요구할 때, 트레이스 버퍼(200)에 저장되거나 트레이스 포트(220)에 보고된다. 개시된 실시예에서, 15개 분기 이벤트들의 출력은 단일 트레이스 엔트리내에 분류된다. “BFIELD”로서 또한 불려지는 16-비트 TDATA 필드는 1-비트의 분기 출력 트레이스 엔트리들을 포함하고, TCODE=0001 엔트리의 라벨이 붙여진다. TDATA 필드는 1로 설정되는 가장 왼쪽 비트를 제외하고 초기에 클리어된다. 각각의 새로운 조건부 분기들을 만나게 되면, 새로운 한 비트 엔트리가 왼쪽에 추가되며 다른 모든 엔트리들은 오른쪽으로 한 비트씩 시프트된다. 각 조건부 분기는 취해짐(1) 또는 취해지지 않음(0)으로써 표시된다. 조건부 분기 비트들을 확인하기 위하여, 1값을 갖는 최하위 비트가 위치되며 왼쪽으로의 비트들을 조건부 분기 비트들이 된다.
256 엔트리 트레이스 버퍼(200)는 320 바이트의 정보를 저장할 수 있다. 한 분기의 분기 주파수가 모두 6개의 명령들이라고 가정하면, 개시된 트레이스 버퍼(200)는 콜, 점프, 및 리턴 명령을 무시한 1,536개 명령의 효과적인 트레이스 기록을 지원한다.
트레이스 제어 회로(218)는 프로세서 인터페이스 로직(202)에 의하여 명령의 실행을 모니터한다. 분기 목표 어드레스가 보고될 때, 현재의 조건부 분기 TDATA 필드내에 포함된 정보는 15개의 엔트리들이 누적되지 않았을 지라도 트레이스 제어 회로(218)에 의해 완전한 것으로서 표시된다. 분기 목표(TCODE=0010) 코드는 데이터-의존성 분기 명령의 목표 어드레스를 보고하는 데에 이용되며 항상 쌍으로 발생한다. 도 6B를 참조하면, 쌍 내의 첫 번째 기록의 TDATA 필드는 TCODE=0010을 가지며 목표 명령의 확장된 명령 포인터(EIP)의 상위 16-비트들을 표시한다. 쌍 내의 두 번째 기록의 TDATA 필드는 목표 명령의 EIP의 하위 16-비트를 표시하는 다중 트레이스(TCODE=0111) 코드를 갖는다. 예를 들어 32-비트 어드레싱을 이용하는 프로세서-기반 장치(102)내의 목표 어드레스는, 목표 어드레스의 상위 16-비트를 공급하는 첫 번째 엔트리(TCODE=0010) 및 목표 어드레스의 하위 16-비트를 공급하는 두 번째 다중 트레이스 엔트리(TCODE=0111)을 갖는 트레이스 엔트리 쌍에 기록된다. 분기 목표 어드레스가 조건부 점프 명령과 함께 공급될 때, 어떠한 1-비트 분기 출력 트레이스 엔트리도 보고된 분기에 대하여 나타나지 않는다.
다중 트레이스 코드는 다중 기록들을 갖는 트레이스 엔트리에 대한 기록들을 보고하는 데에 이용된다. 이러한 트레이스 기록의 포맷은 고정되어 있지 않으며 다중 트레이스 기록들을 보고하는 트레이스 코드에 의존한다.
시작 및 정지 트레이스 포획
도6C를 참조하면, 예를 들어 태스크 환경 변환이 일어날 때, 프로그램 실행의 어떤 부분동안 트레이스 개더링을 시작 및 정지하는 것이 유익하다. 트레이스 정지(TCODE=1000) 코드는 트레이스 포획이 정지되었던 명령의 어드레스를 보고하는 데에 이용되며, 다중 트레이스(TCODE=0111) 코드와 함께 쌍으로 발생한다. TCODE=1000를 갖는 첫 번째 기록의 TDATA 필드는 트레이스 포획이 끝나는 명령의 EIP의 상위 16 비트를 나타낸다. TCODE=0111을 갖는 두 번째 다중 트레이스 기록의 TDATA 필드는 트레이스 포획이 정지되는 명령의 EIP의 하위 16 비트를 나타낸다. 트레이스 포획이 정지될 때, 어떠한 트레이스 엔트리들도 트레이스 버퍼(200)로 들어가지 않을 뿐 아니라, 어떠한 엔트리들도 트레이스 포트(220)의 본드아웃 핀들 상에 나타나지 않는다. 트레이스 캡춰를 인에이블하고 디스에이블하기 위한 공지된 여러가지의 방법들이 고려된다. 예를 들어, 트레이스 포획 기능을 인에이블 및 디스에이블하기 위하여 x86 커맨드가 공급된다. 변형예로서, 기존의 x86 커맨드가 I/O 포트 위치내의 비트를 토글하는 데에 이용된다. 또한, 온칩 중지점 제어 레지스터(미도시)는 트레이스 포획이 시작 및 정지되는 어드레스들을 나타내도록 구성된다. 트레이싱이 정지될 때, 마지막 트레이스 어드레스를 기록하는 현재 세그먼트 베이스 트레이스 엔트리(TCODE=0100) 및 다중 트레이스 엔트리(TOCDE=0111)이 트레이스 스트림내에 배치된다. 트레이싱이 다시 시작될 때, 현재 실행중인 명령의 어드레스를 포함하는 트레이스 동기화 엔트리(TCODE=0110, TCODE=0111)이 발생된다.
디버그 컨트롤러는 실행을 시작하기 전에 프로세서 코어(104)의 상태를 바꿀 수 있기 때문에, 디버그 모드를 벗어날 때 트레이스 동기화 엔트리(TCODE=0110)이 발생된다. 이렇게 되면 동기 어드레스는 디버그 모드를 벗어나자 마자 실행된 첫 번째 어드레스이다.
유용한 디버그 기능은 트레이싱이 정지된 동안 발생하는 세그먼트 변화를 고려하는 성능이다. 이 기능은, 도 6C에 나타낸 바와 같이 두 번째 다중 트레이스(TCODE=0111) 엔트리과 함께 발생하는 현재 세그먼트 베이스(TCODE=0100) 엔트리를 이용하여 현재 코드 세그먼트의 세그먼트의 베이스 어드레스 및 세그먼트 특성을 보고하는 옵션을 선택함으로써 수행된다. TCODE=0100을 갖는 첫 번째 기록의 TDATA 필드는 현재 세그먼트의 베이스 어드레스의 상위 16 비트를 나타낸다. TCODE=0111을 갖는 두 번째 다중 트레이스 기록의 TDATA 필드는 현재 세그먼트의 베이스 어드레스의 하위 15-4 비트 및 현재 세그먼트 특성을 나타낸다.
세그먼트 특성은 페이징 상태(PG), 피연산자의 크기(SZ), 어드레싱 모드, 리얼 또는 프로텍티드(R/P)를 알려준다. 피연산자의 크기(SZ) 비트는 피연산자의 크기 및 어드레싱 모드를 나타내며, 32-비트 피연산자 및 어드레싱 모드를 나타내는 1 및 16-비트 피연산자 및 어드레싱 모드를 나타내는 1을 갖는 코드 세그먼트 기술자의 D 비트를 나타낸다. 페이징 상태(PG)는 페이징이 인에이블(10) 또는 디스에이블(0)되는 지를 나타내며 CR0 레지스터의 PG 비트를 나타낸다. 리얼/프로텍티드 비트(R/P) 는 리얼 모드(0) 또는 프로텍티드 모드(1)을 나타내며 CR0 레지스터의 PE 비트를 나타낸다. 만일 세그먼트가 16-바이트 경계로 정렬되지 않는 다면, 베이스 어드레스의 하위 4비트는 프로그램의 오브젝트 모듈 파일 또는 기술자 테이블(descriptor table)로부터 결정된다.
현재 세그먼트 베이스 기록은 트레이스 포획이 턴오프될 때 마다, 그리고 디버그 모드로 들어갈 때 발생한다. 현재 세그먼트 베이스를 갖는 트레이스 기록의 발생은 ITCR의 DISCSB 비트에 의해 제어된다. 현재 세그먼트 베이스 기록 기능은 또한 디버그 모드로 들어가기에 앞서 트레이스의 끝에서 현재 세그먼트의 베이스 어드레스 엔트리를 인에이블시키는 구성 옵션을 이용하여 수행된다. 반대로, 가령 인터럽트가 발생할 때와 같이 세그먼트 베이스가 바뀌지 않는 다면, 세그먼트 베이스 정보의 공급은 전형적으로 바람직하지 않다.
프로세서 코어(104)는 예외 또는 다른 인터럽트 또는 커맨드에 의하여 디버그 모드에 들어갈 수 있다. 어떠한 트레이스 포획도 디버그 모드 동안에서 실행되는 동안에는 발생하지 않는다. 트레이스 엔트리는 디버그 모드로 들어가게 하는 SDP 커맨드를 포함하는 예외 이벤트에 의해 발생된다. 트레이스-정지 엔트리는 예외-이벤트 엔트리를 따라서 발생되지 않는다. 구성 옵션은, 디버그 모드에 들어갈 때 현재 세그먼트의 베이스 어드레스 엔트리(TCODE=0100)이 트레이스의 끝에 위치되도록 지원한다.
인터럽트(TCODE=0101) 코드는 예외 또는 하드웨어 인터럽트를 보고하는 데에 이용되며 2개의 연속적인 다중 트레이스 코드(TCODE=0111)와 함께 3번 발생한다. 도 6D를 참조하면, 가령 인터럽트 또는 트랩과 같은 비동기 또는 동기 이벤트의 발생에 이어서, 목표 인터럽트 핸들러의 어드레스를 공급하기 위하여 TCODE=0101 트레이스 엔트리가 발생된다. TCODE=0101을 갖는 첫 번째 기록의 TDATA 필드는 예외/인터럽트 핸들러의 벡터 수를 나타낸다. 시스템 관리 인터럽트(SMI)는 FFFFh로 설정된 TDATA 값과 함께 보고된다. TCODE=0111을 갖는 두 번째 다중 트레이스 기록의 TDATA 필드는 목표 명령의 확장된 명령 포인터(EIP)의 상위 16 비트를 나타낸다. TCODE=0111을 갖는 세 번째 다중 트레이스 기록의 TDATA 필드는 목표 명령의 EIP의 하위 16 비트를 나타낸다. 목표 명령은 예외/인터럽트 핸들러의 첫 번째 명령이다.
가령 인터럽트 또는 트랩과 같은 비동기 또는 동기 이벤트가 발생할 때, 단지 발생하는 인터럽트(TCODE=0101) 코드 만으로는 불충분하다. 인터럽트 코드는 목표 인터럽트 핸들러의 어드레스를 공급하지만, 인터럽트된 명령의 어드레스를 나타내지는 않는다. 인터럽트 엔트리의 바로 앞에 트레이스 동기화(TCODE=0110) 코드를 발생시킴으로써 인터럽트되었던 명령의 어드레스는 유익하게는 이전의 세그먼트의 베이스 어드레스(TCODE=0011)에 따라서 기록된다. 트레이스 동기화 엔트리는 인터럽트 핸들러가 개시되기 전의 마지막 명령의 어드레스를 포함한다.
트레이스 동기화(TCODE=0110) 코드는 현재 실행되는 명령의 어드레스를 보고하는 데에 이용된다. 트레이스 동기화 코드는 항상 두 번째 다중 트레이스 TCODE=0111와 쌍으로 일어난다. TCODE=0110을 갖는 첫 번째 기록의 TDATA 필드는 현재 실행되는 명령의 EIP의 상위 16 비트를 나타낸다. TCODE=0111을 갖는 두 번째 다중 트레이스 기록의 TDATA 필드는 현재 실행되는 명령의 하위 16 비트를 나타낸다. 예외 또는 인터럽트가 행해질 때, 트레이스 동기화 이벤트가 일어날 때, 트레이스 포획이 턴온될 때, 디버그 모드를 빠져나갈 때, 옵션이 ITCR 레지스터에 설정되어 있는 경우 하위 특권 레벨로부터 바뀔 때 기록이 발생한다.
세그먼트 변경
세그먼트 변경은 트레이싱이 정지된 동안에는 발생하지 않는데, 이는 이벤트가 트레이스에 기록되지 않을 것이기 때문이다. 세그먼트 변경의 어려움은 현재 세그먼트 베이스 엔트리과 함께 트레이스 정지 TCODE=1000 엔트리를 즉시 수행하게 하는 옵션을 선택함으로써 부분적으로 해결된다. 도 6E를 참조하면, 세그먼트 파라미터에의 변경을 보고하는 데에 이용되는 트레이스 엔트리가 도시된다. 트레이스 스트림을 처리하는 동안, 트레이스 어드레스 값은 명령의 선형 어드레스를 결정하기 위하여 세그먼트의 베이스 어드레스와 결합된다. 디폴트 데이터 피연산자 크기(32 또는 16 비트 모드) 뿐 아니라 베이스 어드레스는 바뀌기 쉽다. 결과적으로, 항쌍 쌍으로 발생하는 TCODE=0011 및 TCODE=0111 엔트리는 명령 흐름을 정확하게 재구성하기 위한 정보를 보고하도록 구성된다. 이전 세그먼트 베이스(TCODE=0011) 코드는 이전 코드 세그먼트의 베이스 어드레스 및 세그먼트 특성을 보고하는 데에 이용된다. TCODE=0011 엔트리를 갖는 제 1 기록의 TDATA 필드는 이전 세그먼트의 베이스 어드레스의 상위 16-비트를 나타낸다. TCODE=0111을 갖는 관련된 제 2 다중 트레이스 기록은 이전 세그먼트의 베이스 어드레스 특성이 도 6C와 함께 설명된 현재 세그먼트 베이스(TCODE=0100)에 대한 상태를 알려주는 것과 동일하게, 페이징의 상태(PG), 피연산자의 크기(SZ), 및 어드레싱 모드, 리얼 또는 프로텍티드(R/P)를 알려준다.
이전 세그먼트 베이스 기록은, 트레이스 이벤트가 다른 세그먼트에서 명령의 실행을 개시할 때 마다, 또는 세그먼트 특성의 변화가 일어날 때 마다 발생한다. 이전 세그먼트는 명령 실행이 일어났던 세그먼트를 말하는 것임을 유념하자. 세그먼트 정보는 일반적으로 현재 (목표) 세그먼트가 아닌 이전 세그먼트에 관련된 것이다. 현재 세그먼트 정보는 프로세서 코어(104)를 정지하고 프로세서 코어(104)의 상태를 검사함으로써 얻어진다.
사용자 지정 트레이스 엔트리
어떠한 환경하에서, 응용 프로그램 또는 운영 체제는 유익하게는 트레이스 스트림에 부가적인 정보를 추가한다. 일 실시예에서, x86 명령은 16-비트 데이터 값이 선택된 실행 위치에서 트레이스 스트림에 배치될 수 있도록 지원한다. 명령은 메모리 또는 레지스터에 의해 공급된 피연산자와 함께 I/O 공간으로 이동함으로써 실행된다. 프로세서 코어(104)가 x86 명령을 실행할 때, 사용자-지정 트레이스 엔트리는 트레이스 제어 회로(218)에 의해 포획되어 트레이스 버퍼(200)에 놓여진다. 도 6F를 참조하면, 사용자 트레이스(TCODE=1001) 엔트리는 사용자-지정 트레이스 기록을 표시하며, 멀티-태스킹 운영 체제에서 태스크 변환이 일어날 때 이전 또는 현재의 태스크 식별자와 같은 트레이스 스트림에 선택된 부가적인 정보를 추가한다.
사용자 트레이스(TCODE=1001) 엔트리는 또한 병행성 시스템에 유용하다. 예를 들어, 모든 태스크는 제로의 세그먼트 베이스와 함께 가동될 수도 있으며, 페이징은 태스크마다의 페이지를 별개의 물리적인 어드레스들에 맵시키는 데에 이용된다. 태스크 변환은 세그먼트 변경에 의해 이루어진다. 세그먼트 변경에 대한 트레이스 엔트리는 적은 정보, 단지 제로 베이스 어드레스를 알려준다. 태스크 변환 동안, 운영 체제는 더 많은 정보, 이전 태스크 또는 현재 태스크 식별자를 나타내는 사용자 트레이스(TCODE=1001) 엔트리를 발생시킬 수도 있다.
트레이스 데이터의 동기화
프로세서 장치(102)에서 전형적인 소프트웨어를 실행하는 동안, 거의 어떤 트레이스 엔트리들도 어드레스 값들을 포함하지 않는다. 대부분의 엔트리들은 TCDOE=0001 포맷을 가지며, 여기에서 단일 비트는 조건부 동작 결과를 나타낸다. 그러나, 트레이스 스트림을 검사할 때, 데이터는 공지된 프로그램 어드레스에 대해서만 조사될 수 있다. 예를 들어, 트레이스 버퍼(200)내의 가장 오래된 엔트리부터 시작하여, 어드레스 엔트리가 거의 이용되지 않을 때까지 모든 엔트리들에 대해서 계속된다. 알고리즘 동기화는 통상적으로 목표 어드레스를 제공하는 트레이스 엔트리으로부터 시작한다.
트레이스 버퍼(200)가 어드레스를 제공하는 어떤 엔트리들도 포함하지 않는 다면, 트레이스 분석은 발생할 수 없다. 이같은 상황은 드물지만, 가능하다. 이러한 이유로, 동기화 레지스터(TSYNC)는 동기화 어드레스 정보의 주입을 제어하기 위하여 본 발명의 양호한 실시예에 제공된다. 동기화 레지스터(TSYNC)가 0으로 설정되는 경우, 트레이스 동기화 엔트리들은 발생되지 않는다.
도 6G는 전형적인 트레이스 동기화 엔트리를 묘사한다. 프로세서 코어(104)가 실행하는 동안, 카운터 레지스터는 목표 어드레스를 포함하는 트레이스 엔트리가 생성될 때 마다 동기화 레지스터(TSYNC)내에 포함된 값으로 설정된다. 이 카운터는 다른 모든 트레이스 엔트리들에 대해 1씩 감소된다. 카운터가 0에 도달하는 경우, 트레이스 엔트리는 가장 최근에 회수한 명령(또는 변형예로서 계류 명령)의 어드레스를 포함하는 (TCODE=0110)에 삽입된다. 게다가, 동기화 엔트리가 트레이스 버퍼(200)내에 기록될 때, 동기화 엔트리는 또한 완전한 기능의 ICE 장비를 위해 트레이스 데이터를 동기화시키는 충분한 능력을 보장하기 위해서 트레이스 핀들(220)상에 나타난다.
TSYNC 값은 트레이스 버퍼(200) 효율간의 교체를 조정할 수 있도록 선택적으로 프로그램되며 어드레스의 보장은 트레이스 분석에 이용가능하다. 트레이스 버퍼(200)에 기록된 동기화 엔트리는 또한 완전한 기능의 내부 회로 에뮬레이션 장비를 위한 동기화 트레이스 데이터의 충분한 이용가능성을 보장하기 위하여 트레이스 핀들로 출력된다.
트레이스 엔트리 정보는 또한 코드 범위 또는 실행 성능과 관련된 데이터를 포함하도록 전개될 수 있다. 이같은 정보는, 예컨대 코드 시험 및 성능 조정을 위하여 유용하다. 이같은 개선이 없을 지라도, 프로세서 코어(104)를 인에이블하여 트레이스 버퍼(200)를 액세스하는 것은 바람직하다. 미소제어기 장치의 경우에, 이러한 특성은 트레이스 버퍼(200)를 I/O나 메모리 공간내의 일부에 맵핑하여 성취될 수 있다. 보다 일반적인 접근법은 트레이스 버퍼(200) 데이터를 시스템 메모리내로 이동하도록 지원하는 명령을 포함하는 것을 수반한다.
이상, 트레이스 정보를 제공하기 위한 유연하고, 고성능의 해결책을 제공하는 프로세서-기반 장치를 설명하였다. 프로세서-기반 장치는 프로세서 동작을 중지하지 않으면서 프로세서에 대한 명령 실행 흐름을 재구성하기 위한 트레이스 정보를 공급하는 명령 트레이스 버퍼를 통합한다. 직렬 및 병렬 통신 채널은 트레이스 데이터와 외부 장치들과의 통신을 지원한다. 개선된 온칩 명령 트레이스 버퍼는 종래의 여러가지 해결책들에서 발생하는 다양한 대역폭 및 클럭 동기화 문제들을 완화하며, 또한 덜 비싼 외부 포획 하드웨어의 사용을 가능하게 한다.
신호 정의는 2개의 부분분, 즉 표준 부분 및 본드아웃 부분을 포함한다. 표준 신호는 표 1에 나타내었으며, 이는 모든 내장형 프로세서 장치(102) 집적 회로에 대하여 이용가능하다. 본드아웃 신호는 표 2에 나타내었으며, 이는 단지 전형적으로 내부 회로 에뮬레이터(ICE) 매각인에 의하여 이용되는 특별하게-패키지된 부분들에 대해서만 이용가능하다. TBUS[18:0]는 병렬 포트(214) 및 트레이스 패드 인터페이스(220) 간에 공유된다. 남아있는 본드아웃 신호는 병렬 포트 또는 트레이스 패드 인터페이스(220)에 전용된다.
이름 | I/O | Res | 동기 클럭 | 설명 |
TCK | 입력 | PD | -- | TAP 컨트롤러 및 디버그 직렬/병렬 인터페이스에 대한 클럭 |
TDI | 입력 | PD | TCK | 입력 테스트 데이터 및 명령 |
TDO | 출력 | -- | TCK | 출력 데이터 |
TMS | 입력 | PD | TCK | 테스트 기능 및 테스트 변경의 시퀀스 |
TRST | 입력 | PU | 비동기 | 테스트 리셋 |
BRTC | 입력 | PD | 비동기 | 디버그 모드/명령 트레이스 포획을 위한 온-오프 스위치로의 요구 엔트리. DCSR내의 BRKMODE 비트에 의해 선택된 기능(선택적) |
CMDACK | 출력 | -- | TCK | 확인 커맨드(선택적) |
STOPTX | 출력 | -- | 비동기 | 정상 실행이 종료될 때 DEBUG 모드에 대한 엔트리에 하이를 어서트함. OS/응용 통신 동안 데이터가 호스트로 전송될 때 NORMAL 모드에 하이 설정 |
TRIG | 출력 | -- | 비동기 | 전형적으로 외부 트레이스 포획을 위한 논리 분석기로의 트리거 이벤트(선택적) |
표준 신호들
이름 | I/O | Res | 동기 클럭 | 설명 |
TRACECLK | 출력 | -- | -- | 명령 트레이스 기록 출력 클럭 |
TV | 출력 | -- | TRACECLK | 0=유효 트레이스 기록, 1=어떠한 트레이스 기록도 없음. 병렬 버스 인터페이스에 의해 핀이 공유되지 않음 |
DATA[15:0] | Bidir | PD | TCK/TRACECLK | 병렬 디버그 포트 데이터 경로. 핀 TBUS[15:0] 공유 |
PADR[2:0] | Bidir | PD | TCK/TRACECLK | 병렬 디버그 포트 어드레스.핀 TBUS[18:16]공유 |
PRW | Bidir | PD | TCK/TRACECLK | 병렬 디버그 포트 판독/기록 선택.핀 TBUS[19] 공유. 1=직렬 디버그 레지스터로부의 병렬 판독. 0=직렬 디버그 레지스터로부터의 병렬 기록 |
PBREQ | 출력 | -- | TCK | 1=병렬 버스 인터페이스를 인에이블시키는 요청 호스트0=병렬 버스 인터페이스를 디스에이블시키는 요청 호스트핀은 트레이스 버스 인터페이스와 공유되지 않는다 |
PBGNT | 입력 | PD | TCK | 1=호스트-인에이블된 병렬 버스 인터페이스0=호스트-디스에이블된 병렬 버스 인터페이스핀은 트레이스 버스 인터페이스와 공유되지 않는다 |
본드아웃 신호들
트레이스 포트(220)는 단지 본드아웃 칩에서만 이용가능하다. TBUS 핀들은, 병렬 옵션이 DSCR 내에 PARENB 비트를 설정함으로써 인에이블된다면, 병렬 디버그 포트(214)와 공유된다. 프로세서 코어(104)에 의해 발생된 트레이스 기록들은 외부 트레이스 모드에서 트레이스 포트(220)로 전달된다. 표 2는 트레이스 포트 신호들을 나타낸다. TRACECLK 타이밍은 ITCR 내의 비트들을 통하여 프로그램가능하다. 트레이스 포트 신호들의 변화는 TRACECLK 신호와 동기를 이룬다. TV 신호는 유효 트레이스 데이터가 TBUS 위에서 구동될 때 어서트된다. TBUS 신호들은 TV의 어서션 후에 TRACECLK 신호의 다음 상승 에지에서 샘플링된다.
도 7을 참조하면, 표준 JTAG 통신을 이용할 때 JTAG TAP 컨트롤러(204)의 호스트/직렬 포트 인터페이스의 하이-레벨 흐름도를 도시한다. 호스트 시스템(111)은 동작(702)에서 JTAG TAP 컨트롤러(204)로 DEBUG 명령을 기록하며, 동작(704)에서 어서트된 커맨드 계류 플래그(P) 및 데이터 필드 내의 데이터(가능한 경우, 그렇지 않다면 제로)에 의해 38-비트 명령값을 JTAG 레지스터로 시프트시킨다. 전형적으로 JTAG 명령 레지스터의 데이터 필드와 프로세서 코어(104)내의 소정의 프로세서 레지스터 또는 메모리/IO 위치간의 값의 전송을 포함하는 커맨드를 완료하자 마자, 프로세서 코어(104)는 계류 플래그(P=0)를 제거하고 종료된 플래그(F=1)를 어서트하며, 적용가능하다면, 동시에 데이터 필드에 값을 저장한다. 전체 38-비트 레지스터는 종료된(F) 그리고 계류중인(P) 플래그들을 모니터하기 위하여 스캔된다. 만일 계류 플래그(P)가 제로로 리셋되고 종료 프래그(F)가 1로 세트된다면, 이전 커맨드가 종료된다. 플래그들의 상태는 도 3에 도시한 포획-DR TAP 컨트롤러 상태 동안 포획된다. 플래그 상태의 슬레이브 복사본은 JTAG TAP 컨트롤러(204)의 내부에 저장되며, 다음 명령이 갱신-DR TAP 컨트롤러 상태내에 로드될 것인지를 로직 상태(708)에서 결정하기 위하여 동작(706)에서 체크된다. 만일 종료 플래그(F)가 설정되면, 새로운 38-비트 커맨드는 동작(706)에서 스캔되며, 그렇지 않으면 이전 데이터 스캔이 동작(710)에서 반복된다. 슬레이브 복사본은 포획-DR 및 갱신-DR TAP 컨트롤러 상태간의 상태 변화의 가능성 때문에 유지된다. 프로세서는, 사용자가 이전 명령이 종료되지 않았음을 알게 된 경우 다음 명령의 로딩을 막기 위하여 상태 포획이 수행되는 때에, 사용자가 검출하게 될 상태를 결정하기 위하여 슬레이브 복사본을 저장한다.
도 2를 다시 참조하면, 프로세서 인터페이스 상태 머신(202)은 표준 JTAG 인터페이스에 신호들 CMDACK, BRTC, STOPTX, 및 TRIG를 추가하기 위하여 비동기 제어 동작을 수행한다. CMDACK, BRTC, 및 TRIG 신호들은 DEBUG 명령이 JTAG TAP 컨트롤러(204) 내의 JTAG 명령 레지스터에 기록될 때 인에이블 되지만, 디스에이블될 때에는 로직 0으로 된다. BRTC 신호 핀이 내부 풀다운 레지스터(미도시)에 공급된다.
도 8은 강화된 JTAG 인터페이스의 동작 상태를 도시하는 순서도이다. 호스트 시스템(111)은 동작(802)에서 JTAG TAP 컨트롤러(204)에 DEBUG 명령을 기록한 다음, 로직 동작(804)에서 커맨드 완료 상태를 결정하기 위하여 출력 신호 CMDACK를 선택적으로 모니터한다. CMDACK 신호는 종료 플래그(F)의 어서션과 동시에 하이로 어서트되며, 다음의 시프트 주기가 시작될 때 까지 하이를 유지한다. CMDACK 핀을 이용할 때, CMDACK 핀은 종료 플래그(F)의 실시간 상태가 0에서 1로 바뀐 후 다음의 상승 에지에서 하이로 변하기 때문에, 종료 플래그(F)는 JTAG TAP 컨트롤러(204)의 직렬 포트 레지스터의 시프트 아웃없이 포획된다. CMDACK 신호는 TAP 컨트롤러 상태 머신의 이전 포획-DR 상태 등록 동안 저장된 상태로부터 지연되지 않는다. 따라서, 강화된 JTAG 모드에서 새로운 시프트 시퀀스는 CMDACK 핀이 하이로 어서트될 때 까지 동작(806)에서 시작되지 않는다. CMDACK 핀은, DEBUG 명령이 JTAG 명령 레지스터로 로드된 후 직렬 포트가 명령을 받을 준비가 될 때 하이로 어서트된다. CMDACK 신호는 TCK 신호와 동기를 이룬다. TCK는 일반적으로 항상 클럭되는 것은 아니지만, CMDACK 응답을 기다릴 때에는 연속적으로 클럭된다.
BRTC 입력 신호는 DCSR 내의 BRKMODE에 따라서 중단 요청 신호 또는 트레이스 포획 인에이블 신호로서 작용한다. 중단 요청 신호로서 작용하도록 설정될 때, BRTC 신호는 호스트 시스템(111)을 디버그 모드로 들어가도록 펄스를 보낸다. 만일 BRTC 신호가 트레이스 포획 인에이블 신호로서 작용하도록 설정된다면, 신호를 하이로 어서트하여 트레이스 포획이 활성화되게 한다. BRTC 신호의 디어서팅은 트레이스 포획을 비활성화시킨다. BRTC 신호는 검출 후에 다음의 명령 경계에 효력을 나타내며 내부 프로세서 클럭과 내부적으로 동기를 이룬다. BRTC 신호는 항상 어서트된다.
TRIG 출력 신호는 프로세서 코어(104)내의 내부 중지점이 어서트될 때 마다 펄스를 발생하도록 선택적으로 인에이블된다. TRIG 신호 이벤트는 전형적으로, 가령 논리 분석기와 같은 외부 포획 장치를 트리거하는 데에 이용된다. TRIG 신호는 TRACECLK, 트레이스 기록 포획 클럭과 동기를 이룬다. 프로세서 코어(104)가 중지점, 또는 더 정확히 펄스 포인트를 발생시킬 때, TRIG 출력 신호 이벤트는 TRACECLK와 동기를 이루며 1 TRACDCLE 주기 마다 펄스를 발생시킨다. 예시적인 실시예에서, 종래의 디버그 중지점 DR0-DR3는 중지점 이벤트의 방법에서 프로세서의 정지없이 펄스를 변형적으로 발생시키도록 변경된다.
STOPTX 출력 신호는 호스트 시스템(111)이 디버그 모드로 들어가서 레지스터 질문 및 수정을 준비하거나, 메모리 또는 I/O가 직렬/병렬 커맨드 인터페이스를 통해 판독 및 기록할 때 하이로 어서트된다. 정상 (비디버그) 모드에서, STOPTX 신호는 호스트 시스템(111)이 운용체제(OS) 또는 애플리케이션 통신 동안 데이터를 전송할 준비할 때 하이로 어서트된다. STOPTX 신호는 디버그 제어/상태 레지스터(DCSR)에서 비트 7 또는 비트 11을 반영한다. STOPTX 신호는 TRACELK와 동기이다. 본드아웃 DEBUG 트레이스 포트를 통해 트레이싱하는 외부 명령이 인에이블될 시, STOPTX의 어서션은 명령 트레이스 버퍼(200)에서 모든 데이터가 전달되어 나갈때 까지 지연된다.
다시 도 2를 참조하면, 병렬 포트(214)는 본드아웃 버전의 목표 시스템(101)에서 통상적으로 이용될 수 있는 고성능 인터페이스다. 병렬 포트(214)는 호스트 시스템(111)과 목표 시스템 메모리간의 다운로드 및 업로드를 신속하게 실행하기 위하여 계획적인 16비트 데이터 경로를 제공한다. 병렬 포트(214)는 프로세서 코어(104)가 정지될 때마다 목표 시스템(101)과의 모든 디버그 통신을 위하여 선택적으로 이용된다. 직렬 포트 인터페이스는, 표준 또는 개량형이든 간에 프로세서 코어(104)가 명령을 실행할 때 목표 시스템(101)에 대한 디버그 액세스를 위하여 이용된다.
병렬 포트(214)는 16비트의 넓은 양방향 데이터 버스(PDATA[15:0]), 2비트 어드레스 버스(PADR[2:0]), 판독/기록 스트로브(strobe)(PRW), 및 요청 승낙 쌍(PBREQ-PBGNT)을 포함한다. 인터페이스는 모든 트랜잭션(transaction)의 동기화를 위하여 TCK(표 1 참조)를 이용한다. TCK는 병렬 디버그 인터페이스가 인에이블되는 동안 연속적으로 클럭된다.
병렬 포트(214)는 JTAG TAP 제어기(204)에 의해 DCSR:3을 논리 1로 설정하여 인에이블된다. 직렬 포트 인터페이스는 병렬 포트가 인에이블될 때에 디스에이블되지 않으며, 프로세서 코어(104)가 명령을 실행하는 동안 엑세스를 위하여 필수적인 것이다. 병렬 포트(214)상에서 시작된 소정의 트랜잭션은 병렬 포트(214)상에서 완료된다. 유사하게, JTAG TAP 제어기(204)의 직렬 포트상에서 시작된 소정의 트랜잭션은 또한 직렬 포트상에서 완료된다. 실례에서, 병렬 포트(214)는, 인에이블될 시 예측할 수 없는 행동을 피하기 위해서 모든 저장 상태 및 복원 상태 주기 동안에 이용된다.
병렬 포트(214)에 대한 모든 입력 신호들은 TCK의 상승 에지에서 샘플링된다. 모든 출력 신호들은 TCK의 하가 에지에서 변경된다.
도 9를 참조하면, 타이밍도는 병렬 디버그 버스(PDATA[15:0] 및 PADR[2:0])의 포착 및 방출을 위해 신호 행동의 3개의 완벽한 버스 주기들을 설명한다. 핀들이 병렬 포트(214)와 DEBUG 트레이스 포트(220)간에 공유되기 때문에, 병렬 포트 전송 커맨드는 프로세서 코어(104)가 정지되어 DEBUG 트레이스 포트(220)가 공유 버스로부터 접속이 해제되는 동안만 초기화된다. 신호들(PBREQ/PBGNT)의 요청 승낙 핸드쉐이크 쌍은 DEBUG 트레이스 포트(220)와 병렬 포트(214)간에 공유 버스 신호들의 전환을 신속히 처리하기 위해서 제공된다. 병렬 포트(214)와의 호스트 시스템(111) 인터페이스가 PBREQ가 하이로 어서트됐음을 결정할 시, 호스트 시스템(111)은 병렬 포트 (214) 신호들을 구동하기 시작하여 PBGNT를 어서트하여야 한다. PBREQ가 디어서트될 시, 병렬 포트(214)와의 호스트 시스템(111) 인터페이스는 호스트 시스템(111) 인터페이스 신호들을 3상태로 하고 호스트 시스템(111) 인터페이스가 버스로부터 격리됐음을 나타내기 위해서 PBGNT를 디어서트하여 응답한다. 버스 접속을 방지하기 위해서, 병렬 포트(214)를 구동하는 장치들은 PBGNT가 디어서트될 시마다 3상태가 된다.
PBREQ 신호는 디버그 모드 가입에 대한 저장 상태 시퀀스 페널티메이트 (penultimate)를 시작하기 바로 전에 어서트되어 최종 복원 상태 시퀀스 데이터 워드(word)가 전달된 후에 디어서트된다. 디버그 모드가 병렬 포트(214)가 인에이블될 시 시작되거나 종결될 때, 병렬 포트(214)는 프로세서 코어(104) 상태 저장 및 복원 주기들 동안 이용된다. 최종 복원 상태 주기상에서, 병렬 포트(214) 제어기는 기록 데이터를 래치(latch)한 후에 PBREQ 신호를 디어서트한다. 프로세서 코어(104)는 DEBUG 트레이스 포트가 이용될 때까지 코드를 실행하기 위해서 방출되지 않기 때문에 CMDACK 명령은 아직 어서트되지 않는다. 병렬 포트(214) 호스트 인터페이스는 병렬 포트(214) 구동기들을 3상태로 하고 PBGNT 신호를 디어서트하여 PBREQ 디어서션에 응답한다. 이렇게 되면 병렬 포트(214) 제어기는 디버그 트레이스 포트(220)에서 DEBUG 트레이스 포트 핀 구동기들을 활성화하고, 최종 복원 상태 주기를 완성하며, CMDACK 신호를 어서트하고, 디버그 트레이스 포트(220) 인터페이스의 제어를 트레이스 제어 회로(218)로 돌려 보낸다.
도 10을 참조하면, 순서도는 병렬 포트(214)에 의하여 통신하는 동안 호스트 시스템(111)을 수반하는 병렬 디버그 포트 인터페이스 프로토콜를 묘사한다. 어드레스 핀들(PADR[2:0])은 16비트 데이터 버스(PDATA[15:0])로 맵핑되는 38비트 내부 디버그 레지스터의 필드를 선택한다. 이 필드는 널 선택, 디버그 데이터의 오른쪽 16비트들, 디버그 데이터의 왼쪽 16비트들, 및 4비트 커맨드 레지스터(PDATA[3:0]) 사이로부터 선택된다. 내부 계류 플래그(P)는 4비트 커맨드 레지스터에 대한 기록 동작을 실행할 시 자동으로 설정되고, 종료 플래그(F)가 어서트될 때 클리어된다. 호스트 시스템(111)은 통상적으로 종료 플래그(F)가 어서트되는 순간을 결정하기 위해서 CMDACK 핀을 감시한다. 판독 주기들 동안, PADR은 버스 전환을 참작할 데이터를 판독하기 전에 그리고 판독한 후에 한 클럭 주기동안 00으로 설정된다.
JTAG 명령 레지스터는, 또한 직렬/병렬 디버그 커맨드 레지스터로 불리며, JTAG TAP 제어기(204) 인터페이스에서 여러 개의 내부 레지스터들과 기능들을 나타내기 위하여 4비트 커맨드 필드(cmd[3:0])를 이용한다. 직렬/병렬 디버그 커맨드 레지스터는 JTAG TAP 제어기(204)의 직렬/병렬 디버그 인터페이스에 의해서만 접근할 수 있다. 몇몇 커맨드들은 이용할 수 있는 커맨드들을 확장하기 위해서 디버그 데이터 필드로부터의 비트들을 서브-필드로서 이용한다. 표 3은 이용할 수 있는 맵이다.
커맨드 코드 | 정의 | |
0 | 널(하드웨어가 인식하지 못한, 설정되지 않은 종료 플래그) | |
1 | 소프트 어드레스 레지스터를 로드한다 | |
10 | 일반적인 레지스터 판독 | |
11 | 일반적인 레지스터 기록 | |
100 | 직렬/병렬 디버그 레지스터 판독 | |
101 | 직렬/병렬 디버그 레지스터 기록 | |
110 | 지정된 | |
111 | debug_data[3:0]에 의한 여러 가지 직렬/병렬 디버그 기능들 | |
0 | RESET에 의한 exit(하드 리셋) | |
1 | SRESET에 의한 exit(소프트 리셋) | |
2 | (소프트 어드레스를 파괴할 수도 있는) 명령 단계. 디버그 제어/상태 레지스터 외부 STOPTX 핀의 비트 7은 명령 단계가 완성되는 순간을 결정하기 위해서 감시된다. TF 비트와는 다른, 인터럽트로의 커맨드 단계들 | |
3 | 주변 장치 리셋(CPU는 리셋되지 않는다) | |
4 | 소프트 어드레스에 주어진 변위에서 트레이스 버퍼를 판독한다 | |
5 | EIP에서 명령 탈출 | |
* | 널 | |
1000 | [소프트 어드레스]로의 8비트 메모리 기록 | |
1001 | [소프트 어드레스]로의 16비트 메모리 기록 | |
1010 | [소프트 어드레스]로의 32비트 메모리 기록 | |
1011 | [소프트 어드레스]로의 8비트 출력(I/O 주기) | |
1100 | [소프트 어드레스]로의 16비트 출력[I/O 주기] | |
1101 | [소프트 어드레스]로의 32비트 출력(I/O 주기) | |
1110 | debug_data[3:0]에 의하여 입력 또는 판독 | |
0 | [소프트 어드레스]로부터의 8비트 판독 | |
1 | [소프트 어드레스]로부터의 16비트 판독 | |
2 | [소프트 어드레스]로부터의 32비트 판독 | |
3 | [소프트 어드레스]로부터의 8비트 입력(I/O주기) | |
4 | [소프트 어드레스]로부터의 16비트 입력(I/O주기) | |
5 | [소프트 어드레스]로부터의 32비트 입력(I/O주기) | |
* | 널 | |
1111 | 데이터를 판독/기록/복원한다 |
직렬/병렬 디버그 커맨드 코드 맵
로드 소프트 어드레스 레지스터 커맨드는 소프트 어드레스 포인터를 위한 새로운 32비트 값을 커맨드 코드 및 계류 비트(P)와 함께 debug_data[31:0]에 배치한다. 디버그 논리는 데이터를 소프트 어드레스 레지스터에 전달하여 종료 플래그(F)와 CMDACK 신호를 어서트한다.
메모리 또는 I/O 또는 기록 커맨드는 소프트 어드레스 레지스터에서 어드레스와 포트 지정을 설정하는 커맨드 다음에 생긴다. 판독 커맨드의 경우에, 데이터는 종료 플래그(F)와 CMDACK 핀이 설정될 때 디버그 데이터 레지스터에 직접 전달된다. 기록 커맨드의 경우에, 데이터는 디버그 커맨드 레지스터내의 커맨드와 함께 디버그 데이터 레지스터에 제공된다. 어드레스는 소프트 어드레스를 연속적으로 제공하지 않고도 블록 전달을 허락하기 위해서 어떤 판독/기록 전달을 위해 적절한 크기만큼 나중에 증가된다. 복수의 물리적인 메모리 공간을 갖는 마이크로제어기의 메모리를 액세스하자 마자, 적절한 칩셋 맵핑 레지스터들이 액세스 커맨드 유출에 앞서서 설정된다. 메모리 액세스는 데이터 액세스에 따라 발생한다. 메모리 액세스는 DCSR에서 SMMSP 설정에 기초하는 정상적인 메모리 공간 또는 SMM 공간으로 지시된다.
일반적인 또는 직렬/병렬 디버그 레지스터 판독 커맨드의 유출은 디버그 커맨드 레지스터에서의 커맨드 식별과 함께 디버그 데이터 레지스터에서의 레지스터 어드레스의 지정을 포함한다. 이 어드레스는 부수적인 효과로서 각 비트들의 판독/수정/기록 설정을 간략화하기 위해서 소프트 어드레스 레지스터에 전달되고, 레지스터 내용들은 종료 플래그/CMDACK 핀이 설정될 시 디버그 데이터 레지스터에 직접 전달된다.
일반적인 또는 직렬/병렬 디버그 레지스터 기록 커맨드를 위해서, 소프트 어드레스는 레지스터 어드레스를 홀드하기 위해 이용된다. 소프트 어드레스는 이전 판독 레지스터 또는 로드 소프트 어드레스 커맨드로 제공된다. 기록될 데이터는 커맨드 레지스터에서의 커맨드와 함께 디버그 데이터 레지스터에서 제공된다.
몇몇 실시예에서, 판독/기록 및 저장/복원 데이터 커맨드들은 상태 저장 판독 및 상태 복원 기록을 포함한다. 상태 저장 판독 커맨드을 위해서, 커맨드 코드는 어서트된 계류 비트(P)와 함께 로드된다. 종료 플래그(F)가 설정되거나 또는 CMDACK가 어서트될 때, 저장 상태 데이터가 debug_data[31:0]에 배치된다. 판독될 어떤 저장 상태 데이터도 남아있지 않는 경우, 커맨드 필드(cmd[3:0])가 모든 0들을 반대로 판독한다. 부가적인 저장 상태 데이터가 판독하는데 이용될 수 있는 경우, 커맨드 필드(cmd[3:0])는 모든 1들을 반대로 판독한다. 상태 복원 기록 커맨드가 내려지자 마자, 복원 데이터는 커맨드 코드와 계류 비트(P) 집합을 갖는 debug_data[31:0]내로 로드된다. 종료 플래그(F)와 CMDACK 핀이 설정되고, 커맨드 필드(cmd[3:0])가 모든 1들을 반대로 판독할 시, 프로세서는 다음 복원 트랜잭션을 준비한다. 종료 플래그(F)와 CMDACK 핀이 설정되고 그리고 커맨드 필드(cmd[3:0])가 모든 0들을 반대로 판독할 시, 상태 복원은 완성된다. 저장/복원 커맨드들은 컨텍스트 교환을 이용하지 않는 실시예들에서는 회피될 것이다.
판독 트레이스 기록 커맨드는 내부 명령 트레이스 구성이 선택될 시 256-기록 내부 트레이스 버퍼(200)에 대한 판독 액세스를 실행한다. 판독 트레이스 기록 커맨드는 모든 트레이스 기록 데이터가 생성되자 마자 본드아웃 DEBUG 트레이스 포트에 출력되기 때문에 외부 트레이스 구성에 적용할 수 없다. 판독 트레이스 기록 커맨드는 명령 트레이스 버퍼(200)를 인에이블하기 위해서 명령 트레이스 구성 레지스터(ITCR)의 비트 0을 논리 1로 설정하여 실시된 다음, 내부 트레이스 구성이 ITCR 레지스터의 비트 3을 0으로 설정하여 선택된다.
판독 트레이스 기록 커맨드는 소프트 어드레스 레지스터에 주어진 변위에서 21비트 트레이스 기록을 판독하고, 기록을 디버그 데이터 레지스터의 비트들(20:0)에 배치하며 종료 플래그 및 CMDACK 핀을 어서트한다. 소프트 어드레스 레지스터는 다음 판독이 이력의 역순으로 버퍼의 다음 위치를 검색하도록 나중에 증가된다. 변위(0)로부터의 판독 동작은 가장 최근의 트레이스 기록을 검색한다. 변위(255)로부터의 판독 동작은 버퍼에서 가장 오래된 트레이스 기록을 검색한다. 명령 트레이스 버퍼(200)가 판독될 때, 각 기록 상의 유효 비트가 검사되어야 한다. 기록의 유효 비트가 0일 경우, 최종 초기화된 이후로 버퍼의 256개 위치들 중 하나 이상이 트레이스 기록 데이터와 함께 로드되지 않을 때에만 이벤트가 발생하여, 기록이 버려질것이다. 트레이스 버퍼(200)는 가득 찼을 시 가장 오래된 데이터를 감싸서 계속해서 덮어 쓸 것이다. 일단 버퍼가 감쌀 경우, 모든 유효 비트들이 설정되고, 명령 트레이스 구성 레지스터에서 TINT 비트(비트(2))가 설정될 때에만 클리어된다.
주변 장치 리셋 커맨드는 액티브하게 펄스가 보내지고 방출되도록 리셋 신호를 프로세서 코어(104)를 제외한 모든 시스템 로직에 보낸다. 주변 장치 리셋 커맨드는 프로세서 코어(104)를 재설정할 필요없이 주변장치 로직을 다시 초기화시킨다.
디버그 모드로 들어가거나 또는 빠져나오기 위하여 커맨드는 디버그 기능을 인에이블 및 디스에이블한다. 디버그 기능들은 DEBUG 명령을 JTAG TAP 제어기에 기록하여 인에이블된다. DEBUG 명령이 수신될 때, 디버그 직렬 포트 레지스터는 커맨드를 수신하도록 인에이블된다. 프로세서가 명령들을 실행하는 동안, 디버그 제어/상태 레지스터, 명령 트레이스 구성 레지스터, RX_DATA, 및 TX_DATA 레지스터들만이 직렬 인터페이스를 통해 액세스된다. 모든 직렬 디버그 레지스터들은 프로세서가 정지할 시 액세스할 수 있다. 프로세서는 아래 방법들 중 하나에 의해 정지될 (강제로 디버그 모드로 들어가게 될)것이다.
디버그 제어/상태 레지스터(DCSR)의 비트(1)을 설정
BRTC 핀에 펄스를 내보낸다(로우에서 하이로의 변화)
디버그 제어/상태 레지스터(DCSR)의 비트(4)를 설정한 후에 리거시 프로세서 코어(104) 디버그 레지스터들(DR0-DR3)에 의한 방법. TF 비트 집합을 갖는 단일 스텝핑은 DCSR 비트(4)가 설정될 시 디버그 모드로 들어가게 한다. DR7의 GD 비트를 갖는 디버그 레지스터들로 그리고 디버그 레지스터들로부터의 이동은 DCSR 비트(4)가 설정될 시 디버그 모드로 들어가게 한다.
EDEBUG 명령을 실행. EDEBUG 명령을 코드 스트림에 삽입함으로써 소스 코드의 임의의 특정점에서 디버그 모드로 들어가게 한다. 프로세서 코어(104)가 디버그 모드에서 설정되거나(DEBUG 명령이 TAP 제어기에 기록됐어야 한다) 또는 EDEBUG 명령이 부당한 동작코드를 제외시킨다.
외부 핀(STOPTX) 또는 디버그 제어/상태 레지스터(DSCR)의 비트(7)은 프로세서가 디버그 모드로 들어가는 순간을 결정하기 위해서 선택적으로 감시된다. 디버그 모드로 들어가자 마자 캐시의 플러싱이 DCSR의 DISFLUSH에 의해 제어된다. 비트가 재설정될 시, 캐시는 디버그 모드로 들어가자 마자 (SLE486 FLUSH 핀을 이용하여)플러시된다. 비트가 설정될 시, 캐시는 디버그 모드로 들어가자 마자 플러시되지 않는다. 부분적인 상태 저장이 디버그 모드로 들어가자 마자 이용된다. STOPTX 신호를 수신하자 마자, STOPTX 핀을 샘플링하거나 또는 DCSR 비트(7)을 폴링하여, 호스트 시스템(111)은 디버그 모드로의 가입이 완성되기 전에 커맨드 코드(111b)을 이용하여 일련의 판독을 실행한다. 복원 데이터는 인터페이스가 인에이블되는 경우 병렬 포트 인터페이스로부터 판독되며, 그렇지 않은 경우 복원 데이터는 직렬 포트로부터 판독된다.
디버그 모드는 커맨드(0111)을 통해 벗어나게 된다. 탈출 옵션은 다음을 포함한다.
EIP의 현재 값에서 실행을 탈출 및 시작한다. 한 예에서, 패치 코드로의 프로세서 점프. 중지점은 디버그 모드로 재가입을 인에이블하기 위해서 패치 코드의 끝에서 설정된다. 또 다른 예제에서, 프로세서 상태는 벗어나기 전에 일반적인 레지스터 기록 커맨드들을 이용하여 최초 디버그 가입 상태로 복원된다. 부분적인 상태 복원이 실행이 다시 시작되기 전에 실행된다.
단일 명령 단계를 탈출 및 실행한다. 부분적인 상태 복원이 실행된다. 프로세서는 단일 명령을 실행하고, 트랩을 취하고, 그리고 디버그 모드로 다시 들어가서, 부분적인 상태 저장을 실행한다.
하드 재설정에 의해 탈출한다. 어떤 상태 복원도 실행되지 않는다. 하드 CPU 재설정은 바로 어서트된다.
소프트 재설정에 의해 탈출한다. 상태 복원은 소프트 CPU 재설정이 어서트되기 전에 실행된다.
환경 변환을 이용하는 실시예에서, 디버그 모드로부터 완전히 벗어나기 전에, 프로세서 코어(104)는 하드 재설정을 제외하고 부분적인 상태 복원을 실행하여, 디버그 모드로 들어가자 마자 저장된 데이터를 검색한다. 호스트는 실행이 다시 시작되기 전에 커맨드 코드(111b)를 이용하는 일련의 기록들에 의해 데이터를 제공한다. 호스트는 저장된 데이터를 선택적으로 수정한다. 복원 데이터는 인에이블되는 경우 병렬 포트 인터페이스에 기록되고, 그렇지 않은 경우 복원 데이터는 직렬 포트에 기록된다.
개선된 x86 소프트웨어 디버그 모드는 외부 디버그 하드웨어를 포함하지 않고도 트레이스와 중지점 내부 디버그 함수기능을 프로세서 코어(104)에 제공한다. 이 모드는 DR7 비트(12)를 설정하여 인에이블된다. 직렬 인터페이스는 인에이블될 필요가 없다. x86 개선된 소프트웨어 디버그 모드가 인에이블될 시, 명령 트레이스 버퍼(200) 및 ITCR(명령 트레이스 제어 레지스터)의 액세스와 제어는 지정된 명령 집합을 통해 제공된다. DR7 비트(12)가 설정되지 않을 때에 실행되는 경우 이 명령은 부당한 동작코드를 제외한다.
디버그 제어와 상태는 직렬/병렬 디버그 레지스터 판독/기록 커맨드와 어드레스 (00)을 이용하여 직렬/병렬 디버그 인터페이스를 통해 디버그 제어/상태 레지스터 (DCSR)를 설정하여 구성된다. DCSR 제어와 상태 비트들은 다음과 같이 기술된다.
비트(0)는 직렬/병렬 제어기보다는 목표 시스템(101)상에서 호스트 시스템(111)이 모든 장치들을 완벽하게 재설정하도록 하는 재설정 비트다. FRESET는 전체 목표 시스템 고장이 발생할 경우에 유용하다.
비트(1)는 BRTC 핀의 레지스터 버전이다. 호스트 시스템(111)은 내부 프로세서 클럭을 갖는 수신된 커맨드의 동기화 후의 다음 명령 경계에서 디버그 모드로 강제로 들어가기 위해서 1을 FBRK에 기록한다.
비트(2)(DSPC)는 정지 승낙 상태를 입력할 때 정상적으로 발생하는 내부 프로세서 클럭들의 정지를 디스에이블하기 위한 프로세서 클럭 디스에이블 비트다. DSPC는 정지되는 동안 또는 정지 승낙 상태에서 프로세서가 중단 요청들에 계속해서 응답하게 한다.
비트(3)(PARENB)는 보조 병렬 데이터 포트를 인에이블하는 병렬 포트 인에이블 비트다. PARENB는 목표 시스템(101)의 비본드아웃 버전 상에서 설정되지 않는다.
비트(4)(DBTEN)는 프로세서 코어(104)의 모든 디버그 트랩/고장을 위한 하드웨어 디버그 모드로 들어가게하며, 그렇지 않은 경우에는 소프트웨어(INT 1)를 야기하는 디버그 트랩 인에이블 비트다. ITCR에서 트레이스 모드 온/오프 토글링 제어는 트레이스 모드 온/오프 토글링을 위해 맵핑된 중지점들이 DBTEN 설정에 의해 영향을 받지않으므로 DBTEN에 대한 우선권을 갖는다.
비트(5)(BRKMODE)는 디버그 모드로의 가입을 제어하기 위한 비트다. BRKMODE는 트레이스 포획 동작을 인에이블 및 디스에이블하기 위해 개발자가 BRTC 핀의 기능을 외부 제어로 변경시키게 한다. JTAG TAP 제어기(204)는 DEBUG 명령과 함께 프로그램될 때, BRTC 핀은 프로세서 코어(104)가 명령 시퀀스 실행을 정지시켜 디버그 모드로 들어가게 한다. BRKMODE 핀 설정은 BRTC 핀이 트레이스 포획 동작의 활성화를 제어하게 한다. 트레이스 포획 상태는 ITCR의 TRON 비트에 의해 지시된다.
비트(6)(FRCRDY)는 정의되지 않은 메모리 또는 I/O 공간에 대한 버스 동작이 감산 디코드 대행자 부재시에 발생하는 경우에 프로세서가 다음 버스 주기로 움직이게 하도록 액티브한 프로세서로 RDY 신호의 강제를 제어하는 비트다.
비트(7)(STOP)는 STOPTX 핀의 상태를 검사하기 위한 소프트웨어 기술을 지원하는 정지 비트다. STOP이 다시 하이로 판독될 시, 프로세서는 디버그 모드에 있고 모든 디버그 커맨드들은 인에이블된다.
비트(8)(SMMSP)는 디버그 포트(100)를 통해 초기화된 메모리 액세스가 SMM 공간에서 발생하게 하는 SMM 제어 비트다. SMMSP이 재설정될 때, 디버그 포트(100)에 의하여 초기화된 메모리 액세스는 정상적인 메모리 어드레스 공간에 적용된다. SMMSP 설정은 디버프 포트(100)에 의하여 초기화된 메모리 액세스를 SMM 어드레스 공간에 적용하게 한다.
비트(9)(DISFLUSH)는 디버그 모드에 들어가자 마자 캐시의 플러싱을 제어하기 위한 제어 비트다. DISFLUSH를 사용하여 캐시는 디버그 모드로 들어가자 마자 플러시된다. SISFLUSH를 설정함으로써 캐시가 디버그 모드로 들어가자 마자 플러시하지 못하게 한다.
비트(10)(RX)는 프로세서 코어(104)가 RX_DATA 레지스터로부터 데이터를 판독할 수 있도록 데이터가 호스트 시스템(111)으로부터 수신됐는지를 나타내는 데이터 수신 비트다.
비트(11)(TX)는 호스트 시스템(111)이 TX_DATA 레지스터로부터 데이터를 판독할 수 있도록 프로세서 코어(104)가 데이터 전송 준비를 하고있는 것을 나타내는 데이터 전송 비트다.
운용체제(OS)와 JTAG 디버그 포트(100)에 의한 애플리케이션들간의 통신은 DEBUG 명령을 JTAG TAP 제어기(204)의 JTAG 명령 레지스터에 기록하는 호스트 시스템(111)에 의해 시작된다. DEBUG 명령의 기록은 직렬 디버그 시프터(212)를 JTAG TAP 제어기(204)의 JTAG TDI-TD0에 접속한다. 직렬 디버그 포트(100)는 데이터를 전송(TX_DATA 레지스터) 및 수신(RX_DATA 레지스터)하기 위한 2개의 디버그 레지스터들을 포함한다. TX_DATA와 RX_DATA는 소프트 어드레스와 직렬/병렬 디버그 레지스터 커맨드들을 이용하여 액세스된다.
프로세서 코어(104)는 ITCR 레지스터에서 최초에 읽기 전용 TX 비트를 시험하여 데이터 전송을 시작한다. TX 비트가 0으로 설정되는 경우, 프로세서 코어(104)는 데이터를 TX_DATA 레지스터에 전달하기 위해서 x86 명령을 실행한다. 직렬 포트(100)는 데이터 전송 준비가 된 호스트 시스템(111)을 나타내는 DCSR과 ITCR 레지스터들에서 TX 비트를 설정한다. 직렬 포트(100)는 또한 STOPTX 핀을 하이로 설정한다. 호스트 시스템(111)이 TX_DATA 레지스터들로부터 전송 데이터 판독을 완성한 후, TX 비트는 0으로 설정된다. ITCR 레지스터에서 TXINTEN 비트은, 설정될 때, 프로세서 코어(104)를 인터럽트하도록 신호를 발생시킨다. 인터럽트는 ITCR에서 TX 비트가 0으로 변할 때에만 생성된다. TXINTEN 비트가 설정되지 않을 때, 프로세서 코어(104)는 데이터를 더 전송하기 위하여 ITCR 레지스터의 TX 비트를 폴한다.
호스트 시스템(111)은 DCSR 레지스터에서 읽기 전용 RX 비트를 최초에 시험하여 데이터를 프로세서 코어(104)에 전달한다. RX 비트가 0으로 설정되는 경우, 호스트 시스템(111)은 데이터를 수신 데이터(RX_DATA) 레지스터에 기록하고 직렬 포트(100)는 DCSR과 ITCR에서 RX 비트를 1로 설정한다. ITCR에서 RXINTEN 비트는, 설정될 때, 프로세서 코어(104)를 인터럽트하도록 신호를 발생시킨다. 인터럽트는 DCSR에서 RX 비트가 1로 변할 때에만 생성된다. RXINTEN 비트가 설정되지 않을 시, 프로세서 코어(104)는 ITCR 레지스터의 RX 비트를 폴한다. RX 비트가 1로 설정되는 경우, 프로세서 코어(104)는 수신 데이터(RX_DATA) 레지스터로부터 데이터를 판독하기 위해서 x86 명령을 실행한다. 데이터가 RX_DATA 레지스터로부터 프로세서 코어(104)에 의해 판독된 후에, RX 비트는 직렬 포트(100)에 의해 0으로 설정된다. 호스트 시스템(111)은 연속적으로 DCSR 레지스터를 판독하여 데이터를 계속해서 전달하기 위해서 RX 비트를 감시한다.
본 발명이 다양한 실시예들을 참조하여 설명되기는 하였지만, 이 실시예들은 예시적인 것이며 본 발명의 영역은 이들에 한정되지 않는다. 설명된 실시예들의 다양한 변형, 수정, 부가 및 개선이 가능하다. 예를 들어, 당업자들은 본 원에서 기술된 구조들과 방법들을 제공하는데 필요한 단계들을 쉽게 실행할 수 있을 것이며, 공정 파라미터들, 물질들, 및 치수들은 단지 예로서 주어진 것이고, 본 발명의 범위내에서의 변경 뿐 아니라 바람직한 구조를 이루기 위하여 변형될 수 있음은 자명하다. 하기의 청구 범위에서 설명되는 본 발명의 범위 및 원리를 벗어나지 않으면서, 본 원에서 개시된 실시예들의 변형들 및 수정들이 본 원에서 설명된 상세한 설명을 바탕으로 하여 이루어질 수도 있다.
Claims (15)
- 호스트 컴퓨터에 디버그 인터페이싱을 위한 목표 프로세서용 디버그 인터페이스로서,상기 목표 프로세서에 결합되어 이 목표 프로세서로부터 트레이스 정보를 수신하며, 선택된 트레이스 정보를 검출하여 선택된 트레이스 정보의 샘플들을 포맷하는 트레이스 컨트롤러와; 그리고상기 트레이스 컨트롤러에 결합되어, 트레이스 정보의 유형을 표시하는 트레이스 코드 (TCODE)와 트레이스 정보 데이타의 유형을 표시하는 트레이스 데이타 (TDATA)를 포함하는 복수의 트레이스 데이타 저장 소자들을 포함하는 트레이스 버퍼를 구비하는 디버그 인터페이스.
- 제 1 항에 있어서,상기 트레이스 버퍼의 상기 트레이스 데이타 저장 소자들이 상기 트레이스 저장 소자가 유효 트레이스 레코드를 특정화하는지 여부를 표시하는 검증 비트를 더 포함하는 디버그 인터페이스.
- 제 1 항에 있어서,트레이스 코드 (TCODE)가 목표 데이타가 일부 트레이스 레코드를 보고하는것을 누락했는지를 표시하는 트레이스 정보의 누락된 트레이스 유형을 표시하는 디버그 인터페이스.
- 제 1 항에 있어서,트레이스 코드 (TCODE)가 조건적인 분기 명령의 발생을 표시하는 트레이스 정보르의 조건적인 분기 유형을 표시하고; 그리고상기 조건적인 분기 (TCODE)에 대응하는 트레이스 데이타 (TDATA)가 선택 분기 및 비선택 분기를 표시하는 복수의 비트를 표시하는 디버그 인터페이스.
- 제 4 항에 있어서,조건적인 분기(TCODE)에 대응하는 트레이스 데이타 (TDATA)가 최좌측 비트 세트 및 각 세트를 제외하고 초기에 클리어 되거나 또는 새로운 조건적인 분기가 마주칠때 새로운 비트가 좌측에 추가되고 그리고 다른 엔트리들이 한 비트씩 우측으로 시프트되는 최고 15개의 조건적인 브렌치의 출력을 표시하도록 클리어되는 복수의 비트를 표시하는 디버그 인터페이스.
- 제 1 항에 있어서,트레이스 코드 (TCODE)가 데이타 종속 분기 명령의 목표 어드레스를 표시하는 트레이스 정보의 분기 목표 유형을 표시하고; 그리고조건적인 분기 TCODE에 대응하는 트레이스 데이타 (TDATA)가 데이타 종속 분기 명령의 확장 명령 포인터를 표시하는 값을 나타내는 디버그 인터페이스.
- 제 1 항에 있어서,트레이스 코드 (TCODE)가 이전의 코드 세그먼트의 세그먼트 베이스 어드레스를 표시하는 트레이스 정보의 이전 세그먼트 베이스 유형을 표시하고; 그리고이전의 세그먼트 베이스 TCODE에 대응하는 트레이스 데이타 (TDATA)가 세그먼트 베이스 어드레스 및 현재의 코드 세그먼트의 세그먼트 특성을 표시하며, 상기 세그먼트 특성은 페이징, 피연산자 크기 및 어드레싱 모드에 대한 상태를 보고하는 디버그 인터페이스.
- 제 1 항에 있어서,트레이스 코드 (TCODE)가 현재의 코드 세그먼트의 세그먼트 베이스 어드레스를 표시하는 트레이스 정보의 현재 세그먼트 베이스 유형을 표시하고; 그리고이전의 세그먼트 베이스 TCODE에 대응하는 트레이스 데이타 (TDATA)가 세그먼트 베이스 어드레스 및 현재의 코드 세그먼트의 세그먼트 특성을 표시하며, 상기 세그먼트 특성은 페이징, 피연산자 크기 및 어드레싱 모드에 대한 상태를 보고하는 디버그 인터페이스.
- 제 1 항에 있어서,트레이스 코드 (TCODE)가 인터럽트 또는 트랩과 같은 동기 이벤트 또는 비동기 이벤트를 표시하는 트레이스 정보의 인터럽트 유형을 표시하고; 그리고인터럽트 TCODE에 대응하는 트레이스 데이타 (TDATA)가 예외 또는 인터럽트의 벡터 수를 표시하는 디버그 인터페이스.
- 제 1 항에 있어서,트레이스 코드 (TCODE)가 현재 실행된 명령을 표시하는 트레이스 정보의 트레이스 동기화 유형을 표시하고; 그리고트레이스 동기화 TCODE에 대응하는 트레이스 데이타 (TDATA)가 현재 실행된 명령이 어드레스를 표시하는 디버그 인터페이스.
- 제 1 항에 있어서,트레이스 코드 (TCODE)가 추가의 트레이스 데이타 저장 소자들에 확장되는 트레이스 데이타를 표시하는 트레이스 정보의 다중 트레이스 엔트리 유형을 표시하고; 그리고다중 트레이스 엔트리 TCODE에 대응하는 트레이스 데이타 (TDATA)가 트레이스 엔트리의 추가적인 레코드를 표시하는 디버그 인터페이스.
- 제 1 항에 있어서,트레이스 코드 (TCODE)가 정지 트레이스 캡춰의 방향을 표시하는 트레이스 정보의 트레이스 정지 유형을 표시하고; 그리고트레이스 정지 TCODE에 대응하는 트레이스 데이타 (TDATA)가 트레이스 캡춰가 정지되는 명령 어드레스를 표시하는 디버그 인터페이스.
- 제 1 항에 있어서,직/병렬 인터페이스가 상기 트레이스 컨트롤러에 결합되고, 상기 트레이스 컨트롤러가 트레이스 코드 (TCODE) 및 트레이스 데이타 (TDATA)를 상기 호스트 컴퓨터에 직렬 또는 병렬로 선택적으로 전송하는 디버그 인터페이스.
- 집적회로 칩과;상기 집적회로 칩상에 형성된 프로세서와;상기 프로세서에 결합된 입/출력 인터페이스와; 그리고상기 프로세서에 결합된 집적회로 칩상에 형성되고, 상기 입/출력 인터페이스에 결합되며, 호스트 컴퓨터로의 디버그 인터페이싱을 위한 디버그 인터페이스를 구비하며,상기 디버그 인터페이스가상기 목표 프로세서에 결합되고 상기 목표 프로세서로 부터 정보를 수신하는 트레이스 컨트롤러를 포함하고, 여기서 상기 트레이스 컨트롤러는 선택된 트레이스 정보를 검출하고 그리고 선택된 트레이스 정보의 샘플을 포맷하며; 그리고상기 트레이스 컨트롤러에 결합되는 트레이스 버퍼를 포함하며, 상기 트레이스 버퍼가 트레이스 정보의 유형을 표시하는 트레이스 코드 (TCODE)와 트레이스 정보 데이타의 유형을 표시하는 트레이스 데이타 (TDATA)를 포함하는 복수의 트레이스 데이타 저장소자들을 포함하는 프로세서.
- 제 14 항에 있어서,상기 트레이스 버퍼의 상기 트레이스 데이타 저장 소자들이 상기 트레이스 데이타 저장 소자가 유효 트레이스 레코드를 특정화하는지를 표시하는 검증 비트를 더 포함하는 프로세서.
Applications Claiming Priority (5)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US4307097P | 1997-04-08 | 1997-04-08 | |
US60/043,070 | 1997-04-08 | ||
US08/992,361 | 1997-12-17 | ||
US08/992,361 US6094729A (en) | 1997-04-08 | 1997-12-17 | Debug interface including a compact trace record storage |
PCT/US1998/006827 WO1998045782A1 (en) | 1997-04-08 | 1998-04-07 | Debug interface including a compact trace record storage |
Publications (2)
Publication Number | Publication Date |
---|---|
KR20010006193A true KR20010006193A (ko) | 2001-01-26 |
KR100517679B1 KR100517679B1 (ko) | 2005-09-29 |
Family
ID=26720005
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR10-1999-7009273A KR100517679B1 (ko) | 1997-04-08 | 1998-04-07 | 컴팩트한 트레이스 기록 기억장치를 포함하는 디버그 인터페이스 |
Country Status (6)
Country | Link |
---|---|
US (1) | US6094729A (ko) |
EP (1) | EP0974093B1 (ko) |
JP (1) | JP2001519947A (ko) |
KR (1) | KR100517679B1 (ko) |
DE (1) | DE69801220T2 (ko) |
WO (1) | WO1998045782A1 (ko) |
Families Citing this family (175)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP3542463B2 (ja) * | 1997-07-29 | 2004-07-14 | Necエレクトロニクス株式会社 | 集積回路装置、その動作制御方法 |
DE69908682T2 (de) * | 1998-03-20 | 2004-05-13 | Texas Instruments Inc., Dallas | Prozessor mit Echtzeit-Ablaufsteuerung zur Fehlerbeseitigung ohne Fehlerbeseitigungsmonitor |
US6687865B1 (en) * | 1998-03-25 | 2004-02-03 | On-Chip Technologies, Inc. | On-chip service processor for test and debug of integrated circuits |
US6295613B1 (en) * | 1998-04-28 | 2001-09-25 | International Business Machines Corporation | Debug watch mechanism and method for debugging a computer program |
US6182208B1 (en) * | 1998-08-14 | 2001-01-30 | Lucent Technologies, Inc. | System for debugging (N) break points by dividing a computer program to (n+1) regions each contains no break point and using two registers to define the start and end addresses of each region |
US6173395B1 (en) * | 1998-08-17 | 2001-01-09 | Advanced Micro Devices, Inc. | Mechanism to determine actual code execution flow in a computer |
US6247146B1 (en) | 1998-08-17 | 2001-06-12 | Advanced Micro Devices, Inc. | Method for verifying branch trace history buffer information |
US6243836B1 (en) * | 1998-08-17 | 2001-06-05 | Lucent Technologies, Inc. | Apparatus and method for circular buffering on an on-chip discontinuity trace |
US6317847B1 (en) * | 1998-08-31 | 2001-11-13 | Advanced Micro Devices, Inc. | Software read and write tracing using hardware elements |
US6332117B1 (en) * | 1998-10-22 | 2001-12-18 | International Business Machines Corporation | General event stamping scheme |
US6738778B1 (en) * | 1998-12-11 | 2004-05-18 | International Business Machines Corporation | Method and apparatus for monitoring the execution of a program |
CN1227574C (zh) * | 1999-03-30 | 2005-11-16 | 西门子能量及自动化公司 | 可编程逻辑控制器方法,系统和设备 |
US6606671B1 (en) * | 1999-04-19 | 2003-08-12 | Unisys Corporation | Method for analyzing input/output operations of a data processing system |
US6370660B1 (en) * | 1999-04-21 | 2002-04-09 | Advanced Micro Devices, Inc. | Apparatus and method for providing a wait for status change capability for a host computer system |
DE19941099A1 (de) * | 1999-08-30 | 2001-03-29 | Infineon Technologies Ag | Programmgesteuerte Einheit und Verfahren zum Erkennen und/oder Analysieren von Fehlern in programmgesteuerten Einheiten |
JP3767276B2 (ja) * | 1999-09-30 | 2006-04-19 | 富士通株式会社 | システムコール情報の記録方法および記録装置 |
US6665816B1 (en) | 1999-10-01 | 2003-12-16 | Stmicroelectronics Limited | Data shift register |
US6615370B1 (en) * | 1999-10-01 | 2003-09-02 | Hitachi, Ltd. | Circuit for storing trace information |
US6918065B1 (en) | 1999-10-01 | 2005-07-12 | Hitachi, Ltd. | Method for compressing and decompressing trace information |
US6684348B1 (en) * | 1999-10-01 | 2004-01-27 | Hitachi, Ltd. | Circuit for processing trace information |
US6732307B1 (en) | 1999-10-01 | 2004-05-04 | Hitachi, Ltd. | Apparatus and method for storing trace information |
JP4190114B2 (ja) * | 1999-11-10 | 2008-12-03 | 株式会社ルネサステクノロジ | マイクロコンピュータ |
JP2001147837A (ja) * | 1999-11-18 | 2001-05-29 | Fujitsu Ltd | プログラムトレース装置及び記憶媒体 |
US6931572B1 (en) * | 1999-11-30 | 2005-08-16 | Synplicity, Inc. | Design instrumentation circuitry |
US7240303B1 (en) | 1999-11-30 | 2007-07-03 | Synplicity, Inc. | Hardware/software co-debugging in a hardware description language |
US7076767B1 (en) * | 1999-12-30 | 2006-07-11 | Unisys Corporation | Method for controlling and collecting information in a data processing system |
US7409318B2 (en) | 2000-02-14 | 2008-08-05 | Nextnine Ltd. | Support network |
US7076400B2 (en) * | 2000-02-14 | 2006-07-11 | Nextnine Ltd. | Support network |
US7149883B1 (en) | 2000-03-30 | 2006-12-12 | Intel Corporation | Method and apparatus selectively to advance a write pointer for a queue based on the indicated validity or invalidity of an instruction stored within the queue |
WO2001080012A2 (en) | 2000-04-11 | 2001-10-25 | Analog Devices, Inc. | Non-intrusive application code profiling method and apparatus |
US6694427B1 (en) * | 2000-04-20 | 2004-02-17 | International Business Machines Corporation | Method system and apparatus for instruction tracing with out of order processors |
US6665819B1 (en) * | 2000-04-24 | 2003-12-16 | Microsoft Corporation | Data capture and analysis for embedded systems |
US6658600B1 (en) * | 2000-04-24 | 2003-12-02 | Microsoft Corporation | Target control abstraction for debugging embedded systems |
US7155570B1 (en) * | 2000-09-29 | 2006-12-26 | Intel Corporation | FIFO write/LIFO read trace buffer with software and hardware loop compression |
US6484273B1 (en) * | 2000-11-29 | 2002-11-19 | Lsi Logic Corporation | Integrated EJTAG external bus interface |
US6556936B2 (en) * | 2000-12-27 | 2003-04-29 | International Business Machines Corporation | Method and apparatus for correlating trace data from asynchronous emulation machines |
JP2002202900A (ja) * | 2000-12-28 | 2002-07-19 | Seiko Epson Corp | デバッグ装置 |
US7237090B1 (en) | 2000-12-29 | 2007-06-26 | Mips Technologies, Inc. | Configurable out-of-order data transfer in a coprocessor interface |
US7287147B1 (en) * | 2000-12-29 | 2007-10-23 | Mips Technologies, Inc. | Configurable co-processor interface |
DE10100344A1 (de) * | 2001-01-05 | 2002-07-25 | Infineon Technologies Ag | Integrierte Schaltung und Verfahren zum Herstellen einer integrierten Schaltung |
US6829727B1 (en) * | 2001-01-12 | 2004-12-07 | Metalink Corp. | In-circuit emulation of single chip microcontrollers |
US20020133794A1 (en) * | 2001-02-24 | 2002-09-19 | Ruban Kanapathippillai | Method and apparatus for integrated circuit debugging |
US6760867B2 (en) * | 2001-03-08 | 2004-07-06 | International Business Machines Corporation | Guaranteed method and apparatus for capture of debug data |
US6961875B2 (en) * | 2001-03-22 | 2005-11-01 | International Business Machines Corporation | Method and apparatus for capturing event traces for debug and analysis |
DE10119265A1 (de) * | 2001-04-20 | 2002-10-31 | Infineon Technologies Ag | Programmgesteuerte Einheit |
US7181728B1 (en) | 2001-04-30 | 2007-02-20 | Mips Technologies, Inc. | User controlled trace records |
US7185234B1 (en) | 2001-04-30 | 2007-02-27 | Mips Technologies, Inc. | Trace control from hardware and software |
US7178133B1 (en) | 2001-04-30 | 2007-02-13 | Mips Technologies, Inc. | Trace control based on a characteristic of a processor's operating state |
US7134116B1 (en) | 2001-04-30 | 2006-11-07 | Mips Technologies, Inc. | External trace synchronization via periodic sampling |
US7124072B1 (en) | 2001-04-30 | 2006-10-17 | Mips Technologies, Inc. | Program counter and data tracing from a multi-issue processor |
US7069544B1 (en) * | 2001-04-30 | 2006-06-27 | Mips Technologies, Inc. | Dynamic selection of a compression algorithm for trace data |
US7065675B1 (en) | 2001-05-08 | 2006-06-20 | Mips Technologies, Inc. | System and method for speeding up EJTAG block data transfers |
US6802031B2 (en) * | 2001-05-24 | 2004-10-05 | International Business Machines Corporation | Method and apparatus for increasing the effectiveness of system debug and analysis |
US6895575B2 (en) | 2001-06-20 | 2005-05-17 | Sap Ag | Generic Java rule engine framework |
US7043668B1 (en) | 2001-06-29 | 2006-05-09 | Mips Technologies, Inc. | Optimized external trace formats |
US7231551B1 (en) | 2001-06-29 | 2007-06-12 | Mips Technologies, Inc. | Distributed tap controller |
DE10132313A1 (de) * | 2001-07-06 | 2003-01-23 | Infineon Technologies Ag | Programmgesteuerte Einheit |
US7020600B2 (en) * | 2001-09-07 | 2006-03-28 | Texas Instruments Incorporated | Apparatus and method for improvement of communication between an emulator unit and a host device |
EP1302857A3 (en) * | 2001-10-09 | 2004-04-21 | Texas Instruments Incorporated | Apparatus and method for an on-board trace recorder unit |
US6931492B2 (en) * | 2001-11-02 | 2005-08-16 | International Business Machines Corporation | Method for using a portion of the system cache as a trace array |
US7350110B2 (en) * | 2002-01-14 | 2008-03-25 | International Business Machines Corporation | Method and system using hardware assistance for continuance of trap mode during or after interruption sequences |
US7313734B2 (en) * | 2002-01-14 | 2007-12-25 | International Business Machines Corporation | Method and system for instruction tracing with enhanced interrupt avoidance |
US6615371B2 (en) | 2002-03-11 | 2003-09-02 | American Arium | Trace reporting method and system |
US7827510B1 (en) | 2002-06-07 | 2010-11-02 | Synopsys, Inc. | Enhanced hardware debugging with embedded FPGAS in a hardware description language |
US7024663B2 (en) * | 2002-07-10 | 2006-04-04 | Micron Technology, Inc. | Method and system for generating object code to facilitate predictive memory retrieval |
US6954836B2 (en) | 2002-07-11 | 2005-10-11 | Micron Technology, Inc. | System and method for processor with predictive memory retrieval assist |
US7698689B2 (en) * | 2002-08-13 | 2010-04-13 | Phoenix Technologies Ltd. | Method for meeting SMI duration limits by time slicing SMI handlers |
WO2004036428A1 (fr) * | 2002-10-15 | 2004-04-29 | Stmicroelectronics S.A. | Transmission de messages numeriques de repetition entre un circuit de surveillance de microprocesseur et un outil d'analyse |
US20040117690A1 (en) * | 2002-12-13 | 2004-06-17 | Andersson Anders J. | Method and apparatus for using a hardware disk controller for storing processor execution trace information on a storage device |
US7099963B2 (en) * | 2003-03-10 | 2006-08-29 | Qlogic Corporation | Method and system for monitoring embedded disk controller components |
US7565576B2 (en) | 2003-04-17 | 2009-07-21 | Seagate Technology Llc | Method and apparatus for obtaining trace data of a high speed embedded processor |
US7065691B2 (en) * | 2003-05-19 | 2006-06-20 | Hewlett-Packard Development Company, L.P. | Apparatus and method for saving precise system state following exceptions |
US7159101B1 (en) | 2003-05-28 | 2007-01-02 | Mips Technologies, Inc. | System and method to trace high performance multi-issue processors |
US20040267489A1 (en) * | 2003-06-24 | 2004-12-30 | Frederic Reblewski | Data compaction and pin assignment |
JP2005070949A (ja) * | 2003-08-21 | 2005-03-17 | Sanyo Electric Co Ltd | プログラム処理装置 |
US7571216B1 (en) * | 2003-10-02 | 2009-08-04 | Cisco Technology, Inc. | Network device/CPU interface scheme |
US7290174B1 (en) * | 2003-12-03 | 2007-10-30 | Altera Corporation | Methods and apparatus for generating test instruction sequences |
US7418701B2 (en) * | 2004-03-12 | 2008-08-26 | Fuji Xerox Co., Ltd. | Network device and setup method thereof |
US20050223364A1 (en) * | 2004-03-30 | 2005-10-06 | Peri Ramesh V | Method and apparatus to compact trace in a trace buffer |
JP4336251B2 (ja) * | 2004-06-01 | 2009-09-30 | インターナショナル・ビジネス・マシーンズ・コーポレーション | トレーサビリティシステム、トレース情報管理方法、トレース情報管理プログラム、及び記録媒体 |
US9038070B2 (en) * | 2004-09-14 | 2015-05-19 | Synopsys, Inc. | Debug in a multicore architecture |
US20060129999A1 (en) * | 2004-11-16 | 2006-06-15 | Sony Computer Entertainment Inc. | Methods and apparatus for using bookmarks in a trace buffer |
US7684447B2 (en) * | 2004-12-23 | 2010-03-23 | Agilent Technologies, Inc. | Sequencer and method for sequencing |
US7395454B1 (en) | 2005-01-04 | 2008-07-01 | Marvell Israel (Misl) Ltd. | Integrated circuit with integrated debugging mechanism for standard interface |
FR2881309B1 (fr) * | 2005-01-21 | 2007-03-23 | Meiosys Soc Par Actions Simpli | Procede d'optimisation de la transmission de donnees de journalisation en environnement multi-ordinateurs et systeme mettant en oeuvre ce procede |
US20060174155A1 (en) * | 2005-02-03 | 2006-08-03 | Arm Limited | System, method and computer program product for testing software |
FR2882832A1 (fr) * | 2005-03-04 | 2006-09-08 | St Microelectronics Sa | Dispositif de generation de suivi de branchement pour microprocesseur et microprocesseur dote d'un tel dispositif |
JP2006259869A (ja) * | 2005-03-15 | 2006-09-28 | Fujitsu Ltd | マルチプロセッサシステム |
US8205186B1 (en) | 2005-04-11 | 2012-06-19 | Synopsys, Inc. | Incremental modification of instrumentation logic |
WO2006110069A1 (en) * | 2005-04-13 | 2006-10-19 | Telefonaktiebolaget Lm Ericsson (Publ) | Data value coherence in computer systems |
US7536597B2 (en) * | 2005-04-27 | 2009-05-19 | Texas Instruments Incorporated | Apparatus and method for controlling power, clock, and reset during test and debug procedures for a plurality of processor/cores |
US7558984B2 (en) | 2005-04-27 | 2009-07-07 | Texas Instruments Incorporated | Apparatus and method for test and debug of a processor/core having advanced power management |
US7676698B2 (en) * | 2005-04-27 | 2010-03-09 | Texas Instruments Incorporated | Apparatus and method for coupling a plurality of test access ports to external test and debug facility |
US8694970B2 (en) | 2005-06-02 | 2014-04-08 | Seagate Technology Llc | Unified debug system with multiple user-configurable trace volumes and trace buffers |
US7917914B2 (en) * | 2005-06-09 | 2011-03-29 | Whirlpool Corporation | Event notification system for an appliance |
US20070162158A1 (en) * | 2005-06-09 | 2007-07-12 | Whirlpool Corporation | Software architecture system and method for operating an appliance utilizing configurable notification messages |
US7921429B2 (en) * | 2005-06-09 | 2011-04-05 | Whirlpool Corporation | Data acquisition method with event notification for an appliance |
EP2247067B1 (en) * | 2005-06-09 | 2016-05-11 | Whirlpool Corporation | Appliance with embedded virtual router |
US20080137670A1 (en) * | 2005-06-09 | 2008-06-12 | Whirlpool Corporation | Network System with Message Binding for Appliances |
US20070094001A1 (en) * | 2005-06-28 | 2007-04-26 | Intel Corporation | Method and system for non-intrusive code coverage |
US20070150866A1 (en) * | 2005-12-22 | 2007-06-28 | International Business Machines Corporation | Displaying parameters associated with call statements |
US20070162475A1 (en) * | 2005-12-30 | 2007-07-12 | Intel Corporation | Method and apparatus for hardware-based dynamic escape detection in managed run-time environments |
US20070220361A1 (en) * | 2006-02-03 | 2007-09-20 | International Business Machines Corporation | Method and apparatus for guaranteeing memory bandwidth for trace data |
DE502006006706D1 (de) * | 2006-06-20 | 2010-05-27 | Siemens Ag | Verfahren zur Überwachung eines zyklischen Steuerungsprogramms |
US7617421B2 (en) * | 2006-07-27 | 2009-11-10 | Sun Microsystems, Inc. | Method and apparatus for reporting failure conditions during transactional execution |
US7565492B2 (en) * | 2006-08-31 | 2009-07-21 | Intel Corporation | Method and apparatus for preventing software side channel attacks |
US20080114971A1 (en) * | 2006-11-14 | 2008-05-15 | Fontenot Nathan D | Branch history table for debug |
US8341604B2 (en) * | 2006-11-15 | 2012-12-25 | Qualcomm Incorporated | Embedded trace macrocell for enhanced digital signal processor debugging operations |
US8533530B2 (en) | 2006-11-15 | 2013-09-10 | Qualcomm Incorporated | Method and system for trusted/untrusted digital signal processor debugging operations |
US8370806B2 (en) | 2006-11-15 | 2013-02-05 | Qualcomm Incorporated | Non-intrusive, thread-selective, debugging method and system for a multi-thread digital signal processor |
US8380966B2 (en) | 2006-11-15 | 2013-02-19 | Qualcomm Incorporated | Method and system for instruction stuffing operations during non-intrusive digital signal processor debugging |
US7610448B2 (en) * | 2006-12-27 | 2009-10-27 | Intel Corporation | Obscuring memory access patterns |
US7707459B2 (en) | 2007-03-08 | 2010-04-27 | Whirlpool Corporation | Embedded systems debugging |
US8484516B2 (en) | 2007-04-11 | 2013-07-09 | Qualcomm Incorporated | Inter-thread trace alignment method and system for a multi-threaded processor |
JP2008306549A (ja) * | 2007-06-08 | 2008-12-18 | Canon Inc | 無線制御局、及び無線端末局の制御方法、当該制御方法をコンピュータに実行させるためのコンピュータプログラム |
JP2009059005A (ja) * | 2007-08-29 | 2009-03-19 | Panasonic Corp | デバッグシステム、デバッグ装置および方法 |
US7836283B2 (en) * | 2007-08-31 | 2010-11-16 | Freescale Semiconductor, Inc. | Data acquisition messaging using special purpose registers |
US7865776B2 (en) | 2007-10-25 | 2011-01-04 | International Business Machines Corporation | Adaptive prevention of data loss during continuous event tracing with limited buffer size |
US7940762B2 (en) * | 2008-03-19 | 2011-05-10 | Integrated Device Technology, Inc. | Content driven packet switch |
GB2459652B (en) * | 2008-04-28 | 2010-09-22 | Imagination Tech Ltd | Controlling instruction scheduling based on the space in a trace buffer |
US8762661B2 (en) * | 2008-09-18 | 2014-06-24 | Seagate Technology Llc | System and method of managing metadata |
US8359584B2 (en) * | 2009-12-18 | 2013-01-22 | Microsoft Corporation | Debugging from a call graph |
US8762779B2 (en) * | 2010-01-22 | 2014-06-24 | Via Technologies, Inc. | Multi-core processor with external instruction execution rate heartbeat |
GB2481385B (en) * | 2010-06-21 | 2018-08-15 | Advanced Risc Mach Ltd | Tracing speculatively executed instructions |
CN103097902B (zh) * | 2010-07-29 | 2015-12-09 | 德克萨斯仪器股份有限公司 | 改进全速测试访问端口操作 |
WO2012016151A2 (en) * | 2010-07-29 | 2012-02-02 | Texas Instruments Incorporated | Improving at-speed test access port operations |
US8694844B2 (en) | 2010-07-29 | 2014-04-08 | Texas Instruments Incorporated | AT speed TAP with dual port router and command circuit |
US8561033B2 (en) * | 2010-07-30 | 2013-10-15 | International Business Machines Corporation | Selective branch-triggered trace generation apparatus and method |
JP5310819B2 (ja) | 2010-11-29 | 2013-10-09 | 株式会社デンソー | マイクロコンピュータ |
GB2487355B (en) | 2011-01-13 | 2020-03-25 | Advanced Risc Mach Ltd | Processing apparatus, trace unit and diagnostic apparatus |
JP5252014B2 (ja) * | 2011-03-15 | 2013-07-31 | オムロン株式会社 | 制御装置、制御システム、ツール装置および収集指示プログラム |
US8589342B2 (en) | 2011-09-16 | 2013-11-19 | International Business Machines Corporation | Log message optimization to ignore or identify redundant log messages |
US9158660B2 (en) | 2012-03-16 | 2015-10-13 | International Business Machines Corporation | Controlling operation of a run-time instrumentation facility |
US9430238B2 (en) | 2012-03-16 | 2016-08-30 | International Business Machines Corporation | Run-time-instrumentation controls emit instruction |
US9367316B2 (en) | 2012-03-16 | 2016-06-14 | International Business Machines Corporation | Run-time instrumentation indirect sampling by instruction operation code |
US9471315B2 (en) | 2012-03-16 | 2016-10-18 | International Business Machines Corporation | Run-time instrumentation reporting |
US9454462B2 (en) | 2012-03-16 | 2016-09-27 | International Business Machines Corporation | Run-time instrumentation monitoring for processor characteristic changes |
US9442824B2 (en) | 2012-03-16 | 2016-09-13 | International Business Machines Corporation | Transformation of a program-event-recording event into a run-time instrumentation event |
US9411591B2 (en) | 2012-03-16 | 2016-08-09 | International Business Machines Corporation | Run-time instrumentation sampling in transactional-execution mode |
US9483268B2 (en) * | 2012-03-16 | 2016-11-01 | International Business Machines Corporation | Hardware based run-time instrumentation facility for managed run-times |
US9465716B2 (en) | 2012-03-16 | 2016-10-11 | International Business Machines Corporation | Run-time instrumentation directed sampling |
US9280447B2 (en) | 2012-03-16 | 2016-03-08 | International Business Machines Corporation | Modifying run-time-instrumentation controls from a lesser-privileged state |
US9405541B2 (en) | 2012-03-16 | 2016-08-02 | International Business Machines Corporation | Run-time instrumentation indirect sampling by address |
EP2845102A4 (en) * | 2012-03-25 | 2016-02-10 | Intel Corp | ASYNCHRONE PROGRAMMABLE JTAG-BASED INTERFACE TO DEBUGGING SYSTEM-ON-CHIP STATES, POWER MODES, RESETS, TACKS AND COMPLEX DIGITAL LOGIC |
US9377507B2 (en) * | 2012-05-07 | 2016-06-28 | Microchip Technology Incorporated | Processor device with instruction trace capabilities |
US9069896B2 (en) | 2012-08-29 | 2015-06-30 | Freescale Semiconductor, Inc. | Data processor device for handling a watchpoint and method thereof |
US9047400B2 (en) | 2012-08-29 | 2015-06-02 | Freescale Semiconductor, Inc. | Data processor device for handling a watchpoint and method thereof |
US8726223B2 (en) * | 2012-09-21 | 2014-05-13 | Atmel Corporation | Hot-plugging debugger architectures |
US9058415B1 (en) * | 2013-03-15 | 2015-06-16 | Google Inc. | Counting events using hardware performance counters and annotated instructions |
US9223678B2 (en) | 2013-07-31 | 2015-12-29 | Freescale Semiconductor, Inc. | Data processor device having a debug control module which selectively modifies trace messages |
GB2534923B (en) * | 2015-02-06 | 2022-03-09 | Advanced Risc Mach Ltd | Trace data capture device and method, system, diagnostic method and apparatus and computer program |
KR102268699B1 (ko) | 2015-06-29 | 2021-06-28 | 삼성전자주식회사 | 저장 장치의 동작 방법, 호스트 장치의 동작 방법, 그리고 저장 장치 및 호스트 장치를 포함하는 사용자 시스템의 동작 방법 |
US9892024B2 (en) * | 2015-11-02 | 2018-02-13 | Sony Interactive Entertainment America Llc | Backward compatibility testing of software in a mode that disrupts timing |
US10031833B2 (en) | 2016-08-31 | 2018-07-24 | Microsoft Technology Licensing, Llc | Cache-based tracing for time travel debugging and analysis |
US10042737B2 (en) | 2016-08-31 | 2018-08-07 | Microsoft Technology Licensing, Llc | Program tracing for time travel debugging and analysis |
US10031834B2 (en) | 2016-08-31 | 2018-07-24 | Microsoft Technology Licensing, Llc | Cache-based tracing for time travel debugging and analysis |
US10324851B2 (en) | 2016-10-20 | 2019-06-18 | Microsoft Technology Licensing, Llc | Facilitating recording a trace file of code execution using way-locking in a set-associative processor cache |
US10310963B2 (en) | 2016-10-20 | 2019-06-04 | Microsoft Technology Licensing, Llc | Facilitating recording a trace file of code execution using index bits in a processor cache |
US10310977B2 (en) | 2016-10-20 | 2019-06-04 | Microsoft Technology Licensing, Llc | Facilitating recording a trace file of code execution using a processor cache |
US10489273B2 (en) | 2016-10-20 | 2019-11-26 | Microsoft Technology Licensing, Llc | Reuse of a related thread's cache while recording a trace file of code execution |
US10540250B2 (en) | 2016-11-11 | 2020-01-21 | Microsoft Technology Licensing, Llc | Reducing storage requirements for storing memory addresses and values |
DE102017200161A1 (de) * | 2017-01-09 | 2018-07-12 | Robert Bosch Gmbh | Verfahren zum Erfassen von Signalen |
US10318332B2 (en) | 2017-04-01 | 2019-06-11 | Microsoft Technology Licensing, Llc | Virtual machine execution tracing |
US10331446B2 (en) * | 2017-05-23 | 2019-06-25 | International Business Machines Corporation | Generating and verifying hardware instruction traces including memory data contents |
US10296442B2 (en) | 2017-06-29 | 2019-05-21 | Microsoft Technology Licensing, Llc | Distributed time-travel trace recording and replay |
US10459824B2 (en) | 2017-09-18 | 2019-10-29 | Microsoft Technology Licensing, Llc | Cache-based trace recording using cache coherence protocol data |
US10558572B2 (en) | 2018-01-16 | 2020-02-11 | Microsoft Technology Licensing, Llc | Decoupling trace data streams using cache coherence protocol data |
US11907091B2 (en) | 2018-02-16 | 2024-02-20 | Microsoft Technology Licensing, Llc | Trace recording by logging influxes to an upper-layer shared cache, plus cache coherence protocol transitions among lower-layer caches |
US10496537B2 (en) | 2018-02-23 | 2019-12-03 | Microsoft Technology Licensing, Llc | Trace recording by logging influxes to a lower-layer cache based on entries in an upper-layer cache |
US10642737B2 (en) | 2018-02-23 | 2020-05-05 | Microsoft Technology Licensing, Llc | Logging cache influxes by request to a higher-level cache |
JP6524358B1 (ja) * | 2018-03-19 | 2019-06-05 | 三菱電機株式会社 | 情報処理装置、情報処理方法およびプログラム |
US10962594B2 (en) * | 2019-05-23 | 2021-03-30 | Bae Systems Information And Electronic Systems Integration Inc. | Debug interface recorder and replay unit |
US11665262B2 (en) * | 2020-10-28 | 2023-05-30 | Viavi Solutions Inc. | Analyzing network data for debugging, performance, and identifying protocol violations using parallel multi-threaded processing |
TWI775307B (zh) * | 2021-02-04 | 2022-08-21 | 新唐科技股份有限公司 | 半導體裝置及其操作方法 |
US11740993B2 (en) * | 2021-08-31 | 2023-08-29 | Apple Inc. | Debug trace of cache memory requests |
Family Cites Families (33)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US3707725A (en) * | 1970-06-19 | 1972-12-26 | Ibm | Program execution tracing system improvements |
JPS5582359A (en) * | 1978-12-18 | 1980-06-21 | Toshiba Corp | Microprogram test unit |
US4462077A (en) * | 1982-06-24 | 1984-07-24 | Bell Telephone Laboratories, Incorporated | Trace facility for use in multiprocessing environment |
JPS59194245A (ja) * | 1983-04-19 | 1984-11-05 | Nec Corp | マイクロプログラム制御装置 |
US4598364A (en) * | 1983-06-29 | 1986-07-01 | International Business Machines Corporation | Efficient trace method adaptable to multiprocessors |
JPH01134541A (ja) * | 1987-11-20 | 1989-05-26 | Toshiba Corp | 情報処理装置 |
JP2678283B2 (ja) * | 1988-03-15 | 1997-11-17 | 株式会社日立製作所 | データ通信制御装置 |
JPH04148242A (ja) * | 1990-10-08 | 1992-05-21 | Fujitsu Ltd | ロード・モジュール実行時トレース処理方法 |
US5321828A (en) * | 1991-06-07 | 1994-06-14 | Step Engineering | High speed microcomputer in-circuit emulator |
JPH05257710A (ja) * | 1991-08-12 | 1993-10-08 | Advanced Micro Devicds Inc | 内部実行パラメータを与えるためのシステムおよびプロセッサによって実行されるべき命令を検証するための配列 |
EP0530816A3 (en) * | 1991-09-04 | 1993-09-15 | Nec Corporation | Microprocessor with cache memory and trace analyzer therefor |
FR2689263A1 (fr) * | 1992-03-25 | 1993-10-01 | Trt Telecom Radio Electr | Dispositif comportant des moyens pour valider des données inscrites dans une mémoire. |
US5491793A (en) * | 1992-07-31 | 1996-02-13 | Fujitsu Limited | Debug support in a processor chip |
US5751942A (en) * | 1993-06-30 | 1998-05-12 | Intel Corporation | Trace event detection during trace enable transitions |
US5752013A (en) * | 1993-06-30 | 1998-05-12 | Intel Corporation | Method and apparatus for providing precise fault tracing in a superscalar microprocessor |
EP0636976B1 (en) * | 1993-07-28 | 1998-12-30 | Koninklijke Philips Electronics N.V. | Microcontroller provided with hardware for supporting debugging as based on boundary scan standard-type extensions |
US5488688A (en) * | 1994-03-30 | 1996-01-30 | Motorola, Inc. | Data processor with real-time diagnostic capability |
FR2720174B1 (fr) * | 1994-05-20 | 1996-08-14 | Sgs Thomson Microelectronics | Procédé pour tester le déroulement d'un programme d'instructions exécutées par un circuit intégré spécialisé, et circuit intégré spécialisé s'y rapportant. |
US5615331A (en) * | 1994-06-23 | 1997-03-25 | Phoenix Technologies Ltd. | System and method for debugging a computing system |
GB2293467B (en) * | 1994-09-20 | 1999-03-31 | Advanced Risc Mach Ltd | Trace analysis of data processing |
US5764885A (en) * | 1994-12-19 | 1998-06-09 | Digital Equipment Corporation | Apparatus and method for tracing data flows in high-speed computer systems |
US5802272A (en) * | 1994-12-19 | 1998-09-01 | Digital Equipment Corporation | Method and apparatus for tracing unpredictable execution flows in a trace buffer of a high-speed computer system |
US5630102A (en) * | 1994-12-19 | 1997-05-13 | Intel Corporation | In-circuit-emulation event management system |
US5617543A (en) * | 1995-05-26 | 1997-04-01 | National Semiconductor Corporation | Non-arithmetical circular buffer cell availability status indicator circuit |
US5964893A (en) * | 1995-08-30 | 1999-10-12 | Motorola, Inc. | Data processing system for performing a trace function and method therefor |
US5544311A (en) * | 1995-09-11 | 1996-08-06 | Rockwell International Corporation | On-chip debug port |
US5724505A (en) * | 1996-05-15 | 1998-03-03 | Lucent Technologies Inc. | Apparatus and method for real-time program monitoring via a serial interface |
US5768152A (en) * | 1996-08-28 | 1998-06-16 | International Business Machines Corp. | Performance monitoring through JTAG 1149.1 interface |
JPH1078889A (ja) * | 1996-09-04 | 1998-03-24 | Mitsubishi Electric Corp | マイクロコンピュータ |
US5867644A (en) * | 1996-09-10 | 1999-02-02 | Hewlett Packard Company | System and method for on-chip debug support and performance monitoring in a microprocessor |
US5848264A (en) * | 1996-10-25 | 1998-12-08 | S3 Incorporated | Debug and video queue for multi-processor chip |
US5771240A (en) * | 1996-11-14 | 1998-06-23 | Hewlett-Packard Company | Test systems for obtaining a sample-on-the-fly event trace for an integrated circuit with an integrated debug trigger apparatus and an external pulse pin |
GB9626367D0 (en) * | 1996-12-19 | 1997-02-05 | Sgs Thomson Microelectronics | Providing an instruction trace |
-
1997
- 1997-12-17 US US08/992,361 patent/US6094729A/en not_active Expired - Lifetime
-
1998
- 1998-04-07 JP JP54301598A patent/JP2001519947A/ja not_active Ceased
- 1998-04-07 DE DE69801220T patent/DE69801220T2/de not_active Expired - Lifetime
- 1998-04-07 KR KR10-1999-7009273A patent/KR100517679B1/ko not_active IP Right Cessation
- 1998-04-07 EP EP98915321A patent/EP0974093B1/en not_active Expired - Lifetime
- 1998-04-07 WO PCT/US1998/006827 patent/WO1998045782A1/en active IP Right Grant
Also Published As
Publication number | Publication date |
---|---|
EP0974093B1 (en) | 2001-07-25 |
DE69801220D1 (de) | 2001-08-30 |
KR100517679B1 (ko) | 2005-09-29 |
JP2001519947A (ja) | 2001-10-23 |
DE69801220T2 (de) | 2002-05-16 |
EP0974093A1 (en) | 2000-01-26 |
US6094729A (en) | 2000-07-25 |
WO1998045782A1 (en) | 1998-10-15 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
KR100517679B1 (ko) | 컴팩트한 트레이스 기록 기억장치를 포함하는 디버그 인터페이스 | |
US5978902A (en) | Debug interface including operating system access of a serial/parallel debug port | |
EP0974094B1 (en) | Trace cache for a microprocessor-based device | |
US6175914B1 (en) | Processor including a combined parallel debug and trace port and a serial port | |
US6009270A (en) | Trace synchronization in a processor | |
US6041406A (en) | Parallel and serial debug port on a processor | |
US6189140B1 (en) | Debug interface including logic generating handshake signals between a processor, an input/output port, and a trace logic | |
US6145100A (en) | Debug interface including timing synchronization logic | |
US6185732B1 (en) | Software debug port for a microprocessor | |
US6142683A (en) | Debug interface including data steering between a processor, an input/output port, and a trace logic | |
US6154856A (en) | Debug interface including state machines for timing synchronization and communication | |
US6314530B1 (en) | Processor having a trace access instruction to access on-chip trace memory | |
EP0974096B1 (en) | Microprocessor-based device incorporating a cache for capturing software performance profiling data | |
JP4475734B2 (ja) | データ処理装置及びデータ処理方法 | |
US6145123A (en) | Trace on/off with breakpoint register | |
US7392431B2 (en) | Emulation system with peripherals recording emulation frame when stop generated | |
US6567932B2 (en) | System and method for communicating with an integrated circuit | |
US6591369B1 (en) | System and method for communicating with an integrated circuit | |
US5809293A (en) | System and method for program execution tracing within an integrated processor | |
JP2000330826A (ja) | デバッグ命令を実行するデータ処理装置及びそのデータ処理方法 | |
US6665816B1 (en) | Data shift register | |
JP2000330820A (ja) | データ処理装置及びデータ処理方法 | |
EP1091298A2 (en) | Interface for transferring debug information | |
US6370660B1 (en) | Apparatus and method for providing a wait for status change capability for a host computer system | |
EP1184790B1 (en) | Trace cache for a microprocessor-based device |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A201 | Request for examination | ||
E902 | Notification of reason for refusal | ||
E701 | Decision to grant or registration of patent right | ||
GRNT | Written decision to grant | ||
FPAY | Annual fee payment |
Payment date: 20100827 Year of fee payment: 6 |
|
LAPS | Lapse due to unpaid annual fee |