KR101994636B1 - 데이터 처리장치의 추적 - Google Patents

데이터 처리장치의 추적 Download PDF

Info

Publication number
KR101994636B1
KR101994636B1 KR1020137020165A KR20137020165A KR101994636B1 KR 101994636 B1 KR101994636 B1 KR 101994636B1 KR 1020137020165 A KR1020137020165 A KR 1020137020165A KR 20137020165 A KR20137020165 A KR 20137020165A KR 101994636 B1 KR101994636 B1 KR 101994636B1
Authority
KR
South Korea
Prior art keywords
conditional
trace
instruction
output
tracking
Prior art date
Application number
KR1020137020165A
Other languages
English (en)
Other versions
KR20140014126A (ko
Inventor
폴 안쏘니 길커슨
존 마이클 홀리
마이클 존 깁스
Original Assignee
에이알엠 리미티드
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 에이알엠 리미티드 filed Critical 에이알엠 리미티드
Publication of KR20140014126A publication Critical patent/KR20140014126A/ko
Application granted granted Critical
Publication of KR101994636B1 publication Critical patent/KR101994636B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/30Monitoring
    • G06F11/34Recording 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/3466Performance evaluation by tracing or monitoring
    • G06F11/3495Performance evaluation by tracing or monitoring for systems
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3842Speculative instruction execution
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30072Arrangements for executing specific machine instructions to perform conditional operations, e.g. using predicates or guards
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/30Monitoring
    • G06F11/34Recording 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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/30Monitoring
    • G06F11/34Recording 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/3457Performance evaluation by simulation
    • G06F11/3461Trace driven simulation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/30Monitoring
    • G06F11/34Recording 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/3466Performance evaluation by tracing or monitoring
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/30Monitoring
    • G06F11/34Recording 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/3466Performance evaluation by tracing or monitoring
    • G06F11/348Circuit details, i.e. tracer hardware
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30094Condition code generation, e.g. Carry, Zero flag
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30098Register arrangements
    • G06F9/30101Special purpose registers
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30098Register arrangements
    • G06F9/3012Organisation of register space, e.g. banked or distributed register file
    • G06F9/30123Organisation of register space, e.g. banked or distributed register file according to context, e.g. thread buffers
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30145Instruction analysis, e.g. decoding, instruction word fields

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Hardware Design (AREA)
  • Quality & Reliability (AREA)
  • Debugging And Monitoring (AREA)
  • Advance Control (AREA)
  • Executing Machine-Instructions (AREA)
  • User Interface Of Digital Computer (AREA)

Abstract

조건부 명령들을 추적하는 추적 유닛, 진단장치 및 데이터 처리장치가 제공된다. 데이터 처리장치는, 조건부 명령들의 실행을 표시하는 명령 관측 표시자들과 상기 데이터 처리장치에 의한 각각의 조건부 명령들의 실행 결과의 출력을 표시하는 결과 출력 표시자들을 생성한다. 조건부 명령 추적 데이터 항목들을 출력하고 조건부 결과 추적 데이터 항목들을 독립적으로 출력하여 진단장치에 의한 조건부 명령들과 이에 대응하는 조건부 결과들의 별개의 추적 분석을 가능하게 하는 추적 유닛에 의해 명령 관측 표시자들과 결과 출력 표시자들이 수신된다. 명령 관측 표시자는 데이터 처리장치의 제 1 처리 사이클에 추적 유닛에서 수신되는 한편, 결과 출력 표시자는 이와 다른 제 2 처리 사이클에 수신된다.

Description

데이터 처리장치의 추적{TRACING OF A DATA PROCESSING APPARATUS}
본 발명은 데이터 처리에 관한 것이다. 특히, 본 발명은, 데이터 처리장치에 의해 행해진 처리 활동의 추적에 관한 것이다.
프로세서 설계를 검증하고 프로그램 명령을 실행시 데이터 처리장치의 신뢰할 수 있는 동작을 확인하기 위해 데이터 처리장치의 활동의 추적을 행하는 것이 공지되어 있다.
데이터 처리장치와 관련하여 추적 유닛을 설치하는 것이 알려져 있는데, 이때 추적 유닛은 데이터 처리장치의 처리 활동을 모니터링하고 이들 처리 활동을 표시하는 추적 데이터 항목들의 시퀀스를 생성하도록 구성된다. 이와 같은 추적 유닛의 예로는, 단일의 시스템 온 칩의 일부로서 또는 프로세서와 독립하여 설치될 수 있는 ARM 임베디드 트레이스 매크로셀(Embedded Trace Macrocell: ETM)을 들 수 있다. ETM은 진단장치로 출력하기 위한 추적 데이터를 생성한다. 복잡한 소프트웨어를 실행하는 최근의 데이터 처리장치에서는, 추적 동작중에 생성한 추적 데이터의 양이 일반적으로 매우 크다. 따라서, 중복되는 것으로 예측되는 정보는 생략하고 특정한 분석 용도를 위해 절대적으로 필요한 데이터를 포함하여, 압축된 형태로 추적 데이터의 항목들을 제공하는 것이 바람직하다. 미국 특허 7,707,394에는 추적 데이터 스트림의 크기를 줄이는 기술이 기재되어 있다.
프로그램 명령들의 순서를 벗어난(out-of-order) 실행 및/또는 추론적 실행(speculative execution)을 행할 수 있는 데이터 처리장치에서는 데이터 처리장치의 활동의 추적이 복잡할 수 있다. 추론적 실행은, 예를 들어, 파이프라인으로 연결된 데이터 처리장치의 파이프라인 스테이지들이 상당한 기간 동안 유휴 상태로 유지되는 것을 방지함으로써, 명령 처리량(throughput)을 증진시킬 수 있기 때문에 데이터 처리장치에서 빈번하게 채용되는 기술이다. 그러나, 추론이 해결될 때까지, 즉 추론적으로 실행되었던 주어진 명령이 데이터 처리장치에 의해 실제로 커밋(commit)되는지 여부가 알려질 때까지, 추적 유닛이 데이터 처리장치의 실제 동작을 확실히 표시하는 추적 데이터의 스트림을 제공하는 것이 불가능하기 때문에, 명령의 추론적 실행은 추적 유닛에 특별한 어려움을 제공할 수 있다.
추론적 실행을 할 수 있는 데이터 처리장치에서 추적을 처리하는 공지된 기술은, 추론이 완전히 해결될 때까지 추론적으로 실행하는 명령들과 관련된 추적 데이터 전체를 버퍼링하거나, 추적 데이터를 추론적으로 생성 및 출력하고 추적 데이터에 대응한 명령이 잘못 추론되었다는 것이 나중에 발견된 경우에 추적 데이터의 특정한 항목들을 취소하는 것이다. 예를 들어, Nexus 프로토콜("The Nesus 5001 Forum-Standard for a Global Embedded Processor Debug Interface", IEEE-IST0 5001 - 2003, 23 December 2003)은 특정한 수의 추적 데이터 항목들의 취소를 지원하고 있다. 데이터 처리장치가 추적 유닛에게 어떤 명령 또는 명령들이 취소되어야 할지를 구체적으로 표시하더라도, 이들 취소된 명령들에 대응하는 추적 데이터의 항목들을 실제로 확인하는 것은 사소한 일이 아니다.
순서를 벗어난 실행이 가능한 데이터 처리장치에서, 예를 들어, 완료하는데 다수의 사이클이 걸릴 수 있는 로드(load) 또는 기억 명령 등의 명령들을 처리할 때 데이터 처리 활동의 추적에 있어서 문제가 발생할 수 있다. 따라서, 예를 들어, 로드 명령이 실행되는 경우에 순서에 맞는(in-order) 처리가 행해져 대응하는 추적 데이터의 항목이 생성될 때에도, 메모리 시스템으로부터 요청된 데이터 값이 검색될 때까지는, 로드 명령의 실행과 관련된 (이전에 생성된) 추적 데이터의 대응하는 항목을 확인하는 것이 곤란할 수 있다. 따라서, 메모리에서 검색된 데이터 값들을 특정한 실행된 로드 명령들과 상관시키는데에 문제가 있을 수 있다. 로드 명령 등의 데이터 전송이 프로그램 순서를 벗어나 행해져, 어떤 데이터 값들이 어떤 메모리 어드레스에 속하는지 확인하는 것이 사실상 불가능하게 될 때 이와 같은 상황이 악화된다는 것을 알 수 있다. 순서를 벗어난 프로세서들의 추적에 관한 일부 배경기술 정보가 문헌 "The PD Trace Interface and Trace Control Block Specification", 4 July 2005(http://www.mipsxom/products/product-materials/ processor/mips-architecture/에서 입수가능) 및 ARM ETM v3 architecture(http://infocentre.arm.com에서 입수가능)에 기재되어 있다.
조건부 명령의 디코딩과 이 명령의 실행에 부여된 특정한 조건의 해결 사이에 일반적으로 지연이 존재하기 때문에, 조건부 명령의 추적시에 특정한 문제가 일어날 수 있다. 다수의 공지된 명령 세트는 분기들이 조건부로만 실행될 수 있도록 허용한다. 그러나, 그러나, ARM 아키텍처는, 데이터 처리장치가 대응하는 명령을 실행할 것인지 여부를 판정하는 조건 필드를 다양한 다른 명령들이 포함할 수 잇도록 하는 조건부 평가 하드웨어를 사용한다. 실행되지 않은 명령들은 일반적으로 단지 1회의 처리 사이클을 소비한다. 다수의 다양한 명령들을 조건부로 실행할 수 있는 능력은 다수의 분기 명령의 필요성을 없앤다. 분기 명령들은 복수의 사이클이 파이프라인을 다시 채우도록(refill) 요구하는 데이터 처리장치의 파이프라인을 지연(stall)시킬 수 있으며, 조건부 명령들은 분기가 없는 고밀도의 인라인(in-line) 코드를 허용한다. 다수의 조건부 명령들을 실행하지 않을 때(이때 부가된 조건들이 만족되지 않는다)의 시간상의 불이익은, 이와 같이 구성하지 않았더라면 필요하였을 분기 명령들의 오버헤드보다 적은 경우가 많다. 따라서, 조건부 명령은 데이터 처리의 효율을 증진시키는데 매우 유용하다.
그러나, 조건부 비분기(non-branch) 명령들 등의 조건부 명령은, 이 명령의 디코딩과 부가된 조건의 평가 사이의 지연으로 인해 데이터 처리장치의 추적 활동에 특정한 문제를 제공한다. 조건부 통과(pass)/실패 정보는 조건부 명령과 동일한 시점에서 추적될 수 있어 한 개의 추적 패킷을 사용하여 추적될 수 있지만, 이와 같은 구성은, 특히 순서를 벗어난 프로세서 또는 추론적 실행이 가능한 프로세서에서는, 이 추적을 지원하기 위한 상당한 버퍼링을 필요로 한다.
결국, 조건부 명령들의 더욱 효율적인 추적을 제공하면서도, 추론적 및/또는 순서를 벗어난 실행이 가능한 데이터 처리장치에서 명령 시퀀스들의 추적에도 적용가능한 기술을 제공할 필요가 있다.
일면에 따르면, 본 발명은, 데이터 처리장치의 처리 활동을 표시하는 추적 데이터의 항목들을 생성하도록 구성된 추적 유닛으로서, 조건부 명령의 실행을 표시하는 적어도 한 개의 명령 관측(observed) 표시자와, 상기 데이터 처리장치에 의한 상기 적어도 한 개의 조건부 명령을 실행한 결과의 출력을 표시하는 적어도 한 개의 결과 출력 표시자를 상기 데이터 처리장치에서 수신하는 추적 입력 인터페이스와, 상기 적어도 한 개의 명령 관측 표시자와 상기 적어도 한 개의 결과 출력 표시자를 처리하고, 상기 적어도 한 개의 명령 관측 표시자와 상기 적어도 한 개의 결과 출력 표시자로부터 대응하는 조건부 명령 추적 데이터 항목들과 조건부 결과 추적 데이터 항목들을 생성하고, 상기 조건부 명령 추적 데이터 항목들과 상기 조건부 결과 추적 데이터 항목들을 독립적으로 출력하여 진단장치에 의해 조건부 명령들 및 이에 대응하는 조건부 결과들의 별개의 추적 분석을 가능하게 하는 추적회로를 구비한, 추적 유닛을 제공한다.
본 발명은, 조건부 명령 추적 데이터 항목들과 조건부 결과 추적 데이터 항목들을 독립적으로 출력할 수 있는 추적회로를 제공하는 것이, 조건부로 실행된 명령과 관련된 조건이 완전히 해결될 때까지 추적 데이터를 버퍼링하는 종래의 기술과 관련된 문제를 개선할 수 있는 상당한 유연성과 조건부 명령들의 추적을 제공한다는 것을 인식하였다.
명령 관측 표시자와 이에 대응하는 결과 출력 표시지가 동일한 처리 사이클에 데이터 처리장치에 의해 출력될 수도 있다는 것은 명백하다. 그러나, 일부 실시예에서는, 명령 관측 표시자가 데이터 처리장치에 의해 출력되어 제 1 처리 사이클에 추적회로의 추적 입력 인터페이스에서 수신되는 한편, 데이터 처리장치는 이와 다른 제 2 처리 사이클에 동일한 조건부 명령에 대응하는 결과 출력 표시자를 출력할 수 있도록 구성된다. 이것은, 명령 관측 표시자와 이에 대응하는 결과 출력 표시자가 서로 다른 처리 사이클에 추적 입력 인터페이스에서 수신되어야 한다는 것을 의미한다. 이와 같은 구성은 조건부 명령과 이에 대응하여 그후에 생성된 조건부 결과의 실행의 별개의 추적을 용이하게 한다. 일부의 데이터 처리 코어에서는 조건부 명령의 모든 세부사항을 처리 파이프라인에서 동일한 시점에 추적하는 것이 불가능할지도 모르기 때문에, 조건부 명령들과 이에 대응하는 조건부 결과들을 독립적으로 추적할 수 있는 능력은 유용하다. 더구나, 조건부 명령들이 일부의 데이터 프로세서에서는 순서를 벗어나 처리될 수도 있다. 본 발명에 따라 조건부 명령들의 추적을 2개의 부분으로 나누는 것은 이 문제를 직접적으로 해결한다. 이와 같은 구성은, 특히 추론적 및/또는 순서를 벗어난 실행이 가능한 데이터 처리장치에서 조건부 명령들의 추적을 더욱 더 효율적으로 만든다.
조건부 명령의 실행과 조건부 결과의 출력의 추적의 시간적인 분리는, 예를 들어, 순서를 벗어난 프로세서에서, 주어진 실행 시퀀스가 특정한 데이터 처리장치의 타이밍 및 능력에 의존하게 다른 방법으로 추적될 수 있다는 것을 의미한다. 특히, 조건부 명령의 디코딩에 대해 조건부 결과가 이용가능해지는 시간 프레임은 프로세서 능력에 의존하여 상당히 변동할 수 있지만, 서로 다른 처리 사이클에 명령 관측 표시자와 결과 출력 표시자를 출력하는 데이터 처리장치에 의해 이것이 용이하게 수용될 수 있다.
일부 실시예에서, 상기 추적 유닛은 상기 데이터 처리장치에서 수신된 복수의 세트의 결과 출력 표시자들을 기억하는 결과 출력 표시자 버퍼를 구비하고, 상기 추적 유닛은 기억된 세트의 결과들을 주기적으로 선택하여 상기 추적회로에 처리하기 위해 출력하도록 구성되고, 상기 버퍼가 현재 유효한 값을 기억하고 있는 결과 출력 표시자들의 세트를 조건부 명령이 참조한다는 것을 상기 명령 관측 표시자들 중에서 한 개가 표시하는 것에 응답하여, 상기 추적 유닛은, 새로운 세트의 결과 출력 표시자들이 기억될 수 있도록, 상기 현재 기억된 유효한 세트의 결과 출력 표시자들을 선택하여 출력하도록 구성된다.
추적 유닛이 한번의 사이클에 많은 수의 결과 출력 표시자들을 받아들일 수 있지만, 이 다수의 조건부 결과 추적 데이터 항목들을 생성할 수 있는 능력을 갖는 추적회로를 제공하는 것은 비용이 많이 들지도 모른다. 따라서, 이들 결과들을 버퍼링하고 이것들을 꾸준하게 출력하는 것이 유리할 수도 있다. 따라서, 조건부 명령의 실행이 현재 결과 출력 표시자가 축출되도록 요구할 때, 또는 어떤 항목도 수신되지 않아 1개 이상의 항목이 출력을 위해 선택될 수 있을 때, 출력 표시자들이 출력된다. 시스템이 결과 출력 표시자에 앞서서 명령 관측 표시자를 수신하도록 설계되므로, 어디에서 명령이 실행될 것인지 결정할 수 있으며, 이것은 현재 사용되는 결과들을 기억하기 위한 기억 장소를 필요로 하고, 이 위치로부터 이 데이터가 출력될 수 있고, 그후 결과들이 수신될 때 기억 장소가 비워진다.
일부 실시예들에서, 상기 데이터 처리장치는, 조건부 명령이 어떻게 처리되는지를 표시하는 각각의 세트의 조건부 코드 플래그(flag) 값들을 기억하도록 구성된 복수의 현재 프로그램 상태 레지스터들을 구비하고, 상기 버퍼는 상기 복수의 현재 프로그램 상태 레지스터들 각각에 대응하는 한 개의 세트의 결과 출력 표시자들을 기억하기 위한 기억 장소를 포함하고, 결과 출력 표시자들의 상기 세트들 각각은 적어도 일부의 상기 조건부 코드 플래그 값들을 포함한다.
결과 출력 표시자들은 예를 들어 CPSR 레지스터들에서 수신된 적어도 일부의 조건부 코드 플래그 값들을 포함해도 된다. 이와 같은 경우에는, 각각의 CPSR 레지스터에 대한 기억 장소가 존재하고, 이들은 1 사이클에 모두 갱신되므로, 추적 유닛이 이 개수의 입력들을 받아들일 수 있어야만 한다. 더구나, 조건부 명령들이 실행될 때, 버퍼에 기억된 유효한 값이 이미 존재하는 상태 레지스터에 대응하는 조건부 명령이 존재하는지 여부를 판정할 수 있다. 존재하는 경우에는, 이 값이 출력될 수 있으며, 새로운 값을 기억하기 위해 기억 장소가 사용된다. 더 이전의 사이클에 명령 관측 표시자를 출력함으로써, 새로운 값이 도착하기 전에 버퍼가 소거될 수 있다. 더구나, 버퍼를 설치함으로써, 이들 입력값들이 기억될 수 있어 동시에 모든 입력값들이 처리될 필요가 없어진다.
이때, M 개의 조건부 명령 표시자들이 한번의 사이클에 수신될 수 있는 경우에, 필요한 경우에 기억 장소를 비우기 위해서는, 추적 유닛이 한번의 사이클에 M개의 조건부 결과 표시자들을 축출 및 출력할 수 있어야만 한다는 점에 주목하기 바란다. 전술한 것과 같이, N개의 상태 레지스터가 존재하면, 일부 실시예에서는, 추적 유닛이 한번의 사이클에 N 세트의 결과 출력 표시자들을 수신할 수 있어야만 한다. M이 일반적으로 N보다 훨씬 작으므로, 추적 생성 로직에 의해 처리될 한번의 사이클에 출력된 결과 출력 표시자들의 수가 비교적 작다. 조건부 명령의 실행과 관련된 조건들은 다양한 다른 방법으로 추적될 수 있지만, 일부 실시예에서, 데이터 처리장치는, 조건부 명령이 상기 추적 데이터의 항목들로서 출력되어야 하는지 여부를 판정하기 위해 테스트되는 각각의 세트의 조건부 코드 플래그 마크들을 기억하도록 구성된 적어도 한 개의 현재 프로그램 상태 레지스터를 구비하고, 추적 유닛은, 적어도 한 개의 현재 프로그램 상태 레지스터와 각각의 세트의 조건부 코드 플래그 마크들의 적어도 서브셋(subset)과 관련된 상태를 열거하는 현재 프로그램 상태 레지스터 테이블을 기억하는 데이터 기억장치를 구비한다. 이와 같은 구성은, 주어진 조건부 명령에 대한 주어진 조건부 코드가 해결되었는지 또는 추적이 진행중인지를 추적 유닛이 추적할 수 있도록 하는 간편한 메카니즘을 제공한다. 이것은 복수의 조건부로 실행된 명령들의 현재 상태의 효율적인 추적을 가능하게 한다.
일부 실시예들에서, 추적 유닛의 현재 프로그램 상태 레지스터 테이블은 각각의 서브셋의 조건부 코드 플래그들 각각에 대해 3가지 다른 상태를 기억하도록 구성된다. 그러나, 또 다른 실시예에서는, 추적 활동의 특정한 요구사항에 의해 요구될 때 각각의 조건부 코드 플래그에 대해 이와 다른 수의 상태가 기억될 수도 있다. 각각의 조건부 코드 플래그에 대해 2가지 다른 상태가 기억되는 실시예에서, 3가지 다른 상태는, 추적, 추적 예정 및 추적 안됨을 포함한다. 이들 3가지 상태는 조건부 비분기 명령의 추적에 유용하다.
일부 실시예에서, 상기 데이터 처리장치에 의해 방출될 때 어떤 플래그들이 추적되어야 하는지를 표시하는 각 CPSR의 각각의 플래그에 대해 2가지 상태를 갖는 인플라이트(in-flight) 테이블과, 조건부 명령이 조건부 명령 추적 데이터 항목으로서 추적되어야 하는지 아닌지를 표시하는 현재 CPSR의 각각의 플래그에 대해 2가지 상태를 기억하는 현재 CPSR 테이블을 유지함으로써, 상기 3가지 상태가 추적된다.
이때, 추적회로는 다양한 다른 방법으로 특정한 조건부 명령과 연관된 조건부 코드 플래그들을 추적할 수도 있다는 것이 명백하지만, 일부 실시예에서, 추적회로는 추적 유닛 내부의 현재 프로그램 상태 레지스터 테이블을 사용하여, 언제 조건부 결과 추적 데이터 항목들이 필요한지/예상되는지를 결정하고 조건부 코드 플래그들의 세트 중에서 어느 것이 추적되어야 하는지 파악한다.
이때, 데이터 처리장치에 의해 생성되고 추적회로에 의해 수신된 명령 관찰 표시자 및 결과 출력 표시자는, 평가된 조건부 결과를 대응하는 조건부 명령에 연결하기 위해 다양한 다른 방법들 중에서 어느 한가지로 상호관련될 수 있다는 것이 명백하다. 그러나, 일부 실시예에서, 추적 입력 인터페이스는, 명령 관측 표시자에 대응하는 명령 태그와 결과 출력 표시자에 대응하는 결과 태그를 데이터 처리장치에서 수신한다.
일부 실시예에서, 데이터 처리장치로부터 추적 유닛에 의해 수신된 명령 태그와 결과 태그는 추적 유닛에 의해 진단장치로 출력된다. 그러나, 다른 실시예에서, 추적회로는, 데이터 처리장치에 의해 출력된 명령 관측 표시자와 관련된 명령 태그가 명령 관측 표시자에 근거하여 추적회로에 의해 출력된 조건부 명령 추적 데이터 항목에 대응하는 명령 키로 변환되는 키 변환 연산에 대해 태그 부착을 수행하도록 구성된다. 마찬가지로, 데이터 처리장치에 의해 생성되고 결과 출력 표시자와 관련된 결과 태그가, 추적 유닛에 의해 진단장치로 출력된 조건부 결과 추적 데이터 항목에 대응하는 결과 키로 변환된다. 키 변환 조작에 대한 이와 같은 태그 부착은 추적회로 내부의 현재 프로그램 상태 레지스터 테이블 내부에 기억된 상태에 의존하여 행해진다. 이와 같은 키 조작에 대한 태그를 사용하여 알려진 순서를 갖는 키들, 예를 들면 순차 키들을 생성할 수 있는데, 이것은 추적의 압축 또는 축소의 향상과 이에 따른 추적 대역폭 축소를 허용한다.
이때, 추적회로는, 데이터 처리장치에서 수신된 명령 관측 표시자들과 진단회로에 의해 출력된 조건부 명령 추적 데이터 항목들 사이에 1대1 대응이 존재하도록 조건부 명령 추적 데이터 항목들을 출력할 수도 있다는 것이 명백하다. 마찬가지로, 데이터 처리장치에 의해 출력된 결과 출력 표시자들과 추적회로에 의해 출력된 조건부 결과 추적 데이터 항목들 사이에도 1대1 대응이 존재할 수도 있다. 그러나, 일부 실시예에서, 추적회로는, 수신된 명령 관측 표시자에 대응하는 조건부 명령 추적 데이터 항목들 중에서 적어도 한 개의 조건부 명령 추적 데이터 항목의 출력을 버퍼링하도록 구성된 추적 압축회로를 구비한다. 조건부 명령의 실행의 생성(즉, 버퍼링된 조건부 명령 및 추적 데이터 항목의 존재)이, 조건부 결과 추적 데이터 항목들 중에서 대응하는 한 개의 조건부 결과 추적 데이터 항목의 추적 유닛에 의한 출력으로부터 데이터 처리장치에 의해 실행되고 있는 프로그램 명령들의 프로그램 이미지(program image)를 참조하여 진단장치에 의해 추측될 수 있는 경우에 이것이 유용할 것이다. 이와 같은 구성은, 추적회로에 의해 출력되고 진단장치에 의해 수신된 추적 데이터의 크기를 줄이면서도, 추적 데이터 항목이 버퍼링된 조건부 명령 실행의 생성을 진단장치가 (실행된 프로그램 명령들의 이미지를 통해) 용이하게 재구성할 수 있기 때문에, 추적 정보의 손실을 일으키지 않는 간편한 메카니즘을 제공한다.
추적회로가 버퍼링된 조건부 명령 추적 데이터 항목에 대응하는 결과 키의 출력을 버퍼링할 수도 있는 것이 명백하지만, 일부 실시예에서, 추적회로는 버퍼링된 조건부 명령 추적 데이터 항목에 대한 결과 키들 중에서 적어도 한 개를 출력하도록 구성된다. 출력된 결과 키는 진단회로에 의해 사용되어 버퍼링된 조건부 명령 추적 데이터 항목의 출력을 추측한다. 이와 같은 구성은, 진단장치에 의해 유지된 프로그램 이미지와 그들이 수신한 조건부 결과 추적 데이터 항목들 사이의 상관관계를 사용하는 것 이외에 버퍼링된 조건부 명령 추적 데이터 항목의 존재를 추측하는 간편하고도 신뢰할 수 있는 메카니즘을 제공한다.
모든 조건부 명령들이 대응하는 조건부 명령 추적 데이터 항목들을 갖는 것은 아니다. 일부의 조건부 명령 추적 데이터 항목들은 직접 출력되지 않고, 그 대신에 조건부 결과 추적 데이터 항목들에 의해 추측된다. 이것은, 조건부 명령 추적 데이터 항목이 조건부 결과 추적 데이터 항목에 대응하는 패킷의 일부로서 효율적으로 출력되도록 하는 추적 프로토콜 특징이다.
추적회로가, 조건부 명령 실행들 중에서 어느 것이 진단회로로 출력되기 전에 버퍼링된 관련된 추적 데이터를 갖는지를 다양한 다른 방법으로 파악할 수도 있다는 것은 명백하다. 그러나, 일부 실시예에서, 추적회로는, 수신된 명령 관측 표시자들 중에서 어느 것이 추적회로에 의해 버퍼링된 대응하는 조건부 명령 추적 데이터 항목들의 출력을 가졌는지를 표시하는 버퍼링 기록을 모니터링 및 유지하도록 구성된다.
조건부 명령 추적 데이터 항목의 출력의 버퍼링은 다른 종류의 조건부로 실행된 명령들에 대해서보다 일부의 조건부로 실행된 명령들에 대해 더 적절할 수도 있다. 어떤 명령 관측 표시자들에 대해 대응하는 조건부 명령 추적 데이터 항목의 출력이 버퍼링되었는지를 표시하는 버퍼링 기록을 유지하는 것은, 조건부 명령 추적 데이터 항목들의 버퍼링이 사용되는 상황을 추적회로가 관리하는 것을 도와준다.
버퍼링 기록은 조건부 추적 데이터 항목들의 버퍼링에 대해 다양한 다른 종류의 정보를 포함할 수도 있다는 것은 명백하다. 그러나, 일부 실시예에서, 버퍼링 기록은 가장 최근에 생성된 조건부 명령 추적 데이터 항목과 가장 최근에 출력된 조건부 명령 추적 데이터 항목의 기록을 포함한다. 이와 같은 구성은, 추적회로가, 각각의 조건부 결과 추적 데이터 항목에 대해, 어떤 조건부 명령 추적 데이터 항목들이 대응하는 조건부 결과 추적 데이터 항목으로부터 추측될 수 있는지를 결정할 수 있게 한다.
버퍼링 기록을 갖는 일부 실시예에서, 키 비교를 행하여, 조건부 명령 추적 데이터 항목에 대응하는 키가 상기한 가정 최근에 출력된 조건부 명령 추적 데이터 항목에 대응하는 키보다 크고 가장 최근에 생성된 조건부 명령 추적 데이터 항목에 대응하는 키 이하인지 여부를 결정할 때, 조건부 명령 추적 데이터 항목이 버퍼링된 것으로 결정된다.
이와 같은 일부 실시예에서, 최대값에 도달하였을 때 키의 값들이 랩 어라운드(wrap around)하고, 키 비교는 모듈로 산술을 준수한다.
키 변환 연산에 대한 태그 부착이 사용되는 일부 실시예에서는, 추적회로(또는 추적 유닛)가 데이터 처리장치에서 명령 관측 표시자들 중에서 한 개를 수신할 때, 추적회로 내부의 현재 프로그램 상태 레지스터 테이블을 명령 태그를 사용하여 참조하여 조건부 코드 마크들의 적절한 서브셋을 기억하는 현재 프로그램 상태 레지스터들 중에서 적당한 한 개를 확인하도록, 이와 같은 태그 부착이 행해진다. 이와 같은 구성은, 조건부 코드 플래그들 중에서 어느 것이 특정한 조건부 명령이 실제 실행되는지 여부를 결정하는데 적합한지를 파악한다는 면에서 현재 프로그램 상태 레지스터들과 주어진 조건부 명령 사이의 간단한 매핑을 제공한다.
현재 프로그램 상태 레지스터 테이블이 명령 태그를 사용하여 참조되는 이와 같은 일부 실시예에서, 현재 프로그램 상태 레지스터 테이블에 기억된 관련된 서브셋의 조건부 코드 마크들 중에서 아무것도 추적될 것이라는 현재 표시하지 않을 때 새로운 키 값을 새롭게 생성된 조건부 명령 추적 데이터 항목에 할당함으로써, 상기 추적회로가 키 변환 연산에 대한 태그 부착을 수행한다. 한편, 현재 프로그램 상태 레지스터 테이블에 현재 기억된 서브셋의 조건부 코드 마크들(즉, 상태 엔트리(entry)들) 중에서 1개 이상이 추적될 것이라는 것을 표시할 때, 가장 최근에 할당된 키 값을 반복하는 반복 키 값이 새롭게 생성된 조건부 명령 추적 데이터 항목에 할당된다. 이와 같은 구성은, 조건부 추적 데이터 항목들을 이에 대응하는 결과 추적 데이터 항목들과 매치하는 간편하고도 효율적인 방법을 제공한다.
명령 태그를 사용하여 현재 프로그램 상태 레지스터 테이블을 참조하는 이와 같은 일부 실시예에서, 추적회로는, 조건부 결과 추적 데이터 항목들 중에서 대응하는 조건부 결과 추적 데이터 항목의 추적 유닛으로부터의 출력으로부터 진단장치에 의해 생성이 추측될 수 있는 새로운 키 값들을 갖는 조건부 명령 추적 데이터 항목들 중에서 적어도 한 개의 출력을 버퍼링하도록 구성된 추적 압축회로를 구비한다. 한편, 1개 이상의 반복 키 값들에 대응하는 조건부 명령 추적 데이터 항목들은 버퍼링되지 않는다. 이와 같은 구성은, 조건부 명령들과 이와 관련된 조건부 결과들 사이에 상관을 행하기 위한 키들의 사용이 신뢰성이 유지되도록 보장한다. 키 값들과 특정한 압축된 조건부 명령 추적 데이터 항목 사이의 고유한 관련성이 존재할 수 있는 경우에만 조건부 명령 추적 데이터 항목들의 버퍼링이 사용될 때, 이것은 수신된 조건부 결과들과 추측된 조건부 명령들 사이의 부정확한 상관을 방지한다.
이와 같은 일부 실시예에서, 추적회로는, 1개 이상의 대응하는 조건부 명령 추적 데이터 항목들이 진단 도구에 의해 추측이 허용되는지 여부의 표시와 함께 진단 도구로 조건부 결과 추적 데이터 항목을 제공하도록 구성된다. 이와 같은 구성은, 진단 도구가 1개 이상의 조건부 명령들의 존재를 추측하는 것이 허용되는 경우에 대해 확실한 가이드를 갖도록 보장한다.
조건부 명령 추적 데이터 항목들을 버퍼링하고 이들 버퍼링된 조건부 명령 추적 데이터 항목들에 대응하는 관련된 결과 키들을 출력하도록 구성된 일부 실시예에서는, 분기 오예측(mispredict) 표시가 추적 유닛에 의해 수신되는 경우에는 추적회로에 의해 행해진 키 변환 연산에 대한 태그가 변형된다. 이와 같은 구성은, 독립적으로 생성된 조건부 명령 추적 데이터 항목들과 조건부 결과 추적 데이터 항목들 사이에 행해진 상관의 정확도를 포함시키지 않으면서, 시스템이 분기 오예측 이벤트를 수용할 수 있도록 한다.
일부 실시예에서, 대응하는 조건부 결과 키가 추적 압축회로의 버퍼에 의해 현재 버퍼링된 조건부 명령 키와 동일한 경우에, 1개 이상의 조건부 명령 추적 데이터 항목들이 추측되도록 허용된다.
독립적으로 출력된 조건부 명령 추적 데이터 항목들과 조건부 결과 추적 데이터 항목들을 사용하여 조건부 분기 명령들이 조건부 비분기 명령들과 동일하게 추적될 수도 있다는 것은 명백하다. 그러나, 일부 실시예에서, 추적회로는 조건부 또는 비조건부(non-conditional) 분기 명령들과 로드/스토어(load/store) 명령들과 관련된 추적 데이터를 추적 유닛의 추적 입력 인터페이스부터 수신하도록 구성되고, 추적회로는, 대응하는 명령이 선택한(taken) 조건부/비조건부 분기 또는 로드/스토어 명령에 대응한다는 것을 나타내는 제 1 타입의 웨이포인트(waypoint) 표시자와, 대응하는 명령이 선택하지 않은(not taken) 조건부 분기에 대응한다는 것을 나타내는 제 2 타입의 웨이포인트 표시자를 생성하도록 구성된다. "웨이포인트들"을 이용하여, 조건부 비분기 명령들이 추적되는 방법과 다른 방법으로, 조건부 분기와 로드/스토어 명령들을 독립적으로 추적할 수 있는 능력은 추적 메카니즘에 추가적인 유연성을 제공한다.
일부 실시예에서, 상기 추적 유닛은, 상기 추적회로에 의해 생성된 상기 조건부 결과 추적 데이터 항목들을 수신하고, 적어도 일부의 상기 조건부 결과 추적 데이터 항목들의 압축된 표현(representation)들을 생성하고 상기 압축된 표현들을 기억하고, 추적 데이터 항목들의 복수의 압축된 표현이 합성된 추적 데이터 항목들로 출력되도록 상기 압축된 표현의 적어도 일부를 합성하는 추적 결과 합성회로를 더 구비한다.
조건부 결과 추적 데이터 항목들을 압축된 표현들 또는 토큰(token)에 의해 표현하는 것이 유리할 수 있는데, 이때 가장 일반적인 항목들은 더 짧은 토큰으로 표현된다. 이에 따르면, 빈번하게 생성하는 항목들이 존재하는 경우에, 이것들을 짧은 토큰들로 표시할 수 있으며, 추적 데이터 항목들이 특정한 크기를 가질 때, 토큰들을 합성하여 한 개의 합성된 추적 데이터 항목으로서 출력함으로서, 출력되는 추적 데이터를 저감하면서도 송신되는 정보를 줄이지 않을 수 있다.
일부 실시예에서, 상기 추적 결과 합성회로는, 상기 압축된 표현들을 생성 및 기억하고, 상기 추적 결과 합성회로에 의해 압축될 수 없는 조건부 결과 추적 데이터 항목의 수신시에, 상기 기억된 추적 데이터 항목들의 압축된 표현들을 합성된 추적 데이터 항목들로서 출력한 후, 압축될 수 없는 상기 조건부 결과 추적 데이터 항목을 출력하도록 구성된다.
합성된 추적 데이터 항목들 내부에서 압축된 표현들을 효율적으로 합성할 수 있기 위해서, 이들 중에서 다수를 출력되기 전에 기억하여, 어떤 토큰들을 합성할지에 대한 더 큰 선택이 행해질 수 있으며 더 효율저인 합성이 행해질 수 있다면 편리하다. 그러나, 출력 순서가 유지될 필요가 있으므로, 토큰에 의해 표현될 수 없는 항목이 수신되면, 기억된 항목들이 출력될 필요가 있으며, 이와 유사하게, 버퍼가 채워지면, 기억된 데이터를 출력함으로써 이 버퍼를 소거할 필요가 있다.
일부 실시예에서, 추적회로는 조건부 또는 비조건부 분기 명령들과 로드/스토어 명령들에 관한 추적 데이터를 추적 입력 인터페이스에서 수신하도록 구성되고, 추적회로는, 대응하는 명령이 선택될 것으로 예측된 조건부 분기, 선택될 것으로 예측된 비조건부 분기 또는 로드/스토어 명령에 대응한다는 것을 나타내는 제 1 타입의 웨이포인트 표시자와, 대응하는 명령이 선택되지 않은 조건부 분기일 것으로 예측된다는 것을 나타내는 제 2 타입의 웨이포인트 표시자를 생성하도록 구성된다.
웨이포인트 표시자들을 사용하여, 조건부 분기 명령과 로드/스토어 명령에 관한 추적 데이터를 표시하는 이와 같은 일부 실시예에서는, 명령 관측 표시자가 데이터 처리장치에 의해 사용되어 조건부 분기 명령들 이외의 조건부 명령들의 실행을 표시하고, 추적회로는, 명령 관측 표시자에 대응하는 조건부 명령 추적 데이터 항목과, 제 1 타입의 웨이포인트 표시자 및 제 2 타입의 웨이포인트 표시자 중에서 적어도 한 개를 동일한 추적 데이터 스트림으로 출력하도록 구성된다. 조건부 명령 추적 데이터 항목들과 웨이포인트 표시자들을 동일한 추적 데이터 스트림으로 출력하는 것은 조건부 비분기 명령들과 다른 조건부 명령들을 구별할 수 있는 간편한 메카니즘을 제공한다. 더구나, 조건부 분기 명령은 조건부 비분기 명령보다 일반적으로 추적하기가 더 용이하기 때문에, 조건부 분기 명령의 추적을 위해 맞춤형(tailored) 메카니즘을 제공하고, 조건부 비분기 명령들의 추적을 위해 이와 다른 더 적절한 메카니즘을 제공하는 것이 이치에 맞는다.
일부 실시예에서, 결과 출력 표시자가 데이터 처리장치에 의해 사용되어 조건부 분기 명령 이외의 조건부 명령의 실행을 표시하고, 추적회로는, 결과 출력 표시자에 대응하는 조건부 결과 추적 데이터 항목과, 제 1 타입의 웨이포인트 표시자 및 제 2 타입의 웨이포인트 표시자 중에서 적어도 한 개를 동일한 추적 데이데 스트림으로 출력하도록 구성된다.
일부 실시예에서, 명령 관측 표시자가 상기 데이터 처리장치에 의해 사용되어 조건부 분기 명령의 실행을 표시하고, 결과 출력 표시자가 데이터 처리장치에 의해 사용되어 조건부 분기 명령 이외의 조건부 명령의 실행을 표시하고, 추적회로는, 명령 관측 표시자에 대응하는 조건부 명령 추적 데이터 항목, 결과 출력 표시자에 대응하는 조건부 결과 추적 데이터 항목과, 제 1 타입의 웨이포인트 표시자 및 제 2 타입의 웨이포인트 표시자 중에서 적어도 한 개를 동일한 추적 데이터 스트림으로 출력하도록 구성된다.
이와 같은 일부 실시예에서, 추적회로는, 대응하는 명령 키가 반복 키 값인 조건부 분기 이외의 조건부 명령에 대응하는 제 1 타입의 조건부 명령 추적 데이터 항목과, 대응하는 명령 키가 새로운 키 값인 조건부 분기 이외의 조건부 명령에 대응하는 제 2 타입의 조건부 명령 추적 데이터 항목을 출력하도록 구성된다.
일부 실시예에서, 추적회로는, 대응하는 명령 키가 반복 키인 조건부 분기에 대응하는 제 1 타입의 조건부 명령 추적 데이터 항목과, 대응하는 명령 키가 새로운 키 값인 조건부 분기에 대응하는 제 2 타입의 조건부 명령 추적 데이터를 출력하도록 구성된다.
이때, 제 1 타입의 웨이포인트 표시자와 제 2 타입의 웨이포인트 표시자는 추적회로에 의해 동일하게 독립적으로 출력될 수도 있으며, 이들 표시자들이 개별적으로 생성되거나, 임의의 타임의 웨이포인트 표시자들(동일하거나 다르거나)이 함께 임의의 순서로 종속접속되어(concatenated) 패킷을 구성할 수 잇다는 것은 명백하다. 그러나, 일부 실시예에서, 추적회로는 복수의 웨이포인트 표시자들을 종속접속하여 상기 진단장치로 출력하기 위한 종속접속된 웨이포인트 표시자를 형성하도록 구성되고, 상기 종속접속된 웨이포인트 표시자는, 복수의 상기 제 1 타입의 웨이포인트 표시자, 복수의 상기 제 2 타입의 웨이포인트 표시자와, 적어도 한 개의 상기 제 1 타입의 웨이포인트 표시자 및 적어도 한 개의 상기 제 2 타입의 웨이포인트 표시자 중에서 적어도 한 개를 포함하는 다른 타입의 웨이포인트 표시자들의 조합 중에서 한가지를 포함한다. 이와 같은 구성은, 추적 데이터 스트림의 정보 내용에 악영향을 미치지 않으면서 웨이포인트 표시자들과 관련된 추적 대역폭을 줄일 수 있다.
마찬가지로, 일부 실시예에서, 추적회로는, 복수의 조건부 명령 추적 데이터 항목들을 종속접속하여 종속접속된 조건부 명령 추적 데이터를 형성하고, 복수의 조건부 명령 추적 데이터 항목들을 출력하는 대신에, 종속접속된 조건부 명령 추적 데이터 항목을 진단장치로 출력하도록 구성된다. 마찬가지로, 이와 같은 구성은 추적 데이터 스트림의 정보 내용에 과도하게 악영향을 미치지 않으면서 조건부 명령의 추적과 관련된 추적회로에 의해 출력된 추적 데이터의 저감을 제공한다. 이와 같은 일부 실시예에서, 이와 같이 구성하지 않았더라면 출력되어야만 할 복수의 조건부 명령 추적 데이터 항목들에 비해, 종속접속된 조건부 명령 추적 데이터 항목이 줄어든 추적 대역폭을 갖는다.
추적회로가 종속접속된 웨이포인트 표시자들과는 완전히 별개의 추적 데이터 스트림으로 종속접속된 조건부 명령 추적 데이터 항목들을 출력할 수도 있다는 것은 명백하다. 그러나, 일부 실시예에서, 추적회로는, 적어도 한 개의 종속접속된 조건부 명령 추적 데이터 항목들과 적어도 한 개의 종속접속된 웨이포인트 표시자를 동일한 추적 데이터 스트림으로 출력하도록 구성된다.
추적회로가 명령들의 실행의 취소 또는 추론적으로 실행되거나 오예측된 명령들의 비완결(non-completion)을 이들 명령과 관련된 추적 데이터의 출력의 관리면에서 다양한 방법으로 처리할 수도 있다는 것은 명백하다. 그러나, 일부 실시예에서, 추적회로는 재정렬(realignment) 추적 데이터 항목을 출력하도록 구성된다. 이와 같은 일부 실시예에서, 재정렬 추적 데이터 항목은 데이터 처리장치로부터의 분기 오예측 표시자의 수신에 응답하여 출력된다. 다른 실시예에서, 재정렬 추적 데이터 항목은 데이터 처리장치로부터의 중단(abort) 표시자의 수신에 응답하여 출력된다. 다른 실시예에서, 재정렬 추적 데이터 항목은 데이터 처리장치로부터의 예외 표시자의 수신에 응답하여 출력된다. 다른 실시예에서, 재정렬 추적 데이터 항목은 데이터 처리장치로부터의 취소 표시자의 수신에 응답하여 출력된다. 이와 같은 재정렬 추적 데이터 항목의 이용은, 진단장치가 추론적 실행 및/또는 분기 오예측 및/또는 순서를 벗어난 실행을 고려하기 위해 수신된 추적 데이터의 필터링이 언제 행해져야 하는지를 파악할 수 있도록 하는 간편하고도 신속한 메카니즘을 제공한다.
조건부 명령 관측 표시자의 수신과 잠재적으로 다른 처리 사이클에 데이터 처리장치로부터 조건부 결과 출력 표시자의 수신에 응답하여 조건부 명령 추적 데이터 항목들과 조건부 결과 추적 데이터 항목들을 독립적으로 출력하는 본 발명은, 데이터 처리장치가 추론적 실행 또는 순서를 벗어난 실행이 가능한지에 상관없이 모든 데이터 처리장치에 적용될 수도 있다는 것은 명백하다. 그러나, 일부 실시예에서, 추적회로는, 데이터 처리장치로부터, 한 개 이상의 추론적으로 실행 및 추적된 정보들이 취소된 것을 표시하는 취소 표시자를 수신하도록 구성되고, 추적회로는 취소 표시에 응답하여 재정렬 추적 항목을 생성하도록 구성된다. 추적회로에 의해 출력된 재정렬 추적 항목은, 어떤 조건부 명령 추적 데이터 항목들이 취소된 명령들에 대응하고 이들 조건부 명령 추적 데이터 항목들이 폐기되어야 한다는 것을 진단 도구에게 통보한다.
추적 유닛이 재정렬 추적 데이터 항목을 출력하도록 구성된 이와 같은 일부 실시예에서, 추적회로는, 재정렬 추적 데이터 항목의 출력전에, 수신되었지만 아직 출력되지 않은 조건부 명령 추적 데이터 항목들을 출력하도록 구성된다. 이와 같은 구성은, 특정한 조건부 명령 추적 데이터 항목들의 버퍼링으로 인해, 또는 생성 시간이 재정렬 추적 데이터 항목의 출력에 걸쳐 이어지는 다른 시간들에 생성된 조건부 명령 추적 데이터 항목들의 잘못 이끌어진(misguided) 종속접속으로부터, 에러가 발생하는 것을 방지한다.
일부 실시예에서, 추적회로는, 재정렬 추적 데이터 항목의 출력전에, 수신되었지만 아직 출력되지 않은 웨이포인트 추적 데이터 항목들을 출력하도록 구성된다.
일부 실시예에서, 추적회로는, 상기 추적 입력 인터페이스에서, 조건부 분기 명령들과 로드/스토어 명령들과 관련된 추적 데이터를 수신하도록 구성되고, 상기 추적회로는 대응하는 명령이 조건부 분기 또는 로드/스토어 명령에 대응한다는 것을 표시하는 웨이포인트 표시자를 생성하도록 구성되고, 명령 관측 표시자가 데이터 처리장치에 의해 사용되어 조건부 분기 명령 이외의 조건부 명령의 실행을 표시하고, 상기 추적회로는 명령 관측 표시자와 관련된 상기 조건부 명령 추적 데이터 항목을 출력하고 웨이포인트 표시자를 동일한 추적 데이터 스트림으로 출력하도록 구성되고, 추적회로는, 상기 분기 오예측 표시자의 수신후이면서 그후에 생성하는 조건부 명령 추적 데이터 항목 또는 웨이포인트 표시자의 출력전에 재정렬 추적 데이터 항목이 출력되도록, 상기 분기 오예측 표시자에 응답하여 재정렬 추적 데이터 항목을 출력하도록 구성된다. 그러나, 분기 오예측 표시자 이전에 재정렬 추적 데이터 항목을 출력하는 것은 유효한 대안이다.
다른 실시예에서, 추적회로는, 상기 추적 입력 인터페이스에서, 조건부 분기 명령들과 로드/스토어 명령들과 관련된 추적 데이터를 수신하도록 구성되고, 상기 추적회로는 대응하는 명령이 조건부 분기 또는 로드/스토어 명령에 대응한다는 것을 표시하는 웨이포인트 표시자를 생성하도록 구성되고, 명령 관측 표시자가 상기 데이터 처리장치에 의해 사용되어 조건부 분기 명령 이외의 조건부 명령의 실행을 표시하고, 상기 추적회로는 명령 관측 표시자와 관련된 조건부 명령 추적 데이터 항목과 웨이포인트 표시자를 동일한 추적 데이터 스트림으로 출력하도록 구성되고, 추적회로는, 상기 예외 표시자의 수신후이면서 그후에 생성하는 조건부 명령 추적 데이터 항목 또는 웨이포인트 표시자의 출력전에 재정렬 추적 데이터 항목이 출력되도록, 예외 표시자에 응답하여 재정렬 추적 데이터 항목을 출력하도록 구성된다.
일부 실시예에서, 조건부 명령 추적 데이터 항목들은, 현재 프로그램 상태 레지스터 테이블의 콘텐츠에 의존하여 상기 적어도 한 개의 명령 관측 표시자들의 서브셋에 대해 생성된다.
제 2 면에 따르면, 본 발명은, 프로그램 명령들의 실행에 응답하여 데이터 처리 연산을 행하는 데이터 처리회로와, 조건부 명령의 실행을 표시하는 명령 관측 표시자와, 상기 조건부 명령의 실행에 응답하여 상기 데이터 처리회로에 의한 결과의 출력을 표시하는 결과 출력 표시자를 추적 유닛에 독립적으로 출력하도록 구성된 추적 출력 인터페이스를 구비한 데이터 처리장치를 제공한다.
조건부 명령과 관련된 명령 관측 표시자를 출력하고 이에 대응하는 결과 출력 표시자를 독립적으로 출력할 수 있는 데이터 처리회로를 제공하는 것은 조건부 명령들의 실행의 별개의 추적과 이에 대응하는 조건부 결과들의 출력의 추적을 용이하게 한다. 이것은, 조건부 비분기 명령 등의 조건부 명령의 실행을 추적하는 간편한 메카니즘을 제공하고, 조건부 명령 실행과 이에 대응하는 조건부 결과들이 독립적으로 추적될 수 있도록 함으로써 버퍼링 요구를 줄인다.
데이터 처리장치의 일부 실시예에서, 명령 관측 표시자는 상기 데이터 처리장치에 의해 제 1 처리 사이클에 출력되고, 상기 결과 출력 표시자는 상기 데이터 처리장치에 의해 상기 제 1 처리 사이클과는 다른 제 2 처리 사이클에 출력된다.
이와 같은 일부 실시예에서, 데이터 처리회로는, 프로그램 명령들의 시퀀스의 추론적 실행 및 순서를 벗어난 실행 중 적어도 한가지를 행하도록 구성된다. 조건부 명령 실행의 추적과 조건부 결과의 출력의 추적의 별개의 수행은, 이와 같은 시스템에서 대응하는 조건부 결과와 상호관련되는 조건부 명령의 복잡성으로 인해 추론적 실행 및 순서를 벗어난 실행이 가능한 경우에 특히 유용하다.
제 3 면에 따르면, 본 발명은, 조건부 명령 추적 데이터 항목들과 조건부 결과 추적 데이터 항목들을 포함하는 추적 데이터 스트림을 수신하도록 구성된 진단장치로서, 상기 수신된 추적 데이터 스트림에서 상기 조건부 결과 추적 데이터 항목들은 상기 조건부 명령 추적 데이터 항목들과 별개이고, 상기 진단장치는, 상기 데이터 처리장치에 의해 실행된 프로그램 명령들의 이미지를 참조하여 상기 조건부 명령 추적 데이터 항목들과 상기 조건부 결과 추적 데이터 항목들을 처리하여 상기 추적 데이터 스트림을 생성하도록 구성되고 상기 프로그램 명령들의 이미지를 사용하여 상기 데이터 처리장치에 의해 실행된 프로그램 명령을 결정하도록 구성된 진단회로를 구비한, 진단장치를 제공한다.
수신된 추적 데이터 스트림에서 조건부 명령 추적 데이터 항목들과 구별되는 조건부 결과 추적 데이터 항목들을 수신할 수 있는 진단장치의 제공은 조건부 명령의 더욱 효율적인 추적을 제공한다. 조건부 명령 추적 데이터 항목들과 조건부 결과 추적 데이터 항목들 사이에 1대1 대응이 존재하지 않는 경우에도, 진단회로는 데이터 처리장치에 의해 실행된 프로그램 명령들의 이미지를 사용하여 데이터 처리장치에 의해 실행된 프로그램 명령들을 결정할 수 있다. 이것은, 프로그램 명령들의 이미지를 참조하여 조건부 결과 추적 데이터 항목들의 분석을 통해 조건부 명령 추적 데이터 항목들의 존재를 추론할 수 있는 능력을 진단장치에 제공함으로써, 압축된 추적 데이터 스트림들을 처리할 수 있는 진단장치의 능력을 증진시킨다.
본 발명에 따른 진단장치의 일부 실시예에서, 진단장치는, 추적 유닛으로부터 추적 데이터 스트림에서, 분기 명령, 로드 명령 및 기억 명령 중에서 한 개가 데이터 처리장치에 의해 실행되었다는 것을 각각 표시하는 웨이포인트 추적 항목들을 수신하도록 구성된다. 진단장치에 의해 수신된 추적 데이터 스트림은 조건부 명령 추적 데이터 항목들과 조건부 결과 추적 데이터 항목들을 더 포함하고, 웨이포인트 추적 항목들과 조건부 명령 추적 데이터 항목들의 수신된 순서는 대응하는 웨이포인트 명령들 및 조건부 명령들의 실행 순서와 다르다.
이와 같은 일부 실시예에서, 진단장치는, 수신된 웨이포인트 추적 항목들을 버퍼링하는 웨이포인트 버퍼와, 수신된 조건부 명령 추적 항목들을 버퍼링하는 조건부 명령 버퍼를 구비한다. 이와 같은 구성은, 진단장치가 웨이포인트 추적 항목들과 조건부 명령 추적 데이터 항목들의 절절한 순서를 해결하는 것과 진단회로에 의해 분석된 프로그램 명령들의 이미지가 내포한(implied) 순서로 수신된 순서를 조정하는(reconcile) 것을 더 단순하게 만든다.
이와 같은 일부 실시예에서, 진단회로는, 프로그램 명령 이미지를 참조하여 웨이포인트 버퍼 내부의 엔트리들과 조건부 명령 버퍼 내부의 엔트리들을 독립적으로 분석함으로써 수신된 순서를 바꿔넣어(permute) 실행 순서를 얻도록 구성된다.
본 발명에 따른 진단장치의 일부 실시예에서, 진단회로가 프로그램 이미지 내부의 조건부 명령과 마주치지만 조건부 명령 추적 항목이 현재 조건부 명령 버퍼 내부에 존재하지 않는 경우, 조건부 추적 항목이 조건부 명령 버퍼 내부에 나타날 때까지, 진단회로가 프로그램 이미지의 대응하는 실행 스레드의 추가적인 처리를 지연시키도록 구성된다. 이와 같은 구성은, 프로그램 이미지 내부의 명령들의 시퀀스와 진단회로에 의해 수신된 정보 사이의 효율적인 상관관계를 확보한다. 이것은, 추적 정보의 일부가 프로그램 이미지를 참조하여 재구성되어야 하는 압축된 추적 데이터 스트림의 수신 및 분석을 처리할 수 있는 유연성을 진단회로에게 제공한다.
제 4 면에 따르면, 본 발명은, 데이터 처리장치에서 수신된 정보에 근거하여 상기 데이터 처리장치의 처리 활동을 표시하는 추적 데이터의 항목들을 생성하는 방법으로서, 조건부 명령의 실행을 표시하는 적어도 한 개의 명령 관측 표시자와 상기 적어도 한 개의 조건부 명령의 실행의 결과의 상기 데이터 처리장치에 의한 출력을 표시하는 적어도 한 개의 결과 출력 표시자를 상기 데이터 처리장치에서 수신하는 단계와, 상기 적어도 한 개의 명령 관측 표시자와 상기 적어도 한 개의 결과 출력 표시자를 처리하고, 상기 적어도 한 개의 명령 관측 표시자와 상기 적어도 한 개의 결과 출력 표시자로부터 대응하는 명령 추적 데이터 항목들과 조건부 결과 추적 데이터 항목들을 생성하고, 상기 조건부 명령 추적 데이터 항목들과 상기 조건부 결과 추적 데이터 항목들을 독립적으로 출력하여 상기 진단장치에 의해 조건부 명령들과 이에 대응하는 조건부 결과들의 별개의 추적 분석을 가능하게 하는 단계를 포함하는, 추적 데이터 항목 생성방법을 제공한다.
제 5면에 따르면, 본 발명은, 데이터 처리장치의 처리 활동을 표시하는 추적 데이터의 항목들을 상기 데이터 처리장치 내부에서 생성하는 방법으로서, 프로그램 명령들의 실행에 응답하여 데이터 처리 연산을 수행하는 단계와, 조건부 명령의 실행을 표시하는 명령 관측 표시자와 상기 조건부 명령의 실행에 응답하여 상기 데이터 처리회로에 의한 결과의 출력을 표시하는 결과 출력 표시자를 추적 유닛에 독립적으로 출력하는 단계를 포함하는, 추적 데이터 항목 생성방법을 제공한다.
제 6면에 따르면, 본 발명은, 데이터 처리장치에 의해 생성된 추적 데이터를 처리하는 진단방법으로서, 조건부 명령 추적 데이터 항목들과 조건부 결과 추적 데이터 항목들을 포함하는 추적 데이터 스트림을 수신하는 단계를 포함하고, 상기 수신된 추적 데이터 스트림에서 상기 조건부 결과 추적 데이터 항목들은 상기 조건부 명령 추적 데이터 항목들과 별개이고, 상기 진단방법은, 상기 데이터 처리장치에 의해 실행된 프로그램 명령들의 이미지를 참조하여 상기 조건부 명령 추적 데이터 항목들과 상기 조건부 결과 추적 데이터 항목들을 처리하여 상기 추적 데이터 스트림을 생성하는 단계와, 상기 프로그램 명령들의 이미지를 사용하여 상기 조건부 명령 추적 데이터 항목들과 상기 조건부 결과 추적 데이터 항목들 사이의 상관을 행함으로써, 상기 데이터 처리장치에 의해 행해진 처리 스텝들을 결정하는 단계를 더 포함하는 진단방법을 제공한다.
본 발명의 적어도 실시예들의 추가적인 발명내용과 특징은 종속항에 기재되어 있다. 종속항들의 특징은 적절히 독립항들의 특징과 결합될 수 있고 청구항에 명시적으로 기재된 것 이외의 것과 결합될 수도 있다.
이하, 다음의 첨부도면에 예시된 바람직한 실시예들을 참조하여 본 발명을 더욱 상세히 설명한다:
도 1은 본 발명의 일 실시예에 따른 데이터 처리 시스템을 개략적으로 나타낸 것이고,
도 2는 도 1의 추적 유닛의 현재 프로그램 상태 레지스터 테이블을 더욱 상세히 나타낸 것이고,
도 3a는 4개의 프로그램 명령들의 시퀀스의 실행과 관련된 추적 및 마킹(marking)을 개략적으로 나타낸 테이블이고,
도 3b, 도 3c 및 도 3d는 도 3a의 테이블에 나타낸 4개의 명령들의 정확히 동일한 시퀀스가 순서대로(in-order)가 아니라 순서를 벗어나 실행될 때 어떤 CPSR 값들이 추적되고 어떤 c-결과 키들이 생성되는가를 나타낸 테이블이고,
도 4는 도 1의 CPSR들(150)에 대한 3 상태 CPSR 플래그들을 개략적으로 나타낸 상태 머신이고,
도 5는, 세 번째 조건부 명령의 디코딩후에 조건부 결과들이 평가되는 3개의 조건부 명령들(ADDEQ, ADDNE. ADDVS)의 실행을 개략적으로 나타내고 각각의 명령 디코드 스테이지에 대응하는 조건부 결과 페이로드와 CPSR 테이블 동작을 나타낸 테이블이고,
도 6a는 명령 취소 이벤트들 직후의 ADDNE 명령에 대해 조건부 명령 태그 B에 대한 갱신이 새로운 c-아톰(atom) 키가 생성되도록 하지 않아야 하는 경우를 개략적으로 나타낸 테이블이고,
도 6b는, 도 6a의 상황과 대조적으로, 조건부 명령들이 취소된 후에 동일한 c-아톰 키들을 사용하는 것이 항상 정확한 것은 아니라는 것을 개략적으로 나타낸 테이블이고,
도 6c, 도 6d 및 도 6e는 2-상태 CPSR 테이블이 유지되는, 도 3a 내지 도 3d를 참조하여 설명한 기술에 대한 대안적인 기술을 나타낸 것이고,
도 7a 내지 도 7d는 동일한 추적 데이터 스트림 내에서 웨이포인트 및 c-아톰들이 어떻게 처리되는지를 개략적으로 나타낸 테이블이고,
도 8은 조건부 아톰 패킷들과 웨이포인트 패킷들 모두를 포함하는 추적 데이터 스트림의 수신시에 도 1의 진단회로에 의해 취해지는 동작을 개략적으로 나타낸 흐름도이고,
도 9a 내지 도 9c는 웨이포인트들과 조건부 명령 추적 데이터 항목들의 종속접속을 개략적으로 나타낸 테이블이고,
도 10은 들어오는 추적 데이터를 분석하기 위해 도 1의 진단장치에 의해 취해진 동작을 개략적으로 나타낸 흐름도이고,
도 11a 내지 도 11c는 추적 데이터 스트림 내부의 재정렬 추적 데이터 항목의 상대 위치지정을 개략적으로 나타낸 것이고,
도 12a 및 도 12b는 조건부 결과 추적 데이터에 근거하여 조건부 결과 실행이 내포되는 방법을 개략적으로 나타낸 테이블이고,
도 13은 "last-c-atom-generated-key"와 "last-c-atom-output-key"에 기억된 값들을 나타낸, 도 12b의 시퀀스와 유사한 추적 데이터 시퀀스를 개략적으로 나타낸 테이블이고,
도 14a는 추적 스트림을 출력하고, 특정한 c-아톰들이 생성되지만 버퍼링되는 추적 압축 방식(scheme)을 구현함에 있어서, 도 1의 ETM의 동작을 개략적으로 나타낸 흐름도이고,
도 14b는 본 발명의 일 실시예에 따른 추적 유닛을 개략적으로 나타낸 것이고,
도 15는 처리장치, 추적회로 및 진단장치를 개략적으로 나타낸 것이고,
도 16은 영국 캠브리지의 ARM 리미티드에 의해 설계된 프로세서에서 사용되는 조건 플래그들과 조건 상태들의 예를 나타낸 것이고,
도 17은 조건 플래그들의 값들의 특정한 세트들을 식별하기 위한 식별자들의 예를 나타낸 것이고,
도 18은 조건 갱신 명령의 실행시에 조건 플래그들의 값을 추적하는 방법을 예시한 것이고,
도 19는 도 18의 방법에서 생성된 추적 데이터를 분석하는 대응하는 방법을 나타낸 것이고,
도 20은 도 18의 방법에서 생성된 추적 스트림의 예와 도 19의 방법에 따른 추적 스트림의 분석 예를 나타낸 것이고,
도 21은 조건부 명령들이 개입하지 않고 보수의 조건 갱신 명령들이 연속하여 발생하는 프로그램 명령들의 시퀀스의 예를 나타낸 것이고,
도 22는 조건부 명령의 실행시 조건 플래그들의 값들을 추적하는 방법을 나타낸 것이고,
도 23은 도 22의 방법에서 생성된 추적 데이터를 분석하는 대응하는 방법을 나타낸 것이고,
도 24는 도 19의 방법에서 생성된 추적 스트림의 예와 도 20의 방법에 따른 추적 스트림의 분석 예를 나타낸 것이고,
도 25는 조건부 명령의 실행시 조건 플래그들의 적어도 필요한 서브셋의 값들을 추적하는 방법을 나타낸 것이고,
도 26은 도 25의 방법에서 생성된 추적 데이터를 분석하는 대응하는 방법을 나타낸 것이고,
도 27은 도 25의 방법을 사용하여 추적 스트림을 생성하는 예와 도 26의 방법을 사용하여 추적 스트림을 분석하는 예를 나타낸 것이다.
도 1은 본 발명의 일 실시예에 따른 데이터 처리장치를 개략적으로 나타낸 것이다. 데이터 처리장치는, 명령 메모리(90), 중앙처리장치(CPU)(100), 추적회로를 포함하는 임베디드 추적 매크로 셀(embedded trace macro cell: ETM(180)과, 임베디드 추적 매크로 셀(180)의 출력을 분석하는 진단회로(196)를 구비한다.
중앙처리장치(100)는, 명령 페치 유닛(110), 디코드 스테이지(122)를 포함하는 파이프라인(120), 레지스터들의 세트(130), 산술 논리 연산장치(ALU)(140), 현재 프로그램 상태 레지스터들의 세트(CPSR)(150), 메모리 인터페이스(160), 명령 출력 인터페이스(172) 및 결과 출력 인터페이스(174)를 구비한다.
명령 페치 유닛(110)은 명령 메모리(90)에 기억된 컴퓨터 프로그램(92)으로부터 명령들을 페치하고 이들 페치된 명령들을 파이프라인(120)의 디코드 스테이지(122)에 공급한다. 도 1에 도시된 중앙처리장치 CPU(100)은 ARM 파이프라인 데이터 프로세서이다. 파이프라인(120)은 프로그램 명령들의 실행과 관련된 다수의 연산이 직렬이라기 보다는 거의 동시에 착수될 수 있도록 함으로써, 명령들의 스루풋을 증가시킨다. 명령 페치 유닛(110)에 의해 행해지는 명령 페치 스테이지는 파이프라인(120)의 필수적인 부분으로 생각될 수 있다. 파이프라인(120)의 디코드 스테이지(122)는, 가장 최근에 페치된 특정한 명령의 실행을 위해 사용될 레지스터 뱅크(130)로부터 레지스터들의 디코딩을 포함한다. CPU(100)는 프로그램 명령들의 추론적 실행 또는 순서를 벗어난 실행을 행하도록 구성된다.
디코드 스테이지 이후에, 명령이 파이프라인의 실행 스테이지(120)로 진행하여, 레지스터 뱅크(130)로부터의 레지스터들이 판독되고 산술 논리 연산장치(140)를 사용하여 명령들을 실행한다. 파이프라인(120)의 마지막 스테이지는, 명령의 실행의 레지스터 뱅크 결과(들)의 기록을 포함한다.
CPU(100)는 고정 길이를 각각 갖는 복수의 레지스터들을 갖는 레지스터 뱅크(130)를 구비한다. 레지스터 뱅크(130)는 프로그램 명령들의 실행중에 사용하기 위한 범용 레지스터들의 세트를 포함한다. 이때, 산술 연산, 비교, 논리 연산 및 데이터 이동 연산 등의 ARM 데이터 처리 명령들은, ARM 아키텍처가 로드/스토어 아키텍처이기 때문에, 메모리 내부가 아니라 레지스터들에서만 동작한다. 또한, 레지스터 뱅크(130) 내부에는, 현재 페치되고 있는 프로그램 명령의 인덱스들을 만드는 전용 프로그램 카운터(미도시)가 포함된다. CPU 내부에 포함되는 또 다른 레지스터들은, 전용의 현재 프로그램 상태 레지스터(CPSR)들의 세트(150)와 전용의 저장된 프로그램 상태 레지스터들(CPSR)이 세트(미도시)이다. 도 1의 실시예에서, 레지스터 뱅크(130)의 레지스터 R14는 링크 레지스터인 반면에, 레지스터 R15는 프로그램 카운터이다. 특정한 명령들이 현재 프로그램 상태 레지스터들(CPSR들)에 대한 액세스를 허용한다. 현재 프로그램 상태 레지스터들(150) 각각은 4개의 조건부 코드 플래그들 Z, V, C 및 M의 세트를 구비한다. 이것을 이하의 도 2를 참조하여 더욱 상세히 설명한다.
4가지 조건부 코드 플래그들 이외에, CPSR들(150)은 현재 프로세서 모드 및 인터럽트 디스에이블 비트들을 규정하는 "모드 비트들"을 더 포함한다. 레지스터 뱅크(130)의 링크 레지스터 R14는, 소위 "Branch with Link" 프로그램 명령들이 실행될 때에 대한 복귀 어드레스를 기억한다. 복귀 어드레스는 R15 내부의 프로그램 카운터에서 계산된다. 프로그램의 실행 흐름이 링크된 분기로부터 복귀할 수 잇도록 하기 위해, 링크 레지스터 R14의 콘텐츠가 프로그램 카운터 레지스터 R15에 복사된다. CPSR들에 기억된 플래그들 Z, V. C 및 M의 현재 값들은 조건부로 실행된 명령들이 실행되어야 하는지 여부를 결정하는데 사용된 특정한 조건들에 대응한다. 대부분의 명령 세트들이 분기 명령들만 조건부로 실행되는 것을 허용하는 반면에, 다수의 ARM 명령들이 CPU(100)가 이들 명령을 실행할 것인지 여부를 결정하는 조건필드를 포함하기 때문에 ARM 아키텍처는 다수의 명령들이 조건부로 실행되도록 허용한다.
CPSR들(150)의 콘텐츠는 명령의 조건 필드에 의해 명시된 조건이 만족되었는지 여부를 평가하는데 사용된다. 모든 종류의 명령을 조건부로 실행할 수 있는 능력은 분기가 없는 매우 밀집한 인라인 코드를 허용한다. 분기는 일반적으로 그저 파이프라인(120)을 지연시킬 뿐이므로, 프로그램 코드 내부에 다수의 분기 명령들을 포함시킬 필요성을 없애는 것은 명령 실행을 더욱 효율적으로 만든다. 다수의 조건부 명령들을 실행하지 않을 때(이때 명시된 조건들이 만족되지 않는다)의 시간상의 불이익은, 이와 같이 구성하지 않았더라면 필요하였을 분기 명령들 또는 서브루틴 호출의 오버헤드보다 일반적으로 적다. 명령을 조건부로 실행하기 위해, 명령에 단순히 적절한 조건이 나중에 부가된다(post-fixed). 예를 들어, ARM 명령 세트에서는, 비조건부 ADD 명령이 "ADD r0, r1, r2"의 형태를 취하지만, 제로 플래그 Z가 설정된다는 조건하에서 이것을 조건부로 실행하기 위해, 이 명령이 "ADDEQ r0, r1, r2"로 변경될 수 있다. 메모리 인터페이스(160)를 사용하여 메모리에서 데이터를 로드하거나 메모리에 데이터를 기억한다.
도 1에 도시된 것과 같이, 파이프라인(120)의 디코드 스테이지(12)로부터 CPU(100)의 명령 출력 인터페이스(172)와 ETM(180)의 명령 입력 인터페이스(182)로 제 1 경로(123)가 설치된다. 일반적으로, 조건부 명령들은 프로세서의 디코드 스테이지(122)로부터 추적되는 한편, 대응하는 조건부 결과들은 ALU(140)로부터 추적된다. 제 2 경로(152)는 CPU(100)의 CPSR들(150)을 CPU(100)의 결과 출력 인터페이스(175)에, 그리고 결국 ETM(180)의 결과 입력 인터페이스(184)에 연결한다. CPSR들(150)을 파이프라인(120)에 접속하는 경로도 존재한다. 따라서, CPU(100)는 조건부 명령들에 대한 1개의 출력 인터페이스(172)와 이에 대응하는 조건부 결과들(174)에 대한 또 다른 출력 인터페이스(174)를 갖는다는 것을 알 수 있다. 이때, 모든 명령이 조건부 명령인 것은 아니지만, 도 1의 실시예는 특히 조건부 명령들의 실행 및 추적의 설명에 초점을 맞추고 있다는 것을 알 수 있다.
임베디드 추적 매크로 셀(180)은 CPU(100)에 대한 실시간 명령 추적 및 데이터 추적을 제공하는 추적 유닛이다. ETM(180)은 추적 정보를 생성하고, 이 추적 정보는 진단회로(196)에 의해 사용되어 명령 메모리(90)에 기억된 컴퓨터 프로그램(92)의 전체 또는 일부의 실행을 재구성한다. ETM(180)은, CPU(100)로부터 조건부 명령 관측 표시자들을 수신하는 명령 인터페이스(182)와, CPU(100)으로부터 이에 대응하는 조건부 결과 표시자들을 수신하는 결과 인터페이스(184)를 구비한다. 명령의 표시는 파이프라인의 더 이전의 스테이지에서 얻어질 수도 있고 명령이 완전히 실행되는 경우 다수의 처리 사이클 이후까지 알지 못하므로, 이 명령의 실행은 일반적으로 이것이 명확하게 실행될 것이라는 것을 표시하지 않는다. CPU(100)은, 명령 인터페이스(172)를 통한 조건부 명령 관측 표시자들과 추적 결과 인터페이스(174)를 통한 조건부 결과 출력 표시자들을 독립적으로 출력한다. 주어진 조건부 명령 관측 표시자는 CPU의 제 1 처리 사이클에 출력되는 한편, 이에 대응하는 조건부 결과 출력 표시자는 CPU의 이와 다른 제 2 처리 사이클에 출력된다. 따라서, 추적회로(180)의 명령 인터페이스(182)에서의 조건부 명령 관측 표시자들의 수신 타이밍은 결과 인터페이스(184)에서의 이에 대응하는 조건부 결과 출력 표시자들의 수신 타이밍과 다르다. CPU(100)는, 해당 조건부 명령과 관련된 CPSR들(150) 내부의 특정한 레지스터를 식별하는 관련된 "태그들"을 갖는 조건부 명령 관측 표시자들과 조건부 결과 출력 표시자들을 출력한다.
각각의 조건부 명령에 대해, 대응하는 조건부 결과 출력 표시자는, 조건부 명령의 통과/실패 상태를 진단회로(196)가 결정할 수 있도록 하는 페이로드를 포함한다. 이 페이로드는 다음 중에서 한 개이다:
1. 통과/실패 결과
2. 부분적인 CPSR 값
3. 전체 CPSR 값(일부의 구현은 일부 CPSR 값을 출력하지 않는다는 점에 주의하기 바란다)
4. 다른 출력.
이때, 모든 조건부 명령들이 대응하는 추적 결과를 갖는 것은 아니며, 그 보다는, 조건부 명령들의 서브셋만이 이에 대응하는 추적 결과(조건부 결과 출력 표시자)를 갖는다. 명령 관측 표시자가 주어진 조건부 명령에 대응하여 CPU 명령 인터페이스(172)에 의해 출력되는 경우에, ETM(180)은 이 조건부 명령과 관련하여 소위 "c-아톰"을 생성하는데, c-아톰은 조건부 명령의 추적 출력(CPU(100)에 의해 출력된 명령 관측 표시자)에 대응한다. 대응하는 조건부 결과 출력 표시자가 CPU의 결과 출력 인터페이스(174)를 통해 결과 인터페이스(184)로 출력되면, 이것이 "c-결과"로 표시된다. 따라서, ETM 명령 인터페이스(182)는 조건부 명령 관측 표시자들과 그들의 대응하는 (일반적으로, 그러나 항상 그런 것은 아니지만, 관련된 CPSR(150) 레지스터들을 식별하는) 태그들을 수신하는 한편,ETM 결과 인터페이스(184)는 조건부 결과 출력 표시자들과 그들의 대응하는 태그들을 수신한다.
ETM(180)은, ETM 명령 인터페이스(182)로부터 입력을 수신하고 조건부 명령 관측 표시자와 이에 대응하는 태그를 c-아톰으로 변환하도록 구성된 명령 키 변환회로(186)를 구비한다. 마찬가지로, ETM(180)은, ETM 결과 인터페이스(184)에 접속되고 결과 인터페이스(184)에서 수신된 조건부 결과 출력 표시자들과 이에 대응하는 태그들을 c-결과들과 이에 대응하는 키들로 변환하는 결과 키 변환회로(188)를 구비한다. ETM 명령 인터페이스(182)에 의해 수신된 조건부 명령 관측 표시자들은, CPU의 관련된 CPSR 레지스터를 표시하는 태그와, EQ(equal to), MI(minus) 또는 LT(less than) 등의 조건 유형을 포함한다. ETM 결과 인터페이스(184)를 통해 수신된 조건부 결과 출력 표시자들은, (마찬가지로 보통 CPU(100)의 관련된 CPSR 레지스터를 표시하는) 관련된 태그들과 결과 페이로드를 포함한다. 태그 시스템은 CPU(100)에 의해 사용되어, 어떤 명령 관측 표시자(c-아톰)가 어떤 결과 출력 표시자(c-결과)에 대응하는지를 파악한다. 명령 키 변환회로(186) 및 결과 키 변환회로(188)는 코어 태그에 의해 인덱스가 만들어진 추적 키들의 테이블을 이용하여, 코어 태그들을 이미 정의된 시퀀스를 따르는 추적 키들로 변환한다. 조건부 결과 출력 표시자들이 늦게 평가될 때 추적 키들이 충돌할 수도 있기 때문에, 이 문제를 해소하기 위해 특수 키들을 사용한다. 키들이 순차적이 되도록 이름이 변경될 때, 다음의 순차 키가, 결과 출력 표시자(c-결과)가 아직 출력되지 않은 이전의 명령 실행 표시자(c-아톰)와 동일한 값이 될 가능성이 있다. 이 경우에, 순차 키를 사용하면 다른 명령 실행 표시자들에 대해 동일한 키를 갖는 2개의 결과 출력 표시자를 생성할 것이기 때문에, 순차 키를 사용하지 않는다. 그 대신에, 순차 키로서 사용되지 않는 값을 갖는 특수 키가 사용된다. 특수 키들와 태그들 사이에 1+1 매핑이 존재한다. 예를 들어, 8개의 태그가 존재하면, 16개의 순차 키들과 8개의 특수 키들이 존재할 수 있다.
명령 키 변환회로(186)의 출력은 제 1 추적 생성회로(190)에 공급되어, 들어온 c-아톰들과 이에 대응하는 키들을 명령 추적 데이터의 패킷들로 변환한다. 마찬가지로, 결과 키 변환회로(188)는 c-결과들과 이에 대응하는 키들을 제 2 세트의 추적 생성회로(192)에 공급하여, 출력으로서 조건부 결과 추적 패킷들을 생성한다. (패킷화된 c-아톰들과 이와 관련된 키들을 포함하는) 조건부 명령 추적 패킷들과 (패킷화된 c-결과들과 이에 대응하는 키들을 포함하는) 조건부 결과 추적 패킷들은 FIFO(194)에 출력되어 기억한다. FIFO(194)에 기억된 데이터는 진단회로(196)에 공급된다. 2 세트의 키 변환회로 186, 188은 (조건부 명령들과 결과들에 대한 관련된 CPSR 레지스터들을 식별하는) 코어 태그들을 이름 바꾸기(renaming) 연산의 유형으로 추적회로 키들로 효과적으로 변환한다. 이것은 일부의 특정한 예를 참조하여 이하에서 더욱 상세히 설명한다.
진단회로(196)는 수신된 추적 데이터를 사용하여 CPU(100) 내부의 실행 이벤트들을 재구성한다. 이것을 하기 위해, 진단회로(196)는, CPU(100)에 의해 실행되고 있는 명령들을 갖는 컴퓨터 프로그램(92)의 복사본에 해당하는 컴퓨터 프로그램 이미지(199)를 액세스한다. 이와 같은 프로그램 이미지(199)를 사용하는 것은 진단회로가 프로그램 코드를 분석하여, 예를 들어, 명령 실행의 시퀀스 내부의 어느 위치에서 분기 명령이 발생하는지를 결정할 수 있도록 한다. 추적 데이터를 수신하면, 진단회로(196)는, (CPU(100)에 의해 출력된 명령 관측 표시자들에 대응하는) 조건부 명령 추적 데이터를 c-아톰 FIFO(197)에 기억하고, 조건부 분기 명령들과 조건부 로드/스토어 명령들과 명확히 관련된 추적 데이터를 웨이포인트 FIFO(198)에 기억한다. 후술하는 것과 같이, "c-아톰들"은 조건부 분기를 제외한 모든 조건부 명령들을 추적하는데 사용되고, "웨이포인트들"은 조건부 분기들 또는 비조건부 로드/스토어 명령들을 추적하는데 사용된다. 그러나, 어떤 경우에는, 예를 들어, 조건부 로드/스토어에 대해, 한 개의 명령이 웨이포인트 및 c-아톰 모두이다.
도 1에 도시된 것과 같이, ETM(180)은 대응하는 CPSR 테이블(193)을 포함하고, 진단회로(196)도 CPSR 테이블(200)을 포함한다. 이들 2가지 CPSR 테이블들 193, 200을 사용하여, 명령들이 순서를 벗어나 실행될 때 어떤 CPSR 결과가 추적되어야 하는지를 추적한다. 일부의 경우에는, 한 개의 플래그 설정 명령을 따르기 위해 다수의 CPSR 값들이 추적된다. 예시적인 CPSR 테이블(193)을 도 2에 더욱 상세히 나타낸다. 이때, CPSR 테이블 193(도 2 참조)은 프로세서에 의해 사용되는 조건부 코드 플래그가 아니라 CPSR 상태 엔트리들(또는 CPSR 플래그 마크들)을 포함한다.
도 2에 도시된 것과 같이, CPSR 테이블(193)은 각각의 CPSR 조건부 코드 플래그와 관련하여 2 비트(3가지 상태)를 기억하도록 구성된다. 4개의 CPSR 조건 플래그는 Z-플래그, V-플래그, C-플래그 및 N-플래그이다. Z-플래그는 ALU 플래그로부터 제로 결과를 표시하고, V-플래그는 명령의 실행중에 발생하는 ALU 연산 오버플로우를 표시하고, C-플래그는 ALU 연산이 자리올림(carry)을 발생하였다는 것, 예를 들면 레지스터 폭을 초과한 비트들의 수에 포함된 결과를 표시하고, N-플래그는 ALU 플래그로부터 음의 결과(마이너스 부호)가 존재하였다는 것을 표시한다.
도 2의 CPSR 테이블(193)에서, 3가지 다른 상태에 대응하는 마커들이 존재한다. 이들 상태는 다음과 같다:
1. 비트값 00은 추적되지 않고 마크되지 않았다.
2. 비트값 01은 추적 및 마크될 예정이다.
3. 비트값 11은 추적 및 마크되었다.
ETM의 CPSR 테이블(193)에 기억된 상태들은 명령 키 변환회로(186) 및 결과 키 변환회로(188)에 의해 사용되어, 시퀀스 내부의 다음 추적 키가 언제 생성되어 키 변환처리에 대한 태그에 적용되어야 하는지를 결정한다. 조건부 명령 및 조건부 결과와 함께 출력되는 코어 태그들은 일반적으로 이 특정한 명령에 의해 사용되고 있는 특정한 CPSR, 이 경우에는 6가지 가능한 CPSR 레지스터들, 즉, CPSRA, CPSR B, CPSR C, CPSR D, CPSR E 또는 CPSR F 중에서 한 개를 식별한다는 것을 상기하기 바란다. 더구나, 6개의 CPSR 레지스터들 각각에 대한 4가지 가능한 플래그 상태들(Z, V, C 또는 N) 중에서 한 개가 지정된다. 또한, 테이블에는 명령 추적 데이터가 생성될 때 사용되는 키 값들이 기억된다. 결과 추적 데이터가 생성될 때, 테이블에서 검색이 행해져 사용할 키를 결정한다.
도 3a는 3가지 다른 조건부 가산 명령들, 즉 ADDEQ, ADDNE 및 ADDVS를 포함하는 4개의 프로그램 명령들의 시퀀스의 순서에 맞는 실행을 개략적으로 나타낸 테이블이다. 도 3a 내지 도 3d의 예는, 2가지 다른 CPSR 조건부 코드 플래그들(즉, 플래그 마크들)이 각각의 CPSR 값과 관련하여 한 개의 상태만을 기억하는 CPSR 테이블에서 추적되는 것을 나타내고 있다.
도 3a의 테이블에서는, 실행된 첫 번째 명령이 비교 명령 CMP인데, 비교가 후속하는 조건부 명령의 결과가 의존하는 연산이기 때문에, 이 비교 명령이 모든 마커 비트들을 제로값으로 소거되게 한다. 즉, 후속하는 3개의 조건부 명령들의 실행 또는 다른 사항이 CMP의 실행 결과에 의존한다. 첫 번째 조건부 명령은 ADDEQ 명령인데, 이것은 비교가 정확한 동등을 발생하였는지에 의존하는 가산 연산이다. 이 조건부 명령은 CPSR의 Z 플래그를 이용하므로, 가산 ADDEQ 명령의 실행시에 CPSR 테이블의 Z 마커가 1로 설정된다. 이에 따라, Z 플래그를 포함하는 CPSR이 추적된다. 다음에, ADDNE 명령이 실행되는데, 이것은 비교의 결과가 같지 않을 때에만 행해지는 가산 연산에 해당하기 때문에, 이 명령도 Z 플래그를 이용한다. 따라서, CPU(100)(도 1 참조)에 의한 ADDNE 명령의 실행시에, 마커 비트들이 변경되지 않는다. 마지막으로, 오버플로우에 대응하는 CPSR의 V 플래그를 이용하는 ADDVS 명령이 실행되어, 이 명령이 실행될 때, V 마커가 1로 설정되고 Z 마커가 세트로 유지된다. 따라서, 도 3a에 도시된 4개의 명령의 실행의 종료시에, V 플래그 및 Z 플래그를 포함하여 CPSR(105)이 추적된다.
도 3b, 도 3c 및 도 3d는, 도 3a의 테이블에서와 정확히 동일한 시퀀스의 4개의 명령들이 실행되지만 순서에 맞는 것이 아니라 순서를 벗어나 실행될 때 어떤 CPSR 값들이 추적되고 어떤 c-결과 키들이 생성되는지를 나타낸 테이블이다. 이 경우에, CPU(100)를 실행하는 타이밍 및 능력에 의존하여 3가지 다른 가능한 결과가 존재한다. 도 3b의 테이블에서는, 조건부 결과들이 신속하게 이용가능하므로 두 번째 c-아톰에 대해 다른 추적 키가 사용된다. 이들 3가지 모든 조건부 명령들이 조건부로 실행되는지 여부는 동일한 비교 명령 CMP(4개의 시퀀스의 첫 번째 명령)의 결과에 모두 의존하기 때문에, 도 3b의 경우에 이들 3가지 모든 조건부 명령들은 동일한 조건부 명령 태그를 갖는다. 첫 번째 조건부 가산 명령인 ADDEQ와 마주쳤을 때, 이것이 Z-플래그에 의존하기 때문에, "0"의 c-아톰 키들이 생성된다. 후속하는 ADDNE 명령에 대해 새로운 c-아톰 키가 생성되지 않는데, 이것은 이전의 명령과 동일한 Z 플래그에 의존하기 때문이다. 그러나, 다른 CPSR 플래그, 즉 V-플래그에 의존하는 ADDVS 명령에는 "1"의 두 번째 c-아톰 키가 할당된다. 도 3b에 도시된 거소가 같이 ADDEQ의 디코딩 직후의 사이클에 제 1 조건부 명령(ADDEQ)에 대한 조건부 결과가 이용가능해지고, A의 이와 같은 조건부 결과 태그는 페이로드가 Z 플래그인 제로값의 C-결과 키로 변환되었다. 명령이 디코드된 직후의 사이클에 ADDVS 명령의 조건부 결과가 이용가능해지고, 이것은 "1"의 값과 V 플래그의 페이로드를 갖는 두 번째 c-결과 키의 생성을 일으킨다.
도 3c는 도 3b의 경우에서보다 (CPU(100)의 능력으로 인해) 조건부 결과가 평가하는데 더 오래 걸리는, 순서를 벗어난 프로세서에서 도 3a의 동일한 4가지 명령의 실행을 나타낸 것이다. 이 경우에, ADDVS 명령(4개의 시퀀스의 4번째 명령)의 디코딩 후에 첫 번째 조건부 겨로가 태그가 사이클을 출력한다. 따라서, 이 경우에, ADDEQ 명령(Z 플래그를 사용한다)에 대응하는 c-아톰과 ADDVS(V 플래그를 사용한다)에 대응하는 c-아톰 모두에 대해 동일한 "0"의 c=결과 키가 사용되는데, 이것은, 이들 모두가 Z 플래그 및 V 플래그의 페이로드를 갖는 "0"의 단일의 c-결과 키를 공유하기 때문이다.
도 3d의 테이블은 도 3a의 명령 시퀀스에 대한 순서를 벗어난 실행 결과의 마지막 예이다. 이 경우에, 4개의 시퀀스(CMP, ADDEQ, ADDNE, ADDVS) 밖의 2개의 나중에 있는 명령들(CMP 및 SUBEQ)이 CPU(100)에 의해 완전히 해결된 후에 순서를 벗어난 프로세서에서 조건부 결과가 이용가능하게 된다. 3개의 이전의 조건부 명령들(ADDEQ, ADDNE, ADDVS)이 의존하는 조건이 첫 번째 CMP인 반면에 SUBEQ가 의존하는 조건이 두 번째 CMP라는 사실을 반영하여, SUBEQ 명령에 대한 조건부 명령 태그가 "B"인 반면에, 이들 3개의 이전의 조건부 명령들에 대한 조건부 명령 태그는 "A"이다. 조건부 결과 태그 B가 조건부 결과 태그 A보다 앞에 있으므로, 조건부 명령 태그 A를 갖는 선행하는 3개의 조건부 명령들의 해결 이전에 조건부 명령 SUBEQ가 완전히 해결된다는 것을 알 수 있다. 이때, CMP 명령(나머지 조건부 명령들이 의존하는 명령)이 디코드될 때마다, CPSR에 변경이 존재하여, 조건부 명령 태그에 대해 이에 대응하는 변경이 존재한다. 따라서, 도 3d의 테이블에서는, 조건부 명령 태그 "B"에 대한 조건부 결과 이후에(즉, 이 조건부 결과 다음의 처리 사이클에서) 조건부 명령 태그 "A"에 대한 결과가 도달한다. 조건부 결과 B의 페이로드는 Z 플래그인 반면에, 조건부 결과 태그 A의 페이로드는 Z 플래그 및 V 플래그이다.
본 발명의 실시예에 따른 조건부 명령들과 조건부 결과들의 별개의 추적은 추적 결과의 더 양호한 스루풋을 가능하게 한다. 이전에 공지된 시스템에서는 도 3d의 테이블에 있는 전체 5개의 조건부 명령들과 관련된 추적 데이터 항목들은 "A"에 의해 태그가 붙여진 조건부 결과가 출력될 준비가 될 때까지 버퍼링되어야 하기 때문에, 상기한 사실은 도 3d로부터 명백하다. 이와 대조적으로, 본 발명의 실시예들에 따르면, c-아톰들과 이에 대응하는 키들이 다른 처리 사이클에 출력될 수 있으므로, 4가지 모든 명령들에 대응하는 c-아톰들과 카들이 생성될 때 출력될 수 있다. ETM CPSR 테이블(193)을 사용하여, c-결과가 (수신된 C-아톰들에 대응하여) 언제 필요한지와 어떤 CPSR 플래그들이 추적되어야 하는지를 결정한다.
모든 CPSR 플래그들이 알려진 것은 아닐 때에도, CPU(100)가 부분적인 CPSR 값들을 계산하여 조건부 명령들을 해결할 수 있도록 구성될 때 상기한 기술이 플래그 값들의 수를 줄이는데 유용하다. 부분적인 CPSR 결과는 CPSR 내부의 모든 플래그들이 알려진 것은 아닐 때의 결과이다. 예를 들어, ADDEQ 명령은 Z 플래그가 해결되는 것만을 필요로 하므로, 조건부 명령에 대한 결과를 해결하는데 Z 플래그를 포함하는 부분적인 CPSR 결과가 충분하다. 도 3b, 도 3c 및 도 3d의 예에서는, "c-결과 키" 열과 "c-아톰 키" 열로부터, 어떤 경우에는 시퀀스의 다음 추적 키 값이 사용되는 반면, 다른 경우에는 다른 조건부 명령에 대응하는 동일한 추적 키 값이 사용된다는 것을 알 수 있다. 시퀀스의 다음 추적 키가 사용되어야 하는 시기를 결정하기 위해, CPSR 테이블에 기억된 상태들이 사용된다. (CPU(100)에 의한 명령의 실행이 개시되었다는 것을 표시하는) 이 명령에 대응하여 x-아톰이 생성되면, 태그가 조건부 명령과 관련된 특정한 CPSR을 식별하기 때문에, 이 조건부 명령 태그를 인덱스로서 사용하여 CPSR의 플래그 상태들이 검색된다. 도 22 및 도 25를 참조하여 이하에서 설명하는 것과 같이, 현재 프로그램 상태 레지스터 마크 비트를 검색하여 사용한다. 각각의 CPSR에 대해 다른 비트들의 세트가 존재한다.
도 3b, 도 3c 및 도 3d의 첫 번째 실시예로 되돌아가면, ETM CPSR 테이블(193)은 3가지 상태, 즉 (i) 추적 안됨, (ii) 추적 예정, 및 (ii) 추적을 기억한다. 본 실시예에서는, 시퀀스의 다음 추적 키(c-아톰 키)가 사용되어야 할 때를 결정하기 위해, CPSR 테이블(193)에 기억된 상태들을 사용하고, ETM 명령 키 변환회로(196)에 의해 c-아톰이 생성될 때, (CPU에 의해 생성된) 대응하는 조건부 명령 태그를 인덱스로서 사용하여 플래그 상태들이 검색된다. 추적 키들이 할당되는 방식을 이하의 테이블에 요약한다.
플래그 상태 값 동작
플래그 상태들 중에서 어느 것도 "추적 예정"이 아니다 다음 추적 키 값을 사용
1개 이상의 플래그 상태들이 "추적 예정"이다 가장 최근의 조건부 명령 추적 데이터 항목(c-아톰)에 대해 동일한 추적 키 값을 사용
이 테이블에 나타낸 것과 같이, ETM CPSR 테이블(193)에 플래그 상태 값들 중에서 어느 것도 "추적 예정"이 아닌 것으로 표시되는 경우에는, 이 시퀀스 내부의 다음 추적 키 값(c-아톰 키)이 할당된다. 이에 반해, c-아톰에 대응하는 특정한 CPSR의 1개 이상의 플래그 상태들이 "추적 예정"이면, 가장 최근의 c-아톰에 대해 동일한 추적 키 값(c-아톰 키)을 사용한다.
도 4는 도 1의 CPSR들(150)에 대한 3가지 상태 CPSR 상태 플래그를 개략적으로 나타낸 상태 머신이다. 시스템이 먼저 리셋된 후, 스테이지 410에서, 주어진 CPSR 상태 플래그가 "추적 안됨" 상태로 설정된다. 주어진 CPSR에 대응하고 관련된 CPSR 상태 플래그를 필요로 하는 조건부 항목이 추적되는 경우에, CPSR 상태 플래그가 "추적 안됨" 상태(410)로부터 "추적 예정" 상태(420)로 변경된다. 주어진 CPSR에 대응하며 관련된 플래그를 포함하는 조건부 결과가 추적될 때까지 CPSR 상태 플래그가 이 상태에서 유지되고, 그후 주어진 CPSR 상태 플래그가 "추적" 상태(430)로 변경된다, 주어진 CPSR에 대응하는 플래그 설정 명령이 관측될 때까지 CPSR 상태 플래그가 이와 같은 추적 상태(430)로 유지되고, 관측되는 경우에, "추적" 상태(430)로부터 "추적 안됨" 상태(410)로 다시 전이가 행해진다.
도 5의 테이블은, 전술한 도 3c의 예, 즉 3가지 조건부 명령들(ADDEQ, ADDNE, ADDVS)의 실행을 다시 나타낸 것으로, 이때 세 번째 조건부 명령의 디코딩 후에 조건부 결과들이 평가된다. 도 5는 도 4의 3 상태 시스템의 일례이다. 도 5의 테이블은, (도 3c에 마찬가지로 도시된) 조건부 명령 태그, c-아톰 키 및 조건부 결과 태그 이외에, 조건부 결과 페이로드(우측에서 두 번째 열)와, 각각의 명령 디코드 스테이지에 대응하는 CPSR 테이블 동작(가장 우측 열)을 나타내고 있다.
도 5의 테이블의 엔트리들을 보면, CMP 명령(이것의 실행 결과는 그후의 3가지 조건부 명령들에 부가된 조건들이 만족되었는지 여부를 결정한다)의 디코딩시에, 태그 A에 대한 모든 상태들이 "추적 안됨"으로 설정된다. 다음에, ADDEQ 명령의 디코딩시에, 조건부 명령 태그 A가 출력되고 "0"의 c-아톰 키가 출력된 후, ETM CPSR 테이블(193)에서, "CPSR A"가 검색되고(도 2 참조), 이때 4개의 플래그 중에서 어느 것도 "추적 예정"이 아니므로 새로운 그룹이 시작된다는 것을 알 수 있다. 태그 A(CPSR A)에 대한 플래그 Z의 상태가 "추적 안됨"인 것으로 설정되었기 때문에 c-아톰이 필요하다. 다음에, 조건부 명령 ADDEQ의 디코딩으로 인해, 태그 A에 대한 플래그 Z의 상태가 "추적 예정"으로 설정된다.(ADDEQ의 디코딩에 이어서) ADDNE 명령의 디코딩시에, 이 명령이 ADDEQ 명령에 부착된 조건(같다)에 대해 반대의 조건(같지 않다)에 근거하여 조건부로 실행되기 때문에, 이것이 이전의 디코딩 스테이지에서 태그가 이미 붙여진 조건부 코드 플래그 Z에 의존하게 된다. 따라서, 태그 A로부터 플래그 Z의 상태가 이미 "추적 예정"으로 설정되며, 새로운 c-아톰이 요구되지 않는다. 관련된 CPSR의 플래그들 중에서 어느 것도 추적 예정으로 설정되지 않는 경우에만 새로운 추적 키 값이 사용된다는 것을 상기하기 바란다.
ADDVS 명령이 디코드 스테이지에 있을 때, Z 플래그가 이미 "추적 예정"으로 설정되어 새로운 그룹이 시작되지 않았기 때문에, "0"의 추가적인 c-아톰 키가 출력된다. 그러나, 이 경우에는, 태그가 붙여진 CPSR A에 대한 플래그 "V"의 상태가 이전에 "추적 예정"으로 설정되지 않았기 때문에, (ADDNE 명령의 경우와 달리) c-아톰이 필요하지 않다. 따라서, CPSR A(도 2 참조)에 대한 플래그 V의 상태가 "추적 예정"으로 설정된다. 다음에, CPU(100)는 플래그 Z가 유효하지만 플래그 V가 유효하지 않은 것으로 표시한다. 그러나, CPSR 테이블(193)을 보면, 3개의 이전의 조건부 명령들(ADDEQ, ADDNE, ADDVS)를 해결하기 위해 Z 및 V 플래그 모두가 필요하므로, 조건부 결과가 아직 전부 추적될 수는 없다는 것을 알 수 있다. Z 및 V 플래그들의 조건부 결과 페이로드를 갖는 조건부 결과 태그 A의 출력에 의해 표시되는, 조건부 결과가 이용하능하게 되면, CPU(100)는, Z 및 V 플래그들 모두가 유효하다고 표시한다. ETM CPSR 테이블(193)을 보면, 이들 2개의 플래그가 조건부 결과를 추적하기 위해 필요한 전부라는 것을 알 수 있다. 따라서, 조건부 결과를 추적하기 위해 Z 및 V 플래그들 모두가 유효할 필요가 있다.
취소 명령이 CPU(100)에 의해 발행된 후 정확한 c-아톰 및 c-결과 상관관계가 얻어질 수 있도록 보장하기 위해서는 ETM CPSR 테이블(193)의 검색이 필요하다. 도 6a 및 도 6b는 새로운 그룹(즉, 새로운 c-아톰 키)이 도 4의 3 상태 CPSR 플래그 시스템에 대해 시작되어야 하는지 여부의 예를 제공하는 테이블이다. 도 6a의 테이블은, 명령 취소 이벤트 직후의 ADDNE 명령에 대해 조건부 명령 태그 B에 대한 갱신이 새로운 c-아톰 키를 생성하게 하지 않아야 하는 경우를 개략적으로 나타낸 것이다. 도 6a의 테이블에서는, ADDEQ 명령이 디코드 스테이지에 있을 때, 태그 A에 대한 Z-비트 플래그가 "추적 예정"으로 설정된다. 분기 명령(도 6A의 테이블에서 세 번째 명령)에 뒤따르는 두 번째 CMP 명령은 이와 다른 CPSR(즉, CPSR B)을 생성하므로, 조건부 명령 태그 B가 다음의 조건부 명령 SUBEQ에 할당된다. 더구나, CPSR B에 대응하는 플래그 상태들 중에서 어떤 것도 현재 "추적 예정"으로 설정되지 않으므로, SUBEQ에 대해 다른 c-아톰 키가 생성된다. SUBEQ 명령의 다음의 사이클에서 조건부 명령 태그 B에 대한 조건부 결과 태그가 출력되므로, "1"의 SUBEQ a-아톰 키와 일치하는 "1"의 c-결과 키가 출력된다.
다음에, 도 6a에서는, 관련된 c-결과 키와 "1"의 c-아톰 키가 여전히 추적 스트림 내부에 존재하더라도, 명령들 CMP 및 SUBEQ 모두가 취소된다. 그러나, ADDNE가 디코드될 때, 이 ADDNE가 여전히 조건부 명령 태그 A에 대응하는 가장 최근의 취소되지 않은 비교 연산 CMP과 관련되어 있기 때문에, 조건부 명령 태그가 (ADDEQ에 대해 이전에 사용된) A의 값으로 복귀하고 "0"(즉, 새로운 키가 아니다)의 c-아톰 키가 필요하다.
도 6b는, 도 6a의 상황과 대조적으로, 조건부 명령이 취소된 후에 동일한 c-아톰 키를 사용하는 것이 항상 정확한 것은 아닌 것을 나타낸 또 다른 예이다. 도 6b의 예에서는, (오에측된 분기 취소 이후에 디코드된) ADDNE 명령이 새로운 키를 시작하지 않은 경우에는, 조건부 결과 태그 B에 대응하는 그것의 결과가 ADDNE 및 ADDEQ 명령 모두에게 적용되는데, 이들 명령이 다른 "CMP" 명령과 관련되어 있기 때문에, 이것은 올바르지 않다. 도 6b의 테이블과 도 6a의 테이블의 차이점은, 도 6b의 테이블의 경우에는, 두 번째 CMP가 취소되지 않았으므로(분기 명령과 취소의 수신 전의 분기후의 명령들만 취소된다), 이 경우에는 새로운 조건부 명령 태그와 새로운 c-아톰 키가 필요하다. 도 6b에서는, 분기 명령 이후에 비조건부 명령 "SUB"가 존재한다.
도 6c, 도 6d 및 도 6e는 도 3a 내지 도 3d를 참조하여 설명한 기술의 대안 기술을 나타낸 것이다. 이와 같은 대안 기술에서는 2-상태 CPSR 테이블이 유지된다. 이와 같은 대안적인 실시예에 따르면, 현재의 CPSR이 테이블 내의 다른 CPSR들과 다르게 취급된다. 도 2에서, 4가지 조건 플래그 상태들의 관련된 세트를 각각 갖는 6개의 다른 CPSR들이 존재한다(이것은 전체 24가지의 다른 테이블 엔트리를 제공한다)는 것을 상기하기 바란다. 도 6c∼도 6e의 대안적인 실시예에서는, 현재의 CPSR에 대해 플래그 당 2개의 상태만 갖도록 현재의 CPSR이 처리된다. 그러나, 이들 2개의 상태는 다른 것들을 의미한다. 도 6c 및 도 6d는 2 상태 CPSR 테이블(현재의 CPSR에 대해 플래그 당 1 비트)과 인플라이트 비트들(모든 CPSR의 플래그당 1 비트)이 도 4의 상태도의 3가지 상태에 어떻게 대응하는지 나타내고 있다. 도 6e는 인플라이트 비트의 사용 예이다.
CPU(100)가 부분저인 CPSR 결과를 제공할 수 없고 전체 CPSR 결과만을 제공할 수 있는 경우에는, 각각의 플래그에 대한 상태를 CPSR 테이블에 저장하는 것이 불필요하다. 그 대신에, CPSR이 "추적 예정"안자, 즉 결과가 CPU 파이프라인(120) 내부에서 "인플라이트"인지 여부를 표시하는 단일 비트가 CPSR들 각각에 대해 기억될 수 있다.
(CPSR 테이블의 도 2의 실시예와 달리) 도 6c∼도 6e의 실시예에서는, 각각의 CPSR 태그가 ("인플라이트" 비트로 표시된) 단일 비트를 갖는데, 이것은 장래의 "c-결과"가 예측되는지 여부를 표시한다. 각각의 CPSR 플래그에 대한 2개의 상태와 함께 "인플라이트" 값들을 갖는 현재의 CPSR에 대한 CPSR 테이블은 도 4의 상태도의 3가지 상태에 대응한다. 도 6c의 테이블은, 이들 인플라이트 비트들이 사용 및 유지되는 방법을 설명하고 있다. ETM 명령 키 변환회로(186)에 의해 c-아톰이 출력되는 것에 응답하여, (도 6c에 "RH 태그"로 표시된) 조건부 명령 태그에 대응하는 인플라이트 비트가 설정된다. ETM 결과 키 변환회로(188)로부터 제 2 추적 변환회로(192)에 의해 조건부 결과가 수신되는 경우에, (도 6c에 "LH 태그"로 표시된) 조건부 결과 태그에 대응하는 인플라이트 비트가 설정되면, FIFO(194)를 통해 추적 데이터스트림에 c-결과가 출력된 후, 비트가 소거된다. 인플라이트 비트들을 사용하여, 동일한 태그를 갖는(즉, 동일한 CPSR에 대응하는) 이전의 c-아톰에 대해 이전의 c-결과가 수신된 시기를 결정한다. 명령에 대응하여 c-아톰이 생성될 때, (CPU(100)에 의해 출력된) 관련된 조건부 명령 추적 데이터 항목 태그를 인덱스로 사용하여 인플라이트 비트가 검색된다.
도 6d의 테이블은, 본 실시예에서 ETM 명령 키 변환회로(186)(도 1 참조)에 의해 추적 키들이 어떻게 생성되는지를 나타낸다. 특히, 인플라이트 비트값이 결과가 인플라이트가 아니라는 것을 의미하는 "0"의 값에 대응하는 경우에는, 다음의 추적 키 값이 사용된다. 반면에, 인플라이트 비트값이 조건부 결과가 인플라이트이라는 것을 표시하는 "1"의 값을 갖는 경우에는, 가장 최근의 c-아톰에 대해 사용된 것과 동일한 추적 키 값이 사용된다.
따라서, 도 4의 상태도의 3가지 상태는 다음과 같은 2개의 데이터 저장장치를 통해 추적된다:
(1) 모든 CPSR의 모든 플래그에 대해 1 비트(2개의 상태)를 갖는 도 6d의 인플라이트 테이블. 이들은, 플래그들이 데이터 처리장치에 의해 방출될 때 추적될 필요가 있는지, 즉 대응하는 더 이전의 조건부 명령의 결과를 재구성하는데 결과들의 어떤 비트들이 필요한지를 표시한다.
(2) 조건부 명령이 c-아톰으로 추적되는지 아닌지를 표시하는 1개의 CPSR(현재의 CPSR)의 각각의 플래그에 대해 2가지 상태를 갖는 현재의 CPSR에 대한 CPSR 테이블.
도 6e의 테이블은, 도 3a의 예와 유사하며, 도 6c 및 도 6d의 규칙이 구현될 때 인플라이트 태그들이 어떻게 설정되는지를 나타내고 있다. 도 6e의 예에서는, (도 3c의 경우와 유사하게) 명령 ADDVS가 디코드된 후에 3개의 조건부 명령 ADDEQ, ADDNE 및 ADDVS에 대응하는 조건부 결과가 이용가능하게 된다. 명령 ADDEQ가 디코드되는 행과 동일한 행에 대응하는 추적(도 6e의 테이블)에서 첫 번째 c-아톰이 출력되면, 태그 A에 대한 인플라이트 비트가 검색되고, 결과가 "0"(인플라이트가 아니다)인 것이 발견되어, 새로운 추적 키 값으로 새로운 그룹이 개시된다. 이 경우, c-아톰 키="0"이다.
디코드되고 있는 명령 ADDVS와 동일한 스테이지에서 다음의 c-아톰이 생성되는 경우에, 명령 ADDEQ와 ADDVS가 동일한 조건부 명령 태그를 공유하기 때문에, 조건부 명령 태그 A에 대한 인플라이트 비트가 다시 검색된다. 이 경우에, 결과가 "1"(인플라이트를 표시한다)이므로, 새로운 그룹이 시작되지 않고 가장 최근의 c-아톰에 대해 동일한 추적 키 값이 사용된다. 따라서, ADDVS의 명령에 대한 c-아톰 키도 "0"이다. ADDVS의 디코딩 후의 스테이지에서 조건부 결과 태그 A가 출력되면, 태그 A에 대한 인플라이트 비트가 소거된다. 이와 같은 비트 소거는, 조건부 명령 태그 A에 대응하는 결과들이 해결되었으므로, 코어 파이프라인에서 더 이상 "인플라이트"가 아니라는 것을 나타낸다.
도 7 내지 도 11은, 동일한 추적 스트림에서 조건부 분기 명령이 다른 조건부 명령들로부터 어떻게 분리되어 약간 다르게 처리되는지를 개략적으로 나타낸 것이다. 특히, 조건부 분기 명령과 (비조건부) 로드/스토어 명령이 소위 "웨이포인트들"을 사용하여 추적되는 한편, 다른 조건부 명령들이 전술한 "c-아톰"을 사용하여 추적된다. 웨이포인트를 이용하여 조건부 분기를 추적하는 것과 어떤 분기가 선택되고 선택되지 않는지를 표시하는 것이 알려져 있다. 이것은 ARM 리미티드에 허여된 US 특허 US 7,707,394에 상세히 기재되어 있다.
웨이포인트를 사용하여 조건부 분기 명령 뿐만 아니라 로드/스토어 명령을 표시할 수 있다. US 7,707,394에는 단일의 추적 데이터 항목이 복수의 웨이포인트를 표시하도록 웨이포인트들의 시퀀스가 함께 추적 데이터 스트림으로 검출 및 출력되는 방법이 설명되어 있다. 본 발명의 실시예들에 따라, 태그들이 전술한 CPU(100)에 의해 c-아톰들(조건부 명령 관측 표시자들)과 관련되는 방식과 유사한 방식으로 코어 태그들이 웨이포인트들과 관련될 수 있다. 이들 코어 태그들은 ETM에 의해 이름이 변경되어 소정의 순서를 따르는 추적 키들을 형성한다. 추적 키들이 소정의 순서를 따른다는 사실로 인해, 웨이포인트와 함께 키를 출력하는데 엄격한 요구사항이 존재하지 않는다.
사실상, 추적 데이터 스트림에서 출력된 웨이포인트는 도 7a의 테이블에 표시된 것과 같이 2개의 값들 중에서 한 개로 라벨이 붙여진다. 이 테이블에 나타낸 것과 같이, "E" 라벨은 (a) 프로그램 명령들이 관측될 때 분기가 실제로 선택된 조건부 분기 명령, 또는 (b) 로드/스토어 명령에 대응하는 웨이포인트이다. 이들 "E" 웨이포인트에 대해 추적 키가 1씩 증분된다. 그러나, 프로그램이 관측될 때 실제로 선택되지 않은 조건부 분기 명령들에 대해서는, 추적 키가 1씩 증분되고 이들 웨이포인트는 "N"으로 라벨이 붙여진다. 도 1 내지 도 6의 전술한 설명에서, c-아톰의 출력을 모든 조건부 명령들을 참조하여 설명하였다. 그러나, 일부 실시예에서는, 모든 조건부 명령에 대해 c-아톰을 출력하는 것 대신에, 조건부 분기 명령들을 뽑아내어 다르게 처리한다. 특히, 조건부 분기 명령들의 실행에 플래그 표시를 하는 c-아톰을 출력하는 것 대신에, 도 7a의 테이블에 나타낸 것과 같은 관련된 "E" 또는 "N" 상태와 함께 추적 데이터 스트림에 웨이포인트가 출력된다.
전술한 것과 같이, 복수의 웨이포인트가 압축되어(또는 종속접속되어) 한 개의 추적 데이터 출력 항목을 형성하고, 복수의 c-아톰들이 이와 유사하게 압축될 수 있다. 전술한 것과 같이, c-아톰들은 ETM(180)에서 시퀀스 검출과 태그-키 변환도 겪는다.
그러나, c-아톰은 중요한 면세서 웨이포인트와 다르다는 점에 주목하기 바란다. 특히, 웨이포인트의 시퀀스에 대해서는, 키들이 항상 1씩 증분하지만, c-아톰에 대해서는, 비록 c-아톰 키들이 증분할 때도 있지만, 어떤 때에는 전혀 증분하지 않는다. 특히, 특정한 태그가 붙여진 CPSR의 1개 이상의 CPSR 플래그 상태들(도 2의 A, B, C, D, E)이 "추적 예정"인 경우, 시퀀스의 가장 최근의 c-아톰에 대해 동일한 추적 키 값이 사용되지만, 이 경우에 c-아톰 키는 1만큼 증분하지 않는다. 이것은 도 7b의 테이블에 나타낸 것과 같이 2가지 다른 형태의 c-아톰을 사용하여 인코드될 수 있다.
도 7b의 테이블은, (조건부 분기를 제외한) 조건부 명령은 다음과 같이 특징지워진다: 이전의 c-아톰과 다음의 c-아톰 사이에서 추적 키(c-결과 키)가 변경되지 않는 (조건부 분기를 제외한) 조건부 명령은 "P0"로 표시되고, 추적 키(c-결과 키)가 1씩 증분되는 (조건부 분기를 제외한) 조건부 명령은 "P1"으로 표시된다.
따라서, 예를 들어, c-아톰의 시퀀스의 c-결과 키들은 0, 1, 2, 2, 3, 4, 5, 5, 6으로 표시하면, 이것은 P1, P1, P1, P0, P1, P1, P1, P0, P1으로 인코딩될 수 있다.
이때, c-아톰 키가 증분하지 않는(즉, 2개의 연속된 "2"들과 2개의 연속된 "5"들이 존재하는) 시퀀스 내부의 지점에서는, 동일한 추적 키의 두 번째 반복시에 P0가 출력되고 그렇지 않으면 P1이 출력된다는 것이 명백하다. 이들 P1 및 P0 추적 요소들은 웨이포인트에 대한 E 요소 및 N 요소와 유사하게 압축(또는 종속접속)될 수 있다. E 및 N 웨이포인트에 대한 압축은 이전에 공지되어 있으며 US 7,707,394에 상세히 기재되어 있다. 본 발명의 실시예들에 따라, c-아톰들, 조건부 명령들에 대한 c-결과들과 웨이포인트들이 다른 처리 사이클에 추적회로에 의해 출력될 수 있다는 사실은, c-아톰들이 독립적으로 출력되고 그후 키 시스템을 사용하여 대응하는 c-결과들과 상호관련될 수 있다는 것을 의미한다. 이것은 c-결과들 및 웨이포인트들과 독립적으로 c-아톰들이 압축될 수 있도록 하면서도, 동일한 추적 데이터 스트림으로 함께 출력될 수 있도록 한다. 이것은 웨이포인트, c-아톰 및 c-결과의 독립적인 압축을 가능하게 함으로써 효율 향상을 제공한다.
도 7c의 테이블은 CPU(100) 내부의 실행 이벤트에 따라 ETM(180)의 추적회로에 의해 생성된 웨이포인트 이벤트들과 c-아톰을 나타낸 것으로, 테이블의 연속적인 라인은 연속적이고 순차적인 처리 사이클을 표시한다. 도 7c의 테이블의 가장 우측의 열은 대응하는 추적 데이터 출력을 나타낸다. 추적 데이터 출력 항목들의 생성 순서는 테이블의 연속적인 행들에 의해 표시된다. 첫 번째 추적 출력은 압축된 웨이포인트 추적 출력 "EEEN"에 대응한다. 특히, 이것은 3개의 E들의 마지막과 N 사이의 P1 c-아톰의 생성 다음의 출력이다. 다음의 추적 데이터 출력은 압축된 c-아톰 "P111"에 대응하고, 마찬가지로 출력 시퀀스 2개의 N 웨이포인트들 사이에 P1의 세 번의 발생이 배치된 것에도 불구하고 이것들은 3개의 연속된 c-아톰들로서 출력된다. 세 번째 추적 출력은 "P110"에 해당하는데, 이것은 "생성된 c-아톰들" 열에서의 연속된 P1, P1 및 P0 출력과 상호관련된다. 이들 3개의 c-아톰들 P1, P1, P0의 출력 이전에, 2개의 "N" 웨이포인트들이 출력되었지만, 이들 웨이포인트는 추적 출력에는 표시되지 않았다. 최종적인 추적 출력은 "NNNN"에 해당하는데, 이것은 P1, P1 및 P0 이전의 나머지 웨이포인트들의 출력과 시퀀스의 끝에 생성된 마지막 웨이포인트 E를 반영한다.
도 1에 도시된 것과 같이, 진단회로는, 추적 데이터 출력을 수신하고, 압축된 c-아톰들을 c-아톰 FIFO(197)에 분리하고, 압축된 웨이포인트들 웨이포인트 FIFO(198) 내부에 추적한다. 도 7c의 테이블에 도시된 추적 출력의 압축의 결과로써 순서의 변경의 결과, 도 1의 진단 도구(196)는, ETM(180)으로부터의 추적 출력을 디코드할 때 실행 순서와 다른 순서를 효율적으로 얻는다. 도 7의 이와 같은 특정한 예에서, 추적 출력 순서는 E, E, E, N, P1, P1, P1, P1, P1, P1, P0, N, N, N, E이다. 진단회로(196)는 프로그램 이미지(199)를 이용하여 이들 압축된 웨이포인트들과 압축된 c-아톰들의 순서를 바꾸어 이것들을 올바른 실행 순서로 복원한다. 진단 도구(196)는 프로그램 이미지를 작업하여 모든 분기를 식별함으로써 이것을 행한다. 각각의 분기는 E 또는 N 웨이포인트와 관련되며, 이것은 "선택된 분기" 또는 "선택되지 않은 분기" 정보를 고유하게 제공하여, 진단 도구(196)가 그 당시에 CPU(100) 내부에서 우세한 조건에 따라 프로그램 이미지의 어떤 명령들이 선택되고 어떤 조건부 분기 명령들이 선택되지 않았는지를 정확하게 결정한다. 진단회로(196)가 웨이포인트들에 대응하는 이와 같은 스레드를 따를 때, 프로그램을 검색시에 진단회로가 프로그램 이미지(199)를 참조하여 조건부 비분기 명령도 마주치게 되는데, 이들 조건부 비분기 명령들 각각은 수신된 추적 데이터 스트림의 c-아톰과 순서대로 상호관련된다. 그러나, 다수의 조건부 명령들이 c-아톰의 생성을 일으키지만, c-아톰의 생성을 일으키지 않는 조건부 명령들의 서브셋, 예를 들어, 도 3b의 ADDNE가 존재한다는 것에 주목하기 바란다.
도 7d의 테이블은, 진단회로(196)가 ETM(180)으로부터 수신시에 웨이포인트들 및 c-아톰들을 처리하여 이것들을 별개의 c-아톰 및 웨이포인트 FIFO들 197 및 198 내부에 배치하는 방법을 설명한다. 이 테이블은, 마주치는 각각의 명령 유형에 대해, 프로그램 이미지(199)를 통해 실행의 스레드를 따라갈 때, 이 진단회로가 특정한 유형의 명령과 마주칠 때 이 진단회로에 의해 취해지는 동작을 설명하고 있다. 분기 명령과 마주칠 때, 웨이포인트 FIFO(198)로부터 E 또는 N이 취해진다. 로드/스토어 명령과 마주칠 때, 마찬가지로 웨이포인트 FIFO(198)로부터 E 또는 N이 취해진다. 조건부 분기 명령과 마주칠 때, 이것이 (c-아톰 대신이) 웨이포인트들에 의해 처리된 특수한 경우에 해당하기 때문에, 대응하는 c-아톰이 생성되지 않으므로, E 또는 N이 웨이포인트 FIFO(198)로부터 취해진다. 조건부 로드/스토어 명령은 (로드/스토어인 것으로 인해) 웨이포인트이고 (조건부인 것으로 인해) c-아톰이 될 수도 있지만, 비조건부 로드/스토어에 대해서는, 대응하는 c-아톰이 존재하지 않으므로, 이 경우에는, 로드/스토어가 N 웨이포인트에 결코 대응하지 않는다는 것(분기 선택되지 않음)이 알려져 있기 때문에, 웨이포인트 대기열(queue)로부터 E가 취해진다. 그러나, 조건부 로드/스토어의 경우에는, P0 및 P1이 마찬가지로 c-아톰 FIFO(197)으로부터 취해진다. 모든 "기타 조건부 명령들"(즉, 조건부 분기 및 조건부 로드/스토어 이외)은 c-아톰들의 생성에 의해 포함되는 카테고리에 들어가며, 이 경우에는 웨이포인트 FIFO로부터 P0 또는 P1이 취해진다. 생성된 c-아톰들과 생성된 웨이포인트들은 c-아톰 FIFO(197) 및 웨이포인트 FIFO(198)에 순서대로 기억되기 때문에, FIFO들로부터 이들 엔트리를 제거하는 순서는 프로그램 실행 순서를 반영한다.
도 8은 조건부 아톰 패킷들과 웨이포인트 패킷들을 포함하는 추적 데이터 스트림의 수신시에 진단회로(196)에 의해 취해지는 동작을 개략적으로 나타낸 흐름도이다. 단계 810에서 프로세서가 시작되는데, 이때 진단회로(196)에서 추적 데이터 항목들의 수신이 개시된다. 그후, 단계 820에서, 진단회로(196)는 추적 데이터의 다음 항목을 수신한 후, 단계 830으로 진행하여 추적 항목이 조건부 아톰(c-아톰) 패킷인지 여부를 판정한다. 추적 항목이 실제로 x-아톰 패킷이면, 단계 832로 처리를 진행하여, 패킷이 디코드되고 P0 및/또는 P1 c-아톰이 적절히 c-아톰 FIFO(197)에 추가된다. 그후, 처리가 단계 860으로 진행하여 종료된다.
한편, 특정한 추적 데이터 항목이 c-아톰 패킷이 아닌 것으로 단계 830에서 판정되면, 단계 840으로 처리를 진행하여, 추적 항목이 웨이포인트 패킷인지 여부를 판정한다. 추적 항목이 실제로 웨이포인트 패킷이면, 단계 842로 처리를 진행하여, 패킷이 디코드되고 E 및/또는 N 웨이포인트들이 적절히 웨이포인트 FIFO(198)에 추가된다. 그후, 종료 단계 860으로 처리를 진행한다. 그러나, 단계 840에서, 추적 데이터 항목이 웨이포인트 패킷이 아니면, 이것은 추적 항목이 c-아톰 패킷도 아니고 웨이포인트 패킷도 아니라는 의미이므로, 단계 850으로 처리를 진행하여, 종래의 방식으로 적절히 다른 패킷 유형이 처리된 후, 단계 860에서 처리를 종료한다.
도 9a, 도 9b 및 도 9c는, 분기 오예측이 존재하거나 중단이 발생하여 1개 이상의 웨이포인트의 취소를 일으킬 때 추론적 순서를 벗어난 처리가 가능한 CPU(100)에서 압축된 웨이포인트 및 압축된 c-아톰들을 포함하는 추적 출력에 행해지는 동작을 개략적으로 나타낸 것이다.
도 9a의 테이블은, 진단 도구(196)가 이 상황에서 취소 이벤트 이전에 얼마나 많은 조건부 명령들이 실행되었는지를 알지 못하기 때문에 적어도 한 개의 웨이포인트가 취소된 경우에, 웨이포인트들 및 c-아톰들의 압축으로 인해 문제가 일어날 수 있는 것을 개략적으로 나타낸 것이다. 도 9a의 테이블의 아래쪽 부분에, 한 개의 웨이포인트(즉, 앞에 있는 N)가 취소되고 한 개의 웨이포인트가 취소되었지만 압축된 c-아톰들에 대해 어떤 정보도 제공하지 않는 것을 추적 출력이 표시하는 이벤트가 존재한다. 이때, 추적 출력에서는 최초의 2개의 생성된 c-아톰들 P1, P1이 추적 스트림에 아직 출력되지 않았지만, 취소 이후에 압축된 c-아톰 추적 출력 "출력 P111"이 출력된다는 점을 주목하기 바란다. "출력 P111"은 3개의 c-아톰들 P1, P1, P1이 생성되었다는 것을 의미한다. 이 경우에 웨이포인트의 취소(이것은 반드시 그런 것은 아니다)가 바로 다음의 c-아톰 P1의 취소를 일으키므로, 진단회로(196)는, "취소 1" 추적 출력 이후에 압축된 c-아톰 출력 P111이 수신될 때, 압축된 "P111" 추적 출력에 대응하는 "P1"들 중에서 한 개가 사실상 취소되었다는 것을 알지 못하게 된다. 따라서, 진단 도구가 어떤 웨이포인트가 취소되었는지를 알더라고, 그 결과 어떤 c-아톰들이 취소되었는지는 알지 못한다. 즉, c-아톰들과 취소 이벤트의 순서가 압축으로 인해 상실되므로, 두 번째 P1이 취소 이전에 있었는지(이 경우 아키텍처에 맞게(architecturally) 실행되지 않았다) 취소 이후에 있었는지(이 경우 아키텍처에 맞게 실행되었다)를 진단회로(196)가 알지 못한다. 마찬가지로, 조건부 명령이 아키텍처에 맞게 실행되지 않았지만 추적에서 웨이포인트들이 취소되지 않았던 것을 요구하는 오예측이 발생하면, 진단회로(196)는 조건부 명령이 실행되지 않았다는 것을 알지 못하게 된다. 이 문제를 해소하고 명령 오예측 또는 취소가 일어난 경우에 웨이포인트들 및 c-아톰들의 압축이 진단회로(196)로 하여금 올바르지 않은 가정을 하게 하는 것을 방지하기 위해, 다음과 같은 2가지 규칙이 구현된다:
I. 분기 오예측, 중단, 예외 또는 기타 취소 명령의 경우에, 취소 추적 표시와 함께 재정렬 추적 항목이 출력된다(그러나 예외에 대해서는 시퀀스가 취소되어야 하며, 예외후 재정렬).
II. 이미 생성된 모든 c-아톰들은 재정렬 추적 항목 이전에 출력된다.
III. 이미 생성된 모든 웨이포인트들은 재정렬 추적 항목 이전에 출력된다.
c-아톰 FIFO(197)에 있는 모든 c-아톰들이 취소된 명령에 대응하기 때문에 이것들이 폐기되어야 한다는 것을 재정렬 추적 항목이 진단회로(196)에 표시한다. 도 9b의 테이블은 취소된 추적 데이터 항목고 함께 재정렬 추적 데이터 항목의 사용의 일례를 제공한다. 이 예에서는, 도 9a의 테이블의 예에 대해 동일하게 N 웨이포인트가 취소되지만, 차이점은, 이 경우에는, 추적 데이터 스트림에 취소 표시가 출력될 때 취소 이전에 이미 생성된 모든 c-아톰들의 표가 추적 출력에 표시된다는 것이다. 이것은 "P11" 추적 출력에 해당한다. 그후, 취소 표시 "취소 1"이 출력된 후 "재정렬" 표시자 추적에 출력된다. 이와 같은 경우에, 재정렬이 모든 버퍼링된 c-아톰들을 일소하고(flush) 재정렬이 항상 취소와 함께 출력(전이나 후에)되기 때문에, c-아톰들과 취소의 순서가 유지된다. ETM은 (만일 존재한다면) 얼마나 많은 수의 c-아톰들이 취소되었는지 파악하지 않는데, 이것은 ETM이 이것을 결정할 정도로 충분한 상태를 기억하지 않기 때문이다. 그러나, 진단 도구는 어떤 c-아톰들이 취소되었는지 파악할 수 있다.
도 9c는 도 9b의 테이블에 표시된 추적 출력의 수신에 응답하여 진단회로(196)에 의해 취해진 동작을 개략적으로 나타낸 것이다. 첫 번째 열은 진단회로(196)에 의해 수신된 모든 추적 데이터 항목들을 나타낸 것이다. 그후, 이것은 웨이포인트 대기열(두번째 열)과 조건부 대기열, 즉 c-아톰 대기열(세번째 열)로 분할된다. 추적 출력의 수신에 응답한 진단회로(196)의 동작을 테이블의 가장 우측의 행에 나타내었다. 첫 번째의 진단회로 동작은 E까지 실행을 추론하는 것이다. 이것은 모든 웨이포인트들 사이에 실행된 명령들(웨이포인트들과 c-아톰들 제외)이 진단회로(196)에 의해 추론되기 때문이다. c-아톰이 아직 수신되지 않았고 프로그램 이미지(199)의 분석으로부터 진단회로(196)에 의해 이 시점에서 c-아톰이 예측되기 때문에, 진단회로(196)가 웨이포인트 N까지 추론하는 것이 불가능하다. 압축된 추적 요소 P11이 수신된 후 추적 데이터 스트림에 "취소 1" 표시가 수신되므로, 진단회로는 마지막 웨이포인트, 즉 N 웨이포인트까지 모든 것을 취소한다. 재정렬 추적 항목의 수신 후에, c-아톰 FIFO(197)가 일소되어, "취소 1"이 수신되는 동시에 취소 이전에 발행된 P11 및 P1과 조건부 대기열에 추가된 P1을 제거한다. 재정렬 이후에, 압축된 c-아톰 P1110 추적이 수신되지만, 진단회로가 프로그램 이미지(199)의 분석으로부터 웨이포인트들을 수신하는 것을 예측하고 있고 어떤 웨이포인트들이 수신되지 않았으므로, 진단회로에 의해 c-아톰들이 처리될 수 없다. 그후의 진단회로의 동작은 언제 c-아톰들이 필요하고 필요하지 않은지를 참조하여 명령 중간(in-between) 웨이포인트들을 추론하는 것이다. 이에 따르면, CPU(100)에 의해 행해지는 실제 실행 시퀀스가 진단회로(196)에 의해 재구성된다. 이때, 로드/스토어 명령들은 조건부이거나 비조건부일 수 있다는 점에 주목하기 바란다. 비조건부 로드/스토어 명령들은 E 아톰들로서 취급되므로, 웨이포인트 대기열에서 E-아톰이 취해진다. 로드/스토어 명령이 조건부이면, E-아톰이 웨이포인트 대기열에서 여전히 취해지지만, 이 이외에 c-아톰 대기열에서 P0 및 P1이 취해진다.
도 10은 들어온 추적 데이터를 분석하기 위해 진단회로(196)에 의해 취해지는 동작을 개략적으로 나타낸 흐름도이다. 특히, 도 10의 흐름도는, 실행 스트림의 분석을 수행함에 있어서 c-아톰 FIFO(196) 및 웨이포인트 FIFO(198)로부터 c-아톰들 및 웨이포인트들을 진단회로가 제거하는 방법을 설명하고 있다. 단계 1000에서 프로세서가 시작되어, 단계 1010으로 직접 진행하여, 들어온 추적 데이터가 수신되고 프로그램 이미지(199)를 이용하여 실행된 다음 명령을 결정한다. 그후, 처리가 단계 1012로 진행하여, 다음 명령이 비조건부 분기인지 여부를 판정한다. 다음 명령이 실제로 비조건부 분기이면, 단계 1014로 처리가 진행되어, 웨이포인트 FIFO(198)로부터 "E" 또는 "N"이 취해진다. 그후, 단계 1060으로 처리를 진행하여, 이용가능한 정보를 사용하여 현재 명령의 상세내용을 결정하고, 그후 다음 추적 데이터 항목이 수신될 때까지 최종 단계 1070으로 처리를 진행한다.
한편, 도 10의 단계 1012에서, 다음 명령이 비조건부 분기 명령이 아닌 것으로 판정되면, 단계 1020으로 처리를 진행하여, 다음 명령이 비조건부 로드/스토어 명령(비조건부)인지 여부를 판정한다. 명령이 실제로 비조건부 로드/스토어 명령이면, 단계 1014로 처리를 진행하여, 웨이포인트 FIFO(198)로부터 E 또는 N이 취해진 후, 단계 1060으로 처리를 진행하고 그후 최종 단계 1070으로 진행한다. 단계 1020에서 다음 명령이 비조건부 로드/스토어 명령이 아닌 것으로 판정되면, 단계 1030으로 처리를 진행하여, 명령이 조건부 분기인지 여부를 판정한다. 명령이 실제로 조건부 분기이면, 단계 1014로 처리를 진행하여, 웨이포인트 FIFO(198)로부터 E 또는 N이 취해진 후, 단계 1060 및 1070으로 처리를 진행하여 프로세스가 종료한다. 한편, 단계 1030에서 다음 명령이 조건부 분기가 아닌 것으로 판정되면, 단계 1040으로 처리를 진행하여, 다음 명령이 조건부 로드/스토어인지 여부를 판정한다. 다음 명령이 실제로 조건부 로드/스토어이면, 단계 1042로 처리를 진행하여, 웨이포인터 FIFO(198)로부터 E 또는 N이 취해진 후, 단계 1044로 처리를 진행하여, c-아톰 FIFO(197)으로부터 P0 또는 P1이 취해진다. 따라서, 조건부 로드/스토어 명령에 대해, 웨이포인트 대기열 및 c-아톰 대기열 각각으로부터 항목이 취해진다. 그후, 단계 1060 및 1070으로 처리를 진행한다.
단계 1040에서, 명령이 조건부 로드/스토어 명령인 아닌 것으로 판정되면, 단계 1050으로 처리를 진행하여, 명령이 조건부 명령인지 여부를 판정한다. 명령이 조건부 명령이면, c-아톰 대기열(197)로부터 P0 또는 P1이 취해진 후, 단계 1060으로 처리를 진행하여 현재 명령의 상세내용이 결정된 후, 단계 1070에서 죵료한다. 그러나, 다음 명령이 조건부 명령이 아닌 경우에는, 단계 1050으로부터 단계 1060으로 직접 처리를 진행하여, 이용가능한 정보를 사용하여 현재 명령의 상세내용을 결정한다. 그러나, 이 경우에는, 현재 명령이 비조건부 분기 명령, 비조건부 로드/스토어 명령, 조건부 분기 명령, 조건부 로드/스토어 명령 또는 조건부 명령의 어느 것도 아니다.
도 11a, 도 11b 및 도 11c는 취소 추적 표시, 오예측 추적 표시, 예외 추적 표시 및 재정렬 추적 표시의 추적 데이터 스트림에서의 상대적인 출력 순서의 예이다.
도 11a의 예의 경우에는, 첫 번째 웨이포인트 E가 분기 오예측에 대응하고, 오정렬 뒤에 그리고 다음의 웨이포인트 또는 c-아톰 전에 재정렬 항목이 배치된다.
도 11b의 경우에는, 두 번째 웨이포인트, 즉 두 번째 "E"가 오예측한 분기에 해당한다. 오예측 뒤에 그리고 다음의 웨이포인트 또는 c-아톰 전에(이 특정한 실시예에서는, 다음의 웨이포인트 E 전에) 재정렬 추적 항목이 배치된다.
도 11c의 예에서는, 첫 번째 및 두 번째 웨이포인트 "E"와 "E"(시퀀스에서 첫 번째 및 세 번째 추적 항목) 사이에서 중단이 일어난다. 이 경우에는, 예외가 내던져지고(thrown), 예외 다음에 그리고 다음 웨이포인트 또는 c-아톰 전에 재정렬 추적 항목이 배치된다. 이때, 이 경우에, c-아톰 P1(시퀀스에서 두 번째 추적 항목)은 2개의 웨이포인트 E와 E 사이에서 생성되고, 이들 2개의 웨이포인트 사이에는 중단이 발생하지만, 예외 후에 여전히 재정렬 항목이 배치되어야 한다.
도 12 내지 도 14는 조건부 결과에 의해 내포될 수 있는 조건부 아톰들을 제거함으로써 c-아톰들을 포함하는 추적 데이터 스트림이 압축될 수 있는 방법을 개략적으로 나타낸 것이다. 이와 같은 식으로 추적 데이터 스트림으로부터 c-아톰들의 서브셋을 제거하는 것은 추적처리의 효율을 증진시키는데 이용될 수 있다. 모든 조건부 명령이 c-아톰들의 생성을 발생하는 것은 아니지만, c-아톰들과 c-결과들 사이에 1 대 1 대응관계가 존재하는 경우가 빈번하며, 모든 c-결과는 적어도 한 개의 대응하는 c-아톰을 가져야 한다. 이것은, 많은 경우에, c-아톰들이 실제로 추적 데이터 스트림에 포함될 필요가 없이, 나중의 c-결과와 마주칠 때 진단회로(196)가 c-아톰들의 존재를 내포할 수 있다는 것을 의미한다. 따라서, 진단회로에 의해 수신되지 않은 c-아톰에 대응하는 c-결과 키(즉, c-아톰 키)를 갖는 c-결과를 진단회로(196)가 수신하면, 진단회로(196)는 이 c-아톰의 존재를 추론할 수 있다. c-아톰들이 순서를 벗어나면, 진단회로(196)는 c-아톰들을 순서대로 유지하기 위해 다른 c-아톰들의 존재를 추론할 수 있다. c-아톰들은 이들 c-아톰들이 다른 식으로 나타날 때보다 늦게 진단회로(196)에 의해 추론될 수 있으므로, c-아톰들과 웨이포인트들이 순서를 바꾸어도 된다. 그러나, 전술한 것과 같이, c-아톰 FIFO(197) 및 웨이포인트 FIFO(198)에 기억된 c-아톰들과 웨이포인트들은 하여튼 프로그램 이미지(199) 내부의 프로그램 명령 시퀀스를 참조하여 진단회로(196)에 의해 올바른 순서로 배치될 수 있기 때문에, 이것은 중요하지 않다.
도 12a는 도 1의 결과 키 변환회로(188)에 의해 출력된 c-결과 키들의 출력에 근거하여 일련의 c-아톰들(즉, 명령의 실행에 대응하는 추적 데이터 항목들)이 내포되는 추적 데이터 스트림의 일례를 포함하는 테이블을 개략적으로 나타낸 것이다. 이 예에서는, 5개의 P1 c-아톰들의 시퀀스가 생성되지만 ETM(180)에 의해 출력되지 않는다. 마찬가지로, "RH 키"로 테이블에 표시된 c-아톰 키들도 ETM에 의해 생성되지만 출력되지 않는다. 이것은 c-아톰들의 버퍼링으로 볼 수 있다. c-결과가 출력될 때, 내포 비트는 이들 버퍼링된 c-아톰들을 표시한다. 그러나, 대응하는 조건부 결과 키들은 실제로 결과 키 변환회로(188)에 의해 출력된다. 이때, 키 값들이 명시적으로 주어지지는 않더라도 어떤 c-아톰들이 c-결과와 관련되는지는 추적으로부터 명백해진다. 전체 c-아톰 정보가 출력되지 않더라도, c-결과 패킷은 c-결과들에 대한 정보를 효율적으로 포함한다. c-아톰들은 고도로 압축된다(1비트까지 줄어든다), 도 12a의 네 번째 열은, 수신된 c-결과 키들에 근거하여 진단회로(196)에 의해 어떤 c-아톰 키들이 내포되는가를 개략적으로 나타낸다. 이 경우에, 대응관계는 간단한 것으로, c-결과 키들에 대응하여 c-결과들 0, 1 및 2가 직접 내포된다. 그러나, c-결과 키 4는 c-결과 키 3 이전에 출력되므로, 진단회로(196)가 c-결과 키 4를 수신하면, 이것은, 대응하는 결과가 아직 출력되지 않았더라도, c-아톰 키 3이 생성되었다는 것을 의미한다. 실제로, 도 12a의 테이블의 "c-결과 LH 키 출력" 열로부터, c-결과 키 3이 c-결과 키 4 직후에 생성되는 것을 알 수 있다. 따라서, c-아톰 키들 3 및 4를 함께 내포하는 것은 사실상 정확한 것이었다. 특히, 도 12a의 테이블의 예에서는, 생성된 c-아톰들이 P1 아톰만 포함하고 P0 아톰은 포함하지 않는다. P1 c-아톰들이 c-결과들의 존재에 의해 내포될 수 있지만, P0 아톰에 대해서는 이것이 사실이 아니다. 사실상, P0 c-아톰들은 c-결과들의 존재에 의해 추론될 수 없으므로, 모든 P0 c-아톰들은 추적시에 출력될 필요가 잇고 버퍼링이 불가능하다.
ETM(180)에 의한 c-아톰들의 출력의 버퍼링과 진단회로(196)에 의한 c-결과들로부터 대응하는 c-아톰들의 내포에 의존하는 것이 부적절한 2가지 또 다른 특수한 상황이 존재한다. 이들 2가지 상황중에서 첫 번째는, 나중의 c-결과들이 원칙적으로 모든 c-아톰들을 내포하는데 사용될 수도 잇다는 사실에도 불구하고, 재정렬 전에 알려진 모든 c-아톰들이 ETM(180)에 의해 출력되어야 하는 경우이다. 이것은 진단회로(196)에 의해 웨이포인트들과 c-아톰들의 정확한 상태 순서가 추론되도록 보장하기 위한 것이다.
c-아톰들의 출력을 버퍼링하고 수신된 c-결과 키들로부터 c-아톰들의 존재를 내포하는 것이 부적절한 또 다른 상황은, c-아톰들 자체에 명령 키 변환회로(186)에 의해 c-아톰 키가 할당되어, 예를 들어 특수 키들을 사용하는 것이 엄밀하게 순차적이 아닌 경우이다.
ETM(180)에 의해 출력되고 진단회로(196)에 의해 수신된 c-결과가 또 다른 c-아톰들을 내포하는데 사용되어서는 안되는 특정한 경우도 존재한다. 다음의 3가지 상황은, 진단회로가 구별할 수 없는 이와 같은 경우의 예들이다:
1. 동일한 c-결과 키가 두 번 사용되는 경우,
2. N개의 c-아톰들이 버퍼링되는 경우(이때 N=순차 추적 키들의 수).
사실상, ETM(180)에 의해 출력된 c-결과는, c-아톰들이 대응하는 c-결과로부터 내포되어야 하는지 여부를 진단회로(196)에게 통보하는 정보를 포함하는 것이 요구된다. 도 1의 실시예에서는, c-아톰들이 주어진 c-결과에 대해 내포되어야 하는지 여부에 대한 이와 같은 정보가 단순한 yes/no 조건이며, 내포할 c-아톰들의 정확한 수가 진단회로(196)에 명시적으로 지정되지 않는다.
도 12b는, 일부의 c-아톰 키들이 대응하는 c-결과들로부터 내포되고 4가지 다른 c-아톰 추적 키들이 사용되는 추적 데이터 스트림의 일례를 개략적으로 나타낸 테이블이다. 모든 키들이 고갈된 후 4개의 c-아톰 추적 키들만이 사용될 수 있기 때문에, 키들의 랩어라운드(wraparound)가 존재한다. c-아톰 키 시퀀스는 0, 1, 2, 3으로 진행한 후, 생성되었지만 출력되지 않은 5번째 P1 c-아톰에 대응하는 0으로 되돌아간다. 더구나, 더구나, 도 12b의 예에서는, 생성되지만 출력되지 않는 5번째, 6번째 및 7번째 P1 c-아톰들이 오예측에 대응하므로, 3개의 c-아톰들이 실제로 실행되지 않아 대응하는 c-결과들 및 c-결과 키들이 결코 출력되지 않는다.
c-결과들은 다음과 같은 3가지 정보를 적어도 포함한다:
1. 명시적으로 또는 가장 많은 c-결과에 대해 조건부 결과와 관련된 키,
2. 진단회로(196)가 조건부 명령의 통과/실패 상태를 결정할 수 있도록 하는(즉, 조건부 명령이 실제로 실행되었는지 여부를 결정할 수 있도록 하는) 페이로드,
3. 이 c-결과에 근거하여 대응하는 c-아톰이 내포될 수 있는지 여부. 이것은 단순한 2비트 표시자, 즉 내포 yes 또는 내포 no이다.
내포-yes 또는 내포-no 정보를 적용하기 위해, ETM(180)은, 명령 키 변환회로(186)에 의해 생성되었고 진단회로(196)에 대한 출력이 버퍼링된 c-아톰들을 파악하도록 구성된다. ETM은 각각의 c-결과가 무엇인지 결정하고 c-아톰들의 어떤 것이 c-결과에 의해 내포될 수 있는지 결정한다. c-결과들에 의해 c-아톰들이 내포되지 않은 경우에는, c-결과가 내포-no로서 마크되고, 그렇지 않으면, ETM(180)에 의해 내포-yes로서 마크된다. 이것은 2개의 레지스터를 사용하여 달성된다.
"최종-c-아톰-생성-키(last-c-atom-generated-key)" 레지스터는 가정 최근에 생성되지만 출력되지 않은 c-아톰의 키를 포함한다. 이것의 예외는, 가장 최근에 생성되었지만 출력되지 않은 c-아톰이 특수 키를 가진 경우이다. 별개의 "최종-c-아톰-출력-키" 레지스터는, (i) 명시적으로 출력된 c-아톰이나 (ii) c-결과에 의해 내포된 c-아톰의 가장 최근의 추적 키를 기록한다.
c-결과가 생성되면, 대응하는 c-결과 키를 테스트하여, 이것이 범위 (최종-c-아톰-출력-키)<(c-결과 LH 키)<=(최종-c-아톰-생성-키)인지 여부를 파악한다. 이 테스트를 적용할 때 모듈러스(modulus) 수학을 사용해야 하며, 이 모듈러스 수학의 처리는 본 기술분야의 당업자에게 공지되어 있다. c-결과 키기 실제로 이와 같은 정의된 범위 내에 있으면, ETM(180)에 의해 내포-yes가 c-결과의 일부로서 출력된다.
도 13은, 도 12b의 시퀀스와 유사한 추적 데이터 시퀀스를 개략적으로 나타낸 테이블로서 우측에서 두 번째 및 세 번째 열에는 "최종-c-아톰-생성-키" 레지스터와 "최종-c-아톰-출력-키" 레지스터에 기억된 값들이 표시되어 있다. 도 13의 테이블의 우측 열은, 전술한 식에 의해 정의된 테스트(즉, 내포-yes)를 만족하였는지 아닌지의 표시를 제공한다. 이때, 단지 4개의 추적 키의 사용과 키들의 랩어라운드로 인해, 0, 1, 2, 3, 0, 1, 2, 3, …와 같이 키 시퀀스가 반복하고 이때 예를 들어 첫 번째 "1"이 두 번째 "0" 앞에 있기 때문에, "3"의 키가 "0"의 키보다 작은 것으로 생각될 수 있다. 도 13의 테이블의 "내포된 c-아톰 RG 키" 열에 있는 3*로 표시된 내포된 c-아톰 키는 재정렬 항목의 출력 직후에 내포되고, 이 경우에 0, 1, 2의 키를 갖는 c-아톰들은 이들이 이전의 오예측으로 인해 명시적으로 출력되었기 때문에 내포되지 않으며, 이때 c-아톰 키들 0, 1 및 2에 대응하는 3개의 P1 c-아톰들은 실행되지 않았다.
도 13의 마지막에서 두 번째 행에서 출력되는 "2"의 c-결과 키에 대해서는, c-결과 키 2에 대응하는 키 2를 갖는 c-아톰이 이미 이전의 c-결과에 의해 내포되었으므로 도 13의 우측 열에 결과가 명시된 테스트를 만족하지 않았기 때문에, 이 c-아톰은 내포되지 않는다. 도 13의 테이블의 마지막 행에 있는 c-결과 키 출력에 대해서는, 키 1을 갖는 대응하는 c-아톰들이 "명시적으로 출력된 c-아톰 키"라는 표제의 열에서 보듯이 이미 명시적으로 출력되었기 때문에 이들 c-아톰들이 내포되지 않는다. 도 13은, c-아톰 키들 0, 1, 2가 오예측의 결과로써 명시적으로 출력되고, 대응하는 c-결과들로부터 c-아톰들의 내포가 허용되지 않는 추적 데이터 스트림 내부에서의 P0 c-아톰(테이블의 가장 좌측 열에서 마지막에서 세 번째 생성된 c-아톰)의 발생으로 인해 c-아톰 키들 0 및 1이 명시적으로 출력된다는 것을 나타내고 있다.
다음과 같은 이유로 인해 c-아톰들이 명시적으로 출력된다:
· (예를 들어, 오예측이나 예외로 인해) 재정렬 추적 항목이 출력되기 전
· P0 c-아톰 유형이 사용되는 경우(이때 정의상 추적 키는 증분되지 않는다)
· 키들의 정규 순차 순서를 따르지 않고 가장 최근의 c-결과들에 대해 사용되는 특수 키가 사용되는 경우.
c-아톰들의 명시적으로 출력될 때, "최종-c-아톰-출력-키" 레지스터를 사용하여 어떤 c-아톰들이 출력되어야 하는지를 결정할 수 있다. 예를 들어, 재정렬 추적 항목의 경우에, 명시적으로 출력될 첫 번째 c-아톰은 "최종-c-아톰-출력-키+1" 레지스터의 값이고, 출력될 마지막 c-아톰은 최종-c-아톰-생성-키의 값이다. 이 사이에 있는 키들을 갖는 c-아톰들도 출력되어야 한다.
도 14a는, 추적 스트림을 출력하고, 대응하는 c-결과들로부터 c-아톰들을 내포할 수 있는 진단회로(196)의 능력에 의존하여 특정한 c-아톰들이 생성되지만 출력되지 않는(즉, 버퍼링되는) 추적 압축 방식을 구현함에 있어서 ETM(180)의 동작을 개략적으로 나타낸 흐름도이다. 즉, 도 14a의 흐름도는, ETM9180)이 추적 데이터 스트림으로부터의 c-아톰들의 서브셋의 제거를 통해 출력 추적 데이터 스트림의 압축을 행하는 방법을 개략적으로 나타낸 것이다.
단계 2000에서 프로세서를 시작한 후, 2001로 처리를 진행하여, 재정렬 추적 데이터 항목이 필요한지 여부를 판정한다. 재정렬 추적 항목이 필요하면, 단계 2110으로 처리를 진행하여, ETM(180)이 생성되었지만 출력되지 않은 모든 c-아톰들을 명시적으로 출력한다. 그후, 단계 2120으로 처리를 진행하여 최종-c-아톰-출력-키를 갱신한 후, 단계 2130으로 진행하여 재정렬 추적 데이터 항목이 실제로 추적 데이터 스트림으로 출력되고, 그후 수직 흐름으로 처리를 되돌려 단계 2200으로 진행한다. 한편, 단계 2100에서 재정렬 추적 데이터 항목이 필요하지 않은 것으로 판정된 경우에는, 단계들 2110, 2120 및 2130을 포함하는 수평 분기를 따라 진행하지 않고, 단계 2200으로 직접 처리를 진행한다.
스테이지 220에서는, c-결과가 현재 생성되고 있는지 판정한다. c-결과가 생성되고 있지 않으면, 단계 2300으로 직접 처리를 진행한다. 한편, 단계 2200에서 c-결과가 실제로 현재 생성되고 있다고 판정되면, 단계 2200으로 처리를 진행하여, 현재 c-결과에 대응하는 c-아톰이 현재 버퍼링되고 있는지 여부를 판정한다. 이와 같은 테스트의 한가지 예는, 생성되고 있는 c-결과에 대응하는 키가 테스트 (최종 c-아톰-출력-키)<(c-결과 LH 키)<=(최종-c-아톰-생성-키)를 만족하는지 판정하는 것이다. 즉, 현재 생성되고 있는 조건부 명령 추적 데이터 항목에 대응하는 키가 상기한 가장 최근에 출력된 조건부 명령 추적 데이터 항목에 대응하는 키보다는 크고 상기 가장 최근에 생성된 조건부 명령 추적 데이터 항목에 대응하는 키보다 작거나 같은지 여부를 판정한다. 최대값에 도달할 때 키들의 값들이 랩어라운드하기 때문에, 테스트가 적절히 동작하도록 하기 위해서는, 키 비교가 모듈로 연산을 준수한다.
단계 2210에서 c-결과에 대응하는 c-아톰이 현재 버퍼링되고 있지 않다고 판정되면, 단계 2230으로 처리를 진행하여, 방금 생성된 c-결과를 출력하고, 내포된 비트가 소거되어, 이 특정한 c-결과에 근거하여 진단회로(196)에 의해 c-아톰들이 내포되지 않아야 한다는 것을 표시한다. 한편, 단계 2210에서 현재 c-결과에 대응하는 c-아톰이 현재 버퍼링되고 있는 것으로 판정되면, 단계 2222로 처리를 진행하여, c-결과가 출력되고 내포된 비트가 설정되어, 진단회로(196)가 c-결과로부터 대응하는 c-아톰을 내포해야 한다는 것을 나타낸다. 내포된 비트를 설정한 채 c-결과를 출력한 후, 단계 2224로 처리를 진행하여, 적절한 레지스터에서 최종-c-아톰-출력-키의 값이 갱신된 후, 단계 2300으로 처리를 진행한다.
단계 2300에서는, c-아톰이 생성되고 있는지 아닌지 판정한다. c-아톰이 생성되고 있지 않으면, 단계 2400에서 처리를 종료한다. 한편, c-아톰이 생성되고 있으면, 단계 2310으로 처리를 실행하여, c-아톰이 P1이 아니라 유형 P0인지 여부 또는 이 c-아톰이 특수 키에 대응하는지 여부를 판정한다. c-아톰이 이들 예외 유형 중에서 한 개도 아니면, 단계 2320으로 처리를 진행하여, 최종-c-아톰-생성-키를 갱신한 후, 단계 2400에서 처리를 종료한다. 그러나, c-아톰이 특수 키에 대응하거나 유형 P0을 가지면, 단계 2312로 처리를 진행하여, 생성되었지만 아직 출력되지 않은 다른 모든 c-아톰들과 함께, 생성되고 있는 c-아톰이 명시적으로 출력된다. 그후, 단계 2314로 처리를 진행하여, 최종-c-아톰-출력 키가 갱신된다. 그후, 단계 2320으로 처리를 진행하여, 최종-c-아톰-생성 키가 갱신되고, 단계 2400에서 처리를 종료한다.
도 14b는 본 발명의 일 실시예에 따른 추적 유닛(180)을 나타낸 것이다. 이것은 도 1에 도시된 추적 유닛과 유사하며, 적절히 동일한 참조번호를 사용한다. 이것은, 추가적인 조건부 코드 또는 CPSR 값 기억 버퍼(185)와, 관련된 압축 및 합성회로를 갖는 토큰 버퍼(187)를 갖는다.
결과 인터페이스(184)에서 전송된 데이터는, 추가적인 데이터와 함께, 각각의 갱신된 CPSR 레지스터에서 발생된 CPSR 값을 포함한다. 본 실시예에서는, CPU(100) 상에 8개의 CPSR 레지스터가 존재하므로, 단일 사이클에 수신될 수 있는 8개의 가능한 세트가 존재한다. 이들 모두를 단일 사이클에 추적 생성회로(192)에 입력하여 추적 생성회로(192)가 이들을 처리하도록 하여 비용이 많이 들게 하는 것 대신에, 이들 값은 CPSR 값 기억 버퍼(185)에 버퍼링된다. 따라서, 이들 값은 시간에 걸쳐 꾸준하게 출력될 수 있다. 본 실시예에서는, 클록 사이클마다 2세트의 CPSR 값들이 출력된다. 이것들은 랜덤하게 선택되거나, 이 CPSR의 CPSR 값들의 갱신된 세트가 입력에서 수신되려고 하면 특정한 세트의 CPSR 값들이 출력될 필요가 있을 수 있다. 이것은, 추적 스트림에 조건부 아톰 추적 데이터 항목들과 조건부 결과 추적 데이터 항목들의 올바른 순서를 확보하기 위한 것이다.
이와 관련하여, 명령에 의해 갱신될 특정한 CPSR 레지스터를 식별하는 관련된 "태그들"과 함께, 처리장치의 디코드로부터 조건부 명령 관측 표시자들의 명령 인터페이스(182)에서의 수신은, 어떤 CPSR 레지스터들이 갱신될 것인지의 사전 표시를 제공한다. 현재 버퍼(185)에 기억되는 유효한 값들을 갖는 CPSR 값들을 수신하고자 하는 경우에, 이들 유효한 값들은 출력을 위해 선택되어, 기억 장소가 비어 있어 그후에 수신될 새로운 데이터를 기억한다.
이들 유효한 값들이 출력될 때, 이들 값들이 추적 생성회로(192)에 의해 처리되어 추적 데이터 항목들을 생성한다. 본 실시예에서는, 어떤 한 사이클에 2개의 조건부 명령 관측 표시자들이 수신될 수 있기 때문에, 최대 2 세트의 CPSR 값들이 축출(evict)될 필요가 있으므로, 버퍼(185)에 기억된 올바른 값들을 유지하기 위해 사이클 당 2 세트의 CPSR 값들의 출력이 충분한데, 이것은, 추적 생성회로(195)가 사이클 당 2 세트의 값들을 처리하는데 충분한 처리능력을 갖기만 하면 된다.
본 실시예에서는, 추적 생성회로(192)에 의해 생성된 추적 데이터 항목들을 수신하는 추가적인 회로(187)가 존재하는데, 이 회로는 통상의 추적 데이터 항목들을 압축하여 이들 추적 데이터 항목들의 압축된 표시에 해당하는 토큰들을 생성하여, 이들 토큰은 토큰 버퍼에 기억된다. 그후, 이들 토큰은 결합되어 다수가 단일의 추적 항목으로서 출력될 수 있다. 일반적으로, 가장 작은 추적 패킷은 8 비트의 길이를 갖고 이들 패킷은 8 비트의 배수인 경우가 많지만, 토큰들을 보통 훨씬 작으므로, 이들 다수가 1개의 패킷으로 합성되어 출력된다.
토큰들로 표시될 수 있는 일반적인 조건부 결과 추적 데이터 항목들의 예로는 다음을 들 수 있다:
1개 이상의 일반적인 CPSR 값들을 포함하는 것. 일부의 CPSR 값들은 다른 것들보다 상당히 더 일반적이다. 예를 들어, 다음의 값들, 즉 N-소거, Z-소거, C-세트, V-소거는 매우 일반적이다.
조건부 결과 추적 데이터 항목에 포함된 키가 이전의 이와 같은 키보다 1개 더 많은 것.
서로 다른 토큰들을 단일 패킷들로 합성하기 위한 더 많은 기회를 제공하기 위해 이들은 가능한한 오래 버퍼에 기억되는 것이 간편할 것이다. 그러나, 버퍼는 제한된 크기를 가지므로, 버퍼가 가득 채워졌을 때, 또는 이용가능한 코튼이 존재하지 않는 항목이 수신될 때(아마도 이것은 압축하는 것이 효율적이지 않은 드문 항목일 것이다) 이들 토큰이 출력되어야 한다. 후자의 경우에, 순서를 유지하기 위해, 모든 값들을 출력함으로써 버퍼가 소거된 후, 수신된 압축되지 않은 항목이 출력된다.
일반적으로, 이들 토큰은 버퍼에 가능한 한 오래 유지되어, 단일 추적 항목 내부에 다양한 토큰들을 합성할 가능성이 더 크다.
도 15 내지 도 27의 설명은, 발명자 John Michael Horley, Simon John Craske. Michael John Gibbs 및 Paul Anthony Gilkerson의 "Processing Apparatus, Trace Unit and Diagnostic Apparatus"이라는 명칭의 공동 계류중인 GB 특허출원 1100505.5의 일부이며, 본 출원은 이 출원을 우선권 주장한다. 따라서, 이하의 도 15∼도 27은, 예시의 목적으로, 조건부 결과 추적 데이터 항목들(c-atom)의 버퍼링과, 모든 조건부 명령들이 대응하는 c-아톰들을 갖는 것은 아니라는 사실을 추가 설명하기 위해 주어진다. 이들 도면은 도 3a 내지 도 3d에서 설명한 것과 같이 CPSR 마크된 비트들이 어떻게 사용되는가를 예시하는 것을 돕는다. 이와 관련하여 도 22 및 도 25가 특히 관련이 크다.
도 15는 프로그램 명령들에 응답하여 처리연산을 행하는 처리회로(4)를 구비한 처리장치(3002)를 나타낸 것이다. 처리장치(3002)는, 처리회로(3004)에 의해 실행될 프로그램 명령들 및/또는 처리회로(3004)에 의해 처리될 데이터를 기억하는 1개 이사의 캐시 유닛 또는 메모리 유닛들을 구비한 메모리 시스템(3008)을 구비한다.
처리장치(3002)는, 처리회로(3004)에 의해 행해진 처리연산들을 모니터링하는 추적회로(3006)를 구비한다. 추적회로(3006)는 처리회로(3004)에 의해 행해진 처리연산의 특성을 표시하는 추적 데이터 요소들을 생성한다. 추적회로(3006)는 생성된 추적 데이터 요소들을 출력 포트(3010) 상에 출력한다. 추적회로(3006)는 처리회로(3004)와 동일한 집적회로 상에 구현될 필요는 없으며, 일부 실시예에서는 별개의 추적 유닛으로서 제공되어도 된다.
추적회로(3006)에 의해 생성된 추적 데이터 요소들을 분석하기 위해 진단장치(3012)가 설치된다. 진단장치(3012)는 입력 포트(3014) 상에서 추적 데이터 요소들을 수신한다. 진단장치(3012)는 처리회로(3004)에 의해 어떤 프로그램 명령들이 실행되었는가의 표시를 더 수신한다. 이 표시는 추적 스트림에서 어떤 명령들이 실행되었는지를 표시하는 추적회로(3006)에 의해 제공되어도 된다. 이와 달리, 진단장치(3012)에는, 처리회로(3004)에 의해 실행된 최초의 프로그램 명령의 메모리 시스템(3008) 내의 위치를 표시하는 어드레스가 주어져도 된다. 또한, 진단장치(3012)에는, 처리회로(4)에 의해 실행된 프로그램의 대응하는 복사본을 기억하는 메모리(도 15에 미도시)가 설치되어도 된다. 진단장치(3012)는 처리회로(3004)에 의해 실행되었던 명령들을 단계적으로 분석하고, 추적 데이터 요소들의 스트림에 포함된 정보에 근거하여 이들 명령의 처리 결과를 판정한다.
추적 데이터 요소들은 추적회로(3006)로부터 진단장치(3012)로 직접 출력될 필요는 없으며, 예를 들어, 메모리 또는 다른 기억장치에 기억된 후, 필요에 따라 진단장치(3012)에 의해 기억장치로부터 액세스되어도 된다. 진단장치는, 예를 들면, 추적 분석법을 실행하도록 프로그래밍된 범용 컴퓨터이어도 된다.
처리장치(3002)는, 처리장치(3002)의 각각의 조건을 표시하는 1개 이상의 조건 플래그들을 기억하는 기억 장소, 예를 들어 조건 상태 레지스터(CPSR)(3020)를 갖는다. 영국 캠브리지의 ARM 리미티드에 의해 설계된 프로세서에서, 조건 플래그들(3022)은, 처리 결과가 음인지, 제로값인지, 자리올림을 필요로 하는지, 또는 오버플로우를 일으키는지를 표시하기 위한 NZCV(Negative, Zero, Carry, oVerflow) 플래그들을 포함한다. 도 17은 조건 상태 레지스터(30202)의 다양한 조합에 의해 표시될 수 있는 다양한 조건 상태들을 나타낸 것이다.
이때, 조건 플래그들(3022)을 기억하기 위한 기억 장소는 조건 상태 레지스터(3020)일 필요는 없으며, 메모리 시스템(3008) 내부의 기억 장소이거나 다른 종류의 기억 장소이어도 된다는 것이 명백하다.
처리회로(3004)는 적어도 한 개의 조건 갱신 정보에 응답하여, 조건 상태 레지스터(3020) 내부의 1개 이상의 조건 플래그들(3022)을 갱신하여도 된다. 예를 들어, 비교 명령은 2개의 데이터 값을 비교하여, 비교에 의존하여 플래그들을 갱신하여, 예를 들면, 이들 값들이 동일하였는지 또는 한 개의 값이 나머지 값보다 작거나 더 컸는지를 표시해도 된다. 조건 플래그들(3022)이 갱신되도록 하는 모든 명령이 조건 갱신 명령인 것으로 생각해도 된다. 예를 들어, ARM 명령 세트 아키텍처에서는, TST, TEQ, CMP 및 CMN 명령이 조건 갱신 명령의 예이다.
또한, 처리회로(4)는, 주어진 조건과 관련된 적어도 한 개의 조건부 명령에 응답해도 된다. 조건부 명령이 실행될 때, 조건 플래그들(3022)의 값들이 주어진 조건과 비교된다. 조건 플래그들(3022)이 이 조건을 만족하면, 관련된 처리연산이 행해진다. 조건이 만족하지 않으면, 관련된 처리연산이 행해지지 안는다(이와 달리, 일부 종류의 조건부 명령에 대해서는, 조건이 만족하지 않으면, 관련된 처리연산과 다른 처리연산이 행해져도 된다).
예를 들어, 조건부 가산 명령 ADDEQ과 EQ 조건과 관련된다. 도 16은 Z 플래그가 설정되면 EQ 조건이 만족되는 것을 표시하고 있다. 조건부 가산 명령 ADDEQ가 실행될 때, Z 플래그가 설정되면 관련된 가산 연산이 행해지는 반면에, Z 플래그가 설정되지 않으면, 가산 연산이 행해지지 않게 된다.
명령 스트림은 조건이 만족되었는지 여부를 판정하기 위한 정보를 포함하지 않으므로, 조건부 명령의 처리 결과를 명령 스트림 만으로부터 판정할 수는 없다. 따라서, 추적회로(3006)가 적어도 한 개의 선택된 명령에 응답하여 조건 플래그들(3022)의 값들을 표시하는 추적된 조건값을 포함하는 추적 데이터 요소를 생성한다. 진단장치(3012)는, 추적 데이터 요소에 포함된 추적된 조건값을 이용하여 조건이 만족되었는지 여부를 판정하므로, 대응하는 조건부 명령의 처리 결과를 판정할 수 있다.
추적회로(3006)는 조건 플래그들(3022)의 값들이 추적되었는지 여부를 모니터링하는 1개 이상의 제어 플래그들(3026)을 유지한다. 추적회로(3006)는, 1개 이상의 제어 플래그들(3026)의 현재 값들에 근거하여 주어진 명령의 실행시에 조건 플래그 값들을 추적할지 여부를 선택해도 된다. 일 실시예에서, 추적회로(6)는 한 개의 제어 플래그(3026)를 구비하는(이하에서 설명하는 도 22∼24의 실시예를 참조할 것) 반면에, 다른 실시예에서는 추적회로(3006)가 조건 플래그들(3022) 중에서 한 개에 각각 대응하는 다수의 제어 플래그들(3026)을 구비한다(도 25∼27을 참조하여 이하에서 설명하는 실시예를 참조할 것).
진단회로(3016)는 대응하는 세트의 제어 플래그들(3028)을 유지하며, 이들 제어 플래그는 추적회로(3006)의 제어 플래그들(3026)과 일치하게 사용되어, 추적된 조건값을 포함하는 추적 데이터 요소가 주어진 프로그램 명령에 대한 추적 스트림에 주어질 것으로 예측되는지 여부를 판정한다.
추적 데이터 요소들 내부의 추적된 조건값은 다른 방식으로 표시되어도 된다. 일 실시예에서, 추적회로(3006)는 추적 데이터 요소에 조건 플래그들(3022)의 적어도 서브셋의 실제 값들을 포함해도 된다. 조건부 명령이 조건 플래그들(3022)의 서브셋에만 의존하는 경우, 추적회로(3006)는 관련된 서브셋의 조건 플래그 값들만을 포함해도 되고, 또는 모든 조건 플래그들(3022)를 포함해도 된다.
이와 달리, 추적회로(3006)는, 조건 플래그들(3022)의 값들의 특정한 조합을 표시하는 식별 코드를 추적 데이터 요소에 포함해도 된다. 조건 값들의 일부의 조합이 다른 것보다 더 일반적이면 이와 같은 구성은 효율적인 인코딩을 제공한다. 예를 들어, 도 17은, 3가지의 조건 상태들(예를 들어, C 플래그가 설정된 상태, N 플래그가 설정된 상태, 및 Z 및 C 플래그가 설정된 상태)에 대해 2 비트 식별자가 사용되는 예를 나타낸 것이다. 그후, 3가지 또 다른 조건 상태에 대해 4 비트 식별자가 사용된다. 조건 플래그 값들의 다른 조합들 중에서 한 개가 필요한 경우에는, 도 17에 도시된 방식과 다른 인코딩을 사용하여, 현재 조건 플래그 값들의 별개의 표시자 추적 데이터 요소에 제공되어도 된다.
이때, 식별자들의 인코딩과, 어떤 조건 상태들이 특정한 식별자에 의해 표시될지의 선택은 일례에 지나지 않는다. 그럼에도 불구하고, 이 예는, 가장 빈번하게 발생하는 조건 상태들에게 가장 적은 수의 비트를 갖는 식별자들을 할당함으로써 추적 데이터의 전체 량을 줄일 수 있다는 보여주고 있다. 예를 들어, 70%의 시간 동안 2 비트 식별자를 갖는 3가지 조건 상태들 중에서 한가지에 처리장치(3002)가 있고, 29%의 시간 동안 4 비트 식별자를 갖는 3가지 상태 중에서 한가지에 있고, 1%의 시간 동안 나머지 상태들 중에서 한가지에 있으면(이들 다른 상태는 예를 들어 8 비트 식별자에 의해 표시된다), 현재 조건 상태를 식별하는데 사용된 비트의 평균 수는 2*0.7+4*0.29+8*0.01이 될 것이다(별표 *는 곱셈 부호를 나타낸다). 따라서, 현재 조건 상태를 표시하기 위해 추적 스트림 내부에 포함된 비트들의 평균 수가, 추적 데이터 요소가 단순히 조건 플래그들의 현재값들을 포함하였더라면 사용되었을 4비트보다 더 작아진다.
추적회로(6)는 처리회로(4)에 의해 실행되고 있는 프로그램의 다른 명령들에서 조건 플래그들(3022)의 값들을 추적해도 된다. 추적회로(3006)는 1개 이상의 선택된 명령들을 선택하여, 값들을 표시하는 조건 플래그를 포함하는 추적 데이터 항목의 생성을 일으켜도 된다. 선택된 명령은 조건부 명령이어도 되지만, 다른 명령이어도 된다.
예를 들어, 도 18∼도 20은 조건 갱신 명령의 실행시에 추적된 조건 값을 포함하는 추적 데이터 요소가 생성되는 예를 나타낸 것이다. 도 18은 처리회로(3004)의 연산에 응답하여 추적 데이터를 생성하는 방법을 나타낸 것이다. 스텝 3040에서, 처리회로(3004)는 실행되고 있는 프로그램의 다음 명령을 처리하고, 추적회로(3006)는 처리회로(3004)에 의한 이 명령의 처리를 모니터링한다. 스텝 3042에서, 추적회로(3006)는, 처리회로(3004)에 의해 실행되고 있는 명령이 조건 갱신 명령인지 여부를 판정한다. 명령이 조건 갱신 명령이면, 스텝 3044에서, 추적회로(3006)는, 조건 갱신 명령의 실행에서 발생한 조건 플래그들(3022)의 갱신된 값을 표시하는 추적된 조건 갑을 포함하는 추적 데이터 요소를 생성 및 출력한다. 한편, 명령이 조건 갱신 명령이 아닌 경우에는, 스텝 3044가 생략된다. 스텝 3046에서는, 처리회로(3004)에 의해 실행될 다른 명령이 존재하는지 여부를 판정한다. 다른 명령이 존재하면, 스텝 3040으로 방법이 되돌아가는 한편, 그렇지 않고 명령이 남아 있지 않으면 스텝 3048에서 방법이 종료한다.
도 19는 도 19의 방법을 사용하여 추적회로(3006)에 의해 생성된 추적 스트림을 분석하는 대응하는 진단방법을 나타낸 것이다. 진단장치(3012)는 처리장치(3004)에 의해 어떤 명령이 실행되었는지의 표시를 수신한다. 스텝 3050에서, 진단회로(3016)는 처리회로(3004)에 의해 실행되고 있는 것으로 표시되는 다음 명령을 분석한다. 스텝 3052에서, 진단회로(3016)는 다음 명령이 조건부 명령인지 여부를 판정한다. 명령이 조건부 명령이면, 스텝 3054에서, 진단회로(3026)는 프로그램 명령의 표시에 표시되었던 가장 최근의 조건 갱신 명령과 관련된 추적 데이터 요소의 위치를 추적 데이터 스트림에서 알아낸다. 스텝 3056에서, 진단회로(3016)는 위치가 파악된 추적 데이터 요소에 포함된 추적된 조건값에 근거하여 조건부 명령의 처리 결과를 판정한다. 예를 들어, 진단회로(3016)는, 추적된 조건값을 이용하여, 조건부 명령과 관련된 조건이 만족되었는지 여부와, 이에 따라 관련된 연산이 행해졌는지 요부를 판정할 수 있다. 스텝 3052에서, 다음 명령이 조건부 명령이 아닌 것으로 판정되면, 스텝 3054와 3056이 생략된다. 스텝 3058에서는, 분석할 다른 명령이 존재하는지 여부를 판정한다. 다른 명령이 존재하면, 스텝 3050으로 방법이 되돌아가고, 더 이상의 명령이 존재하지 않으면, 스텝 3060에서 방법이 종료한다.
도 20은, 도 18의 방법에 따른 추적 스트림의 생성과 도 19의 방법에 따른 추적 스트림의 분석의 예를 나타낸 것이다. 도 20은 처리회로(3004)에 의해 실행된 프로그램 명령들의 세트를 나타낸 것이다. 분기 명령이 실행될 때, 분기가 선택되었는지 아닌지를 표시하는 추적 데이터 요소가 생성된다. 조건 갱신 명령(예를 들면, CMP)과 마주쳤을 때, 도 18의 스텝 3044에 따라, 추적된 조건 값 CPSR을 포함하는 추적 데이터 요소가 생성된다. 추적 스트림을 분석할 때, 진단장치를 추적된 조건 값을 이용하여 뒤따라오는 조건부 명령들(예를 들어, 도 20에 도시된 명령들 MOVNE. MOVEQ 및 ADDHI)의 처리결과를 결정할 수 있다.
일부의 명령은 조건 갱신 명령 및 조건부 명령일 수도 있다. 예를 들어, 도 20에서 메모리 위치 2100에 위치한 프로그램 명령은, 조건 플래그들(3022)의 현재 값들이 not euqal(NE) 조건을 만족하는지 여부를(도 16 참조) 처리회로(3004)가 판정하도록 제어하는 조건부 비교 명령 CCMPNE이다. not equal 조건을 만족하면, 처리회로(3004)는 비교 연산을 행하고 비교 결과에 근거하여 조건 플래그들(3022)을 갱신한다. CCMPNE 명령이 조건부 명령이므로, 진단회로(3026)는, 조건 플래그들의 가장 최근의 갱신에서 추적 스트림에 포함된 추적 조건 값(즉, 메모리 위치 2000에 위치한 비교 명령 CMP에 대해 포함된 CPSR 값)에 근거하여 CCMPNE 명령의 처리 결과를 결정한다. CCMPNE 명령의 실행시에 NE 조건을 만족하면, CCMPNE 명령도 조건 갱신 명령이므로, 추적회로(3006)는 조건 플래그들(3022)의 갱신된 값을 표시하는 추적된 조건 값을 포함하는 명령 CCMPNE에 대한 추적 데이터 요소를 생성한다. 이 추적 데이터 요소는 후속하는 조건부 명령들의 결과를 결정하는데 사용될 수 있다.
이와 달리, 일부 실시예에서는, NE 조건이 만족되었는지 여부에 무관하게, CCMPNE 명령은 조건 갱신 명령으로서 생각해도 되고, 이에 따라 조건 플래그들의 값들을 표시하는 추적 데이터 요소가 항상 CCMPNE 명령에 대해 생성될 수도 있다. 이와 같은 구성은 추적시에 NE 조건이 아직 계산되지 않은 경우에 유용할 수 있다.
도 18∼도 20에 도시된 기술은 단일의 조건 갱신 명령 뒤에 동일한 조건 값들의 세트에 모두 의존하는 일련의 조건부 명령들이 존재하는 경우에 유용할 수 있는데, 이 경우에는 다수의 뒤따르는 명령들의 결과를 결정하는데 작은 양의 추적 데이터가 충분하기 때문이다.
그러나, 일부 상황에서는, 조건 플래그들의 갱신된 값들을 이용하는 조건부 명령들의 개입이 없이 잇달라 일어나는 다수의 조건 갱신 명령들이 존재해도 된다. 예를 들어, 도 21에서는, 프로그램 명령들의 시퀀스가 조건 플래그 갱신을 발생하는 다수의 비교 CMP와 비트 테스트 TST 명령을 포함하지만, 이들 명령들의 최초의 4개는 이들의 갱신된 값들이 조건부 명령에 의해 사용되지 않으면서 플래그들을 갱신한다. 이와 같은 상황에서는, (예를 들어, 도 22∼24와 도 25∼27을 참조하여 이하에서 설명하는 것과 같이) 조건부 명령의 실행시에 추적된 조건 값을 포함하는 추적 데이터 요소를 생성하는 것이 더 효율적일 수 있다. 따라서, 도 21에 도시된 실시예에서는, 각각의 조건 갱신시가 아니라, 조건부 명령 MOVNE가 실행될 때 추적 데이터 요소가 생성될 수도 있다.
이때, 이들 기술의 결합이 가능할 수도 있으므로, 조건 갱신 명령의 실행시와 조건부 명령의 실행시에 일부의 추적 유닛들이 생성되어도 된다는 것은 명백하다.
도 22는 조건부 명령의 실행시에 조건 플래그들(3022)이 추적되는 추적방법을 나타낸 것이다. 본 실시예에서, 추적회로(3006)는, 조건 플래그들(3022)의 값들을 추적할지 여부를 결정하는 제어 플래그(3026)를 유지한다. 제어 플래그(3026)는 "소거" 상태와 "세트" 상태를 갖는다(예를 들어, "소거" 상태는 0의 값을 갖는 제어 플래그(3026)이어도 되고 "세트" 상태는 1 값을 갖는 제어 플래그(3026)이어도 되고, 또는 이것의 역이어도 된다).
도 22의 스텝 70에서, 추적회로(3006)는 다음 명령을 실행하는 처리회로(3004)를 모니터링한다. 스텝 3072에서, 추적회로(3006)는, 이 명령이 조건부 명령인지 여부를 판정한다. 명령이 조건부 명령이면, 스텝 3074에서, 추적회로(3006)는 제어 플래그가 소거인지 아닌지 결정한다. 제어 플래그이면 소거이면, 스텝 3076에서, 추적회로(3006)는 조건부 상태 레지스터(3020)의 현재 상태를 표시하는 추적된 조건 값을 포함하는 추적 데이터 요소를 생성 및 출력한다. 그후, 스텝 3078에서, 제어 플래그가 설정된다. 이에 반해, 스텝 3074에서, 제어 플래그가 설정되었으면, 스텝 3076 및 3078은 생략된다. 스텝 3072에서, 명령이 조건부 명령이 아닌 것으로 결정되면, 스텝 3072 내지 3078을 생략한다.
그후, 스텝 3080에서, 다음 명령이 조건 갱신 명령인지 여부를 판정한다. 이때, 일부의 명령들은 조건부 명령 및 조건 갱신 명령 모두이어도 된다. 명령이 조건 갱신 명령이면, 스텝 3082에서, 제어 플래그가 소거된다. 그렇지 않으면, 스텝 3082를 생략한다. 그후, 스텝 3084에서, 처리회로(3004)에 의해 처리될 다른 명령이 존재하는지 여부를 판정한다. 다른 명령이 존재하면, 스텝 3070으로 방법이 되돌아간다. 더 이상의 명령이 존재하지 않으면, 스텝 3086에서 방법이 종료한다.
도 22의 방법을 구현하기 위한 일부의 유사코드(pseudocode)를 이하에 나타낸다("마커"라는 용어는 제어 플래그(3026)를 표시한다):
Figure 112013068889715-pct00001
도 22의 방법은, 조건 갱신 명령에 뒤따라 발생하는 최초의 조건부 명령에서 추적회로(3006)가 추적된 조건 값을 포함하는 추적 데이터 요소를 생성하기 때문에, 추적 데이터의 양을 줄이는 것을 돕는다. 이전의 조건부 명령이 이미 조건 플래그들(3022)의 상태를 표시하는 정보를 포함하는 관련된 추적 데이터 요소를 갖기 때문에, 다음의 조건부 명령에 대해서는, 조건 값을 추적할 필요가 없다.
도 23은 도 22의 방법에서 생성된 추적 스트림을 분석하는 대응하는 진단방법을 나타낸 것이다. 진단장치(3012)는 추적회로(3006)의 제어 플래그(3026)의 상태들에 대응하는 "소거" 및 "세트" 상태들을 갖는 제어 플래그(3028)를 갖는다. 스텝 3100에서, 진단회로(3016)는, 처리회로(3004)에 의해 처리된 프로그램 명령들의 표시에 포함된 다음 명령을 분석한다. 스텝 3102에서, 조건부 명령의 표시자 존재하는지 여부를 판정한다. 명령이 조건부 명령이면, 스텝 3104에서, 진단 제어 플래그(3028)가 소거인지 아닌지를 판정한다. 진단 제어 플래그가 소거이면, 스텝 3106에서, 진단회로(3016)는, 이 조건부 명령에 대한 관련된 추적 데이터 요소의 위치를 알아내고, 스텝 3108에서, 관련된 추적 데이터 요소에 포함된 추적된 조건 값에 근거하여 조건부 명령의 처리 결과를 판정한다. 스텝 3110에서, 진단 제어 플래그가 "세트" 상태로 놓인다.
한편, 스텝 3104에서, 진단 제어 플래그가 소거가 아니었으면, 스텝 3112로 방법을 진행하여, 진단회로(3016)에 의해 추가적인 추적 데이터 요소의 위치를 알아낸다. 이 추가적인 추적 데이터 요소는 이전에 분석된 조건부 명령과 관련된 데이터 요소이다. 스텝 3114에서, 진단회로(3016)는, 이전에 분석된 조건부 명령에 대해 생성된 추가적인 추적 데이터 요소에 포함된 추적된 조건 값에 근거하여 현재 분석된 조건부 명령의 처리 결과를 결정한다. 스텝 3102에서, 명령이 조건부 명령이 아닌 것으로 판정되었으면, 스텝 3104 내지 3114는 생략한다.
그후, 스텝 3116에서, 분석중인 명령이 조건 갱신 명령인지 여부를 판정한다. 명령은 조건부 명령 및 조건 갱신 명령 모두이어도 된다. 명령이 조건 갱신 명령이면, 스텝 3118에서 진단 제어 플래그(3028)가 소거되는 한편, 명령이 조건 갱신 명령이 아니면, 스텝 3118을 생략한다. 스텝 3120에서, 분석할 명령이 존재하는지 여부를 판정한다. 다른 명령이 존재하면, 스텝 3100으로 방법이 되돌아가고, 그렇지 않으면, 스텝 3122에서 방법이 종료한다.
따라서, 진단회로는 추적회로(3006)의 제어 플래그(3026)에 대응하는 진단 제어 플래그(3028)를 이용하여, 주어진 조건부 명령에 대한 추적 스트림에 관련된 추적 데이터 요소가 포함될 것으로 예상되는지 여부를 판정한다. 이와 같은 관련된 추적 데이터 요소가 존재하면, 관련된 추적 데이터 요소에 포함된 추적된 조건 값에 근거하여 조건부 명령의 처리 결과가 결정될 수 있다. 관련된 추적 데이터 요소가 존재하지 않으면, 현재의 조건부 명령의 처리 결과가 결정될 수 있도록 하는 추적된 조건 값을 포함하는 이전의 조건 명령과 관련된 추적 데이터 요소가 존재하게 된다. 조건 갱신 명령과 마주쳤을 때, 진단 제어 플래그(3028)가 소거되어, 다음 명령이 관련된 추적 데이터 요소를 가질 것으로 예측된다는 것을 표시한다.
도 24는 도 20에 도시된 프로그램 명령들의 스트림에 도 22 및 9의 방법을 적용한 예를 나타낸 것이다. 마찬가지로, 메모리 위치 1600에서 분기 명령의 분기 선택 결과가 추적된다. 메모리 위치 2000에 기억된 조건 갱신 명령 CMP의 실행에 응답하여, 추적회로(3006)는, 도 22의 스텝 3082에 따라, 그것의 제어 플래그(26)를 소거한다. 마찬가지로, 진단회로(3016)가 명령을 분석할 때, 그것의 진단 제어 플래그(3028)를 도 23의 스텝 3118에 따라 소거함으로써 조건 갱신 명령 CMP의 표시에 응답하게 된다.
추적회로(3006)가 메모리 위치 2004에 기억된 조건부 명령 MOVNE와 마주치면, 추적회로(3006)는 제어 플래그(3026)가 현재 소거된 상태에 있는 것으로 판정하므로, 도 22의 스텝 3076에서 추적된 제어 조건 값 CPSR을 포함하는 추적 데이터 요소가 생성된다. 그후, 도 22의 스텝 3078에 따라 제어 플래그가 세트된다. 이에 대응하여, 명령들을 분석할 때, 진단회로(3016)는, 메모리 위치 2004에 있는 조건부 명령 MOVNE의 표시를 검출한 후, 추적 스트림 내부의 관련된 추적 데이터 요소의 위치를 알아내고 추적 데이터 요소에 포함된 추적된 조건 값에 근거하여 MOVNE 명령의 처리 결과를 판정함으로써, 진단 제어 플래그(328)가 소거되는 r서에 응답하게 된다. 그후, 진단회로(3016)가 도 23의 스텝 3110에서 진단 제어 플래그(3028)를 세트한다.
그후, 메모리 위치 2008 및 200C에 있는 다음이 조건부 명령들에 대해, 추적회로(3006)는 제어 플래그(3026)가 세트 상태에 있는 것을 검출하므로, 대응하는 추적 데이터 요소를 생성하지 않는다. 이에 대응하여, 진단회로(16)는 진단 제어 플래그(3028)가 세트 상태에 있다는 것을 검출하므로, 도 23의 뒤따르는 스텝들 3112 및 3114는 메모리 위치 2004에 기억된 이전의 조건부 명령과 관련된 추적 데이터 요소의 위치를 알아낸다. 진단회로(3106)는, 메모리 위치 2004에 위치한 명령에 대한 이전의 추적 데이터 요소에 근거하여, 메모리 위치 2008 및 200C에 있는 명령들의 처리 결과를 판정한다.
이에 따르면, 조건 플래그들(3022)의 갱신에 뒤따라 실행될 최초의 조건부 명령이 추적된 조건 값을 포함하는 추적 데이터 요소의 생성을 일으키는 추적 스트림을 생성할 수 있다.
도 25∼도 27은, 추적회로(3006)가, 어떤 조건 플래그들(3022)이 이미 추적되었는지 모니터링하고, 조건부 명령에 대한 추적 데이터 요소를 생성할 때, 이미 추적되지 않은 조건부 명령에 의해 요구된 추가적인 조건 플래그들을 추적하는 실시예를 나타낸 것이다. 이 방법은, 조건부 플래그들(3022)의 개별적인 조건부 플래그에 각각 대응하는 복수의 제어 플래그들(3026)을 이용한다. 진단회로(3016)는 마찬가지로 "소거" 상태 및 "세트" 상태를 갖는 진단 제어 플래그들(3028)의 대응하는 그룹을 갖고 있다.
도 25는 처리회로(3004)의 연산의 추적방법을 나타낸 것이다. 스텝 3140에서, 처리회로(3004)는 다음 명령을 실행하고, 이 명령의 실행이 추적회로(3006)에 의해 모니터링된다. 스텝 3142에서, 명령이 조건부 명령인지 여부를 판정한다. 명령이 조건부 명령이면, 스텝 3144에서, 추적회로(3006)가 조건부 명령의 결과를 결정하는데 필요한 조건 플래그들(3022)의 서브셋을 결정한다. 예를 들어, 도 16에 도시된 각각의 조건에 대해, 테이블에 표시된 대응하는 플래그들이 조건 플래그들의 필요한 서브셋이다. 예를 들어, HI 조건은 C 및 Z 플래그들을 필요로 한다.
스텝 3146에서, 추적회로(3006)는, 필요한 조건 플래그들(3022)의 서브셋에 대응하는 제어 플래그들(26) 중에서 어느 것이 소거인지 여부를 판정한다. 필요한 조건 플래그들의 서브셋에 대응하는 제어 플래그들 중 어떤 것도 소거가 아닌 경우에는, 스텝 3152로 방법을 진행한다. 조건 플래그들의 필요한 서브셋에 대응하는 1개 이상의 제어 플래그들이 소거인 경우에는, 스텝 3148에서, 추적회로(3006)가, 적어도 대응하는 제어 플래그들(3026)이 소거인 필요한 서브셋의 조건 플래그들(3022)을 표시하는 추적된 조건 값을 포함하는 추적 데이터 요소를 생성 및 출력한다. 옵션으로, 추적 조건 값은 다른 조건 플래그들을 표시해도 되고, 또는 모든 조건 플래그들(3022)을 표시해도 된다. 그후, 스텝 3150에서, 추적회로(3006)는 추적된 조건 값에 표시된 조건 플래그들에 대응하는 제어 플래그들을 설정한다. 스텝 3142에서, 명령이 조건부 명령이 아닌 것으로 판정되면, 스텝 3144 내지 3150을 생략한다.
스텝 3152에서, 추적회로(3006)는, 처리회로(4)에 의해 실행중인 명령이 조건 갱신 명령인지 여부를 판정한다. 명령이 조건 갱신 명령이면, 스텝 3154에서, 추적회로(3006)는 적어도 조건 갱신 명령의 결과로써 갱신되는 조건 플래그들(3022)에 대응하는 제어 플래그들(3026)을 소거한다. 옵션으로, 스텝 3154에서, 추적회로(3006)는 다른 제어 플래그들(3026)을 소거해도 되고, 또는 모든 제어 플래그들(3026)을 소거해도 된다. 명령이 조건 갱신 명령이 아닌 경우에는, 스텝 3154를 생략한다. 스텝 3156에서, 처리회로(3004)에 의해 처리할 다른 명령이 존재하는지 여부를 판정한다. 이와 같은 명령이 존재하면, 스텝 3140으로 방법이 되돌아간다. 그렇지 않으면, 스텝 3158에서 방법이 종료한다.
도 25의 방법을 구현하기 위한 유사코드(pseudocode)를 이하에 나타낸다("마커"라는 용어는 제어 플래그(3026)를 표시한다):
Figure 112013068889715-pct00002
이와 달리, 도 25의 방법을 구현하기 위해 다음의 유사코드가 사용될 수도 있다:
Figure 112013068889715-pct00003
도 26은 도 25의 방법에 의해 생성된 추적 스트림을 분석하는 방법을 나타낸 것이다. 스텝 3160에서, 진단회로(3016)는 처리회로(3004)에 의해 실행된 명령들의 표시에 나타난 다음 명령을 분석한다. 스텝 3162에서 다음 명령이 조건부 명령인 것으로 판정되면, 스텝 3164에서, 진단회로(3016)는, 이 명령에 대한 조건 플래그들의 필요한 서브셋을 결정하고, 조건 플래그들의 필요한 서브셋에 대응하는 진단 제어 플래그들(3028)이 소거인지 세트인지를 판정한다. 스텝 3166에서는, 조건 플래그들의 필요한 서브셋에 대응하는 진단 제어 플래그들(3028)의 어느 것이 소거된 것으로 스텝 3164가 판정하면, 진단회로(3016)는 추적 스트림에서 첫 번째 추적된 조건 값을 포함하는 관련된 추적 데이터 요소의 위치를 알아낸다. 첫 번째 추적된 조건 값은, 적어도 소거 진단 제어 플래그들(3028)에 대응하는 조건 플래그들의 필요한 서브셋의 값들을 나타낸다. 그후, 진단회로(3016)는, 소거이고 원하는 서브셋의 조건 플래그(3022)에 대응하는 진단 제어 플래그들(3028)을 세트한다.
스텝 3168에서는, 조건 플래그들의 필요한 서브셋에 대응하는 진단 제어 플래그들(3028)이 세트되었다고 스텝 3164가 판정하면, 진단회로(3016)가 적어도 한 개의 이전의 조건부 명령에 대한 적어도 한 개의 추가적인 추적 데이터의 위치를 알아낸다. 이 추가적인 추적 데이터 요소는, 세트된 이들 진단 제어 플래그들에 대응하는 조건 플래그들의 값들을 표시하는 적어도 한 개의 추가적인 추적된 조건 값을 포함한다. 그후, 스텝 3170에서, 진단회로(3016)는, (스텝 3166 및 3168에서 어떤 추적된 조건 값들을 액세스하였는지에 의존하여) 첫 번째 추적된 조건 값 및/또는 적어도 한 개의 추가적인 추적된 조건 값을 분석한 후, 이들 추적된 조건 값들에 근거하여 현재의 조건부 명령의 처리 결과를 결정한다. 스텝 3162에서, 명령이 조건부 명령이 아닌 것으로 판정되면, 스텝 3164 내지 3170을 생략한다.
스텝 3172에서는, 진단회로(3016)가 다음 표시된 명령이 조건 갱신 명령인지 여부를 판정한다. 다음 명령이 조건 갱신 명령이면, 스텝 3174에서, 진단회로(3016)가 적어도 조건 갱신 명령의 실행의 결과로써 갱신된 조건 플래그들(3022)에 대응하는 진단 제어 플래그들(3028)을 소거한다(진단회로(3016)는 조건 갱신 명령의 추론된 처리 결과에 근거하여 어떤 조건 플래그들(3022)이 갱신되었는지 판정할 수 있다). 옵션으로, 진단회로(3016)는 다른 진단 제어 플래그들(3028)을 소거하거나, 모든 진단 제어 플래그들(3028)을 소거할 수도 있다. 스텝 3172에서, 다음 명령이 조건 갱신 명령이 아닌 경우에는, 스텝 3174를 생략한다. 스텝 3176에서, 분석할 다른 명령이 존재하는지 여부를 판정한다. 다른 명령이 존재하면, 스텝 3160으로 방법이 되돌아가고, 아니면, 스텝 3178에서 방법이 종료한다.
도 27은 이전에 예시한 프로그램 명령들의 스트림에 도 25 및 3012를 적용한 예를 나타낸 것이다. 본 실시예에서는, 모든 제어 플래그들(3026)과 진단 제어 플래그들(3028)이 조건 갱신 명령에 응답하여 소거되는 것으로 가정하지만, 전술한 것과 같이, 추적회로(3006)와 진단회로(3016)가 갱신된 조건 플래그들(3022)에 대응하는 제어 플래그들 3016, 3028만을 소거하는 실시예를 제공하는 것도 가능하다.
도 27에는, 분기 명령에 대해 생성된 추적 데이터 요소에 분기 선택 결과가 표시되어 있다. 분기 선택 결과는 진단회로(3016)에 의해 사용되어, 어떤 명령들이 처리회로(3004)에 의해 실행되었는지 결정한다.
메모리 위치 2000에서 조건 갱신 명령 CMP와 마주치면, 추적회로(3006)는 모든 제어 플래그들(3026)을 소거한다. 마찬가지로, 진단회로(3016)가 조건 갱신 명령 CMP와 마주치면, 모든 진단 제어 플래그들(3028)을 소거한다.
메모리 위치 2004에서 조건부 명령 MOVNE의 실행시에, 추적회로(3006)는, "not equal" 조건 NE에 대해, 조건 플래그들의 필요한 서브셋이 Z 플래그인 것으로 판정한다(도 16 참조). 도 25의 스텝 3146에서, 추적회로(3006)는 Z 플래그에 대응하는 제어 플래그(3026)가 소거인지 판정하고, 스텝 3148에서, 적어도 Z 플래그의 값을 표시하는 추적된 조건 값을 포함하는 추적 데이터 요소를 생성한다. 그후, 도 25의 스텝 3150에서 Z 플래그에 대응하는 제어 플래그가 설정된다.
이에 대응하여, 추적 스트림을 분석할 때, 진단회로(3016)는 메모리 위치 2004에서 조건부 명령 MOVNE와 마주쳐, 조건 플래그들의 필요한 서브셋이 Z 플래그인 것으로 판정한다. 이때, Z 조건 플래그에 대응하는 진단 제어 플래그(3028)가 소거이므로, 진단회로(3016)는 MOVNE 명령에 대응하는 관련된 추적 데이터 요소가 존재하는 것으로 판정한다. 진단회로는 Z 플래그의 값을 표시하는 추적된 조건 값을 포함하는 관련된 추적 데이터 요소의 위치를 알아낸다. 진단회로(3016)는 메모리 위치 2004에 기억된 MOVNE에 대한 추적된 조건 값에 근거하여 처리 결과를 결정한다. 그후, 진단회로(3016)는 Z 플래그에 대응하는 진단 제어 플래그(3028)를 세트한다.
추적회로(3006)가 메모리 위치 2008에 기억된 조건부 명령 MOVEQ와 마주치면, 추적회로(3006)는, "equals" 조건 EQ가 만족하는지 여부를 판정하기 위한 플래그들의 필요한 서브셋이 마찬가지로 Z 플래그인 것을 판정한다(도 16 참조). 도 25의 스텝 3146에서, 추적회로(3006)는 Z 플래그에 대응하는 제어 플래그가 세트된 것으로 판정하여, 도 25의 스텝 3148 및 3150을 생략하고, 추적된 조건 값을 포함하는 추적 데이터 요소를 생성하지 않는다. 추적 스트림을 분석할 때, 진단회로(3016)는, Z 플래그에 대응하는 진단 제어 플래그(3028)가 세트된 것을 마찬가지로 검출할 수 있다. 따라서, 진단회로(3016)는 도 26의 스텝 3168에서 메모리 위치 2004에 기억된 이전의 조건부 명령 MOVNE에 대한 추적 데이터 요소의 위치를 알아내고, MONVE 명령에 대해 추적 데이터 요소에 포함된 추적된 조건 값에 근거하여 MONEQ 명령의 결과를 판정한다.
메모리 위치 200C에는, HI 조건에 의존하는 조건부 가산 명령 ADDHI가 존재한다. 이 명령이 실행될 때, 추적회로(3006)는 조건 플래그들의 필요한 서브셋이 C 플래그와 Z 플래그인 것으로 판정한다(도 16 참조). 추적회로(3006)는, C 및 Z 플래그들에 대응하는 제어 플래그들(3026)의 상태를 결정하고, Z 조건 플래그에 대응하는 제어 플래그(3026)가 세트되지만 C 조건 플래그에 대응하는 제어 플래그(3026)가 여전히 소거인 것으로 판정한다. 따라서, 도 25의 스텝 3148에서, 추적회로(3006)는 적어도 C 플래그를 표시하는 값을 포함하는 추적 데이터 요소를 생성한다. 그후, C 조건 플래그에 대응하는 제어 플래그(3026)가 세트된다.
추적 스트림을 해석할 때, 메모리 위치 200C에 위치한 ADDHI 명령에 대한 조건 플래그들의 필요한 서브셋이 C 및 Z 플래그인 것을 검출한다. C 플래그에 대응하는 진단 제어 플래그(3028)가 소거이므로, 스텝 3166에서, 진단회로(3016)는 추적 스트림에서 C 플래그 값을 표시하는 ADDHI 명령과 관련된 추적 데이터 요소의 위치를 알아내게 된다. 스텝 3164에서 Z 조건 플래그에 대한 진잔 제어 플래그(3028)가 세트되었기 때문에, 도 26의 스텝 3168에서, 진단회로(3016)는 추가적인 추적 데이터 요소의 위치를 알아내도 된다. 본 실시예에서, 추가적인 추적 데이터 요소는 메모리 위치 2004에 위치한 MOVNE 명령에 대해 생성된 추적 데이터 요소이다. 도 26의 스텝 3170에서, 진단회로(3016)는, 메모리 위치 2004에 위치한 MOVNE 명령에 대해 추적 데이터 요소에 포함된 추적된 조건 값과 메모리 위치 200C에 위치한 ADDHI 명령에 대해 추적 데이터 요소에 포함된 추적 조건 값 모두에 근거하여, ADDHI 명령의 처리 결과를 결정한다.
마찬가지로, 추적회로(6)는 추적 데이터를 생성하고, 진단회로(16)는 도 27에 도시된 다음의 명령들에 대해 추적 데이터를 분석한다.
전술한 실시예들은 조건 플래그들(3022)이 갱신될 때 제어 플래그들(26)과 진단 제어 플래그들(3028)이 소거되는 것으로 설명하였지만, 다른 이벤트들이 제어 플래그들(3026) 또는 진단 제어 플래그들(3026)이 소거되도록 할 수도 있다. 예를 들어, 예외 이벤트가 제어 플래그들이 소거되게 하여도 된다. 예외 이벤트에 의해 기동된 예외 핸들러가 추적회로(3006)에 의해 추적되고 있으면, 예외 이벤트의 발생시에 제어 플래그들(3026)을 소거하는 것은, 예외 핸들러의 개시시에 조건 플래그들(3022)이 추적되도록 보장한다. 이와 달리, 예외 핸들러가 추적되고 있지 않으면, 예외 이벤트의 발생시에 제어 플래그들을 소거하는 것은, 예외처리로부터의 복귀 후에 조건 플래그들(3022)이 추적되도록 보장한다.
또한, 추적회로(3006)는 주기적으로 제어 플래그들을 소거하여, 추적된 조건 값이 주기적으로 추적 스트림에 포함되어 진단회로(3012)에 대한 기준점을 제공해도 된다. 기준점에 포함된 추적된 조건 값이 이전의 추적 데이터 요소들로부터의 정보를 필요로 하지 않으면서 조건 플래그들의 상태가 결정될 수 있게 하므로, 진단회로(3016)가 기준점에서 추적 데이터의 분석을 개시할 수 있다. 이와 같은 구성은, 진단회로(3016)가 전체 추적 스트림을 통과하여 해당 영역에 도달할 필요가 없이, 해당 추적 스트림의 영역으로 직접 점프할 수 있으므로 유용하다.
또한, 처리 성능을 향상시키기 위해, 명령이 실제로 실행되어야 하는지 여부가 알려지기 전에, 일부 프로세서가 명령들의 추론적 실행을 행해도 된다. 한 개 이상의 추론적으로 실행된 명령들이 사실상 실행되어서는 않되었을 때도 가끔 있다. 오추론(mis-speculation)의 검출시에, 프로세서가 잘못하여 부정확하게 실행된 명령의 실행 전에 생긴 프로세서 상태를 복원하기 위해 부정확하게 실행된 명령의 결과를 뒤바꾸어도 된다. 얼마나 많은 수의 명령들이 부정확하게 실행되었는지가 추적회로(3006)에 알려지지 않을 수도 있다. 오추론의 정정으로부터 발생한 조건 플래그 값들이 추적 스트림으로부터 결정될 수 있도록 확보하기 위해, 오추론의 검출시에 추적회로(6)가 제어 플래그들(3026)을 소거해도 된다.
이들 이벤트들의 어느 것에 대해, 추적회로(3006)가, 제어 플래그들(3026)이 소거되었다는 것을 표시하는 정보를 추적 스트림에 포함시켜도 된다. 진단회로(3016)는 진단 제어 플래그들(3028)을 소거함으로써 이 정보에 응답해도 된다.
도 22∼도 27은, 조건 플래그들(3022)의 값들을 표시하는 추적된 조건 값이 추적 스트림에 포함되어 조건부 명령의 결과가 진단장치(3012)에 의해 결정될 수 있도록 하는 실시예를 나타내고 있다. 그러나, 본 발명은, 다른 종류의 결과 표시 값(예를 들어, 통과/실패 결과)이 추적 스트림에 포함되어 조건부 명령의 결과가 결정될 수 있도록 하는 실시예에 적용해도 된다.
첨부된 도면을 참조하여 본 발명의 예시적인 실시예를 상세히 설명하였지만, 본 발명은 이들 정확한 실시예들에 한정되지 않으며, 첨부된 청구범위에 규정된 본 발명의 보호범위 및 사상을 벗어나지 않으면서 당업자에 의해 다양한 변경 및 변형이 행해질 수 있다는 것은 자명하다.

Claims (63)

  1. 데이터 처리장치(100)의 처리 활동을 표시하는 추적 데이터의 항목들을 생성하도록 구성된 추적 유닛(180)으로서,
    조건부 명령의 실행을 표시하는 적어도 한 개의 명령 관측 표시자와, 상기 데이터 처리장치(100)에 의한 상기 적어도 한 개의 조건부 명령을 실행한 결과의 출력을 표시하는 적어도 한 개의 결과 출력 표시자를 상기 데이터 처리장치(100)에서 수신하는 추적 입력 인터페이스(182, 184)와,
    상기 적어도 한 개의 명령 관측 표시자와 상기 적어도 한 개의 결과 출력 표시자를 처리하고, 상기 적어도 한 개의 명령 관측 표시자와 상기 적어도 한 개의 결과 출력 표시자로부터 대응하는 조건부 명령 추적 데이터 항목들과 조건부 결과 추적 데이터 항목들을 생성하고, 상기 조건부 명령 추적 데이터 항목들과 상기 조건부 결과 추적 데이터 항목들을 각각 독립적으로 출력하여 진단장치(196)에 의해 조건부 명령들 및 이에 대응하는 조건부 결과들에 대한 별개의 추적 분석을 가능하게 하는 추적회로(186, 188, 190, 192)를 구비한, 추적 유닛.
  2. 제 1항에 있어서,
    상기 명령 관측 표시자가 제 1 처리 사이클에 상기 추적 입력 인터페이스(182, 184)에서 수신되고, 상기 결과 출력 표시자는 상기 제 1 처리 사이클과는 다른 제 2 처리 사이클에 상기 추적 입력 인터페이스(182, 184)에서 수신되는 추적 유닛.
  3. 제 1항 또는 제 2항에 있어서,
    상기 추적 유닛(180)은 상기 데이터 처리장치(100)에서 수신된 결과 출력 표시자들의 복수의 세트를 기억하는 결과 출력 표시자 버퍼(194)를 구비하고, 상기 추적 유닛(180)은 기억된 세트의 결과들을 주기적으로 선택하여 상기 추적회로(186, 188, 190, 192)에 처리하기 위해 출력하도록 구성되고, 상기 결과 출력 표시자 버퍼(194)가 현재 유효한 값을 기억하고 있는 결과 출력 표시자들의 세트를 조건부 명령이 참조한다는 것을 상기 명령 관측 표시자들 중에서 한 개가 표시하는 것에 응답하여, 상기 추적 유닛(180)은, 결과 출력 표시자들의 새로운 세트가 기억될 수 있도록, 상기 결과 출력 표시자 버퍼(194)가 현재 유효한 값을 기억하고 있는 결과 출력 표시자들의 상기 세트를 선택하여 출력하도록 구성된 추적 유닛.
  4. 제 3항에 있어서,
    상기 데이터 처리장치(100)는, 조건부 명령이 어떻게 처리되는지를 표시하는 각각의 세트의 조건부 코드 플래그 값들을 기억하도록 구성된 복수의 현재 프로그램 상태 레지스터들(150)을 구비하고, 상기 결과 출력 표시자 버퍼(194)는 상기 복수의 현재 프로그램 상태 레지스터들(150) 각각에 대응하는 결과 출력 표시자들의 한 개의 세트를 기억하기 위한 기억 장소를 포함하고, 상기 결과 출력 표시자들의 상기 세트들 각각은 적어도 일부의 상기 조건부 코드 플래그 값들을 포함하는 추적 유닛.
  5. 제 1항 또는 제 2항에 있어서,
    상기 데이터 처리장치(100)는, 조건부 명령이 상기 추적 데이터의 항목들로서 출력되어야 하는지 여부를 판정하기 위해 테스트되는 조건부 코드 플래그 마크들의 각각의 세트를 기억하도록 구성된 적어도 한 개의 현재 프로그램 상태 레지스터(150)를 구비하고, 상기 추적 유닛(180)은, 상기 적어도 한 개의 현재 프로그램 상태 레지스터(150)와 상기 조건부 코드 플래그 마크들의 각각의 세트의 적어도 서브셋과 관련된 상태를 열거하는 현재 프로그램 상태 레지스터 테이블(193)을 기억하는 데이터 기억장치를 구비한 추적 유닛.
  6. 제 5항에 있어서,
    상기 현재 프로그램 상태 레지스터 테이블(193)은 상기 서브셋의 조건부 코드 플래그 마크들 각각에 대해 3가지 다른 상태를 기억하도록 구성된 추적 유닛.
  7. 제 6항에 있어서,
    상기 3가지 다른 상태는, 추적, 추적 예정 및 추적 안됨을 포함하는 추적 유닛.
  8. 제 6항에 있어서,
    상기 데이터 처리장치(100)에 의해 방출될 때 어떤 플래그들이 추적되어야 하는지를 표시하는 각 CPSR의 각각의 플래그에 대해 2가지 상태를 갖는 인플라이트 테이블과, 조건부 명령이 조건부 명령 추적 데이터 항목으로서 추적되어야 하는지 아닌지를 표시하는 현재 CPSR의 각각의 플래그에 대해 적어도 2가지 상태를 기억하는 현재 CPSR 테이블을 유지함으로써, 상기 3가지 다른 상태가 추적되는 추적 유닛.
  9. 제 5항에 있어서,
    상기 추적회로(186, 188, 190, 192)는 상기 현재 프로그램 상태 레지스터 테이블(193)을 사용하여, 언제 상기 조건부 결과 추적 데이터 항목들이 필요한지와 상기 조건부 코드 플래그 마크들의 세트 중에서 어느 것이 추적되어야 하는지 판정하는 추적 유닛.
  10. 제 2항에 있어서,
    상기 추적 입력 인터페이스(182, 184)는, 상기 명령 관측 표시자에 대응하는 명령 태그와 상기 결과 출력 표시자에 대응하는 결과 태그를 상기 데이터 처리장치(100)에서 수신하는 추적 유닛.
  11. 제 10항에 있어서,
    상기 명령 태그와 상기 결과 태그가 상기 추적회로(186, 188, 190, 192)에 의해 출력되는 추적 유닛.
  12. 제 10항에 있어서,
    상기 추적회로(186, 188, 190, 192)는, 상기 명령 관측 표시자와 관련된 상기 명령 태그가 상기 조건부 명령 추적 데이터 항목에 대응하는 명령 키로 변환되는 키 변환 연산에 대해 태그 부착을 수행하도록 구성되고, 상기 결과 출력 표시자와 관련된 상기 결과 태그가 상기 조건부 결과 추적 데이터 항목에 대응하는 결과 키로 변환되고, 상기 키 변환 연산은 현재 프로그램 상태 레지스터 테이블(193) 내부에 기억된 상기 상태에 의존하여 행해지는 추적 유닛.
  13. 제 12항에 있어서,
    상기 추적회로(186, 188, 190, 192)는, 상기 추적 유닛(180)에 의한 상기 조건부 결과 추적 데이터 항목들 중에서 대응하는 조건부 결과 추적 데이터 항목의 출력으로부터 상기 진단장치(196)에 의해 발생이 추측될 수 있는 수신된 명령 관측 표시자에 대응하는 상기 조건부 명령 추적 데이터 항목들 중에서 적어도 한 개의 조건부 명령 추적 데이터 항목의 출력을 버퍼링하도록 구성된 추적 압축회로(187)를 구비한 추적 유닛.
  14. 제 13항에 있어서,
    상기 추적회로(186, 188, 190, 192)는 상기 버퍼링된 조건부 명령 추적 데이터 항목에 대한 상기 결과 키들 중에서 한 개를 생성 및 출력하도록 구성되고, 상기 출력된 결과 키는 상기 진단장치(196)에 의해 사용되어 상기 버퍼링된 조건부 명령 추적 데이터 항목의 출력을 추측하는 추적 유닛.
  15. 제 13항에 있어서,
    상기 추적회로(186, 188, 190, 192)는, 상기 수신된 명령 관측 표시자들 중에서 어느 것이 상기 추적회로(186, 188, 190, 192)에 의해 버퍼링된 대응하는 조건부 명령 추적 데이터 항목들의 출력을 가졌는지를 표시하는 버퍼링 기록을 모니터링 및 유지하도록 구성된 추적 유닛.
  16. 제 15항에 있어서,
    상기 버퍼링 기록은 가장 최근에 생성된 조건부 명령 추적 데이터 항목과 가장 최근에 출력된 조건부 명령 추적 데이터 항목의 기록을 포함하는 추적 유닛.
  17. 제 16항에 있어서,
    키 비교를 행하여, 상기 조건부 명령 추적 데이터 항목에 대응하는 키가 상기 가장 최근에 출력된 조건부 명령 추적 데이터 항목에 대응하는 키보다 크고 상기 가장 최근에 생성된 조건부 명령 추적 데이터 항목에 대응하는 키 이하인지 여부를 결정할 때, 조건부 명령 추적 데이터 항목이 버퍼링된 것으로 결정되는 추적 유닛.
  18. 제 17항에 있어서,
    상기 키의 값들은 최대값에 도달하였을 때 랩 어라운드하고, 상기 키 비교는 모듈로 산술을 준수하는 추적 유닛.
  19. 제 12항에 있어서,
    상기 추적 유닛(180)이 상기 명령 관측 표시자들 중에서 한 개를 수신할 때, 상기 현재 프로그램 상태 레지스터 테이블(193)을 상기 명령 태그를 사용하여 참조하여 조건부 코드 마크들의 적절한 서브셋을 기억하는 현재 프로그램 상태 레지스터들(150) 중에서 적당한 한 개를 확인하도록, 상기 키 변환 연산에 대한 태그 부착이 행해지는, 추적 유닛.
  20. 제 19항에 있어서,
    상기 현재 프로그램 상태 레지스터 테이블(193)에 기억된 상기 관련된 서브셋의 조건부 코드 마크들 중에서 아무것도 추적될 것이라는 것을 표시하지 않을 때 새로운 키 값을 새롭게 생성된 조건부 명령 추적 데이터 항목에 할당하고, 상기 현재 프로그램 상태 레지스터 테이블(193)에 현재 기억된 상기 서브셋의 조건부 코드 마크들 중에서 1개 이상이 추적될 것이라는 것을 표시할 때, 가장 최근에 할당된 키 값을 반복하는 반복 키 값을 새롭게 생성된 조건부 명령 추적 데이터 항목에 할당함으로써, 상기 추적회로(186, 188, 190, 192)가 상기 키 변환 연산에 대한 태그 부착을 수행하는 추적 유닛.
  21. 제 20항에 있어서,
    상기 추적회로(186, 188, 190, 192)는, 상기 조건부 결과 추적 데이터 항목들 중에서 대응하는 1개 이상의 조건부 결과 추적 데이터 항목의 추적 유닛(180)에 의한 출력으로부터 상기 진단장치(196)에 의해 발생이 추측될 수 있는 새로운 키 값들을 갖는 상기 조건부 명령 추적 데이터 항목들 중에서 적어도 한 개의 출력을 버퍼링하도록 구성된 추적 압축회로를 구비하고, 상기 반복 키 값들에 대응하는 조건부 명령 추적 데이터 항목들은 버퍼링되지 않는 추적 유닛.
  22. 제 21항에 있어서,
    상기 추적회로(186, 188, 190, 192)는, 1개 이상의 대응하는 조건부 명령 추적 데이터 항목들이 상기 진단장치(196)에 의해 추측이 허용되는지 여부의 표시와 함께 상기 진단장치(196)로 상기 조건부 결과 추적 데이터 항목을 제공하도록 구성된 추적 유닛.
  23. 제 22항에 있어서,
    상기 1개 이상의 조건부 명령 추적 데이터 항목들이 상기 진단장치(196)에 제공된 대응하는 조건부 결과 추적 데이터 항목들로부터 추측될 때, 상기 1개 이상의 조건부 명령 추적 데이터 항목들이 상기 추적 압축회로의 결과 출력 표시자 버퍼(194)에서 제거되고 상기 추적회로(186, 188, 190, 192)에 의해 출력되지 않는 추적 유닛.
  24. 제 21항에 있어서,
    대응하는 조건부 결과 키가 상기 추적 압축회로의 결과 출력 표시자 버퍼(194)에 의해 현재 버퍼링된 조건부 명령 키와 동일한 경우에, 상기 1개 이상의 조건부 명령 추적 데이터 항목들이 추측되도록 허용되는 추적 유닛.
  25. 제 1항 또는 제 2항에 있어서,
    상기 추적회로(186, 188, 190, 192)에 의해 생성된 상기 조건부 결과 추적 데이터 항목들을 수신하고, 적어도 일부의 상기 조건부 결과 추적 데이터 항목들의 압축된 표현들을 생성하고 상기 압축된 표현들을 기억하고, 추적 데이터 항목들의 복수의 압축된 표현이 합성된 추적 데이터 항목들로 출력되도록 상기 압축된 표현의 적어도 일부를 합성하는 추적 결과 합성회로(187)를 더 구비한 추적 유닛.
  26. 제 25항에 있어서,
    상기 추적 결과 합성회로(187)는, 상기 압축된 표현들을 발생 및 기억하고, 상기 추적 결과 합성회로에 의해 압축될 수 없는 조건부 결과 추적 데이터 항목의 수신시에, 상기 기억된 추적 데이터 항목들의 압축된 표현들을 합성된 추적 데이터 항목들로서 출력한 후, 압축될 수 없는 상기 조건부 결과 추적 데이터 항목을 출력하도록 구성된 추적 유닛.
  27. 제 20항에 있어서,
    상기 추적회로(186, 188, 190, 192)는, 조건부 또는 비조건부 분기 명령들과 로드/스토어 명령들과 관련된 추적 데이터를 상기 추적 입력 인터페이스(182, 184)부터 수신하도록 구성되고, 상기 추적회로(186, 188, 190, 192)는, 대응하는 명령이 선택한 조건부/비조건부 분기 또는 로드/스토어 명령에 대응한다는 것을 나타내는 제 1 타입의 웨이포인트 표시자와, 대응하는 명령이 선택하지 않은 조건부 분기에 대응한다는 것을 나타내는 제 2 타입의 웨이포인트 표시자를 생성하도록 구성된 추적 유닛.
  28. 제 1항 또는 제 2항에 있어서,
    상기 추적회로(186, 188, 190, 192)는, 조건부 또는 비조건부 분기 명령들과 로드/스토어 명령들에 관한 추적 데이터를 상기 추적 입력 인터페이스(182, 184)에서 수신하도록 구성되고, 상기 추적회로(186, 188, 190, 192)는, 대응하는 명령이 선택될 것으로 예측된 조건부 분기, 선택될 것으로 예측된 비조건부 분기 또는 로드/스토어 명령에 대응한다는 것을 나타내는 제 1 타입의 웨이포인트 표시자와, 대응하는 명령이 선택되지 않은 조건부 분기일 것으로 예측된다는 것을 나타내는 제 2 타입의 웨이포인트 표시자를 생성하도록 구성된 추적 유닛.
  29. 제 27항에 있어서,
    상기 명령 관측 표시자가 상기 데이터 처리장치(100)에 의해 사용되어 조건부 분기 명령들 이외의 조건부 명령들의 실행을 표시하고, 상기 추적회로(186, 188, 190, 192)는, 상기 명령 관측 표시자에 대응하는 조건부 명령 추적 데이터 항목과, 상기 제 1 타입의 웨이포인트 표시자 및 상기 제 2 타입의 웨이포인트 표시자 중에서 적어도 한 개를 동일한 추적 데이터 스트림으로 출력하도록 구성된 추적 유닛.
  30. 제 27항에 있어서,
    상기 결과 출력 표시자가 상기 데이터 처리장치(100)에 의해 사용되어 조건부 분기 명령 이외의 조건부 명령의 실행을 표시하고, 상기 추적회로(186, 188, 190, 192)는, 상기 결과 출력 표시자에 대응하는 조건부 결과 추적 데이터 항목과, 상기 제 1 타입의 웨이포인트 표시자 및 상기 제 2 타입의 웨이포인트 표시자 중에서 적어도 한 개를 동일한 추적 데이데 스트림으로 출력하도록 구성된 추적 유닛.
  31. 제 27항에 있어서,
    상기 명령 관측 표시자가 상기 데이터 처리장치(100)에 의해 사용되어 조건부 분기 명령의 실행을 표시하고, 상기 결과 출력 표시자가 상기 데이터 처리장치(100)에 의해 사용되어 조건부 분기 명령 이외의 조건부 명령의 실행을 표시하고, 상기 추적회로(186, 188, 190, 192)는, 상기 명령 관측 표시자에 대응하는 조건부 명령 추적 데이터 항목, 상기 결과 출력 표시자에 대응하는 조건부 결과 추적 데이터 항목과, 상기 제 1 타입의 웨이포인트 표시자 및 상기 제 2 타입의 웨이포인트 표시자 중에서 적어도 한 개를 동일한 추적 데이터 스트림으로 출력하도록 구성된 추적 유닛.
  32. 제 29항에 있어서,
    상기 추적회로(186, 188, 190, 192)는, 대응하는 명령 키가 상기 반복 키 값인 조건부 분기 이외의 조건부 명령에 대응하는 제 1 타입의 조건부 명령 추적 데이터 항목과, 대응하는 명령 키가 상기 새로운 키 값인 조건부 분기 이외의 조건부 명령에 대응하는 제 2 타입의 조건부 명령 추적 데이터 항목을 출력하도록 구성된 추적 유닛.
  33. 제 30항에 있어서,
    상기 추적회로(186, 188, 190, 192)는, 대응하는 명령 키가 상기 반복 키 값인 조건부 분기에 대응하는 제 1 타입의 조건부 명령 추적 데이터 항목과, 대응하는 명령 키가 상기 새로운 키 값인 조건부 분기에 대응하는 제 2 타입의 조건부 명령 추적 데이터 항목을 출력하도록 구성된 추적 유닛.
  34. 제 27항, 제 29항, 제 30항, 제 31항, 제 32항 또는 제 33항 중 어느 한 항에 있어서,
    상기 추적회로(186, 188, 190, 192)는 복수의 웨이포인트 표시자들을 종속접속하여 상기 진단장치(196)로 출력하기 위한 종속접속된 웨이포인트 표시자를 형성하도록 구성되고, 상기 종속접속된 웨이포인트 표시자는, 복수의 상기 제 1 타입의 웨이포인트 표시자, 복수의 상기 제 2 타입의 웨이포인트 표시자와, 적어도 한 개의 상기 제 1 타입의 웨이포인트 표시자 및 적어도 한 개의 상기 제 2 타입의 웨이포인트 표시자를 포함하는 다른 타입의 웨이포인트 표시자들의 조합 중에서 한가지를 포함하는 추적 유닛.
  35. 제 1항, 제 2항, 제 10항, 제 11항, 제 12항, 제 13항, 제 14항, 제 15항, 제 16항, 제 17항, 제 18항, 제 19항, 제 20항, 제 21항, 제 22항, 제 23항, 제 24항, 제 27항, 제 29항, 제 30항, 제 31항, 제 32항 또는 제 33항 중 어느 한 항에 있어서,
    상기 추적회로(186, 188, 190, 192)는, 복수의 조건부 명령 추적 데이터 항목들을 종속접속하여 종속접속된 조건부 명령 추적 데이터 항목을 형성하고, 상기 복수의 조건부 명령 추적 데이터 항목들을 출력하는 대신에, 상기 종속접속된 조건부 명령 추적 데이터 항목을 상기 진단장치(196)로 출력하도록 구성된 추적 유닛.
  36. 제 35항에 있어서,
    상기 종속접속된 조건부 명령 추적 데이터 항목은 상기 복수의 상기 조건부 명령 추적 데이터 항목에 비해 줄어든 추적 대역폭을 갖는 추적 유닛.
  37. 제 36항에 있어서,
    상기 추적회로(186, 188, 190, 192)는, 적어도 한 개의 상기 종속접속된 조건부 명령 추적 데이터 항목들과 적어도 한 개의 상기 종속접속된 웨이포인트 표시자를 동일한 추적 데이터 스트림으로 출력하도록 구성된 추적 유닛.
  38. 제 1항, 제 2항, 제 10항, 제 11항, 제 12항, 제 13항, 제 14항, 제 15항, 제 16항, 제 17항, 제 18항, 제 19항, 제 20항, 제 21항, 제 22항, 제 23항, 제 24항, 제 27항, 제 29항, 제 30항, 제 31항, 제 32항 또는 제 33항 중 어느 한 항에 있어서,
    상기 추적회로(186, 188, 190, 192)는 재정렬 추적 데이터 항목을 출력하도록 구성된 추적 유닛.
  39. 제 38항에 있어서,
    상기 재정렬 추적 데이터 항목은 상기 데이터 처리장치(100)로부터의 분기 오예측 표시자의 수신에 응답하여 출력되는 추적 유닛.
  40. 제 38항에 있어서,
    상기 재정렬 추적 데이터 항목은 상기 데이터 처리장치(100)로부터의 중단 표시자의 수신에 응답하여 출력되는 추적 유닛.
  41. 제 38항에 있어서,
    상기 재정렬 추적 데이터 항목은 상기 데이터 처리장치(100)로부터의 예외 표시자의 수신에 응답하여 출력되는 추적 유닛.
  42. 제 38항에 있어서,
    상기 재정렬 추적 데이터 항목은 상기 데이터 처리장치(100)로부터의 취소 표시자의 수신에 응답하여 출력되는 추적 유닛.
  43. 제 1항, 제 2항, 제 10항, 제 11항, 제 12항, 제 13항, 제 14항, 제 15항, 제 16항, 제 17항, 제 18항, 제 19항, 제 20항, 제 21항, 제 22항, 제 23항, 제 24항, 제 27항, 제 29항, 제 30항, 제 31항, 제 32항 또는 제 33항 중 어느 한 항에 있어서,
    상기 추적회로(186, 188, 190, 192)는, 상기 데이터 처리장치(100)로부터, 한 개 이상의 추론적으로 실행 및 추적된 명령들이 취소된 것을 표시하는 취소 표시자를 수신하도록 구성되고, 상기 추적회로(186, 188, 190, 192)는 상기 취소 표시에 응답하여 재정렬 추적 데이터 항목을 발생하도록 구성되고, 상기 추적회로(186, 188, 190, 192)에 의해 출력되는 상기 재정렬 추적 데이터 항목은 상기 추적회로(186, 188, 190, 192)에 의해 출력되어, 적어도 한 개의 이전에 수신된 조건부 명령 추적 항목이 폐기되어야 한다는 것을 상기 진단장치(196)에게 통보하는 추적 유닛.
  44. 제 38항에 있어서,
    상기 추적회로(186, 188, 190, 192)는, 상기 재정렬 추적 데이터 항목의 출력전에, 수신되었지만 아직 출력되지 않은 조건부 명령 추적 데이터 항목들을 출력하도록 구성된 추적 유닛.
  45. 제 38항에 있어서,
    상기 추적회로(186, 188, 190, 192)는, 상기 재정렬 추적 데이터 항목의 출력전에, 수신되었지만 아직 출력되지 않은 웨이포인트 추적 데이터 항목들을 출력하도록 구성된 추적 유닛.
  46. 제 39항에 있어서,
    상기 추적회로(186, 188, 190, 192)는, 상기 추적 입력 인터페이스(182, 184)에서, 조건부 분기 명령들과 로드/스토어 명령들과 관련된 추적 데이터를 수신하도록 구성되고, 상기 추적회로(186, 188, 190, 192)는 대응하는 명령이 조건부 분기 또는 로드/스토어 명령에 대응한다는 것을 표시하는 웨이포인트 표시자를 생성하도록 구성되고, 상기 명령 관측 표시자가 상기 데이터 처리장치(100)에 의해 사용되어 조건부 분기 명령 이외의 조건부 명령의 실행을 표시하고, 상기 추적회로(186, 188, 190, 192)는 상기 명령 관측 표시자와 관련된 상기 조건부 명령 추적 데이터 항목을 출력하고 상기 웨이포인트 표시자를 동일한 추적 데이터 스트림으로 출력하도록 구성되고, 상기 추적회로(186, 188, 190, 192)는, 상기 분기 오예측 표시자의 수신후이면서 그후에 발생하는 조건부 명령 추적 데이터 항목 또는 웨이포인트 표시자의 출력전에 상기 재정렬 추적 데이터 항목이 출력되도록, 상기 분기 오예측 표시자에 응답하여 상기 재정렬 추적 데이터 항목을 출력하도록 구성된 추적 유닛.
  47. 제 41항에 있어서,
    상기 추적회로(186, 188, 190, 192)는, 상기 추적 입력 인터페이스(182, 184)에서, 조건부 분기 명령들과 로드/스토어 명령들과 관련된 추적 데이터를 수신하도록 구성되고, 상기 추적회로(186, 188, 190, 192)는 대응하는 명령이 조건부 분기 또는 로드/스토어 명령에 대응한다는 것을 표시하는 웨이포인트 표시자를 생성하도록 구성되고, 상기 명령 관측 표시자가 상기 데이터 처리장치(100)에 의해 사용되어 조건부 분기 명령 이외의 조건부 명령의 실행을 표시하고, 상기 추적회로(186, 188, 190, 192)는 상기 명령 관측 표시자와 관련된 조건부 명령 추적 데이터 항목과 상기 웨이포인트 표시자를 동일한 추적 데이터 스트림으로 출력하도록 구성되고, 상기 추적회로(186, 188, 190, 192)는, 상기 예외 표시자의 수신후이면서 그후에 발생하는 조건부 명령 추적 데이터 항목 또는 웨이포인트 표시자의 출력전에 상기 재정렬 추적 데이터 항목이 출력되도록, 상기 예외 표시자에 응답하여 상기 재정렬 추적 데이터 항목을 출력하도록 구성된 추적 유닛.
  48. 제 5항에 있어서,
    상기 조건부 명령 추적 데이터 항목들은, 상기 현재 프로그램 상태 레지스터 테이블(193)의 콘텐츠에 의존하여 상기 적어도 한 개의 명령 관측 표시자들의 서브셋에 대해 생성되는 추적 유닛.
  49. 프로그램 명령들의 실행에 응답하여 데이터 처리 연산을 행하는 데이터 처리회로(110, 120, 122, 130, 140, 150, 160)와,
    조건부 명령의 실행을 표시하는 명령 관측 표시자와, 상기 조건부 명령의 실행에 응답하여 상기 데이터 처리회로(110, 120, 122, 130, 140, 150, 160)에 의한 결과의 출력을 표시하는 결과 출력 표시자를 추적 유닛(180)에 독립적으로 출력함으로써, 상기 추적 유닛(180)이 대응하는 조건부 명령 추적 데이터 항목들 및 조건부 결과 추적 데이터 항목들을 생성하여 독립적으로 출력할 수 있도록 하고 진단장치(196)에 의한 조건부 명령들과 이에 대응하는 조건부 결과들에 대한 별개의 추적 분석을 가능하게 하도록 구성된 추적 출력 인터페이스(172, 174)를 구비한 데이터 처리장치.
  50. 제 49항에 있어서,
    상기 데이터 처리회로(110, 120, 122, 130, 140, 150, 160)는, 프로그램 명령들의 시퀀스의 추론적 실행 및 순서를 벗어난 실행 중 적어도 한가지를 행하도록 구성된 데이터 처리장치.
  51. 데이터 처리장치(100)로부터 추적 유닛(180)에 의해 수신된 적어도 한 개의 명령 관측 표시자와 적어도 한 개의 결과 출력 표시자에 대응하는 조건부 명령 추적 데이터 항목들과 조건부 결과 추적 데이터 항목들을 포함하는 추적 데이터 스트림을 수신하도록 구성된 진단장치(196)로서,
    상기 수신된 추적 데이터 스트림에서 상기 조건부 결과 추적 데이터 항목들은 상기 조건부 명령 추적 데이터 항목들과 별개이고,
    상기 진단장치(196)는,
    상기 데이터 처리장치(100)에 의해 실행된 프로그램 명령들의 이미지를 참조하여 상기 조건부 명령 추적 데이터 항목들과 상기 조건부 결과 추적 데이터 항목들을 처리하여 상기 추적 데이터 스트림을 생성하도록 구성되고, 상기 프로그램 명령들의 이미지, 상기 조건부 명령 추적 데이터 항목들 및 상기 조건부 결과 추적 데이터 항목들을 사용하여 상기 데이터 처리장치(100)에 의해 실행된 프로그램 명령을 결정하도록 구성된 진단회로(197, 198, 199, 200)를 구비한, 진단장치.
  52. 제 51항에 있어서,
    추적 유닛(180)으로부터 추적 데이터 스트림에서, 분기 명령, 로드 명령 및 기억 명령 중에서 한 개가 상기 데이터 처리장치(100)에 의해 실행되었다는 것을 각각 표시하는 웨이포인트 추적 항목들을 수신하도록 구성되고, 상기 추적 데이터 스트림은 상기 조건부 명령 추적 데이터 항목들과 상기 조건부 결과 추적 데이터 항목들을 더 포함하고, 웨이포인트 추적 항목들과 조건부 명령 추적 데이터 항목들의 수신된 순서는 대응하는 웨이포인트 명령들 및 조건부 명령들의 실행 순서와 다른, 진단장치.
  53. 제 52항에 있어서,
    상기 진단장치(196)는, 상기 수신된 웨이포인트 추적 항목들을 버퍼링하는 웨이포인트 버퍼와, 상기 수신된 조건부 명령 추적 항목들을 버퍼링하는 조건부 명령 버퍼를 구비한 진단장치.
  54. 제 53항에 있어서,
    상기 진단회로(197, 198, 199, 200)는, 상기 프로그램 명령들의 이미지를 참조하여 상기 웨이포인트 버퍼 내부의 엔트리들과 상기 조건부 명령 버퍼 내부의 엔트리들을 독립적으로 분석함으로써 상기 수신된 순서를 바꿔넣어 상기 실행 순서를 얻도록 구성된 진단장치.
  55. 제 53항 또는 제 54항에 있어서,
    상기 진단회로(197, 198, 199, 200)가 상기 프로그램 명령들의 이미지 내부의 조건부 명령과 마주치지만 조건부 명령 추적 항목이 현재 상기 조건부 명령 버퍼 내부에 존재하지 않는 경우, 상기 조건부 명령 추적 항목이 상기 조건부 명령 버퍼 내부에 나타날 때까지, 상기 진단회로(197, 198, 199, 200)가 상기 프로그램 명령들의 이미지의 대응하는 실행 스레드의 추가적인 처리를 지연시키도록 구성된 진단장치.
  56. 데이터 처리장치(100)에서 수신된 정보에 근거하여 상기 데이터 처리장치(100)의 처리 활동을 표시하는 추적 데이터의 항목들을 생성하는 방법으로서,
    추적 입력 인터페이스(182, 184)가, 조건부 명령의 실행을 표시하는 적어도 한 개의 명령 관측 표시자와 상기 적어도 한 개의 조건부 명령의 실행의 결과의 상기 데이터 처리장치(100)에 의한 출력을 표시하는 적어도 한 개의 결과 출력 표시자를 상기 데이터 처리장치(100)에서 수신하는 단계와,
    추적회로(186, 188, 190, 192)가, 상기 적어도 한 개의 명령 관측 표시자와 상기 적어도 한 개의 결과 출력 표시자를 처리하고, 상기 적어도 한 개의 명령 관측 표시자와 상기 적어도 한 개의 결과 출력 표시자로부터 대응하는 조건부 명령 추적 데이터 항목들과 조건부 결과 추적 데이터 항목들을 발생하고, 상기 조건부 명령 추적 데이터 항목들과 상기 조건부 결과 추적 데이터 항목들을 각각 독립적으로 출력하여 진단장치(196)에 의해 조건부 명령들과 이에 대응하는 조건부 결과들에 대한 별개의 추적 분석을 가능하게 하는 단계를 포함하는, 추적 데이터 항목 생성방법.
  57. 제 56항에 있어서,
    상기 명령 관측 표시자는 제 1 처리 사이클에 수신되고, 상기 결과 출력 표시자는 상기 제 1 처리 사이클과는 다른 제 2 처리 사이클에 수신되는, 추적 데이터 항목 생성방법.
  58. 데이터 처리장치(100)의 처리 활동을 표시하는 추적 데이터의 항목들을 상기 데이터 처리장치(100) 내부에서 생성하는 방법으로서,
    데이터 처리회로(110, 120, 122, 130, 140, 150, 160)가, 프로그램 명령들의 실행에 응답하여 데이터 처리 연산을 수행하는 단계와,
    추적 출력 인터페이스(172, 174)가, 조건부 명령의 실행을 표시하는 명령 관측 표시자와 상기 조건부 명령의 실행에 응답하여 상기 데이터 처리장치(100)에 의한 결과의 출력을 표시하는 결과 출력 표시자를 추적 유닛(180)에 독립적으로 출력함으로써, 상기 추적 유닛(180)이 대응하는 조건부 명령 추적 데이터 항목들 및 조건부 결과 추적 데이터 항목들을 생성하여 독립적으로 출력할 수 있도록 하고 진단장치(196)에 의한 조건부 명령들과 이에 대응하는 조건부 결과들에 대한 별개의 추적 분석을 가능하게 하는 단계를 포함하는, 추적 데이터 항목 생성방법.
  59. 제 58항에 있어서,
    상기 명령 관측 표시자는 제 1 처리 사이클에 상기 데이터 처리장치(100)에 의해 출력되고, 상기 결과 출력 표시자는 상기 제 1 처리 사이클과는 다른 제 2 처리 사이클에 상기 데이터 처리장치(100)에 의해 출력되는, 추적 데이터 항목 생성방법.
  60. 데이터 처리장치(100)에 의해 생성된 추적 데이터를 처리하는 진단방법으로서,
    진단장치(196)가, 상기 데이터 처리장치(100)로부터 추적 유닛(180)에 의해 수신된 적어도 한 개의 명령 관측 표시자와 적어도 한 개의 결과 출력 표시자에 대응하는 조건부 명령 추적 데이터 항목들과 조건부 결과 추적 데이터 항목들을 포함하는 추적 데이터 스트림을 수신하는 단계를 포함하고,
    상기 수신된 추적 데이터 스트림에서 상기 조건부 결과 추적 데이터 항목들은 상기 조건부 명령 추적 데이터 항목들과 별개이고,
    상기 진단방법은,
    진단회로(197, 198, 199, 200)가, 상기 데이터 처리장치(100)에 의해 실행된 프로그램 명령들의 이미지를 참조하여 상기 조건부 명령 추적 데이터 항목들과 상기 조건부 결과 추적 데이터 항목들을 처리하여 상기 추적 데이터 스트림을 생성하는 단계와,
    상기 진단회로(197, 198, 199, 200)가, 상기 프로그램 명령들의 이미지를 사용하여 상기 조건부 명령 추적 데이터 항목들과 상기 조건부 결과 추적 데이터 항목들 사이의 상관을 행함으로써, 상기 데이터 처리장치(100)에 의해 행해진 처리 스텝들을 결정하는 단계를 더 포함하는, 진단방법.
  61. 삭제
  62. 삭제
  63. 삭제
KR1020137020165A 2011-01-13 2011-11-17 데이터 처리장치의 추적 KR101994636B1 (ko)

Applications Claiming Priority (5)

Application Number Priority Date Filing Date Title
GB1100505.5 2011-01-13
GB1100505.5A GB2487355B (en) 2011-01-13 2011-01-13 Processing apparatus, trace unit and diagnostic apparatus
GB1101945.2A GB2487251A (en) 2011-01-13 2011-02-04 Separate trace indications for the execution of a conditional instruction and for the result of the condition
GB1101945.2 2011-02-04
PCT/GB2011/052242 WO2012095618A1 (en) 2011-01-13 2011-11-17 Tracing of a data processing apparatus

Publications (2)

Publication Number Publication Date
KR20140014126A KR20140014126A (ko) 2014-02-05
KR101994636B1 true KR101994636B1 (ko) 2019-07-02

Family

ID=43664141

Family Applications (2)

Application Number Title Priority Date Filing Date
KR1020137020165A KR101994636B1 (ko) 2011-01-13 2011-11-17 데이터 처리장치의 추적
KR1020137020340A KR102025556B1 (ko) 2011-01-13 2011-11-29 처리 장치, 추적 유닛 및 진단 장치

Family Applications After (1)

Application Number Title Priority Date Filing Date
KR1020137020340A KR102025556B1 (ko) 2011-01-13 2011-11-29 처리 장치, 추적 유닛 및 진단 장치

Country Status (10)

Country Link
US (4) US8874975B2 (ko)
EP (2) EP2585909B1 (ko)
JP (2) JP5865920B2 (ko)
KR (2) KR101994636B1 (ko)
CN (2) CN103299273B (ko)
GB (2) GB2487355B (ko)
IL (2) IL224506A (ko)
MY (2) MY159191A (ko)
TW (2) TWI524269B (ko)
WO (2) WO2012095618A1 (ko)

Families Citing this family (25)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
GB2487355B (en) 2011-01-13 2020-03-25 Advanced Risc Mach Ltd Processing apparatus, trace unit and diagnostic apparatus
US20130145350A1 (en) * 2011-12-05 2013-06-06 Microsoft Corporation Efficient, large scale trace storage system
US8838888B2 (en) * 2012-03-19 2014-09-16 International Business Machines Corporation Conditional write processing for a cache structure of a coupling facility
US9483259B1 (en) * 2012-05-07 2016-11-01 Google Inc. System and method for providing real-time execution of source code in a collaborative online software development environment
JP6036089B2 (ja) * 2012-09-25 2016-11-30 日本電気株式会社 データ遷移トレース装置、データ遷移トレース方法、及び、データ遷移トレースプログラム
US9262163B2 (en) * 2012-12-29 2016-02-16 Intel Corporation Real time instruction trace processors, methods, and systems
US8990784B2 (en) * 2013-06-28 2015-03-24 International Business Machines Corporation Determining control flow divergence due to variable value difference
US10372590B2 (en) * 2013-11-22 2019-08-06 International Business Corporation Determining instruction execution history in a debugger
US11068827B1 (en) * 2015-06-22 2021-07-20 Wells Fargo Bank, N.A. Master performance indicator
GB2540388B (en) * 2015-07-15 2019-01-23 Advanced Risc Mach Ltd Secure mode state data access tracking
GB2541400B (en) * 2015-08-17 2017-11-15 Advanced Risc Mach Ltd Tracing of exception handling events
GB2551574B (en) * 2016-06-24 2019-11-27 Advanced Risc Mach Ltd An apparatus and method for generating and processing a trace stream indicative of instruction execution by processing circuitry
US9798593B1 (en) 2016-07-06 2017-10-24 Workday, Inc. Synchronization of code execution
US10657021B2 (en) * 2016-09-07 2020-05-19 Arm Limited Tracing processing activity with position data to reorder items of trace data
GB2553582B (en) 2016-09-13 2020-07-08 Advanced Risc Mach Ltd An apparatus and method for generating and processing a trace stream indicative of instruction execution by processing circuitry
GB2560749B (en) * 2017-03-24 2020-10-14 Advanced Risc Mach Ltd Trace data representation
WO2019113603A1 (en) * 2017-12-08 2019-06-13 Zytek Communications Corporation State machine block for high-level synthesis
US10705843B2 (en) 2017-12-21 2020-07-07 International Business Machines Corporation Method and system for detection of thread stall
JP7081922B2 (ja) * 2017-12-28 2022-06-07 株式会社バンダイナムコエンターテインメント プログラム、ゲーム装置及びゲームを実行するための方法
CN108650123B (zh) * 2018-05-08 2022-09-06 平安普惠企业管理有限公司 故障信息记录方法、装置、设备和存储介质
US10797983B1 (en) * 2018-06-05 2020-10-06 Juniper Networks, Inc Systems and methods for debugging network stacks based on evidence collected from selective tracing
US11573883B1 (en) * 2018-12-13 2023-02-07 Cadence Design Systems, Inc. Systems and methods for enhanced compression of trace data in an emulation system
EP3792767B1 (en) 2019-09-13 2023-07-12 Accemic Technologies GmbH Event processing
EP3907615B1 (en) * 2020-05-06 2022-11-02 Mitsubishi Electric R&D Centre Europe B.V. Method and system for testing the operation of a target computer system by using timed requirements
CN113485748B (zh) * 2021-05-31 2022-08-12 上海卫星工程研究所 卫星条件指令系统及其执行方法

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20030033592A1 (en) 2001-08-06 2003-02-13 Shintaro Tsubata Software debugger and software development support system
US20060129999A1 (en) 2004-11-16 2006-06-15 Sony Computer Entertainment Inc. Methods and apparatus for using bookmarks in a trace buffer
US20070294592A1 (en) 2006-05-30 2007-12-20 Arm Limited Reducing the size of a data stream produced during instruction tracing

Family Cites Families (37)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
DE1493176A1 (de) 1965-10-20 1969-06-26 Schering Ag Verfahren zur Herstellung von delta?-Pregnen-11beta- und 11alpha,17alpha,21-triol-3,20-dionen
US4503495A (en) * 1982-01-15 1985-03-05 Honeywell Information Systems Inc. Data processing system common bus utilization detection logic
JPS623351A (ja) * 1985-06-28 1987-01-09 Nec Corp マイクロプロセツサ
EP0404068A3 (en) 1989-06-20 1991-12-27 Fujitsu Limited Branch instruction executing device
JP2915944B2 (ja) * 1989-12-29 1999-07-05 株式会社日立製作所 カバレージ測定方法及びマイクロコンピュータ
US5978902A (en) 1997-04-08 1999-11-02 Advanced Micro Devices, Inc. Debug interface including operating system access of a serial/parallel debug port
US6094729A (en) * 1997-04-08 2000-07-25 Advanced Micro Devices, Inc. Debug interface including a compact trace record storage
US6513155B1 (en) 1997-12-12 2003-01-28 International Business Machines Corporation Method and system for merging event-based data and sampled data into postprocessed trace output
US6247146B1 (en) * 1998-08-17 2001-06-12 Advanced Micro Devices, Inc. Method for verifying branch trace history buffer information
US6351844B1 (en) 1998-11-05 2002-02-26 Hewlett-Packard Company Method for selecting active code traces for translation in a caching dynamic translator
US7024661B2 (en) 2000-01-07 2006-04-04 Hewlett-Packard Development Company, L.P. System and method for verifying computer program correctness and providing recoverable execution trace information
US6694427B1 (en) * 2000-04-20 2004-02-17 International Business Machines Corporation Method system and apparatus for instruction tracing with out of order processors
US8312435B2 (en) 2000-12-26 2012-11-13 Identify Software Ltd. (IL) System and method for conditional tracing of computer programs
US7185234B1 (en) * 2001-04-30 2007-02-27 Mips Technologies, Inc. Trace control from hardware and software
JP2002342114A (ja) 2001-05-21 2002-11-29 Fujitsu Ltd トレースデータ採取可能なプロセッサ
JP2003085000A (ja) 2001-09-10 2003-03-20 Mitsubishi Electric Corp トレース情報生成装置およびその方法
US7203825B2 (en) 2001-10-03 2007-04-10 Intel Corporation Sharing information to reduce redundancy in hybrid branch prediction
JP2003150403A (ja) * 2001-11-06 2003-05-23 Arc Internatl (Uk) Ltd データプロセッサの観測方法及び装置
US20030135719A1 (en) * 2002-01-14 2003-07-17 International Business Machines Corporation Method and system using hardware assistance for tracing instruction disposition information
US7197671B2 (en) 2002-06-07 2007-03-27 Arm Limited Generation of trace elements within a data processing apparatus
GB2389931B (en) * 2002-06-07 2005-12-14 Advanced Risc Mach Ltd Generation of trace elements within a data processing apparatus
US20040064685A1 (en) * 2002-09-27 2004-04-01 Hung Nguyen System and method for real-time tracing and profiling of a superscalar processor implementing conditional execution
US7062684B2 (en) 2002-12-19 2006-06-13 International Business Machines Corporation Enabling tracing of a repeat instruction
US20040153635A1 (en) 2002-12-30 2004-08-05 Kaushik Shivnandan D. Privileged-based qualification of branch trace store data
US7100024B2 (en) 2003-02-04 2006-08-29 Via Technologies, Inc. Pipelined microprocessor, apparatus, and method for generating early status flags
US20070162895A1 (en) 2006-01-10 2007-07-12 International Business Machines Corporation Mechanism and method for two level adaptive trace prediction
US7562258B2 (en) * 2006-02-09 2009-07-14 Arm Limited Generation of trace elements within a data processing apparatus
US7574586B2 (en) * 2006-05-16 2009-08-11 Texas Instruments Incorporated Efficient transfer of branch information
US7685409B2 (en) 2007-02-21 2010-03-23 Qualcomm Incorporated On-demand multi-thread multimedia processor
US7890299B2 (en) 2007-05-21 2011-02-15 Qualcomm, Incorporated Providing event-controlled continuous logging for a mobile operating environment
US8122437B2 (en) * 2008-03-31 2012-02-21 Freescale Semiconductor, Inc. Method and apparatus to trace and correlate data trace and instruction trace for out-of-order processors
GB2459652B (en) * 2008-04-28 2010-09-22 Imagination Tech Ltd Controlling instruction scheduling based on the space in a trace buffer
JP5167984B2 (ja) 2008-06-26 2013-03-21 富士通株式会社 命令トレース生成プログラム、命令トレース生成装置および命令トレース生成方法
US8176366B2 (en) * 2009-04-03 2012-05-08 Arm Limited Trace synchronization
LT2444400T (lt) 2009-06-15 2018-06-11 Shionogi & Co., Ltd. Pakeistasis policiklinis karbamoilpiridono darinys
JP2011028308A (ja) * 2009-07-21 2011-02-10 Renesas Electronics Corp 半導体装置及びソフトウェア開発支援装置
GB2487355B (en) 2011-01-13 2020-03-25 Advanced Risc Mach Ltd Processing apparatus, trace unit and diagnostic apparatus

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20030033592A1 (en) 2001-08-06 2003-02-13 Shintaro Tsubata Software debugger and software development support system
US20060129999A1 (en) 2004-11-16 2006-06-15 Sony Computer Entertainment Inc. Methods and apparatus for using bookmarks in a trace buffer
US20070294592A1 (en) 2006-05-30 2007-12-20 Arm Limited Reducing the size of a data stream produced during instruction tracing

Also Published As

Publication number Publication date
US20140101491A1 (en) 2014-04-10
WO2012095618A1 (en) 2012-07-19
JP2014506371A (ja) 2014-03-13
IL224506A (en) 2015-11-30
JP2014507710A (ja) 2014-03-27
EP2643751A1 (en) 2013-10-02
CN103299273A (zh) 2013-09-11
US8874975B2 (en) 2014-10-28
JP5865920B2 (ja) 2016-02-17
GB2487355A (en) 2012-07-25
CN103314356A (zh) 2013-09-18
US10379989B2 (en) 2019-08-13
KR102025556B1 (ko) 2019-09-26
EP2585909A1 (en) 2013-05-01
GB2487355B (en) 2020-03-25
GB201100505D0 (en) 2011-02-23
KR20140014126A (ko) 2014-02-05
US20120185676A1 (en) 2012-07-19
JP5914521B2 (ja) 2016-05-11
MY162170A (en) 2017-05-31
KR20140006861A (ko) 2014-01-16
TW201237746A (en) 2012-09-16
TWI524269B (zh) 2016-03-01
MY159191A (en) 2016-12-30
EP2643751B1 (en) 2014-12-24
CN103314356B (zh) 2016-04-06
TW201232393A (en) 2012-08-01
IL226755A (en) 2017-08-31
EP2585909B1 (en) 2014-09-10
US8533685B2 (en) 2013-09-10
GB201101945D0 (en) 2011-03-23
CN103299273B (zh) 2016-11-23
US20130339686A1 (en) 2013-12-19
TWI524270B (zh) 2016-03-01
US20120185734A1 (en) 2012-07-19
US9378113B2 (en) 2016-06-28
WO2012095619A1 (en) 2012-07-19
GB2487251A (en) 2012-07-18

Similar Documents

Publication Publication Date Title
KR101994636B1 (ko) 데이터 처리장치의 추적
US9720695B2 (en) System for providing trace data in a data processor having a pipelined architecture
US8312253B2 (en) Data processor device having trace capabilities and method
KR20070107772A (ko) 비정렬 메모리 액세스 예측
US9495169B2 (en) Predicate trace compression
US7496899B2 (en) Preventing loss of traced information in a data processing apparatus
US20150248295A1 (en) Numerical stall analysis of cpu performance
CN115687131A (zh) 一种程序调试方法
US7013256B2 (en) Computer system with debug facility
JP5136553B2 (ja) 演算処理装置及び演算処理装置の制御方法
TWI798339B (zh) 使用送交視窗移動元件的方法、模組、設備、分析器、電腦程式和儲存媒體
EP0601334B1 (en) Method for observing program flow in a processor having internal cache memory
Apisake The study of trace cache memory on superscalar DLX processor

Legal Events

Date Code Title Description
A201 Request for examination
E902 Notification of reason for refusal
E902 Notification of reason for refusal
E701 Decision to grant or registration of patent right
GRNT Written decision to grant