KR20200139714A - 디버그 제어기 회로 - Google Patents

디버그 제어기 회로 Download PDF

Info

Publication number
KR20200139714A
KR20200139714A KR1020207030487A KR20207030487A KR20200139714A KR 20200139714 A KR20200139714 A KR 20200139714A KR 1020207030487 A KR1020207030487 A KR 1020207030487A KR 20207030487 A KR20207030487 A KR 20207030487A KR 20200139714 A KR20200139714 A KR 20200139714A
Authority
KR
South Korea
Prior art keywords
debug
packet
soc
circuit
response
Prior art date
Application number
KR1020207030487A
Other languages
English (en)
Inventor
아마드 알. 안사리
펠릭스 버튼
밍-동 첸
Original Assignee
자일링크스 인코포레이티드
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 자일링크스 인코포레이티드 filed Critical 자일링크스 인코포레이티드
Publication of KR20200139714A publication Critical patent/KR20200139714A/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/362Software debugging
    • G06F11/3648Software debugging using additional hardware
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/362Software debugging
    • G06F11/3648Software debugging using additional hardware
    • G06F11/3656Software debugging using additional hardware using a specific debug interface
    • GPHYSICS
    • G01MEASURING; TESTING
    • G01RMEASURING ELECTRIC VARIABLES; MEASURING MAGNETIC VARIABLES
    • G01R31/00Arrangements for testing electric properties; Arrangements for locating electric faults; Arrangements for electrical testing characterised by what is being tested not provided for elsewhere
    • G01R31/28Testing of electronic circuits, e.g. by signal tracer
    • G01R31/317Testing of digital circuits
    • G01R31/31705Debugging aspects, e.g. using test circuits for debugging, using dedicated debugging test circuits
    • GPHYSICS
    • G01MEASURING; TESTING
    • G01RMEASURING ELECTRIC VARIABLES; MEASURING MAGNETIC VARIABLES
    • G01R31/00Arrangements for testing electric properties; Arrangements for locating electric faults; Arrangements for electrical testing characterised by what is being tested not provided for elsewhere
    • G01R31/28Testing of electronic circuits, e.g. by signal tracer
    • G01R31/317Testing of digital circuits
    • G01R31/3181Functional testing
    • G01R31/3185Reconfiguring for testing, e.g. LSSD, partitioning
    • G01R31/318533Reconfiguring for testing, e.g. LSSD, partitioning using scanning techniques, e.g. LSSD, Boundary Scan, JTAG
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/22Detection or location of defective computer hardware by testing during standby operation or during idle time, e.g. start-up testing
    • G06F11/2205Detection or location of defective computer hardware by testing during standby operation or during idle time, e.g. start-up testing using arrangements specific to the hardware being tested
    • G06F11/2236Detection or location of defective computer hardware by testing during standby operation or during idle time, e.g. start-up testing using arrangements specific to the hardware being tested to test CPU or processors
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/22Detection or location of defective computer hardware by testing during standby operation or during idle time, e.g. start-up testing
    • G06F11/26Functional testing
    • G06F11/267Reconfiguring circuits for testing, e.g. LSSD, partitioning
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/22Detection or location of defective computer hardware by testing during standby operation or during idle time, e.g. start-up testing
    • G06F11/26Functional testing
    • G06F11/273Tester hardware, i.e. output processing circuits
    • G06F11/2733Test interface between tester and unit under test
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/362Software debugging
    • G06F11/3636Software debugging by tracing the execution of the program
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F30/00Computer-aided design [CAD]
    • G06F30/30Circuit design
    • G06F30/34Circuit design for reconfigurable circuits, e.g. field programmable gate arrays [FPGA] or programmable logic devices [PLD]

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Computer Hardware Design (AREA)
  • General Physics & Mathematics (AREA)
  • Quality & Reliability (AREA)
  • Evolutionary Computation (AREA)
  • Geometry (AREA)
  • Debugging And Monitoring (AREA)
  • Tests Of Electronic Circuits (AREA)
  • Microcomputers (AREA)

Abstract

회로 장치는 SoC(system-on-chip)(102) 상에 배치되고 스트리밍 디버그 패킷을 수신하고 저장하도록 구성된 하나 이상의 입력 버퍼(312, 314,…, 316)를 포함한다. 하나 이상의 응답 버퍼(328, 330,…, 332)도 또한 SoC 상에 배치된다. 트랜잭션 제어 회로(318)는 SoC 상에 배치되고 하나 이상의 입력 버퍼 내의 각 디버그 패킷을 처리하도록 구성된다. 처리는 디버그 패킷 내의 동작 코드를 디코딩하고, 디버그 패킷 내의 어드레스로부터 SoC 상의 다수의 서브시스템의 서브시스템에서 스토리지 회로에 액세스하기 위하여 다수의 인터페이스 회로의 인터페이스 회로를 결정하는 것을 포함한다. 처리는 동작 코드에 따라 스토리지 회로에 액세스하는 요청을 인터페이스 회로를 통하여 발행하고, 인터페이스 회로로부터 수신된 응답 및 데이터를 하나 이상의 응답 버퍼에 저장하는 것을 더 포함한다.

Description

디버그 제어기 회로
본 개시는 일반적으로 SoC(system-on-chip)의 디버깅 및 트레이스 회로에 관한 것이다.
많은 집적 회로는 회로 작동 확인 및 테스트를 돕기 위하여 스캔 회로를 사용한다. 스캔 회로의 예는 JTAG(Joint Test Action Group)에 의해 개발되고 IEEE 표준 1149에서 공식화된 표준 시험 엑세스 포트와 경계-검사 구조(Standard Test Access Port and Boundary-Scan Architecture)이다. 스캔 테스트 회로는 SoC(System-on-Chip) 디바이스에서 사용될 수 있다.
복잡한 SoC는 다중 프로세서 코어를 갖는 프로세서 서브시스템, 온칩 SRAM 및/또는 DRAM을 제공하는 메모리 서브시스템, FPGA(field programmable gate array)와 같은 회로를 갖는 프로그램 가능 논리 서브시스템과 같은 다중 서브시스템을 포함할 수 있다. SoC는 또한 프로세서에서 실행되는 소프트웨어 또는 SoC의 프로그램 가능 논리로 구현된 회로에 의해 지시되는 대로 특정 수학적 함수를 수행하는데 사용할 수 있는 하드와이어드 논리를 포함할 수 있다.
SoC 상에 구현된 시스템을 테스트하는 것은, 호스트 컴퓨터 시스템에서 실행되는 디버거 시스템과 같은 테스트 제어기와 SoC 간에 대량의 데이터를 전송하는 것을 수반할 수 있다. 디버거 시스템은 SoC의 다양한 서브시스템 내에 있는 스토리지 회로에 데이터를 읽고 쓸 수 있다. 현재 시스템에서 디버그 단계는 호스트 컴퓨터 상의 디버거 시스템으로부터 하나씩 시퀀싱된다(sequenced). JTAG 인터페이스 회로가 동작하는, 예를 들어 100 MHz 미만과 같이 상대적으로 느린 클록 속도와 함께, 디버그 단계의 시퀀싱과 관련된 높은 레이턴시가 테스트에 필요한 시간을 연장할 수 있다.
회로 장치(circuit arrangement)는 SoC(system-on-chip) 상에 배치되고 복수의 스트리밍 디버그 패킷을 수신하고 저장하도록 구성된 하나 이상의 입력 버퍼를 포함한다. 하나 이상의 응답 버퍼도 또한 SoC 상에 배치된다. 트랜잭션 제어 회로가 SoC 상에 배치되고 하나 이상의 입력 버퍼 및 하나 이상의 응답 버퍼에 결합된다. 트랜잭션 제어 회로는 하나 이상의 입력 버퍼에서 각 디버그 패킷을 처리하도록 구성된다. 처리는 디버그 패킷 내의 동작 코드(operation code)를 디코딩하고, SoC 상의 복수의 서브시스템의 서브시스템의 스토리지 회로에 액세스하기 위하여 디버그 패킷 내의 어드레스로부터 복수의 인터페이스 회로의 인터페이스 회로를 결정하는 것을 포함한다. 처리는 동작 코드에 따라 스토리지 회로에 액세스하는 요청을 인터페이스 회로를 통하여 발행하고, 하나 이상의 응답 버퍼에 복수의 인터페이스 회로로부터 수신된 응답 및 데이터를 저장하는 것을 더 포함한다.
시스템 온칩(SoC)은 집적 회로(IC) 다이, IC 다이 상에 배치된 복수의 회로 서브시스템, 복수의 회로 서브시스템의 스토리지 회로에 액세스하도록 구성된 복수의 인터페이스 회로 및 IC 다이 상에 배치되고 복수의 인터페이스 회로에 결합된 디버그 회로를 포함한다. 디버그 회로는 복수의 스트리밍 디버그 패킷을 수신하고 저장하도록 구성된 하나 이상의 입력 버퍼 및 하나 이상의 응답 버퍼를 포함한다. 트랜잭션 제어 회로는 하나 이상의 입력 버퍼 및 하나 이상의 응답 버퍼에 결합된다. 트랜잭션 제어 회로는 하나 이상의 입력 버퍼에서 각 디버그 패킷을 처리하도록 구성된다. 처리는 디버그 패킷 내의 동작 코드를 디코딩하고, SoC 상의 복수의 서브시스템의 서브시스템에서 스토리지 회로에 액세스하기 위하여 디버그 패킷 내의 어드레스로부터 복수의 인터페이스 회로의 인터페이스 회로를 결정하는 것을 포함한다. 처리는 동작 코드에 따라 스토리지 회로에 액세스하는 요청을 인터페이스 회로를 통하여 발행하고, 하나 이상의 응답 버퍼에 복수의 인터페이스 회로로부터 수신된 응답 및 데이터를 저장하는 것을 더 포함한다.
방법은 복수의 스트리밍 디버그 패킷을 수신하고 SoC(system-on-chip) 상에 배치된 하나 이상의 입력 버퍼에 저장하는 단계를 포함한다. 하나 이상의 입력 버퍼 내의 각 디버그 패킷은 SoC 상에 배치된 트랜잭션 제어 회로에 의해 처리된다. 처리는 디버그 패킷 내의 동작 코드를 디코딩하고, SoC 상에 배치된 복수의 회로 서브시스템 중 하나의 회로 서브시스템에서 하나 이상의 스토리지 회로에 액세스하기 위하여 SoC 상에 배치된 복수의 인터페이스 회로의 인터페이스 회로를 디버그 패킷 내의 어드레스로부터 결정하는 것을 포함한다. 처리는 동작 코드에 따라 하나 이상의 스토리지 회로에 액세스하는 요청을 하나의 인터페이스 회로를 통하여 발행하고, SoC 상에 배치된 하나 이상의 응답 버퍼에 복수의 인터페이스 회로로부터 수신된 응답 및 데이터를 저장하는 것을 더 포함한다.
다른 특징은 다음의 상세한 설명 및 청구범위를 고려하여 인식될 것이다.
회로 및 방법의 다양한 측면과 특징은 다음의 상세한 설명을 검토하고 도면을 참조하면 명백해질 것이다.
도 1은 애플리케이션 디버깅을 지원하기 위한 디버그 회로와 함께 애플리케이션 소프트웨어 및 애플리케이션 회로를 구현하기 위한 서브시스템을 갖는 디버거 시스템 및 시스템 온칩 SoC를 도시한다.
도 2는 SoC의 서브시스템과 디버그 포트의 회로 사이의 SoC 및 예시적인 인터페이스를 도시한다.
도 3은 SoC의 디버그 회로의 예시적인 구현을 도시한다.
도 4는 디버그 패킷 제어기에 의한 디버그 패킷의 처리를 예시하는 흐름도이다.
도 5는 다중 SoC에서 데이지 체이닝 디버그 회로를 지원하는 PTP(point-to-point) 디버그 인터페이스의 애플리케이션을 도시한다.
도 6은 개시된 회로에 따라 구성될 수 있는 예시적인 프로그램 가능 IC를 도시한다.
다음 설명에서, 여기에 제시된 특정 예를 설명하기 위하여 수많은 특정 세부 사항이 설명된다. 그러나, 당업자에게는 하나 이상의 다른 예 및/또는 이들 예의 변형이 아래에 주어진 모든 특정 세부 사항 없이 실시될 수 있다는 것이 명백해야 한다. 다른 예에서, 잘 알려진 특징은 여기에서 예의 설명을 모호하게 하지 않기 위하여 자세히 설명되지 않았다. 설명의 편의를 위하여, 동일한 요소 또는 동일한 요소의 추가 인스턴스를 지칭하기 위하여 동일한 참조 번호가 상이한 다이어그램에서 사용될 수 있다.
개시된 회로 및 방법은 복잡한 SoC로부터 트레이스 데이터를 수집하고 디버깅하기 위한 개선된 접근 방식을 제공한다. 본 명세서에서 사용되는 바와 같이, "SoC"는 예를 들어 적층형 실리콘 인터포저 기술을 사용하여 구성된 시스템을 포함하는 패키지의 시스템을 지칭하는데 사용될 것이다. 이 접근 방식은 SoC의 모든 서브시스템과 디바이스에 연결된 디버거 시스템 간에 고속 데이터 전송을 제공하는 통합 디버깅 인터페이스를 제공한다. 다수의 SoC의 디버그 인터페이스가 데이지 체인으로 연결되어, 구성, 디버그 데이터 제공 및 다수의 디바이스로부터의 디버그 데이터 읽기를 위한 단일 경로를 제공할 수 있다.
예시적인 회로에서, 디버그 패킷 제어기가 SoC 상에 배치된다. 디버그 패킷 제어기는 디버거 시스템에 연결하기 위하여 다수의 대체 인터페이스에 결합될 수 있다. 하나의 외부 인터페이스는 자일링스사(XILINX, Inc.)의 오로라(Aurora) 64B/66B 인터페이스와 같은 고속 직렬 통신을 위한 확장 가능하고 가벼운 링크 레이어 프로토콜이다. 디버그 패킷 제어기는 대안적으로 JTAG 인터페이스에 연결될 수도 있다. JTAG 인터페이스는 디버그 패킷 제어기의 인그레스(ingress) 및 이그레스(egress) 스트리밍 포트에 대한 직접 인터페이스를 가진 브리지의 특정 레지스터에 액세스하도록 선택적으로 인에이블될 수 있다.
디버그 패킷 제어기는 하나 이상의 입력 버퍼를 포함할 수 있다. 입력 버퍼는 디버거 시스템으로부터 발행된 것과 같은 스트리밍 디버그 패킷을 수신하고 저장한다. 디버그 패킷 제어기는 디버거 시스템에 반환될 디버그 또는 트레이스 데이터를 버퍼링하기 위한 응답 버퍼를 더 포함한다. 디버그 패킷 제어기의 트랜잭션 제어 회로는 입력 버퍼와 응답 버퍼에 결합된다. 트랜잭션 제어 회로는 디버그 패킷 내의 동작 코드를 디코딩함으로써 입력 버퍼 내의 각 디버그 패킷을 처리하도록 구성된다. 트랜잭션 제어 회로는 디버그 패킷 내의 어드레스로부터, SoC의 서브시스템에 있는 스토리지 회로에 액세스하기 위하여 다수의 인터페이스 회로 중 하나의 인터페이스 회로를 결정하고 그 후 동작 코드에 따라 스토리지 회로에 액세스하는 요청을 인터페이스 회로를 통하여 발행한다. 트랜잭션 제어 회로는 인터페이스 회로로부터 수신된 응답 및 데이터를 응답 버퍼에 저장하는 것을 제어한다.
디버그 패킷에는 다수의 동작 코드가 포함될 수 있다. 본 명세서에서 사용되는 "동작 코드"는 디버그 패킷에 포함될 수 있는 메인 커맨드(command) 및 하나 이상의 선택적 서브 커맨드(subcommand)를 지칭한다. 각 서브 커맨드는 다수의 필드를 가질 수 있다.
디버그 패킷 내의 어드레싱(addressing)은 SoC의 특정 스토리지 회로 및 데이지 체인으로 연결된 특정 SoC들을 또한 참조할 수 있다. 각 패킷에는 특정 SoC를 참조하는 대상(target) 식별자가 있을 수 있다. 특정 SoC를 대상으로 하는 패킷의 경우 패킷이 해당 SoC 내의 스토리지 회로에 액세스를 시도하고 있다면, 패킷에 포함된 각 서브 커맨드에 대하여 해당 스토리지 요소의 위치를 참조하는 어드레스가 있다. SoC를 데이지 체인 방식으로 연결하면 다수의 SoC를 동시에 디버깅할 수 있다.
SoC는 프로세서 서브시스템, 프로그램 가능 논리 서브시스템 및 하드와이어드 논리 회로를 포함할 수 있으며, 그 예로는 디지털 신호 프로세서로서 구현될 수 있는 수학 엔진 회로가 포함된다. 디버그 패킷에 의해 서브시스템의 스토리지 회로를 어드레싱하는데 있어서, 디버그 패킷 제어기는 대상이 프로세서 서브시스템의 전용 디버그 서브시스템/인터커넥트; 프로세서 서브시스템 내의 전용 트레이스 버퍼; SoC를 부팅하기 전에 프로그램 가능 논리 서브시스템 또는 프로세서 서브시스템을 구성하기 위한 SoC 구성 인터페이스; 또는 프로세서 서브시스템 레지스터, 프로그램 가능 논리 서브시스템에 구현된 애플리케이션 회로의 레지스터 및 수학 엔진 회로의 레지스터를 포함하여 시스템 내의 모든 동작 레지스터에 액세스하기 위한 디바이스 상의 메인 SoC 스위치 및 네트워크 온칩(network-on-chip, NoC)인지 여부를 결정한다.
도 1은 애플리케이션 디버깅을 지원하기 위한 디버그 회로와 함께 애플리케이션 소프트웨어 및 애플리케이션 회로를 구현하기 위한 서브시스템을 갖는 디버거 시스템 및 시스템 온칩(SoC)를 보여준다. SoC(102)는 하나 이상의 프로세서 코어를 포함할 수 있는 프로세서 서브시스템(106), 프로그램 가능 논리 및 프로그램 가능 인터커넥트 회로를 포함하는 프로그램 가능 논리 서브시스템(108), 및 예를 들어 수학적 함수를 구현하는 하드와이어드 논리 회로(110)를 포함하는 다수의 서브시스템을 갖는다. 하드와이어드 논리 회로는 또한 "수학 엔진"이라고도 지칭될 수 있다. 하드와이어드 논리 회로를 가끔 수학 엔진이라고도 하지만, 하드와이어드 논리 회로에는 디지털 신호 처리 엔진, 암호화 엔진, FEC(Forward Error Correction) 엔진 또는 하나 이상의 특수 작업을 수행하기 위한 다른 특수 하드와이어드 회로와 같은 임의의 종류의 데이터 처리 엔진(data processing engine, DPE)이 포함될 수 있다. 예시적인 구현에서, 수학 엔진은 엔진 사이에 스트리밍 데이터를 전송하기 위한 복수의 스위치를 사용하여 상호 연결될 수 있다.
프로세서 서브시스템, 프로그램 가능 논리 서브시스템 및 하드와이어드 논리 회로 각각은 스토리지 회로(112, 114, 116)를 각각 포함한다. 스토리지 회로는 SRAM 또는 DRAM과 같은 메모리 및/또는 구성 및 제어 레지스터를 포함할 수 있다. 스토리지 회로(112, 114 및 116)는 프로세서 서브시스템(106) 상에서 실행되는 소프트웨어로서 구현된 애플리케이션에 의해, 프로그램 가능 논리 서브시스템(108)에서 구현된 회로에 의해 또/또는 하드와이어드 논리 회로(110)에 의해 액세스될 수 있다.
프로세서 서브시스템에서 소프트웨어로 실행되고/되거나 프로그램 가능 논리 서브시스템에서 회로로서 작동하고/하거나 하드와이어드 논리에서 회로로서 작동하는 애플리케이션은 애플리케이션 포트(118)를 통하여 SoC 외부의 시스템과 데이터를 입출력한다. 애플리케이션 포트에는 예를 들어 기가비트 트랜시버 및 다양한 표준 기반 또는 독점 버스 인터페이스가 포함될 수 있다.
SoC(102)는 디버거 시스템(104)을 위한 스토리지 회로(112, 114 및 116)에 대한 액세스를 제공하기 위하여 전용되는 디버그 포트(120)를 더 포함한다. 디버거 시스템(104)은 SoC가 애플리케이션을 실행하고 있는 동안 디버깅 및 트레이스 기능을 수행할 수 있다. 또한, 디버그 포트를 통하여, 디버거 시스템은 프로세서 서브시스템(106)에서 실행될 소프트웨어로 SoC를 구성할 수 있고/있거나, 애플리케이션 회로를 구현하도록 프로그램 가능 논리 서브시스템(108)을 구성할 수 있다. 디버거 시스템의 디버그 인터페이스(122)는 디버그 포트(120)에 연결된다. 예시적인 구현에서, 디버그 포트 및 디버그 인터페이스는 다수의 SoC의 데이지 체이닝 및 병렬 디버깅을 지원하기 위하여 듀얼 심플렉스 모드에서 작동하는 기가비트 트랜시버에서 오로라 64B/66B 인터페이스를 사용하여 통신한다.
디버그 포트(120)는 디버그 패킷 제어기(도 2, #202)를 포함한다. 디버그 패킷 제어기는 SoC(102) 상의 다양한 서브시스템으로부터 데이터를 리트리빙(retrieve)하기 위하여 풀 모델(pull model)을 구현한다. SoC 내의 트랜잭션 흐름은 디버그 패킷 제어기로부터 참조된 리소스까지이다. 디버그 패킷 제어기가 트랜잭션 흐름을 개시하게 하는 것은, 트레이스 데이터를 처리하고 흐름 제어를 디버그 환경의 호스트로 다시 전달하기 위한 설계를 간소화시킨다. 디버그 포트에 의해 트레이스 데이터가 SoC 밖으로 푸시되는 트레이스 모드를 지원하기 위하여, 디버그 포트가 연속 버스트를 사용하여 데이터를 풀(pull)하고 아웃바운드 트레이스 스트림을 에뮬레이션할 수 있게 하기 위하여 SoC 상의 출력 버퍼(도시되지 않음)는 트레이스 데이터를 저장한다. 트레이스 버퍼는 프로그램 가능 논리 서브시스템(108), DRAM, 프로세서 서브시스템(106)의 온칩 메모리에서 구현될 수 있거나, 다수의 트레이스 소스에 걸쳐 통합된 트레이스 스트림이 요구될 때 CoreSight 트레이스 버퍼 내로 이동(funnel)될 수 있다.
디버그 포트(120)는 두 가지 동작 모드를 지원하도록 구성될 수 있다. "노멀 디버그 모드(Normal Debug Mode)"라고 할 수 있는 한 모드에서는, 인바운드 및 아웃바운드 포트 둘 다 디버그 및 트레이스 인터페이스로서 함께 사용된다. 각 디버그 동작은 디버거 시스템(104)에 의해 개시되고 디버그 포트(120)를 통하여 실행될 수 있다. "트레이스 모드(Trace Mode)"라고 할 수 있는 제2 모드에서, 디버거 시스템이 한 세트의 디버그 패킷을 발행한 후, 디버그 포트는 아웃바운드 트레이스 스트림을 제공하기 위하여 디버그 패킷 세트로부터 반복적으로 읽기 요청을 생성한다. 트레이스 모드는 디버그 패킷 내의 "영구(Perpetual)" 동작 코드에 의해 활성화할 수 있다.
디버그 포트(120)는 디버거 시스템(104)으로부터 디버그 패킷을 수신한다.
오로라 인터페이스가 링크 레이어 인터페이스로서 사용된다면, 각 디버그 패킷은 오로라 패킷의 사용자 PDU(protocol data unit) 섹션에 내장(embed)될 수 있으며, 디버그 패킷에는 헤더, 선택적 페이로드 및 CRC 필드가 포함된다. 디버그 패킷의 헤더에는 향후 확장을 위한 Reserved 필드, Target_ID 필드, Packet Sequence Number 필드 및 Command Opcode 필드가 포함된다. 디버그 패킷에는 선택적 Payload 필드와 CRC(Cyclic Redundancy Check) 코드도 또한 포함될 수 있다.
Target_ID 필드는 데이지 체인 SoC를 포함하는 구성에서 대상 SoC를 식별하는데 사용된다. 열거(Enumeration) 동안, 각 SoC는 자신의 Target_ID를 데이지 체인의 다음 SoC로 전달(pass)하고 다음 SoC는 Target_ID의 값을 증가시키고 증가된 값을 Target_ID로서 사용한다. 0과 동일한 Target_ID는 호스트 디버거 시스템용으로 예약되어 있으며, 일반적으로 열거 동안 호스트 디버거 시스템으로부터 체인의 제1 디바이스로 전달되는 Target_ID이다. 그렇지 않으면 호스트는 대상 SoC의 Target_ID를 데이지 체인의 제1 SoC로 전달한다. 대상 SoC로 전송되는 모든 디버그 패킷에 대하여 동일한 Target_ID를 가진 응답이 디버거 시스템으로 다시 전송될 것으로 예상된다.
Sequence Number 필드는 대상 SoC로 전송되는 디버그 패킷을 추적(track)하는데 사용되는 정수를 지정한다. Target_ID와 유사하게, 대상 SoC로 전송되는 모든 패킷에 대하여, 동일한 패킷 Sequence Number를 가진 응답이 디버거 시스템에 의해 예상된다. Reset 및 Get_Sequence 동작 코드를 가진 디버그 패킷은 동일한 Sequence Number를 가진 응답을 필요로 하지 않는다. 패킷이 SoC에서 순서 없이 수신되고 패킷이 SoC의 디버그 포트(120)에 상주하지 않으면, 해당 패킷이 드롭(drop)되고 응답이 생성되지 않는다. 디버거 시스템이 응답 패킷을 수신하지 못하거나 응답 전송에 오류가 있다면, 디버거 시스템은 동일한 Target_ID 및 패킷 Sequence Number로 동일한 요청 패킷을 재전송할 수 있다. 이 경우 응답이 디버그 포트에 여전히 상주하면 디버그 포트는 응답 패킷을 재전송할 것이다.
CRC 필드는 모든 디버그 패킷의 마지막 필드가 될 수 있다. 인그레스 패킷의 CRC가 유효하지 않은 경우, 패킷은 디버그 포트에 의해 드롭된다. Opcode 필드는 패킷 유형을 지정하거나 패킷에 의해 수행되는 주요 작업을 식별하는데 사용된다. Opcode 필드의 값은 "동작 코드(operation code)"로 지칭될 수 있다. 패킷이 디버그 패킷 제어기에 의해 성공적으로 처리되는 경우, 디버그 커맨드 패킷에서와 동일한 Sequence Number를 가지게 될 응답 패킷 내의 Opcode 필드는 큐잉된(queued) 모든 패킷에 대하여 OK 상태를 표시하고 큐잉되지 않은(non-queued) 패킷에 대하여 Special_OK 상태를 표시할 것이다. 큐잉되지 않은 디버그 패킷의 예는 Reset 및 Get_Sequence 동작 코드를 갖는 패킷이다. 반면에, 대상 SoC에 의해 전혀 처리되지 않는 디버그 패킷은 Opcode 필드가 수정되지 않고 디버거 시스템에 의해 수신될 것이다.
메인 Opcode 필드의 예시적인 동작 코드는 Enumerate, Reset, Get_Sequence 및 Memory를 포함한다. Memory 동작 코드를 갖는 디버그 패킷에서, 하나 이상의 특정 액세스 동작이 아래에서 더 설명되는 바와 같이 지정될 수 있다. Memory 코드의 추가적인 특정 액세스 동작은 "서브 커맨드"로도 또한 지칭될 수 있다. 메인 Opcode 필드의 동작 코드와 메모리 서브 커맨드는 모두 일반적으로 동작 코드로 지칭될 수 있다.
Enumerate 동작을 사용하여 Target_ID에 의해 참조될 대상 식별자를 체인의 SoC에 할당할 수 있다. Enumerate 동작 코드를 가진 디버그 패킷을 수신하면 수신 SoC는 인그레스 패킷의 Target_ID의 값을 증가시키고 증가된 값을 자체 Target_ID로서 지정한다. 디버그 패킷 제어기는 증가된 Target_ID 값을 로컬 레지스터(표시되지 않음)에 저장할 수 있다. 다음으로 디버그 패킷 제어기는 증가된 Target_ID를 가진 디버그 패킷을 다음 SoC로 전송할 것이다. 마지막 디바이스의 Target_ID가 있는 디버그 패킷이 디버거 시스템에 의해 수신될 때까지 프로세스가 반복된다. Target_ID가 255라면, 패킷은 아무 조치도 취하지 않고 있는 그대로 포워딩될 것이다. 각 SoC 상의 디버그 패킷 제어기는 수신되는 다음 디버그 패킷의 Sequence 번호가 Enumerate 디버그 패킷의 Sequence 번호에 1을 더한 값이 될 것으로 예상한다. Enumerate 패킷이 수신될 때, 디버그 포트는 리셋 상태에 있어야 하며 다른 디버그 패킷을 전혀 처리하지 않아야 한다. 그렇지 않은 경우 호스트 디버거 시스템에 의해 Enumerate 패킷이 전송되기 전에 모든 대상 디바이스 상의 디버그 포트가 리셋되어야 한다. Enumerate 패킷이 수신될 때, 디버그 포트가 이미 패킷 처리 중일 수 있다. 따라서 Enumerate 패킷 커맨드는 또한 시스템 내의 모든 SoC에 대한 디버그 포트의 리셋으로서 역할을 하고, Enumerate 패킷을 수신하면 스트리밍되고 있는 패킷이 종료될 것이고 패킷 버퍼 포인터가 리셋된다.
Reset 동작을 사용하여 대상 SoC에서 계류 중인 모든 동작을 리셋할 수 있다. Reset 패킷을 수신할 때 패킷이 스트리밍되고 있다면 패킷이 종료될 것이고 종료된 모든 계류 중인 패킷에 대하여 Response가 생성되지 않을 것이다. 또한 패킷 버퍼 포인터가 리셋된다. 응답 패킷은 Special_Okay 코드를 사용하여, 응답 패킷을 이미 응답이 큐잉되었고 호스트로 다시 전송되고 있는 동일한 Sequence Number를 가진 이전에 큐잉된 패킷으로 착각하지 않도록 호스트 디버거 시스템에 시그널링한다.
Get_Sequence 동작을 사용하여 Target_ID 값으로 식별되는 SoC 상의 다음 디버그 패킷에 대한 예상 Sequence Number를 제공할 수 있다. Get_Sequence 패킷의 Sequence Number 필드는 0이며, 디버그 포트에 의해서 무시된다. 다음 시퀀스 번호는 응답 패킷의 Sequence Number 필드에서 전달된다. Get_Sequence 패킷에 대한 응답 패킷은 또한 Special_Okay 코드를 사용하여, 이 패킷을 이미 큐잉된 다른 패킷으로 착각하지 않도록 호스트 디버거 시스템에 표시한다.
Memory 동작 코드를 가진 디버그 패킷은 참조된 메모리 어드레스에 액세스하는 다수의 서브 커맨드를 가질 수 있다. 디버그 패킷 제어기는 서브 커맨드를 디코딩하고, 액세스 요청이 발행되어야 하는 인터페이스 회로를 결정하고, 액세스 요청을 발행한다. 디버그 패킷 내의 어드레스는 프로세서 서브시스템(106)의 스토리지 회로(112), 프로그램 가능 논리 서브시스템(108)의 스토리지 회로(114), 또는 하드와이어드 논리 회로(110)의 스토리지 회로(116)를 참조할 수 있다.
Memory 커맨드 패킷은 패킷의 Payload 섹션에 지정되고 디버그 패킷 제어기에 의해 실행되는 하나 이상의 데이터 전송(transfer) 동작을 포함할 수 있다. 모든 디버그 및 트레이스 데이터는 호스트 디버거 시스템에 의해 생성된 Memory 디버그 패킷에 대한 응답으로 대상 SoC로부터 호스트 디버거 시스템으로 전송된다. 패킷의 Payload 섹션에 지정된 메모리 동작은 SoC(102)의 어드레스 공간 내의 임의의 어드레스에 대한 단일, 버스트 또는 스트림(FIFO) 트랜잭션일 수 있다. 메모리 액세스 디버그 패킷에 포함된 모든 메모리 동작은 집합적으로 패킷의 Header에 지정된 단일 Sequence Number를 지닐 수 있다(carry). 디버그 패킷 제어기는 각 Memory 디버그 패킷에 대하여 호스트 디버거 시스템으로 다시 하나의 응답을 생성한다. Retry 동작은 메모리 동작의 모음에 해당하는 패킷 수준에서 수행된다. 메모리 패킷의 Retry 동작은 메모리 서브 커맨드가 SoC에서 실행되게 하지 않는다. Retry 동작은 응답 패킷이 아웃바운드 버퍼에 있는 경우 디버그 패킷 제어기가 응답 패킷을 호스트 디버거 시스템으로 다시 보내게 한다. 응답 패킷의 Opcode는 OK를 표시하거나, 패킷이 구현과 일치하지 않는 경우 유효하지 않은(invalid) 상태를 표시한다.
Memory 디버그 패킷에 포함될 수 있는 상이한 서브 커맨드에는 Read_Mem_Op, Write_Mem_Op, Stream_Mem_Op, Perpetual, TestMem_Mem_Op, TestCond_Mem_Op, GetCond_Mem_Op, SkipIf_Mem_Op가 있다. Read_Mem_Op 서브 커맨드는 SoC(102)에서 읽기 동작을 개시하는데 사용할 수 있다. Read_Mem_Op 서브 커맨드를 가진 디버그 패킷은 크기(예를 들어, 비트(beat)에서 비트(bit)의 수), 길이(예를 들어, 비트(beat)의 수) 및 어드레스를 지정한다. 디버그 패킷 제어기가 Read_Mem_Op 서브 커맨드에 대하여 발행한 응답에는 참조된 어드레스로부터 판독된 데이터가 포함될 수 있다.
Write_Mem_Op 서브 커맨드를 사용하여 SoC(102)에서 쓰기 동작을 개시할 수 있다. Write_Mem_Op 서브 커맨드를 가진 디버그 패킷은 어드레스에 기입될 크기, 길이, 어드레스 및 데이터를 지정한다. 디버그 패킷 제어기는 Write_Mem_Op 서브 커맨드에 대한 응답을 발행하지 않는다.
Stream_Mem_Op 서브 커맨드를 사용하여 고정 액세스 어드레스를 가진 FIFO 버퍼로부터 값을 읽을 수 있고, 예를 들어, 고정 어드레스로부터 8 워드(또는 비트(beat))를 읽을 수 있다. FIFO 버퍼가 가득 차지 않을 수 있으므로 3 개의 유효한 워드와 5 개의 유효하지 않은 워드가 반환될 수 있다. 디버그 패킷 제어기는 응답에서 3 개의 유효한 워드를 제공할 것이다. 응답의 Count 필드는 반환된 유효한 데이터의 양을 표시한다. Stream_Mem_Op는 위에서 설명한 바와 같이 트레이스 모드에서 무기한 실행되는 디버그 패킷 중 적어도 하나에 포함될 수 있다.
Perpetual 동작 코드에 대한 응답으로 디버그 패킷 제어기는 호스트 디버거 시스템에 의해 "Reset", "Enumerate" 또는 "Get_Seqence_Number"가 발행될 때까지 4 개의 버퍼 모두에서 커맨드를 무기한 반복한다. Perpetual 동작 코드는 트레이스 모드를 시작하기 위한 메모리 매핑된 위치에 대한 필요를 없애 준다. Perpetual 동작 코드를 사용하기 위하여 사용자는 다수의 디버그 패킷을 발행한 후 Perpetual opcode를 가진 디버그 패킷을 발행한다. 예시적인 현재 구현에서, 4 개의 패킷 버퍼가 있고, 그 결과, Perpetual 동작 코드에 응답하여 디버그 패킷 제어기가 동작하는 큐잉된 패킷의 수는 Perpetual 패킷 자체를 제외하고 4 개이다. 그런 다음 디버그 패킷 제어기는 버퍼링된 패킷에서 동작을 실행한다. 각 응답은 증가된 Sequence ID를 가진다.
디버그 패킷 제어기는 트레이스 버퍼 및 디버그 요소와 같은 스토리지 회로가 시스템 내의 다른 저장 요소의 조건에 따라 액세스되는 메커니즘을 제공한다. 이 특징은 호스트 디버거 시스템이 이러한 버퍼의 상태를 확인하고 조건이 양호한 경우(예를 들어, 가득 참(full) 또는 준비됨(ready))에만 액세스하는 대신, 다수의 트레이스 또는 디버그 요소가 하나의 패킷에서 동시에 투기적으로(speculatively) 액세스될 수 있게 한다. 상태를 확인하는데 호스트 디버거 시스템을 사용하면 상당한 턴어라운드(turnaround) 시간이 발생할 것이다.
디버그 패킷 내의 어드레스에 의해 참조되고 디버그 패킷 내의 마스크 값과 AND된(ANDed) 데이터 값이 디버그 패킷 내의 비교 값(compare value)과 동일하다면, TestMem_Mem_Op 서브 커맨드가 조건 레지스터에서 하나 이상의 비트(bit)를 설정하는데 사용할 수 있다. AND의 결과가 비교 값과 동일하지 않으면 조건 레지스터의 비트(들)가 클리어된다.
디버그 패킷 내의 필드에 의해 참조되고 디버그 패킷 내의 마스크 값과 AND된(ANDed) 조건 레지스터의 하나 이상의 비트가 디버그 패킷 내의 비교 값과 동일하다면, TestCond_Mem_Op 서브 커맨드가 조건 레지스터에서 하나 이상의 비트(bit)를 설정하는데 사용될 수 있다. AND의 결과가 비교 값과 동일하지 않으면 조건 레지스터의 비트(들)가 클리어된다.
서브 커맨드 내에 지정된 조건 레지스터의 비트가 서브 커맨드 내의 True 필드와 동일하다면, SkipIf_Mem_Op 서브 커맨드가 SkipIf_Mem_Op 서브 커맨드의 목적지(destination) 필드가 나타내는 커맨드 페이로드 내의 위치로 디버그 패킷 내의 메모리 서브 커맨드의 처리를 스킵(skip)하는데 사용될 수 있다. 비교된 값이 동일하지 않으면 디버그 패킷 내의 다음 연속 메모리 서브 커맨드가 처리된다.
호스트 디버거 시스템이 SkipIf_Mem_Op로 인해 서브 커맨드를 스킵하는지 여부와 호스트 디버거 시스템이 SkipIf_Mem_Op 다음에 오는 읽기 또는 쓰기 동작에서 응답을 예상해야 하는지 여부를 결정할 수 있도록 조건 레지스터의 상태를 명시적으로 반환하기 위하여 GetCond_Mem_Op 서브 커맨드가 호스트 디버거 시스템에 의해 사용될 수 있다.
도 2는 SoC(102), 및 SoC의 서브시스템과 디버그 포트(120)(도 1)의 회로 사이의 예시적인 인터페이스를 도시한다. 디버그 포트의 회로는 일반적으로 디버그 패킷 제어기(202) 및 디버그 I/O 인터페이스(204)를 포함한다. 디버그 패킷 제어기(202)는 디버거 시스템(104)(도 1)으로부터 수신된 디버그 패킷을 처리하는 책임이 있다. 디버그 I/O 인터페이스는 디버그 패킷이 디버그 패킷 제어기로 전달되고 응답이 디버그 패킷 제어기에 의해 디버거 시스템으로 반환되는, SoC 상의 고속 인터페이스이다. 디버그 I/O 인터페이스에는 위에서 설명한 오로라 인터페이스와 JTAG 인터페이스가 포함될 수 있다.
디버그 패킷 제어기(202)는 디버거 시스템(104)으로부터 수신된 디버그 패킷을 수신하고 버퍼 회로에 저장한다. 디버그 패킷 내의 동작 코드는 디버그 패킷 제어기에 의해 디코딩되며, 이 동작 코드에 기초하여 디버그 패킷 제어기가 목적지를 결정하고 높은 수준의 흐름 제어 및 관리 작업을 수행한다. 디버그 패킷 제어기는 디버그 패킷 내의 어드레스를 기반으로 요청이 라우팅되어야 하는 적절한 인터페이스 회로를 결정한다. 요청은 적절한 인터페이스 회로 상에서 디버그 패킷 제어기에 의해 발행되고, 요청에 대한 응답은 디버그 I/O 인터페이스(204)에 의해 액세스될 수 있는 출력 데이터 버퍼 내에 저장된다.
디버그 패킷 제어기(202)는 디버그 패킷 내의 어드레스가 SoC(102) 상의 프로세서 서브시스템(106)의 스토리지 회로, SoC 상의 프로그램 가능 논리 서브시스템의 스토리지 회로, 또는 SoC 상의 수학 엔진 회로의 스토리지 회로를 참조하는지 여부를 결정한다. 보다 구체적으로, 어드레싱된 대상은 프로세서 서브시스템 내의 전용 디버그 서브시스템/인터커넥트; 프로세서 서브시스템 내의 전용 트레이스 버퍼; 부팅 전에 프로세서 서브시스템 또는 프로그램 가능 논리 서브시스템(106)의 프로세서 코어(들)(206)를 구성하기 위한 디바이스 구성 서브시스템(216) 인터페이스; 및 프로세서 서브시스템의 레지스터, 프로그램 가능 논리 서브시스템에서 구현된 회로의 레지스터 및 하드와이어드 논리/수학 엔진(110)의 레지스터를 포함하여 시스템 내의 모든 동작 레지스터에 액세스하기 위한 SoC 스위치(210) 및 네트워크 온칩(network-on-chip, NoC)(212)일 수 있다.
프로세서 서브시스템은 프로세서 디버그/트레이스 회로(208)를 포함할 수 있으며, 이는 프로세서 서브시스템의 스토리지 회로에 대한 디버그 액세스를 제공할 수 있고, 또한 프로세서 서브시스템 및 또한 SoC 상의 상이한 서브시스템으로부터의 트레이스 데이터를 버퍼링하고 어셈블할 수 있다. 프로세서 디버그/트레이스 회로(208)의 예는 ARM CoreSight 디버거이다.
디버그 패킷 제어기(202)는 신호 라인(218)에 의해 도시된 바와 같이 프로세서 디버그/트레이스 회로로부터 트레이스 데이터를 선택적으로 직접 수신할 수 있다. 대안적으로, 디버그 패킷 제어기는 멀티플렉서 회로(214)를 통하여 읽기 및 쓰기 요청을 발행하여, 프로세서 디버그/트레이스 회로(208)를 통하여 프로세서 서브시스템의 스토리지 회로에 액세스할 수 있다. 프로세서 서브시스템의 스토리지 회로에 대한 액세스는 디버그 I/O 인터페이스(204)를 통하여 오프-SoC 회로에 그리고 SoC 스위치(210)를 통하여 온-SoC 컴포넌트에 더 제공될 수 있다.
디버그 패킷 제어기(202)는 또한 구성 서브시스템(216)에 인터페이스할 수 있다. 구성 서브시스템은 프로그램 가능 논리(106)의 구성 메모리(도시되지 않음)에 액세스하는 구성 액세스 포트와 같은 회로를 포함할 수 있다. 디버그 패킷 제어기는 프로그램 가능 논리(106)에서 회로를 구현하기 위하여 구성 메모리에 저장될 디버그 패킷으로부터의 데이터로 구성 서브시스템에 쓰기 요청을 발행할 수 있다. 디버그 패킷 제어기는 또한 구성 메모리로부터 구성 데이터를 다시 읽기 위하여 읽기 요청을 발행할 수 있다.
도 3은 SoC의 디버그 회로(300)의 예시적인 구현을 도시한다. 디버그 회로(300)는 도 2에 도시된 디버그 패킷 제어기(202)의 논리 및 디버그 I/O 인터페이스를 포함한다. 디버그 패킷 제어기는 JTAG 포트(302) 또는 데이지 체인 또는 PTP(point-to-point) 및 데이지 체인 연결(304) 중에서 선택하도록 구성 가능하다. 도시되지 않은 다른 포트는 디버그 패킷을 수신할 수 있고, 프로그램 가능 논리 서브시스템 상에서 구현될 수 있는 것과 같은 로컬 디버거 회로로 응답을 전송할 수 있다. I/O 경로 선택 제어(306)는 멀티플렉서(308)에 의해 원하는 입력 경로를 선택하도록 레지스터(도시되지 않음)와 같이 구성될 수 있다.
JTAG 포트에는 JTAG - AXI 스트림 브리지(JTAG to AXI Stream bridge)(표시되지 않음)가 포함될 수 있다. 브리지는 사용자가 JTAG 체인의 탭을 통하여 디버그 패킷 제어기로 디버그 패킷을 보낼 수 있도록 하는 보안 게이트 및 역직렬화기(de-serializer)를 기반으로 할 수 있다. 디버그 패킷 제어기에 대한 브리지는 간소화되고(streamlined) 낮은 오버헤드 설계로 인해 빠른 데이터 전송 속도를 제공한다. 브리지를 사용하면 또한 오로라 기반 기능을 요구하지 않고도 디버그 패킷 제어기의 기능을 테스트할 수 있다.
JTAG 인터페이스는 트레이스 모드에서 유용할 수 있다. 인그레스(인바운드) 디버그 패킷은 JTAG를 통하여 액세스될 수 있으며 이그레스(아웃바운드) 응답 데이터는 PTP 인터페이스를 통하여 출력될 수 있다. 트레이스 모드에서는 제한된 수의 패킷, 예를 들어 예시적인 구현에서 4 개의 패킷이 입력되는 반면, 매우 많은 수의 아웃바운드 트레이스 패킷이 생성된다.
PTP 및 데이지 체인 포트(304)는 자일링스사의 오로라 인터페이스를 사용하여 구현될 수 있다. 오로라 인터페이스는 하나 이상의 고속 직렬 레인에 걸쳐 데이터를 지점 간 이동하는데 사용될 수 있는 경량 링크 레이어 프로토콜을 구현한다. 오로라 인터페이스는 간단하고, 낮은 오버헤드로 구현할 수 있으며, 단일 케이블로 다수의 디바이스의 데이지 체인을 지원하며, 잠재적으로 원시(raw) 스트리밍 출력 인터페이스로서 사용될 수 있다. 오로라 프로토콜 브리지는 Debug 인터페이스의 Physical 및 Link 레이어를 담당한다. 오로라 서브 섹션은 전기 시그널링과 클록과 심볼 코딩을 처리한다. IP에서 동적 채널 본딩(channel bonding)이 지원된다면, 오로라는 또한 단일 및 다중 레인 구성을 위한 채널도 준비하고, 개별 레인 또는 Data Striping에 대한 데이터 매핑을 제어한다. 오로라는 디버그 패킷 내에서 유휴 시퀀스를 허용하므로 전체 패킷을 버퍼링할 필요가 없다. 예시적인 구현에서, 오로라 인터페이스는 2 개의 개별 채널이 있는 일방(simplex) 모드에서 64b/66b 인코딩을 구현하도록 구성된다. 오로라 인터페이스는 디버그 패킷을 캡슐화하기 위하여 프레이밍을 지원하도록 구성된다.
디버그 패킷 제어기는 디버그 패킷 내의 Target_ID 및 메인 동작 코드에 따라 디버그 패킷의 큐잉하거나 큐잉을 바이패스(bypass)할 수 있다. 큐잉된 패킷은 디버그 패킷 제어기 입력 버퍼에 큐잉되며, 이는 예시적인 구현에서 4 개의 디버그 패킷에 대한 스토리지를 제공하고 순서대로 SoC에 적용된다. 메모리 동작을 가지고 수신 디버그 패킷 제어기의 SoC의 대상 식별자와 일치하는 Target_ID를 가지며 Retry 패킷으로서 해석되지 않는 모든 디버그 패킷이 큐잉되고 버퍼링된다.
큐잉되지 않은 디버그 패킷은 디버그 패킷 제어기에 의해 식별되는 즉시 처리되며, 운영 코드 및 이그레스 채널의 가용성에 따라 로컬에 저장되거나 저장되지 않을 수 있다. Enumerate, Reset 및 Get_Sequence의 동작 코드를 가진 디버그 패킷 외에도 다른 SoC를 참조하는 Target_ID를 가진 디버그 패킷이 큐잉되지 않는다. 일치하지 않는 Target_ID를 갖는 디버그 패킷은 아웃바운드 채널이 큐잉된 패킷의 응답을 전송하느라 바쁘지 않는 한, 직접 포워딩된다. Retry 디버그 패킷도 또한 큐잉되지 않는다. Retry 디버그 패킷은 호스트 디버거 시스템에 의해 다시 전송되는 패킷이며, 응답은 디버그 패킷 제어기의 출력 버퍼에 여전히 존재한다. Retry 디버그 패킷에 대한 응답은 다음으로 전송되는 응답일 것이며, 그 다음에는 이미 전송되도록 스케줄링된 디버그 패킷에 대한 응답이 전송될 것이다.
SoC로의 디버그 패킷의 제어 및 흐름은 호스트 디버거 시스템(104)(도 1)에 의해 관리된다. 호스트 디버거 시스템은 큐잉된(Queued) 제1 디버그 패킷에 대한 응답이 수신될 때까지 4 개가 넘는 큐잉된(Queued) 디버그 패킷을 SoC로 보내지 않을 것으로 예상된다. 호스트 디버거 시스템이 제1 디버그 패킷에 대한 응답이 디버그 패킷 제어기에 의해 전송되기 전에 큐잉된(Queued) 제5 디버그 패킷을 전송하려고 시도하면, 디버그 패킷이 디버그 패킷 제어기에 의해 드롭되고 디버그 패킷에 대하여 아무런 응답이 생성되지 않을 것이다. 호스트 디버거 시스템은 이 발생 및 정확한 실행을 검출할 수 있지만, 호스트 디버거 시스템은 전송되고 응답된 패킷을 추적하고 과도한 요청을 발행하지 않을 것으로 예상된다. 디버그 패킷 제어기는 큐잉되지 않은(Non-Queued) 디버그 패킷인 제5 패킷을 수락할 수 있다.
디버그 패킷 제어기는 각 입력 디버그 패킷을 패킷 FIFO(First-in-First-Out, FIFO) 버퍼(310)에 임시로 저장한다. 디코더 회로(338)는 패킷이 입력 버퍼(312, 314,…, 316) 중 하나에 큐잉되는지 또는 디버그 패킷 제어기를 직접 종료하는지 여부를 결정하기 위하여 FIFO 버퍼의 헤드에서 패킷의 헤더(제1 워드)를 디코딩한다. 이그레스 포트가 응답 또는 다른 디버그 패킷을 전송하느라 바쁘면, 인바운드 디버그 패킷은 출력 포트가 이용 가능해질 때까지 FIFO 버퍼(310)에 저장될 것이다.
디코더 회로(338)는 패킷이 입력 버퍼(312, 314,…, 316)를 바이패스해야 하는지 여부에 대하여 트랜잭션 제어 회로(318)에 시그널링할 목적으로 디버그 패킷의 헤더의 제1 레벨 디코딩을 수행한다. 예를 들어, 디버그 패킷 내에 지정된 Target ID가 레지스터(348)의 SoC ID와 일치하지 않으면, 디코더 회로(338)는 트랜잭션 제어 회로(318)에, 디버그 패킷의 저장을 위하여 어떤 입력 버퍼도 인에이블되어서는 안 되고, 바이패스 경로에 있는 디버그 패킷이 멀티플렉서(336)에 의해 선택되어야 한다고 시그널링한다.
디버그 패킷 내의 Target ID가 레지스터(348) 내의 SoC ID(디바이스의 Target_ID)와 일치하고 디버그 패킷이 위에서 설명한 큐잉되지 않은 패킷 유형 중 하나가 아니라면, 디코더 회로(338)는 트랜잭션 제어 회로(318)에, 디버그 패킷이 입력 버퍼(312, 314,…, 316) 중 하나에 저장 가능하다고 시그널링한다. 트랜잭션 제어 회로는 입력 버퍼 중 사용 가능한 버퍼를 선택하고, 선택된 입력 버퍼 내의 저장을 위하여 디멀티플렉서(320)를 거쳐서 디버그 패킷을 보낸다(direct). 모든 입력 버퍼가 가득 차면, 디버그 패킷이 입력 버퍼 중 어디에도 저장되지 않고 폐기된다.
트랜잭션 제어 회로(318)는 멀티플렉서(322)를 거쳐서 처리를 위한 디버그 패킷을 선택한다. 스토리지 회로에 대한 액세스를 지정하는 동작 코드가 있는 디버그 패킷의 경우, 트랜잭션 제어 회로는 디버그 패킷 내의 어드레스를 기반으로 SoC의 상이한 서브시스템들에 대한 인터페이스 회로 중 하나를 선택한다. 신호 라인(324)은 서브시스템에 대한 상이한 인터페이스에 연결된다.
서브시스템으로부터 리트리빙된 데이터 또는 트랜잭션 제어 회로(318)에 의해 제공된 데이터를 갖는 응답 패킷은 응답 버퍼(328, 330,…, 332)에 저장된다. 트랜잭션 제어 회로는 디멀티플렉서(326)를 사용하여 응답 패킷을 응답 버퍼들 중 사용 가능한 응답 버퍼로 보낸다.
응답 패킷이 응답 버퍼에서 이용 가능해짐에 따라, 멀티플렉서(334)를 거쳐서 트랜잭션 제어 회로는 출력을 위하여 응답 버퍼 중 하나로부터 응답 패킷을 선택한다. 선택된 응답 패킷은 디멀티플렉서(336)로 보내진다. 멀티플렉서(336)로부터의 출력(340 및 342)은 JTAG 포트(302) 및 PTP 및 데이지 체인 포트(304)의 입력에 연결된다.
트랜잭션 제어 회로는 TestMem_Mem_Op 및 TestCond_Mem_Op와 같은 테스트 동작의 결과를 추적하는데 사용될 수 있는 조건 레지스터(346)를 포함한다. 조건 레지스터의 값(들)은 디버그 패킷의 동작 처리 흐름을 제어하는데도 또한 사용될 수 있다.
도 4는 디버그 패킷 제어기에 의한 디버그 패킷의 처리를 예시하는 흐름도이다. 블록(402)에서, 디버그 패킷 제어기는 패킷 FIFO 버퍼(310)(도 3)의 헤드에서 디버그 패킷의 헤더를 읽는다. 패킷 헤더 내의 Target_ID가 SoC의 디바이스 식별자와 동일하지 않으면, 결정 블록(404)은 프로세스를 블록(406)으로 보내고, 여기서 디버그 패킷 제어기는 입력 버퍼(312, 314,…, 316)(도 3)에서 디버그 패킷의 큐잉을 바이패스하고, 데이지 체인의 다음 SoC로 패킷을 출력한다. 그 후 디버그 패킷 제어기는 패킷 FIFO 버퍼에서 다음 패킷의 헤더를 읽기 위하여 블록(402)으로 복귀한다.
패킷 헤더 내의 Target_ID가 SoC의 식별자와 동일하면, 결정 블록(408)에서 디버그 패킷 제어기는 헤더 내의 동작 코드가 Perpetual 동작인지 여부를 결정한다. Perpetual 동작 코드를 검출하는 것에 응답하여, 블록(410)에서 디버그 패킷 제어기는 입력 버퍼(312, 314,…, 316)에 존재하는 디버그 패킷 내의 동작 코드를 순차적으로 처리한다. 즉, 디버그 패킷 제어기는 입력 버퍼 내의 디버그 패킷에 대하여 Reset 디버그 패킷이 결정 블록(412)에 의해 패킷 FIFO 버퍼(310)에서 검출될 때까지 동작 코드의 디코딩, 인터페이스 회로 결정 및 요청 발행을 반복한다. 디버그 패킷 내의 동작 코드의 처리는 블록(422-452)으로 도시된다. 블록(414)에서, 디버그 패킷 제어기는 Reset 디버그 패킷에 응답하여 입력 버퍼(312, 314,…, 316)에 현재 있는 패킷의 동작 코드의 디코딩을 중단한다. 다음 패킷에 Perpetual 동작 코드가 있는 경우, 디버그 패킷 제어기는 입력 버퍼의 패킷 내의 커맨드의 실행을 반복한다. 디버그 패킷 제어기가 Perpetual 동작 모드에 있는 동안, 디버그 패킷 제어기는 다른 SoC로 향하는 디버그 패킷 또는 Perpetual 동작 모드를 중지하는 디버그 패킷에 대하여 패킷 FIFO 버퍼를 계속 모니터링한다.
결정 블록(416)에서, 디버그 패킷 제어기가 Perpetual 동작 모드에서 동작하고 있지 않을 때, 디버그 패킷 제어기는 패킷 입력 버퍼(312, 314,…, 316)의 헤드에서 패킷에 대하여 이용 가능한 버퍼 스토리지가 있는지 여부를 결정한다. 입력 버퍼에 사용 가능한 공간이 없으면, 패킷은 블록(418)에서 폐기되고 제어는 블록(402)으로 반환된다. 스토리지가 입력 버퍼에서 사용 가능하면 블록(420)에서 디버그 패킷 제어기는 입력 버퍼 중 하나에 디버그 패킷을 저장하고, 이제 패킷 FIFO 버퍼의 헤드에서 다음 패킷의 헤더를 얻기 위하여 블록(402)으로 돌아간다. 이와 병행하여, 디버그 패킷 제어기는 블록(422)에서 계속된다. 디버그 패킷 제어기는 블록(416)에서 이용 가능한 버퍼 공간을 확인하고 큐잉된 패킷에 대해서만 블록(420)에서 입력 버퍼에 패킷을 저장한다는 점에 유의한다.
블록(422)에서, 디버그 패킷 제어기는 입력 버퍼(312, 314,…, 316) 중 하나로부터 디버그 패킷을 얻고, 블록(424)에서 디버그 패킷 제어기는 디버그 패킷으로부터 동작 코드를 얻는다. 동작 코드는 위에서 설명한 서브 커맨드 중 하나일 수 있다.
디버그 패킷 제어기가 Read 동작 코드를 검출하면, 결정 블록(426)은 프로세스를 블록(428)으로 보낸다. 블록(428)에서, 디버그 패킷 제어기는 SoC의 어드레싱된 서브시스템으로 인터페이스에서 읽기 요청을 발행한다. 그 후 디버그 패킷 제어기는 디버그 패킷에서 더 많은 동작 코드를 확인하기 위하여 블록(450)에서 계속된다. 디버그 패킷에 추가 동작 코드가 없으면, 프로세스는 입력 버퍼로부터 다음 디버그 패킷을 얻기 위하여 블록(422)으로 돌아간다. 예시적인 구현에서, 디버그 패킷 제어기는 라운드 로빈 순서로 입력 버퍼(312, 314,…, 316) 내의 디버그 패킷을 처리한다. 디버그 패킷에 처리되지 않은 동작 코드가 더 많은 경우, 블록(452)에서 디버그 패킷 제어기는 패킷으로부터 다음 동작 코드를 가져와서, 결정 블록(426)으로 돌아간다. 패킷 내의 동작 코드는 Skip 동작이 흐름을 변경하지 않는 한 순차적인 순서로 처리된다.
디버그 패킷 제어기가 Write 동작 코드를 검출하면, 결정 블록(430)은 프로세스를 블록(432)으로 보낸다. 블록(432)에서, 디버그 패킷 제어기는 SoC의 어드레싱된 서브시스템으로 인터페이스에서 쓰기 요청을 발행한다. 그 후 디버그 패킷 제어기는 전술한 바와 같이 블록(450)에서 계속된다.
디버그 패킷 제어기가 Test 동작을 검출하면, 결정 블록(434)은 프로세스를 블록(436)으로 보낸다. Test Memory 동작 코드에 대하여, 블록(436)에서, 디버그 패킷 제어기는 SoC의 어드레스싱된 서브시스템으로 인터페이스에서 읽기 요청을 발행한다. 블록(438)에서, 디버그 패킷 제어기는 읽기 요청에 의해 디버그 패킷 내의 테스트 동작과 연관된 마스크 값과 데이터 값의 논리 함수(예를 들어, AND)를 수행한다. 블록(440)에서, 디버그 패킷 제어기는 논리 함수의 결과를 테스트 동작과 관련된 비교 값과 비교한다. 블록(442)에서, 디버그 패킷 제어기는 비교 결과에 기초하여 조건 레지스터(346)(도 3)에 값을 저장한다. 예를 들어, 비교 결과가 비교 값이 논리 함수의 결과와 동일하다는 것을 표시하면, 논리 값 1이 조건 레지스터에 저장될 수 있다. 그렇지 않으면 논리 값이 조건 레지스터에 저장될 수 있다. 그 후 디버그 패킷 제어기는 결정 블록(450)에서 처리를 계속한다.
또 다른 유형의 Test 동작은 Test Condition이다. 전술한 바와 같이, TestCond_Mem_Op는 조건 레지스터(346) 또는 조건 레지스터의 일부의 값을 테스트한다. 디버그 패킷 제어기에 의한 Test Condition 동작 코드의 처리는 SoC 서브시스템 중 한 서브시스템의 어드레스로부터 값을 읽는 대신 조건 레지스터로부터 값을 읽는다는 점을 제외하면 Test Memory 동작 코드의 처리와 유사한다.
결정 블록(444)에서, 디버그 패킷 제어기는 SKIP 동작(예를 들어, SkipIf_Mem_Op)을 확인한다. Skip 동작의 경우, 블록(445)에서 디버그 패킷 제어기는 조건 레지스터(346)로부터 값을 얻는다. Skip 동작은 디버그 패킷 내의 메모리 동작의 처리를 디버그 패킷의 커맨드 페이로드 내의 위치로 스킵하는데 사용될 수 있다. 위치는 SkipIf_Mem_Op 서브 커맨드의 목적지 필드에 의해 표시된다. 서브 커맨드에 지정된 조건 레지스터의 비트가 서브 커맨드의 True 필드와 동일하면, 블록(446)에서 디버그 패킷 제어기는 지정된 위치로 스킵하고 블록(448)에서 해당 위치에서 동작 코드를 가져온다. 비교된 값이 동일하지 않다면, 디버그 패킷 제어기는 더 많은 동작 코드를 확인하기 위하여 블록(450)을 계속한다.
도 5는 다수의 SoC에서 데이지 체인 디버그 회로를 지원하는 PTP(point-to-point) 디버그 인터페이스의 애플리케이션을 도시한다. 장치는 디버거 시스템(104)(도 1) 및 디버그 포트(508, 510,…, 512)에 의해 연결된 다수의 SoC(502, 504,…, 506)를 포함한다. 디버그 포트는 도 1의 디버그 포트(120)에 의해 도시된 바와 같이 구현될 수 있고, 디버그 패킷 제어기 및 디버그 I/O 포트는 도 2 및 도 3에 도시되고 설명된다.
디버거 시스템(104)에 의해 발행된 디버그 패킷은 SoC(502, 504,…, 506) 중 대상이 된 것을 참조하는 Target_ID 값을 갖는다. 디버거 시스템에 의해 발행된 디버그 패킷은 먼저 SoC(502) 상의 디버그 포트(508)로 라우팅된다. Target_ID 값은 SoC(502)의 디바이스 식별자와 일치하고, 디버그 패킷 내의 동작(들)은 디버그 포트(508)에서 디버그 패킷 제어기에 의해 처리된다. Target_ID 값이 SoC(502)의 디바이스 식별자와 일치하지 않으면, 디버그 포트(508)가 디버그 패킷을 데이지 체인의 다음 SoC(504)로 포워딩한다. 디버그 패킷은 Target_ID 값이 SoC 디바이스 식별자와 일치할 때까지 데이지 체인을 따라 포워딩된다. 디버그 포트의 데이지 체인을 통하여 SoC를 병렬로 디버깅되게 할 수 있다. 디버그 포트(508, 510,…, 512)로부터의 응답도 또한 데이지 체인을 따라 디버거 시스템(104)으로 전달된다.
도 6은 개시된 회로에 따라 구성될 수 있는 예시적인 프로그램 가능 IC(602)를 도시한다. 프로그램 가능 IC는 또한 SoC로 지칭될 수 있고, SoC는 프로세서 서브시스템(610) 및 프로그램 가능 논리 서브시스템(630)을 포함한다. 프로세서 서브시스템(610)은 사용자 프로그램의 실행을 통하여 사용자 설계의 소프트웨어 부분을 구현하도록 프로그래밍될 수 있다. 프로그램은 구성 데이터 스트림의 일부로서 지정되거나 온-칩 또는 오프-칩 데이터 스토리지 디바이스로부터 리트리빙될 수 있다. 프로세서 서브시스템(610)은 하나 이상의 소프트웨어 프로그램을 실행하기 위한 다양한 회로(612, 614, 616 및 618)를 포함할 수 있다. 회로(612, 614, 616 및 618)는 예를 들어, 하나 이상의 프로세서 코어, 부동 소수점 유닛(floating point unit, FPU), 인터럽트 처리 유닛, 온칩 메모리, 메모리 캐시 및/또는 캐시 코히어런트 인터커넥트를 포함할 수 있다.
프로그램 가능 IC(602)의 프로그램 가능 논리 서브시스템(630)은 사용자 설계의 하드웨어 부분을 구현하도록 프로그래밍될 수 있다. 예를 들어, 프로그램 가능 논리 서브시스템은 구성 데이터 스트림에 지정된 회로 세트를 구현하도록 프로그래밍될 수 있는 다수의 프로그램 가능 자원(632)을 포함할 수 있다. 프로그램 가능 자원(632)은 예를 들어 프로그램 가능 인터커넥트 회로, 프로그램 가능 논리 회로 및 구성 메모리 셀을 포함한다. 프로그램 가능 논리는 예를 들어 함수 생성기, 레지스터, 산술 논리 등을 포함할 수 있는 프로그램 가능 요소를 사용하여 사용자 설계의 논리를 구현한다. 프로그램 가능 인터커넥트 회로는 프로그램 가능 인터커넥트 지점(programmable interconnect point, PIP)에 의해 상호 연결된 변하는 길이의 많은 인터커넥트 라인을 포함할 수 있다.
프로그램 가능 자원(632)은 구성 데이터 스트림을 구성 메모리 셀 내에 로딩함으로써 프로그래밍될 수 있으며, 이는 프로그램 가능 인터커넥트 회로 및 프로그램 가능 논리 회로가 어떻게 구성되는지를 정의한다. 예를 들어, 구성 가능 래치에 대한 구성 메모리 셀을 제1 값으로 설정하면 구성 가능한 래치가 단일 에지 구동 래치로서 동작하도록 지시(direct)할 수 있다. 구성 메모리 셀을 제2 값으로 설정하면 구성 가능한 래치가 이중 에지 구동 래치로 동작하도록 지시할 수 있다. 그 후 개별 메모리 셀의 집합적 상태는 프로그램 가능 자원(632)의 기능을 결정한다. 구성 데이터는 메모리로부터(예를 들어, 외부 PROM으로부터) 판독되거나 외부 디바이스에 의해 프로그램 가능 IC(602) 내로 기입될 수 있다. 일부 구현에서, 프로그램 가능 논리 서브시스템(630)에 포함된 구성 제어기(634)는 프로그램 가능 IC에 결합된 비휘발성 메모리로부터 구성 데이터를 리트리빙하고 구성 데이터를 구성 메모리 셀 내로 로딩함으로써, 프로그램 가능 IC의 전원을 켜는 것에 응답하여 프로그램 가능 자원을 프로그래밍할 수 있다. 일부 다른 구현에서, 구성 데이터는 프로세서 서브시스템(610)에 의해 실행되는 시작(start-up) 프로세스에 의해 구성 메모리 셀 내로 로딩될 수 있다.
프로그램 가능 IC(602)는 프로세서 서브시스템(610)을 프로그램 가능 논리 서브시스템(630) 내에서 구현된 회로와 상호 연결하기 위한 다양한 회로를 포함할 수 있다. 이 예에서, 프로그램 가능 IC(602)는 프로세서 서브시스템(610)과 프로그램 가능 논리 서브시스템(630)의 다양한 데이터 포트 사이에서 데이터 신호를 라우팅할 수 있는 코어 스위치(626)를 포함한다. 코어 스위치(626)는 또한 프로그램 가능 논리 또는 처리 서브시스템(610 및 630) 중 하나와 내부 데이터 버스와 같은 프로그램 가능 IC의 다양한 다른 회로 사이에서 데이터 신호를 라우팅할 수 있다. 대안적으로 또는 추가적으로, 프로세서 서브시스템(610)은 코어 스위치(626)를 바이패스(bypass)함으로써, 프로그램 가능 논리 서브시스템과 직접 연결하기 위한 인터페이스를 포함할 수 있다. 이러한 인터페이스는 예를 들어 ARM에 의해 공개된 AMBA AXI 프로토콜 사양(AXI)을 사용하여 구현될 수 있다.
일부 구현에서, 프로세서 서브시스템(610) 및 프로그램 가능 논리 서브시스템(630)은 또한 메모리 제어기(621)를 통하여 온-칩 메모리(622) 또는 오프-칩 메모리(도시되지 않음)의 메모리 위치를 읽거나 쓸 수 있다. 메모리 제어기(621)는 16-비트, 32-비트, ECC를 가진 16-비트이건 간에, DDR(Double Data Rate) 2, DDR3, LP(Low Power) DDR2 유형의 메모리를 포함하는 그러나 이에 국한되지는 않는 하나 이상의 상이한 유형의 메모리 회로와 통신하도록 구현될 수 있다. 메모리 제어기(621)가 통신할 수 있는 상이한 메모리 유형의 목록은 단지 예시를 목적으로 제공되며 제한하거나 포괄적인 의도가 아니다. 도 6에 도시된 바와 같이, 프로그램 가능 IC(602)는 메모리 관리 유닛(620), 및 서브시스템(610 및 630)에 의해 사용되는 가상 메모리 어드레스를 특정 메모리 위치에 액세스하기 위하여 메모리 제어기(621)에 의해 사용되는 물리적 메모리 어드레스로 변환(translate)하기 위한 변환 색인 버퍼(translation look-aside buffer)(624)를 포함할 수 있다.
프로그램 가능 IC는 외부 회로와의 데이터 통신을 위한 입출력(I/O) 서브시스템(650)을 포함할 수 있다. I/O 서브시스템(650)은 예를 들어 플래시 메모리 유형 I/O 디바이스, 고성능(higher performance) I/O 디바이스, 저성능(lower performance) 인터페이스, 디버깅 I/O 디바이스 및/또는 RAM I/O 디바이스를 포함하는 다양한 유형의 I/O 디바이스 또는 인터페이스를 포함할 수 있다.
I/O 서브시스템(650)은 660A 및 660B로 예시된 하나 이상의 플래시 메모리 인터페이스(660)를 포함할 수 있다. 예를 들어, 하나 이상의 플래시 메모리 인터페이스(660)는 4 비트 통신을 위하여 구성된 QSPI(Quad-Serial Peripheral Interface)로서 구현될 수 있다. 하나 이상의 플래시 메모리 인터페이스(660)는 병렬 8 비트 NOR/SRAM 유형의 인터페이스로서 구현될 수 있다. 하나 이상의 플래시 메모리 인터페이스(660)는 8 비트 및/또는 16 비트 통신을 위하여 구성된 NAND 인터페이스로서 구현될 수 있다. 설명된 특정 인터페이스는 제한이 아닌 예시의 목적으로 제공된다는 것을 이해해야 한다. 상이한 비트 폭을 갖는 다른 인터페이스가 사용될 수 있다.
I/O 서브시스템(650)은 플래시 메모리 인터페이스(660)보다 더 높은 레벨의 성능을 제공하는 하나 이상의 인터페이스(662)를 포함할 수 있다. 인터페이스(662A-662C) 각각은 DMA 제어기(664A-664C)에 각각 결합될 수 있다. 예를 들어, 하나 이상의 인터페이스(662)는 USB(Universal Serial Bus) 유형의 인터페이스로서 구현될 수 있다. 하나 이상의 인터페이스(662)는 기가비트 이더넷 유형의 인터페이스로서 구현될 수 있다. 하나 이상의 인터페이스(662)는 SD(Secure Digital) 유형의 인터페이스로서 구현될 수 있다.
I/O 서브시스템(650)은 또한 인터페이스(662)보다 낮은 수준의 성능을 제공하는 인터페이스(666A-666D)와 같은 하나 이상의 인터페이스(666)를 포함할 수 있다. 예를 들어, 하나 이상의 인터페이스(666)가 범용 I/O 유형(General Purpose I/O, GPIO)의 인터페이스로서 구현될 수 있다. 하나 이상의 인터페이스(666)는 UART(Universal Asynchronous Receiver/Transmitter) 유형의 인터페이스로서 구현될 수 있다. 하나 이상의 인터페이스(666)가 SPI(Serial Peripheral Interface) 버스 유형의 인터페이스의 형태로 구현될 수 있다. 하나 이상의 인터페이스(666)는 CAN(Controller-Area-Network) 유형의 인터페이스 및/또는 I2C(inter-integrated circuit) 유형의 인터페이스의 형태로 구현될 수 있다. 하나 이상의 인터페이스(666)는 또한 타이머 유형의 인터페이스의 형태로 구현될 수 있다. I/O 서브시스템(650)은 전술한 바와 같이 디버그 포트(120)를 포함할 수 있다.
도시된 바와 같이, 인터페이스(660, 662, 666) 각각과 디버그 포트(120)는 멀티플렉서(670)에 결합될 수 있다. 멀티플렉서(670)는 프로그램 가능 IC(602)의 외부 핀, 예를 들어, 프로그램 가능 IC(602)가 배치되는 패키지의 볼(ball)에 직접 라우팅되거나 결합될 수 있는 복수의 출력을 제공한다. 예를 들어, 프로그램 가능 IC(602)의 I/O 핀은 인터페이스(660, 662, 666) 및 디버그 포트(120) 사이에 공유될 수 있다. 사용자는 구성 데이터 스트림을 통하여 인터페이스(660-666) 및 디버그 포트(120) 중 어느 것이 사용되어야 하고 따라서 멀티플렉서(670)를 통하여 프로그램 가능 IC(602)의 I/O 핀에 결합되어야 하는지 선택하도록 멀티플렉서(670)를 구성할 수 있다. I/O 서브시스템(650)은 또한 인터페이스(660-666)를 프로그램 가능 논리 서브시스템의 프로그램 가능 논리 회로에 연결하기 위한 패브릭 멀티플렉서 I/O(fabric multiplexer I/O, FMIO) 인터페이스(도시되지 않음)를 포함할 수도 있다. 추가적으로 또는 대안적으로, 프로그램 가능 논리 서브시스템(630)은 프로그램 가능 논리 내에서 하나 이상의 I/O 회로를 구현하도록 구성될 수 있다. 일부 구현에서, 프로그램 가능 IC(602)는 또한 전력 및/또는 안전 관리를 위한 다양한 회로를 갖는 서브시스템(640)을 포함할 수 있다. 예를 들어, 서브시스템(640)은 프로그램 가능 IC(602)의 다양한 서브시스템에 전력을 공급하는데 사용되는 하나 이상의 전압 도메인을 모니터링하고 유지하도록 구성된 전력 관리 유닛(646)을 포함할 수 있다. 일부 구현에서, 전력 관리 유닛(646)은 유휴 상태일 때 사용 중인 서브시스템의 전력을 디스에이블하지 않고 전력 소비를 줄이기 위하여 개별 서브시스템의 전력을 디스에이블할 수 있다. 전력/플랫폼 관리자용 디버그 인터페이스는 Memory 동작 코드를 통하여 Debug Packet Controller에 의해 직접 액세스될 수 있다. 이를 통하여 사용자는 플랫폼 관리 제어기에서 실행되는 펌웨어/코드를 디버깅할 수 있다.
서브시스템(640)은 또한 정확한 동작을 보장하기 위하여 서브시스템의 상태를 모니터링하는 안전 회로를 포함할 수 있다. 예를 들어, 서브시스템(640)은 (예를 들어, 상태 레지스터(644)에 표시된 바와 같이) 다양한 서브시스템의 상태를 모니터링하도록 구성된 하나 이상의 실시간 프로세서(642)를 포함할 수 있다. 실시간 프로세서(642)는 오류 검출에 응답하여 다수의 작업을 수행하도록 구성될 수 있다. 예를 들어, 일부 오류에 대하여, 실시간 프로세서(642)는 오류 검출에 응답하여 경고(alert)를 생성할 수 있다. 다른 예로서, 실시간 프로세서(642)는 정확한 동작으로 서브시스템을 복원하려고 시도하기 위하여 서브시스템을 리셋할 수 있다. 서브시스템(640)은 다양한 서브시스템을 상호 연결하는데 사용될 수 있는 스위치 네트워크(648)를 포함한다. 예를 들어, 스위치 네트워크(648)는 다양한 서브시스템(610, 630 및 640)을 I/O 서브시스템(650)의 다양한 인터페이스에 연결하도록 구성될 수 있다. 일부 애플리케이션에서, 스위치 네트워크(648)는 또한 모니터링될 서브시스템으로부터 실시간 프로세서(642)를 격리하는데 사용될 수 있다. 실시간 프로세서(642)가 다른 서브시스템에서 발생하는 오류의 영향을 받지 않도록 보장하기 위하여 이러한 격리가 특정 애플리케이션 표준(예를 들어, IEC-61508 SIL3 또는 ISO-26262 표준)에 의해 요구될 수 있다.
일 예에서, 회로 장치가 제공된다. 이러한 회로 장치는 SoC(system-on-chip) 상에 배치되고 복수의 스트리밍 디버그 패킷을 수신하고 저장하도록 구성된 하나 이상의 입력 버퍼; SoC 상에 배치된 하나 이상의 응답 버퍼; SoC 상에 배치되고 하나 이상의 입력 버퍼 및 하나 이상의 응답 버퍼에 결합된 트랜잭션 제어 회로를 포함할 수 있으며, 여기서 트랜잭션 제어 회로는 디버그 패킷 내의 동작 코드를 디코딩하고, SoC 상에서 복수의 서브시스템의 서브시스템에서 스토리지 회로에 액세스하기 위하여 디버그 패킷 내의 어드레스로부터 복수의 인터페이스 회로의 인터페이스 회로를 결정하고, 동작 코드에 따라 스토리지 회로에 액세스하는 요청을 상기 인터페이스 회로를 통하여 발행하고, 복수의 인터페이스 회로로부터 수신된 응답 및 데이터를 하나 이상의 응답 버퍼에 저장함으로써, 하나 이상의 입력 버퍼 내의 각각의 디버그 패킷을 처리하도록 구성된다.
그러한 회로 장치에서, 트랜잭션 제어 회로는 제1 모드에서, 입력 디버그 패킷에 응답하여, 입력 디버그 패킷에 대하여 하나 이상의 입력 버퍼에서 공간이 이용 가능한지 여부를 결정하고, 공간이 이용 가능하다는 결정에 응답하여, 입력 디버그 패킷을 하나 이상의 입력 버퍼 중 하나에 저장하고; 제2 모드에서, 입력 버퍼 내의 디버그 패킷에 대하여, 디버그 패킷 내의 동작 코드를 디코딩하고, 인터페이스 회로를 결정하고, 요청을 발행하는 것을 여러 번 반복하도록 또한 구성될 수 있다.
그러한 일부 회로 장치에서, 디버그 패킷은 복수의 동작 코드를 포함할 수 있고, 트랜잭션 제어 회로는 디버그 패킷 내의 복수의 동작 코드의 각 동작 코드에 대하여, 동작 코드를 디코딩하고, 인터페이스 회로를 결정하고, 요청을 발행하는 것을 반복하도록 또한 구성될 수 있다.
그러한 일부 회로 장치에서, 트랜잭션 제어 회로는 조건 레지스터를 포함할 수 있고, 트랜잭션 제어 회로는 테스트-메모리(test-memory) 동작 코드를 지정하고, 테스트-메모리 동작 코드와 연관된 마스크 값 및 비교 값을 지정하는 디버그 패킷 내의 동작 코드에 응답하여, 스토리지 회로로부터 데이터 값을 읽기 위하여 읽기 요청을 발행하고; 피연산자로서 데이터 값 및 마스크 값을 사용하여 논리 함수 - 상기 논리 함수는 결과 값을 생성함 - 를 수행하고; 결과 값을 비교 값과 비교하고; 결과 값이 비교 값과 동일한 것에 응답하여 조건 레지스터를 제1 값으로 설정하고; 결과 값이 비교 값과 동일하지 않은 것에 응답하여 조건 레지스터를 제2 값으로 설정하도록 또한 구성될 수 있다.
그러한 일부 회로 장치에서, 트랜잭션 제어 회로는 조건 레지스터를 포함할 수 있고, 트랜잭션 제어 회로는 테스트-조건(test-condition) 동작 코드를 지정하고, 테스트-조건 동작 코드와 연관된 마스크 값 및 비교 값을 지정하는 디버그 패킷 내의 동작 코드에 응답하여, 조건 레지스터로부터 데이터 값을 읽고; 피연산자로서 데이터 값 및 마스크 값을 사용하여 논리 함수 - 상기 논리 함수는 결과 값을 생성함 - 를 수행하고; 결과 값을 비교 값과 비교하고; 결과 값이 비교 값과 동일한 것에 응답하여 조건 레지스터를 제1 값으로 설정하고; 결과 값이 비교 값과 동일하지 않은 것에 응답하여 조건 레지스터를 제2 값으로 설정하도록 또한 구성될 수 있다.
그러한 일부 회로 장치에서, 디버그 패킷은 복수의 동작 코드를 포함할 수 있고, 동작 코드 중 하나는 스킵(skip) 동작 코드이고, 트랜잭션 제어 회로는 조건 레지스터를 포함하고, 트랜잭션 제어 회로는 스킵 동작 코드를 디코딩하고, 조건 레지스터 내의 값이 디버그 패킷 내의 스킵 동작 코드와 연관된 조건 값과 동일한 것에 응답하여, 디버그 패킷 내의 스킵 동작 코드를 뒤따르는 하나 이상의 동작 코드의 처리를 바이패스하도록 또한 구성될 수 있다.
그러한 일부 회로 장치에서, 트랜잭션 제어 회로는 인터페이스 회로의 결정에 있어서, 디버그 패킷 내의 어드레스가 SoC 상의 프로세서 서브시스템의 스토리지 회로, SoC 상의 프로그램 가능 논리 서브시스템의 스토리지 회로, 또는 SoC 상의 수학 엔진 회로의 스토리지 회로를 참조하는지 여부를 결정하도록 또한 구성될 수 있다.
그러한 일부 회로 장치는 트랜잭션 제어 회로에 결합되고 하나 이상의 응답 버퍼에 결합되고 복수의 스트리밍 디버그 패킷을 수신하도록 결합되는 출력 선택 회로; 및 SoC 상에 배치되고 트랜잭션 제어 회로에 결합되고 하나 이상의 입력 버퍼에 저장하기 전에 복수의 스트리밍 디버그 패킷을 수신하도록 결합된 디코더 회로를 더 포함할 수 있고, 디코더 회로는 각 디버그 패킷 내의 대상 식별자를 SoC의 SoC 식별자와 비교하고, 대상 식별자가 디버그 패킷들 중 하나 내의 SoC 식별자와 동일하지 않은 것에 응답하여 트랜잭션 제어 회로에 시그널링하도록 구성될 수 있고, 트랜잭션 제어 회로는 대상 식별자가 SoC 식별자와 동일하지 않다고 표시하는 신호에 응답하여, 하나 이상의 입력 버퍼에 디버그 패킷들 중 상기 하나를 저장하는 것을 바이패스하고, 출력을 위하여 디버그 패킷들 중 상기 하나를 선택하도록 출력 선택 회로를 제어하도록 또한 구성될 수 있다.
다른 예에서, SoC(System-on-chip)가 제공될 수 있다. 그러한 SoC는 집적 회로(IC) 다이; IC 다이 상에 배치된 복수의 회로 서브시스템; 복수의 회로 서브시스템에서 스토리지 회로에 액세스하도록 구성된 복수의 인터페이스 회로; 및 IC 다이 상에 배치되고 복수의 인터페이스 회로에 결합된 디버그 회로를 포함하고, 디버그 회로는 복수의 스트리밍 디버그 패킷을 수신하고 저장하도록 구성된 하나 이상의 입력 버퍼; 하나 이상의 응답 버퍼; 하나 이상의 입력 버퍼 및 하나 이상의 응답 버퍼에 결합된 트랜잭션 제어 회로를 포함하고, 여기서 트랜잭션 제어 회로는 디버그 패킷 내의 동작 코드를 디코딩하고, 복수의 회로 서브시스템 중 하나에서 하나 이상의 스토리지 회로에 액세스하기 위하여 디버그 패킷 내의 어드레스로부터 복수의 인터페이스 회로 중 하나의 인터페이스 회로를 결정하고, 동작 코드에 따라 하나 이상의 스토리지 회로에 액세스하는 요청을 상기 하나의 인터페이스 회로를 통하여 발행하고, 복수의 인터페이스 회로로부터 수신된 응답 및 데이터를 하나 이상의 응답 버퍼에 저장함으로써, 하나 이상의 입력 버퍼 내의 각각의 디버그 패킷을 처리하도록 구성될 수 있다.
그러한 일부 SoC에서, 트랜잭션 제어 회로는 제1 모드에서, 입력 디버그 패킷에 응답하여, 입력 디버그 패킷에 대하여 하나 이상의 입력 버퍼에서 공간이 이용 가능한지 여부를 결정하고, 공간이 이용 가능하다는 결정에 응답하여, 입력 디버그 패킷을 하나 이상의 입력 버퍼 중 하나에 저장하고; 제2 모드에서, 입력 버퍼 내의 디버그 패킷에 대하여, 디버그 패킷 내의 동작 코드를 디코딩하고, 인터페이스 회로를 결정하고, 요청을 발행하는 것을 여러 번 반복하도록 또한 구성될 수 있다.
그러한 일부 SoC에서, 디버그 패킷은 복수의 동작 코드를 포함할 수 있고, 트랜잭션 제어 회로는 디버그 패킷의 복수의 동작 코드의 각 동작 코드에 대하여 동작 코드를 디코딩하고, 인터페이스 회로를 결정하고, 요청을 발행하는 것을 반복하도록 또한 구성될 수 있다.
러한 일부 SoC에서, 트랜잭션 제어 회로는 조건 레지스터를 포함할 수 있고, 트랜잭션 제어 회로는 테스트-메모리(test-memory) 동작 코드를 지정하고, 테스트-메모리 동작 코드와 연관된 마스크 값 및 비교 값을 지정하는 디버그 패킷 내의 동작 코드에 응답하여, 스토리지 회로로부터 데이터 값을 읽기 위하여 읽기 요청을 발행하고; 피연산자로서 데이터 값 및 마스크 값을 사용하여 논리 함수 - 논리 함수는 결과 값을 생성함 - 를 수행하고; 결과 값을 비교 값과 비교하고; 결과 값이 비교 값과 동일한 것에 응답하여 조건 레지스터를 제1 값으로 설정하고; 결과 값이 비교 값과 동일하지 않은 것에 응답하여 조건 레지스터를 제2 값으로 설정하도록 또한 구성될 수 있다.
그러한 일부 SoC에서, 트랜잭션 제어 회로는 조건 레지스터를 포함할 수 있고, 트랜잭션 제어 회로는 테스트-조건(test-condition) 동작 코드를 지정하고, 테스트-조건 동작 코드와 연관된 마스크 값 및 비교 값을 지정하는 디버그 패킷 내의 동작 코드에 응답하여, 조건 레지스터로부터 데이터 값을 읽고; 피연산자로서 데이터 값 및 마스크 값을 사용하여 논리 함수 - 논리 함수는 결과 값을 생성함 - 를 수행하고; 결과 값을 비교 값과 비교하고; 결과 값이 비교 값과 동일한 것에 응답하여 조건 레지스터를 제1 값으로 설정하고; 결과 값이 비교 값과 동일하지 않은 것에 응답하여 조건 레지스터를 제2 값으로 설정하도록 또한 구성될 수 있다.
그러한 일부 SoC에서, 디버그 패킷은 복수의 동작 코드를 포함할 수 있고, 동작 코드 중 하나는 스킵(skip) 동작 코드이고, 트랜잭션 제어 회로는 조건 레지스터를 포함하고, 트랜잭션 제어 회로는 스킵 동작 코드를 디코딩하고 조건 레지스터 내의 값이 디버그 패킷 내의 스킵 동작 코드와 연관된 조건 값과 동일한 것에 응답하여, 디버그 패킷 내의 스킵 동작 코드를 뒤따르는 하나 이상의 동작 코드의 처리를 바이패스하도록 또한 구성될 수 있다.
그러한 일부 SoC에서, 트랜잭션 제어 회로는 인터페이스 회로의 결정에 있어서 디버그 패킷 내의 어드레스가 SoC 상의 프로세서 서브시스템의 스토리지 회로, SoC 상의 프로그램 가능 논리 서브시스템의 스토리지 회로, 또는 SoC 상의 수학 엔진 회로의 스토리지 회로를 참조하는지 여부를 결정하도록 또한 구성될 수 있다.
그러한 일부 SoC는 트랜잭션 제어 회로에 결합되고 하나 이상의 응답 버퍼에 결합되고 복수의 스트리밍 디버그 패킷을 수신하도록 결합되는 출력 선택 회로; 및 SoC 상에 배치되고 트랜잭션 제어 회로에 결합되고 하나 이상의 입력 버퍼에 저장하기 전에 복수의 스트리밍 디버그 패킷을 수신하도록 결합된 디코더 회로를 더 포함할 수 있고, 디코더 회로는 각 디버그 패킷 내의 대상 식별자를 SoC의 SoC 식별자와 비교하고 대상 식별자가 디버그 패킷 중 하나 내의 SoC 식별자와 동일하지 않은 것에 응답하여 트랜잭션 제어 회로에 시그널링하도록 구성될 수 있고, 트랜잭션 제어 회로는 대상 식별자를 표시하는 신호가 SoC 식별자와 동일하지 않은 것에 응답하여, 하나 이상의 입력 버퍼에 디버그 패킷 중 하나를 저장하는 것을 바이패스하고, 출력 선택 회로가 출력을 위하여 디버그 패킷 중 상기 하나를 선택하도록 제어하도록 또한 구성될 수 있다.
또 다른 예에서, 방법이 제공될 수 있다. 그러한 방법은 복수의 스트리밍 디버그 패킷을 수신하고, 시스템 온칩(SoC) 상에 배치된 하나 이상의 입력 버퍼에 저장하는 단계; 및 상기 SoC 상에 배치된 트랜잭션 제어 회로에 의하여 상기 하나 이상의 입력 버퍼 내의 각각의 디버그 패킷을 처리하는 단계를 포함하고, 상기 처리하는 단계는 상기 디버그 패킷 내의 동작 코드를 디코딩하는 단계, 상기 SoC 상에 배치된 복수의 회로 서브시스템 중 하나에서 하나 이상의 스토리지 회로에 액세스하기 위하여 상기 SoC 상에 배치된 복수의 인터페이스 회로 중 하나의 인터페이스 회로를 상기 디버그 패킷 내의 어드레스로부터 결정하는 단계, 상기 동작 코드에 따라 상기 하나 이상의 스토리지 회로에 액세스하는 요청을 상기 하나의 인터페이스 회로를 통하여 발행하는 단계, 및 상기 복수의 인터페이스 회로로부터 수신된 응답 및 데이터를 상기 SoC 상에 배치된 하나 이상의 응답 버퍼에 저장하는 단계를 포함한다.
그러한 일부 방법은 제1 모드에서, 입력 디버그 패킷에 응답하여, 상기 입력 디버그 패킷에 대하여 상기 하나 이상의 입력 버퍼에서 공간이 이용 가능한지 여부를 결정하고, 공간이 이용 가능하다는 결정에 응답하여, 상기 입력 디버그 패킷을 상기 하나 이상의 입력 버퍼 중 하나에 저장하는 단계; 및 제2 모드에서, 상기 입력 버퍼 내의 디버그 패킷에 대하여, 상기 디버그 패킷 내의 동작 코드를 디코딩하고, 상기 인터페이스 회로를 결정하고, 상기 요청을 발행하는 것을 여러 번 반복하는 단계를 더 포함할 수 있다.
그러한 일부 방법에서, 상기 디버그 패킷은 복수의 동작 코드를 포함할 수 있고, 상기 방법은 상기 디버그 패킷 내의 복수의 동작 코드의 각 동작 코드에 대하여, 상기 동작 코드를 디코딩하고, 상기 인터페이스 회로를 결정하고, 상기 요청을 발행하는 것을 반복하는 단계를 더 포함한다.
그러한 일부 방법에서, 상기 인터페이스 회로를 결정하는 단계는, 상기 디버그 패킷 내의 어드레스가 상기 SoC 상의 프로세서 서브시스템의 스토리지 회로, 상기 SoC 상의 프로그램 가능 논리 서브시스템의 스토리지 회로, 또는 상기 SoC 상의 수학 엔진 회로의 스토리지 회로를 참조하는지 여부를 결정하는 단계를 더 포함할 수 있다.
일부 경우에 측면 및 특징이 개별 도면으로 설명될 수 있지만, 조합이 명시 적으로 도시되지 않거나 조합으로 명시적으로 설명되지 않더라도 한 도면의 특징이 다른 도면의 특징과 연결될 수 있음을 이해할 수 있을 것이다.
개시된 회로 및 방법은 SoC를 디버깅하기 위한 다양한 시스템에 적용할 수 있는 것으로 생각된다. 다른 측면 및 특징은 명세서를 고려하여 당업자에게 명백 할 것이다. 회로 및 방법은 소프트웨어를 실행하도록 구성된 하나 이상의 프로세서, ASIC(application specific integrated circuit)으로서 또는 프로그램 가능 논리 디바이스 상의 논리로서 구현될 수 있다. 명세서 및 도면은 단지 예로서 고려되며, 본 발명의 진정한 범위는 다음의 청구범위에 의해 표시되는 의도이다.

Claims (12)

  1. 회로 장치(circuit arrangement)에 있어서,
    시스템 온칩(SoC) 상에 배치되고 복수의 스트리밍 디버그 패킷을 수신하고 저장하도록 구성된 하나 이상의 입력 버퍼;
    상기 SoC에 배치된 하나 이상의 응답 버퍼; 및
    상기 SoC 상에 배치되고, 상기 하나 이상의 입력 버퍼 및 상기 하나 이상의 응답 버퍼에 결합된 트랜잭션 제어 회로를 포함하고,
    상기 트랜잭션 제어 회로는:
    상기 디버그 패킷 내의 동작 코드(operation code)를 디코딩하고,
    상기 SoC 상의 복수의 서브시스템의 서브시스템에서 스토리지 회로에 액세스하기 위하여 상기 디버그 패킷 내의 어드레스로부터 복수의 인터페이스 회로의 인터페이스 회로를 결정하고,
    상기 동작 코드에 따라 상기 스토리지 회로에 액세스하는 요청을 상기 인터페이스 회로를 통하여 발행하고,
    상기 복수의 인터페이스 회로로부터 수신된 응답 및 데이터를 상기 하나 이상의 응답 버퍼에 저장함으로써,
    상기 하나 이상의 입력 버퍼 내의 각각의 디버그 패킷을 처리하도록 구성되는 것인 회로 장치.
  2. 제1항에 있어서, 상기 트랜잭션 제어 회로는:
    제1 모드에서,
    입력 디버그 패킷에 응답하여, 상기 입력 디버그 패킷에 대하여 하나 이상의 입력 버퍼에서 공간이 이용 가능한지 여부를 결정하고,
    공간이 이용 가능하다는 결정에 응답하여, 상기 입력 디버그 패킷을 상기 하나 이상의 입력 버퍼 중 하나에 저장하고;
    제2 모드에서,
    상기 입력 버퍼 내의 디버그 패킷에 대하여, 상기 디버그 패킷 내의 동작 코드를 디코딩하고, 상기 인터페이스 회로를 결정하고, 상기 요청을 발행하는 것을 여러 번 반복하도록 구성되는 것인 회로 장치.
  3. 제1항 또는 제3항에 있어서, 상기 디버그 패킷은 복수의 동작 코드를 포함하고,
    상기 트랜잭션 제어 회로는 상기 디버그 패킷 내의 복수의 동작 코드의 각 동작 코드에 대하여, 상기 동작 코드를 디코딩하고, 상기 인터페이스 회로를 결정하고, 상기 요청을 발행하는 것을 반복하도록 또한 구성되는 것인 회로 장치.
  4. 제1항 내지 제3항 중 어느 한 항에 있어서, 상기 트랜잭션 제어 회로는 조건 레지스터를 포함하고,
    상기 트랜잭션 제어 회로는:
    테스트-메모리(test-memory) 동작 코드를 지정하고, 상기 테스트-메모리 동작 코드와 연관된 마스크 값 및 비교 값을 지정하는 상기 디버그 패킷 내의 동작 코드에 응답하여,
    상기 스토리지 회로로부터 데이터 값을 읽기 위하여 읽기 요청을 발행하고;
    피연산자로서 상기 데이터 값 및 상기 마스크 값을 사용하여 논리 함수 - 상기 논리 함수는 결과 값을 생성함 - 를 수행하고;
    상기 결과 값을 상기 비교 값과 비교하고;
    상기 결과 값이 상기 비교 값과 동일한 것에 응답하여 상기 조건 레지스터를 제1 값으로 설정하고;
    상기 결과 값이 상기 비교 값과 동일하지 않은 것에 응답하여 상기 조건 레지스터를 제2 값으로 설정하도록 또한 구성되는 것인 회로 장치.
  5. 제1항 내지 제3항 중 어느 한 항에 있어서, 상기 트랜잭션 제어 회로는 조건 레지스터를 포함하고,
    상기 트랜잭션 제어 회로는:
    테스트-조건(test-condition) 동작 코드를 지정하고, 상기 테스트-조건 동작 코드와 연관된 마스크 값 및 비교 값을 지정하는 상기 디버그 패킷 내의 동작 코드에 응답하여,
    상기 조건 레지스터로부터 데이터 값을 읽고;
    피연산자로서 상기 데이터 값 및 상기 마스크 값을 사용하여 논리 함수 - 상기 논리 함수는 결과 값을 생성함 - 를 수행하고;
    상기 결과 값을 상기 비교 값과 비교하고;
    상기 결과 값이 상기 비교 값과 동일한 것에 응답하여 상기 조건 레지스터를 제1 값으로 설정하고;
    상기 결과 값이 상기 비교 값과 동일하지 않은 것에 응답하여 상기 조건 레지스터를 제2 값으로 설정하도록 또한 구성되는 것인 회로 장치.
  6. 제1항 내지 제5항 중 어느 한 항에 있어서, 상기 디버그 패킷은 복수의 동작 코드를 포함하고, 상기 동작 코드 중 하나는 스킵(skip) 동작 코드이고, 상기 트랜잭션 제어 회로는 조건 레지스터를 포함하고, 상기 트랜잭션 제어 회로는:
    상기 스킵 동작 코드를 디코딩하고, 상기 조건 레지스터 내의 값이 상기 디버그 패킷 내의 스킵 동작 코드와 연관된 조건 값과 동일한 것에 응답하여, 상기 디버그 패킷 내의 스킵 동작 코드를 뒤따르는 하나 이상의 동작 코드의 처리를 바이패스(bypass)하도록 또한 구성되는 것인 회로 장치.
  7. 제1항 내지 제7항 중 어느 한 항에 있어서,
    상기 트랜잭션 제어 회로는 상기 인터페이스 회로의 결정에 있어서, 상기 디버그 패킷 내의 어드레스가 상기 SoC 상의 프로세서 서브시스템의 스토리지 회로, 상기 SoC 상의 프로그램 가능 논리 서브시스템의 스토리지 회로, 또는 상기 SoC 상의 수학 엔진 회로의 스토리지 회로를 참조하는지 여부를 결정하도록 또한 구성되는 것인 회로 장치.
  8. 제1항 내지 제7항 중 어느 한 항에 있어서,
    상기 트랜잭션 제어 회로에 결합되고, 상기 하나 이상의 응답 버퍼에 결합되고, 상기 복수의 스트리밍 디버그 패킷을 수신하도록 결합되는 출력 선택 회로; 및
    상기 SoC 상에 배치되고, 상기 트랜잭션 제어 회로에 결합되고, 상기 하나 이상의 입력 버퍼에 저장하기 전에 상기 복수의 스트리밍 디버그 패킷을 수신하도록 결합된 디코더 회로를 더 포함하고,
    상기 디코더 회로는:
    각 디버그 패킷 내의 대상 식별자를 상기 SoC의 SoC 식별자와 비교하고,
    상기 대상 식별자가 상기 디버그 패킷 중 하나 내의 SoC 식별자와 동일하지 않은 것에 응답하여 상기 트랜잭션 제어 회로에 시그널링하도록 구성되고,
    상기 트랜잭션 제어 회로는:
    상기 대상 식별자를 표시하는 신호가 상기 SoC 식별자와 동일하지 않은 것에 응답하여, 상기 하나 이상의 입력 버퍼에 상기 디버그 패킷 중 하나를 저장하는 것을 바이패스하고, 출력 선택 회로가 출력을 위하여 상기 디버그 패킷 중 상기 하나를 선택하도록 제어하도록 또한 구성되는 것인 회로 장치.
  9. 방법에 있어서,
    복수의 스트리밍 디버그 패킷을 수신하고, 시스템 온칩(SoC) 상에 배치된 하나 이상의 입력 버퍼에 저장하는 단계; 및
    상기 SoC 상에 배치된 트랜잭션 제어 회로에 의하여 상기 하나 이상의 입력 버퍼 내의 각각의 디버그 패킷을 처리하는 단계를 포함하고,
    상기 처리하는 단계는:
    상기 디버그 패킷 내의 동작 코드(operation code)를 디코딩하는 단계,
    상기 SoC 상에 배치된 복수의 회로 서브시스템 중 하나에서 하나 이상의 스토리지 회로에 액세스하기 위하여 상기 SoC 상에 배치된 복수의 인터페이스 회로 중 하나의 인터페이스 회로를 상기 디버그 패킷 내의 어드레스로부터 결정하는 단계,
    상기 동작 코드에 따라 상기 하나 이상의 스토리지 회로에 액세스하는 요청을 상기 하나의 인터페이스 회로를 통하여 발행하는 단계, 및
    상기 복수의 인터페이스 회로로부터 수신된 응답 및 데이터를 상기 SoC 상에 배치된 하나 이상의 응답 버퍼에 저장하는 단계를 포함하는 것인 방법.
  10. 제9항에 있어서,
    제1 모드에서,
    입력 디버그 패킷에 응답하여, 상기 입력 디버그 패킷에 대하여 상기 하나 이상의 입력 버퍼에서 공간이 이용 가능한지 여부를 결정하고,
    공간이 이용 가능하다는 결정에 응답하여, 상기 입력 디버그 패킷을 상기 하나 이상의 입력 버퍼 중 하나에 저장하는 단계; 및
    제2 모드에서,
    상기 입력 버퍼 내의 디버그 패킷에 대하여, 상기 디버그 패킷 내의 동작 코드를 디코딩하고, 상기 인터페이스 회로를 결정하고, 상기 요청을 발행하는 것을 여러 번 반복하는 단계를 더 포함하는 것인 방법.
  11. 제9항 또는 제10항에 있어서, 상기 디버그 패킷은 복수의 동작 코드를 포함하고,
    상기 방법은 상기 디버그 패킷 내의 복수의 동작 코드의 각 동작 코드에 대하여, 상기 동작 코드를 디코딩하고, 상기 인터페이스 회로를 결정하고, 상기 요청을 발행하는 것을 반복하는 단계를 더 포함하는 것인 방법.
  12. 제9항 내지 제11항 중 어느 한 항에 있어서, 상기 인터페이스 회로를 결정하는 단계는, 상기 디버그 패킷 내의 어드레스가 상기 SoC 상의 프로세서 서브시스템의 스토리지 회로, 상기 SoC 상의 프로그램 가능 논리 서브시스템의 스토리지 회로, 또는 상기 SoC 상의 수학 엔진 회로의 스토리지 회로를 참조하는지 여부를 결정하는 단계를 포함하는 것인 방법.
KR1020207030487A 2018-04-03 2019-04-01 디버그 제어기 회로 KR20200139714A (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US15/944,137 2018-04-03
US15/944,137 US10789153B2 (en) 2018-04-03 2018-04-03 Debug controller circuit
PCT/US2019/025146 WO2019195149A1 (en) 2018-04-03 2019-04-01 Debug controller circuit

Publications (1)

Publication Number Publication Date
KR20200139714A true KR20200139714A (ko) 2020-12-14

Family

ID=66175509

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020207030487A KR20200139714A (ko) 2018-04-03 2019-04-01 디버그 제어기 회로

Country Status (6)

Country Link
US (1) US10789153B2 (ko)
EP (1) EP3762830B1 (ko)
JP (1) JP7247213B2 (ko)
KR (1) KR20200139714A (ko)
CN (1) CN112292670B (ko)
WO (1) WO2019195149A1 (ko)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20230039846A (ko) * 2021-09-14 2023-03-22 테크위드유 주식회사 효율적 채널 제어를 지원하는 프로브카드 용 pmic와 신호용 스위치 ic

Families Citing this family (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR102376750B1 (ko) * 2018-09-13 2022-03-21 한국전자통신연구원 디버깅을 위한 네트워크를 포함하는 시스템 온 칩
US10656202B1 (en) * 2018-09-21 2020-05-19 Xilinx, Inc. Electronic device including integrated circuit with debug capabilities
US11442104B1 (en) 2019-02-25 2022-09-13 Marvell Asia Pte, Ltd. Configurable integrated logic analyzer
CN112131174A (zh) * 2019-06-25 2020-12-25 北京百度网讯科技有限公司 支持在多个芯片之间通信的方法、装置、电子设备和计算机存储介质
US11250167B2 (en) * 2019-09-26 2022-02-15 Intel Corporation Secure external SoC debugging
CN110851393B (zh) * 2019-11-15 2020-12-11 浪潮集团有限公司 一种带有Aurora接口的USB转换控制板卡及方法
US11443071B2 (en) * 2020-02-13 2022-09-13 SiFive, Inc. Secure debug architecture
US10949586B1 (en) * 2020-07-01 2021-03-16 Xilinx, Inc. Post-synthesis insertion of debug cores
US20220198110A1 (en) * 2020-12-23 2022-06-23 Intel Corporation Debugging architecture for system in package composed of multiple semiconductor chips
US20220293170A1 (en) * 2021-03-10 2022-09-15 Invention And Collaboration Laboratory Pte. Ltd. Integrated scaling and stretching platform for optimizing monolithic integration and/or heterogeneous integration in a single semiconductor die
CN115220769A (zh) * 2021-04-16 2022-10-21 瑞昱半导体股份有限公司 实时配置固件数据的方法与调试装置
US20220374326A1 (en) * 2021-05-20 2022-11-24 Apple Inc. Debug Trace Fabric for Integrated Circuit

Family Cites Families (30)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6067407A (en) * 1995-06-30 2000-05-23 Canon Information Systems, Inc. Remote diagnosis of network device over a local area network
US6212650B1 (en) 1997-11-24 2001-04-03 Xilinx, Inc. Interactive dubug tool for programmable circuits
GB9805488D0 (en) 1998-03-13 1998-05-13 Sgs Thomson Microelectronics Microcomputer
US6665816B1 (en) 1999-10-01 2003-12-16 Stmicroelectronics Limited Data shift register
US6584587B1 (en) * 1999-10-14 2003-06-24 Sony Corporation Watchdog method and apparatus
US6985980B1 (en) 2000-11-03 2006-01-10 Xilinx, Inc. Diagnostic scheme for programmable logic in a system on a chip
JP2003150403A (ja) 2001-11-06 2003-05-23 Arc Internatl (Uk) Ltd データプロセッサの観測方法及び装置
US7107494B1 (en) 2003-04-29 2006-09-12 Advanced Micro Devices, Inc. Bus architecture using debug packets to monitor transactions on an internal data processor bus
JP4494899B2 (ja) * 2004-07-29 2010-06-30 富士通株式会社 プロセッサデバッグ装置およびプロセッサデバッグ方法
US8843675B2 (en) * 2007-03-15 2014-09-23 Broadcom Corporation Pipelined buffer interconnect
US7870436B2 (en) * 2007-04-25 2011-01-11 Broadcom Corporation System and method for tracing acceleration in an embedded device
US8095834B2 (en) * 2008-10-30 2012-01-10 Micron Technology, Inc. Macro and command execution from memory array
US8327200B1 (en) 2009-04-02 2012-12-04 Xilinx, Inc. Integrated circuit providing improved feed back of a signal
US8595561B1 (en) 2010-10-27 2013-11-26 Xilinx, Inc. Integrated debugging within an integrated circuit having an embedded processor
US8595555B1 (en) 2011-01-13 2013-11-26 Xilinx, Inc. Debugging an integrated circuit with an embedded processor
WO2013048528A1 (en) 2011-10-01 2013-04-04 Intel Corporation Packetizing jtag across industry standard interfaces
US9158661B2 (en) * 2012-02-15 2015-10-13 Apple Inc. Enhanced debugging for embedded devices
US9632895B2 (en) * 2012-06-18 2017-04-25 Intel Corporation Apparatus, system and method for a common unified debug architecture for integrated circuits and SoCs
US9959186B2 (en) * 2012-11-19 2018-05-01 Teradyne, Inc. Debugging in a semiconductor device test environment
GB2506825B (en) * 2014-02-12 2014-10-15 Ultrasoc Technologies Ltd Functional testing of an integrated circuit chip
US9483373B2 (en) * 2014-02-14 2016-11-01 Freescale Semiconductor, Inc. Debug configuration tool with layered graphical user interface
US9329946B2 (en) * 2014-02-27 2016-05-03 International Business Machines Corporation Salvaging hardware transactions
US9640270B2 (en) * 2014-08-12 2017-05-02 Sandisk Technologies Llc System and method of using multiple read operations
KR102229024B1 (ko) * 2014-12-03 2021-03-17 삼성전자주식회사 스스로 에러를 검출하고 로그를 저장할 수 있는 데이터 저장 장치와 이를 포함하는 시스템
US10275234B2 (en) * 2015-05-28 2019-04-30 Sap Se Selective bypass of code flows in software program
CN106326176A (zh) * 2015-06-17 2017-01-11 深圳市创成微电子有限公司 一种spi接口调试方法
GB2541216B (en) 2015-08-12 2021-03-17 Ultrasoc Technologies Ltd Reconfiguring debug circuitry
US10078568B1 (en) * 2015-11-30 2018-09-18 Amazon Technologies, Inc. Debugging a computing device
WO2017184265A1 (en) 2016-04-21 2017-10-26 Intel Corporation Apparatus and method for performing trace/debug data compression
CN107704346B (zh) * 2017-08-08 2021-07-27 湖南国科微电子股份有限公司 Soc芯片调试方法及调试系统

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20230039846A (ko) * 2021-09-14 2023-03-22 테크위드유 주식회사 효율적 채널 제어를 지원하는 프로브카드 용 pmic와 신호용 스위치 ic

Also Published As

Publication number Publication date
US10789153B2 (en) 2020-09-29
EP3762830A1 (en) 2021-01-13
JP7247213B2 (ja) 2023-03-28
JP2021531530A (ja) 2021-11-18
WO2019195149A1 (en) 2019-10-10
EP3762830B1 (en) 2022-09-21
CN112292670A (zh) 2021-01-29
CN112292670B (zh) 2024-03-08
US20190303268A1 (en) 2019-10-03

Similar Documents

Publication Publication Date Title
US10789153B2 (en) Debug controller circuit
US9015542B2 (en) Packetizing JTAG across industry standard interfaces
JP5102644B2 (ja) 直接メモリ・アクセスを使用してプログラマブル論理装置を初期化するための方法、集積回路、システム及びコンピュータ・プログラム
US10802995B2 (en) Unified address space for multiple hardware accelerators using dedicated low latency links
KR102413593B1 (ko) 교착상태 방지를 위한 방법들 및 회로들
US10037301B2 (en) Circuits and methods for inter-processor communication
US20120072787A1 (en) Memory Controller with Loopback Test Interface
US10896119B1 (en) Common input/output interface for application and debug circuitry
CN114203248A (zh) 用于捕获和传输数据错误的电路和方法
US10078113B1 (en) Methods and circuits for debugging data bus communications
US11442844B1 (en) High speed debug hub for debugging designs in an integrated circuit
EP2435918B1 (en) Integrated circuit comprising trace logic and method for providing trace information
KR20220103931A (ko) 메모리와 분산된 계산 어레이 간의 데이터 전송
EP0840218B1 (en) An integrated circuit device and method of communication therewith
US6134481A (en) Message protocol
US10042692B1 (en) Circuit arrangement with transaction timeout detection
Kavianipour et al. A high-reliability PCIe communication system for small FPGAs
JP2008210366A (ja) 半導体集積回路
JPH0399337A (ja) データ処理ユニットの診断方法、データ処理ユニット、データ処理システム