KR20150008447A - 인터럽트 상태에 기초한 구성 가능한 브레이크포인트를 갖는 디바이스 - Google Patents

인터럽트 상태에 기초한 구성 가능한 브레이크포인트를 갖는 디바이스 Download PDF

Info

Publication number
KR20150008447A
KR20150008447A KR20147034076A KR20147034076A KR20150008447A KR 20150008447 A KR20150008447 A KR 20150008447A KR 20147034076 A KR20147034076 A KR 20147034076A KR 20147034076 A KR20147034076 A KR 20147034076A KR 20150008447 A KR20150008447 A KR 20150008447A
Authority
KR
South Korea
Prior art keywords
breakpoint
interrupt
unit
debug
service routine
Prior art date
Application number
KR20147034076A
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 KR20150008447A publication Critical patent/KR20150008447A/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/3636Software debugging by tracing the execution of the program
    • 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

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Computer Hardware Design (AREA)
  • Quality & Reliability (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Debugging And Monitoring (AREA)

Abstract

디버그 기능들을 갖는 프로세서 디바이스는, 중앙 처리 유닛, 인터럽트 제어기, 인터럽트가 발생했음을 표시하는 제 1 모드 또는 코드의 정상 실행을 표시하는 제 2 모드로 설정되도록 동작 가능한 상태 유닛, 및 상기 상태 유닛과 결합되고 그리고 구성 가능한 브레이크포인트를 포함하는 디버그 유닛 - 여기서, 상기 디바이스가 인터럽트 서비스 루틴에서 동작하는 경우에만 브레이크포인트가 활성화되는 조건이 설정될 수 있음 - 을 구비한다.

Description

인터럽트 상태에 기초한 구성 가능한 브레이크포인트를 갖는 디바이스{DEVICE HAVING CONFIGURABLE BREAKPOINT BASED ON INTERRUPT STATUS}
본 출원은, "DEVICE HAVING CONFIGURABLE BREAKPOINT BASED ON INTERRUPT STATUS"라는 명칭으로 2012년 5월 7일 출원된 미국 가출원 번호 61/643,707 호의 이익을 주장하며, 상기 미국 가출원은 그 전체가 본 출원에 통합된다.
본 개시는 프로세서 디바이스들에 관한 것으로, 특히 마이크로컨트롤러 디바이스들에 관한 것이다.
현대의 마이크로프로세서들 및 마이크로컨트롤러들은 소위 회로 내 디버거 또는 에뮬레이터 디바이스에 의해 실행중인 프로그램을 효율적으로 분석할 수 있게 하는 회로부를 포함한다. 이를 위해, 마이크로컨트롤러 또는 마이크로프로세서는 디버깅 기능들을 지원하는 내부의 회로부, 및 예를 들어 디버그 인터페이스로서 동작하기 위해 디바이스의 다수의 기능 핀들을 프로그래밍함으로써 활성화될 수 있는 특정 인터페이스를 제공한다. 보통 이러한 인터페이스는 실제 디바이스와 외부 디버거 또는 에뮬레이터 사이의 빠른 통신을 가능하게 하기 위해 고속 직렬 인터페이스로 구성될 수 있다. 따라서, 상기 디바이스 자체는 이 인터페이스를 활성화하지 않아 연관된 핀들이 다른 목적들에 사용될 수 있는 정상 동작 모드로 동작될 수 있고, 또한 외부 호스트 컴퓨터로부터 동작될 수 있고 그리고 이 외부 호스트 컴퓨터에 의해 동작될 수 있는 디버거들 또는 에뮬레이터들과 같은 각각의 외부 디바이스들과 데이터를 교환하기 위해 이 인터페이스를 이용하는 디버그 동작 모드로 동작될 수 있다. 상기 디버거들 또는 에뮬레이터들은 또한 프로그래머들로서 동작될 수 있으며, 여기서 프로그램은 동일한 디버그 인터페이스를 통해 타겟 디바이스 내로 전송된다. 따라서, 호스트 컴퓨터, 외부 디버거 또는 에뮬레이터는 저렴한 분석 및 디버깅 시스템을 형성한다.
현대의 프로세서들 및 마이크로컨트롤러들은 각각의 디바이스 내부에 확장 세트의 디버그 기능들을 제공한다. 예를 들어, 다수의 브레이크포인트(breakpoint)들이 디바이스 내에 설정될 수 있어 디바이스가 실제로 실시간으로 동작할 수 있게 하는데, 이 실시간 동작은 고속 직렬 인터페이스만을 이용할 때에는 외부 디버거를 사용해서는 불가능할 것이고, 따라서 본드-아웃(bond-out) 칩들 및 값비싼 디버그 회로부를 필요로 할 것이다. 그러나, 이 내부 디버그 회로부들의 기능성이 물론 실리콘 점유 면적의 제한된 양이나 다른 이유들로 인해 어느 정도 제한된다. 그러나, 이 유형의 브레이크포인트들은 단지 제한된 양의 구성만을 가능하게 한다.
따라서, 보다 플렉시블(flexible)한 디버깅을 할 수 있도록 마이크로컨트롤러 또는 마이크로프로세서 내부의 향상된 브레이크포인트 구성이 필요하다. 예를 들어, 인터럽트 상태에 기초하여 브레이크포인트의 구성을 가능하게 하는 것이 유리할 것이다. 다양한 실시예들에 따르면, 상기 브레이크포인트에 대한 이러한 구성 가능한 설정은 상기 브레이크포인트가 그의 상기 인터럽트 상태와의 매칭과 상기 인터럽트 상태에 있어서의 디바이스의 정지를 적임으로 할 수 있게(qualify) 한다.
일 실시예에 따르면, 디버그 기능들을 갖는 프로세서 디바이스는, 중앙 처리 유닛, 인터럽트 제어기, 인터럽트가 발생했음을 표시하는 제 1 모드 또는 코드의 정상 실행을 표시하는 제 2 모드로 설정되도록 동작 가능한 상태 유닛, 및 상기 상태 유닛과 결합되고 그리고 구성 가능한 브레이크포인트를 포함하는 디버그 유닛 - 여기서, 상기 디바이스가 인터럽트 서비스 루틴에서 동작하는 경우에만 브레이크포인트가 활성화되는 조건이 설정될 수 있음 - 을 포함할 수 있다.
추가 실시예에 따르면, 상기 상태 유닛은 최종 단계의 인터럽트 검출 유닛, 및 인터럽트 검출로부터의 리턴 유닛을 포함할 수 있다. 추가 실시예에 따르면, 상기 최종 단계의 인터럽트 검출 유닛은 상기 디바이스가 상기 인터럽트 서비스 루틴에 강제적으로 들어갈 때 인터럽트가 발생했음을 표시하는 로직 신호만을 생성할 수 있다. 추가 실시예에 따르면, 상기 상태 유닛은, 로직 1을 수신하는 제 1 입력부를 가지며 상기 최종 단계의 인터럽트 검출 유닛에 의해 제어되는 제 1 멀티플렉서; 제 1 입력부에서 로직 0을 수신하고, 상기 제 1 멀티플렉서의 출력부와 결합된 제 2 입력부를 갖고, 그리고 상기 인터럽트 검출로부터의 리턴 유닛에 의해 제어되는 제 2 멀티플렉서; 및 상기 제 2 멀티플렉서로부터 출력 신호를 수신하고 그리고 상기 제 1 멀티플렉서의 제 2 입력부와 결합된 출력부를 갖는 클록 제어 레지스터 - 상기 레지스터의 출력부는 상기 중앙 처리 유닛의 현재 인터럽트 상태를 표시함 - 를 더 포함할 수 있다. 추가 실시예에 따르면, 상기 레지스터는 D-플립-플롭일 수 있다. 추가 실시예에 따르면, 상기 디버그 유닛은 상기 디바이스가 인터럽트 서비스 루틴을 실행하고 있지 않을 때 브레이크포인트를 활성화하도록 추가로 구성될 수 있다. 추가 실시예에 따르면, 상기 디버그 유닛은 항상 브레이크포인트를 활성화하도록 추가로 구성될 수 있다. 추가 실시예에 따르면, 상기 디버그 유닛은 세 가지 동작 모드들 중 하나를 설정하기 위해 로직 게이트들을 포함하는 모드 선택 회로를 포함할 수 있으며, 여기서 제 1 모드는 상기 중앙 처리 유닛이 인터럽트 서비스 루틴을 실행할 때에만 브레이크포인트의 트리거링을 가능하게 하고, 제 2 모드는 상기 중앙 처리 유닛이 인터럽트 서비스 루틴을 실행하지 않을 때에만 브레이크포인트의 트리거링을 가능하게 하고, 그리고 제 3 모드는 항상 브레이크포인트의 트리거링을 가능하게 한다. 추가 실시예에 따르면, 상기 디바이스는 다음의 조건들, 명령어 어드레스; 명령어 어드레스 범위; 소정 어드레스로의 데이터 판독 액세스 및 소정 어드레스로의 데이터 기록 액세스 중 적어도 하나의 조건에 의해 브레이크포인트들이 정의될 수 있도록 구성된 브레이크포인트 구성 유닛을 포함할 수 있다. 추가 실시예에 따르면, 브레이크포인트에 대한 데이터 기록 액세스의 조건은 소정 데이터 어드레스의 데이터 값을 추가로 정의할 수 있다. 추가 실시예에 따르면, 프로그램의 실행이 상기 브레이크포인트에서 중지되기 전에 충족되는 것을 필요로 하는 브레이크포인트 발생들의 횟수가 정의될 수 있다. 추가 실시예에 따르면, 상기 디바이스는 프로그램의 실행 중지를 생성하기 위해 복수의 이벤트들을 결합하도록 동작 가능한 이벤트 결합기를 더 포함할 수 있다.
또 하나의 실시예에 따르면, 디버그 기능들을 갖는 프로세서 디바이스 내에서 실행된 코드를 디버깅하기 위한 방법은: 중앙 처리 유닛(CPU)에 의해 코드를 실행하는 단계; 디버그 유닛에 의해 상기 코드를 실행하는 동안 상기 CPU의 인터럽트 서비스 상태를 결정하는 단계; 상기 CPU가 인터럽트 서비스 루틴을 실행하고 있을 때에만 브레이크포인트가 활성화되도록 상기 디버그 유닛 내에서 상기 브레이크포인트를 구성하는 단계; 및 브레이크포인트의 발생시, 상기 CPU가 인터럽트 서비스 루틴 내의 명령어들을 실행하고 있는 경우, 상기 디버그 유닛 내의 상기 브레이크포인트만을 활성화시키는 단계를 포함할 수 있다.
상기 방법의 추가 실시예에 따르면, 상기 CPU의 상기 인터럽트 서비스 상태를 결정하기 위해, 상기 디버그 유닛은 인터럽트 서비스 루틴의 실행으로 이어지는 상기 CPU의 최종 단계의 인터럽트 상태를 결정하고, 그리고 인터럽트 명령어로부터의 리턴의 실행을 결정하도록 구성될 수 있다. 상기 방법의 추가 실시예에 따르면, 상기 디버그 유닛은 상기 디바이스가 인터럽트 서비스 루틴을 실행하고 있지 않을 때 브레이크포인트를 활성화하도록 추가로 구성될 수 있다. 상기 방법의 추가 실시예에 따르면, 상기 디버그 유닛은 항상 브레이크포인트를 활성화하도록 추가로 구성될 수 있다. 상기 방법의 추가 실시예에 따르면, 상기 방법은 상기 디버그 유닛의 동작 모드를 선택하는 단계를 더 포함할 수 있으며, 여기서 제 1 모드는 상기 중앙 처리 유닛이 인터럽트 서비스 루틴을 실행할 때에만 브레이크포인트의 트리거링을 가능하게 하고, 제 2 모드는 상기 중앙 처리 유닛이 인터럽트 서비스 루틴을 실행하지 않을 때에만 브레이크포인트의 트리거링을 가능하게 하고, 그리고 제 3 모드는 항상 브레이크포인트의 트리거링을 가능하게 한다. 상기 방법의 추가 실시예에 따르면, 상기 방법은 다음의 조건들, 명령어 어드레스; 명령어 어드레스 범위; 소정 어드레스로의 데이터 판독 액세스 및 소정 어드레스로의 데이터 기록 액세스 중 적어도 하나의 조건에 의해 브레이크포인트들이 정의될 수 있도록 브레이크포인트 구성을 구성하는 단계를 더 포함할 수 있다. 상기 방법의 추가 실시예에 따르면, 브레이크포인트에 대한 데이터 기록 액세스의 조건은 소정 데이터 어드레스의 데이터 값을 추가로 정의할 수 있다. 상기 방법의 추가 실시예에 따르면, 프로그램의 실행이 상기 브레이크포인트에서 중지되기 전에 충족되는 것을 필요로 하는 브레이크포인트 발생들의 횟수가 정의될 수 있다.
본 발명에 따라, 보다 플렉시블(flexible)한 디버깅을 할 수 있도록 마이크로컨트롤러 또는 마이크로프로세서 내부의 향상된 브레이크포인트 구성이 제공된다.
도 1은 다양한 실시예들에 따른 집적된 디버그 모듈의 블록도를 도시한다.
도 2는 도 1의 하드웨어 브레이크포인트 블록도를 보다 상세하게 도시한다.
도 3은 도 1의 이벤트 결합기 블록도를 보다 상세하게 도시한다.
도 4는 향상된 브레이크포인트 처리 유닛을 도시한다.
도 5는 다양한 실시예들에 따른 내장된 디버그 유닛을 갖는 마이크로컨트롤러 및 외부의 회로 내 디버그(in circuit debug; ICD) 제어기를 이용하는 시스템의 블록도를 도시한다.
브레이크포인트들에 인터럽트 관련 설정들을 제공함으로써, 매치 조건이 더욱 좁혀지고 더욱 적임으로 할 수 있게(qualified) 한다. 이는 종래 디바이스들에서는 얻을 수 없는 기능성을 제공한다. 이는 브레이크포인트가 단지 인터럽트 서비스 루틴(interrupt service routine; ISR)의 내부와 매칭하거나, 또는 단지 ISR의 외부와 매칭할 수 있게 한다.
그러므로, 다양한 실시예들은 온(on)-칩 디버그 기능들의 기술 상태를 향상시킨다. 다양한 실시예들에 따르면, 디바이스는 디바이스가 인터럽트 루틴으로부터의 코드를 실행하고 있었는지 또는 메인라인(mainline) 루틴으로부터의 코드를 실행하고 있었는지를 정확히 결정하고, 그에 따라서 이 정보를 특정 브레이크포인트 특징들을 인에이블하거나 디스에이블하는데 사용하는 기능을 구비한다. 상기 브레이크포인트에 대한 이러한 구성 가능한 설정은 상기 브레이크포인트가 그의 인터럽트 상태와의 매칭과 상기 인터럽트 상태에 있어서의 상기 디바이스의 정지를 적임으로 할 수 있게(qualify) 한다.
도 1은 일 실시예에 따라 마이크로컨트롤러 내에 집적될 수 있는 회로 내 디버그 모듈의 블록도를 도시한다. 그러나, 위에 설명된 바와 같은 일반적인 개념은 다른 유형들의 온-칩 디버그 회로부에 구현될 수 있다. 상기 블록도는 예를 들어 마이크로컨트롤러에 구현될 수 있고 그리고 다음과 같은 5개의 기본 블록들로 이루어질 수 있는 모듈을 보여준다:
● 브레이크포인트 비교 로직(135)
● 스톱-워치(Stop-Watch) 사이클 카운터 로직(150)
● 제어 및 상태 머신 로직(145)
● 트레이스 로직(120)
● 이벤트 결합기 로직(125)
마이크로컨트롤러는 중앙 처리 유닛(CPU)(110) 및 CPU(110)와 결합된 관련 인터럽트 제어기(112)를 포함한다. CPU(110)는 또한, 내부 버스를 통해 하드웨어 브레이크포인트 유닛(135), 이벤트 검출 유닛(140), 제어 로직 유닛(145) 및 백그라운드 인터페이스(155)와 결합된다. 이 블록들의 특정 기능들은 아래에 더욱 상세히 설명될 것이다. 멀티플렉서(160)는 전용 디버그 클록 및 데이터 핀들(165)을 통해 디버그 유닛의 외부 디버거와의 결합을 가능하게 하는데 사용된다. 제어 로직(145)은 하나 이상의 외부 핀들과 결합될 수 있다. 도 1은 또한, 트레이스 유닛(120)과 함께 사용될 수 있는 예시적인 TRGIN 핀(185)을 보여준다. 이러한 핀은 다른 기능이 전혀 없는 전용 핀일 수 있다. 그러나, 특히 로우(low)-핀 디바이스들에서, 이러한 핀은 프로그램 제어 하에 서로 다른 주변 디바이스들에 할당될 수 있는 다중-기능 핀일 수 있으며, 따라서 그의 프로그래밍된 할당에 따라 서로 다른 기능들을 수행할 수 있다. 예를 들어, 이러한 핀은 기능적으로 트레이스 트리거에 부가되도록 구성 레지스터에 의해 프로그래밍되어, 직렬 인터페이스 클록 핀, 디지털 I/O 핀, 아날로그 입력 핀 등으로서 동작할 수 있다. 도 1에 도시된 바와 같이, 제어 로직은 또한 핀(185)의 다중-기능 핀과 유사할 수 있는 트리거 출력 핀(190)을 제공한다. 트레이스 모듈(120)은 트레이스 스톨(stall) 입력 핀(115)과 트레이스 클록 및 데이터 출력 핀들(175)과 결합될 수 있다. 도 1은 또한 제어 로직(145)을 통해 구성 가능한 펄스 거부 필터들(170 및 180)을 도시한다. 이러한 필터들을 통한 신호 라우팅은 도 1에 도시되지 않았다. 몇몇 실시예들에 따르면, 브레이크포인트 디버깅은 "제로 스키드(zero skid)" 동작으로 불리는 명령어가 실행되기 전에 실행이 정지(halt)되도록 구현된다. 다른 디버거 실시예들에 따르면, 이것이 적용되지 않아서, 코드가 중지하거나 '스키드'하는 곳에서 프로세서가 정지되기 전에 명령어를 실행 가능하게 하는 문제들을 유발할 수 있다. 외부 이벤트들은 (정의상) 명령어 실행 스트림과 비동기적이다. 이를테면, 그들의 동작은 제로 스키드 개념들과 비교될 수 없다.
내부 신호 debug_en = 1일 때, 상기 모듈은 활성화되고, 모든 "HALT" 이벤트들을 모니터링하고, 이벤트들을 생성하고, 데이터 캡처를 수행하는 등을 행한다. 상기 내부 신호 debug_en = 0이면, 모든 디버그 로직은 비활성화되고, 상기 모듈은 최소의 전력 모드를 소비하도록 구성된다.
디버깅을 덜 침입적(invasive)으로 행하기 위해서는, 실시간으로 디바이스의 외부로 데이터를 스트리밍하는 수단을 구비하는 것이 유용할 수 있다. 트레이스 모듈(120)은 판독되거나 특정 어드레스에 기록되는 데이터를 획득하여 트레이스 포트 외부로 송신하는 방법을 지원한다. 이는 실시간 워치포인트(watchpoint)라고 말할 수 있다. 상기 디바이스의 정상 동작은 워치포인트를 사용할 때 인터럽트되지 않는다.
도 2는 다양한 실시예들에 따른 하드웨어 브레이크포인트 유닛(135)의 정상 기능을 도시한다. 강화된 기능성이 아래에 보다 상세히 설명될 것이다. 하드웨어 브레이크포인트들은 프로그램 및 데이터 메모리 중 어느 하나의 어드레스들의 매칭시 정지시키도록 구성될 수 있다. 이를 위해, 각각의 비교기들(220 및 230) 및 디코딩 유닛들(240)이 도 2에 도시된 바와 같이 제공된다. 브레이크포인트가 데이터 메모리 상에서 동작하도록 선택될 때, 상기 브레이크포인트는 부가적으로 데이터 값 및 마스크로 자격을 얻을 수 있어, 특정 값들만이 브레이크포인트 이벤트를 생성할 수 있게 한다. 또한, 데이터 브레이크포인트들은 단지 판독이나 기록 사이클들을 정지시키도록 임의로 설정될 수 있다. 모든 경우들에서, 브레이크포인트들은, 브레이크포인트 이벤트가 생성되기 전에 특정 이벤트가 N번 발생해야 하도록, 카운터(210)를 구비한다. 이 카운터(210)는 몇몇 실시예들에 따라, 예를 들어 1부터 256번까지의 임의의 값이 설정될 수 있다.
도 2의 블록도는 단일 브레이크포인트에 대해 도시되었다. 그러나, 구현된 브레이크포인트들의 수는 다양한 실시예들에 따라 가변적이고, 많은 브레이크포인트들이 존재할 수 있다. 도 2는 다양한 파라미터들이 브레이크포인트를 위한 트리거 요구사항들을 정의하도록 프로그래밍될 수 있게 하는 예시적인 실시예를 보여준다. 다른 실시예들에 따르면, 보다 많거나 보다 적은 이러한 파라미터들이 사용될 수 있다. 예를 들어, 브레이크포인트를 발생시키는데 필요한 브레이크포인트 발생 횟수는 카운터(210)의 BPxCNT 파라미터에 의해 설정될 수 있다. 각각의 브레이크포인트 모듈은 동일한 레지스터들을 가질 수 있다.
브레이크포인트들은 이벤트 채널 정의들 사이에 나열되며, 사이클 카운터(150)를 개시하거나 중지하는데, 이벤트 결합기 스테이지(125)를 설정하거나 재설정하는데, 트레이스 유닛(120)을 개시하거나 중지하는데, 또는 스택 스냅샷(stack snapshot)을 획득하는데 사용될 수 있다.
일 실시예에 따르면, 브레이크포인트가 활성화되기 위해서는 제어 레지스터 ICDBFxCON의 비트 BPEN이 설정되어야 한다. 이 비트가 소거되면, 이 특정 브레이크포인트에 대한 모든 회로부는 비활성화되고, 어떠한 브레이크포인트 이벤트도 생성되지 않을 것이다. 브레이크포인트는 자격 조건들의 모든 N번째 발생시에 소정 동작을 단지 트리거하도록 구성될 수 있다. 예를 들어, 매 세 번째 발생마다 트리거하도록 브레이크포인트를 설정하기 위해, 카운터(210)는 BPxCNT = 2로 설정된다. 각각의 제어 레지스터들은 그 값을 재로딩(reloading)하고/하거나 현재 상태를 모니터링하기 위해 카운터(210)와 결합하여 사용될 수 있다.
또한, 브레이크포인트들은 예를 들어 연관된 구성 레지스터의 각각의 비트들을 설정함으로써 실행 컨텍스트(메인 라인 코드, 인터럽트 핸들러, 또는 둘 다)를 기반으로 자격이 부여될 수 있다. 브레이크포인트는 이후 프로그램이, 아래에 보다 상세히 설명되는 바와 같이, 선택된 컨텍스트로부터 실행중일 때에만 발생할 수 있다.
구성 레지스터의 각각의 비트들을 설정함으로써, 프로그램 카운터(PC 실행 어드레스)를 모니터링할 수 있게 하는 다른 또 하나의 브레이크포인트 파라미터가 사용될 수 있다. 프로그램 메모리 브레이크들은 제로 스키드이며, 동작이 실행되기 전에 발생한다. PC는 트리거 명령어의 어드레스를 표시할 것이다.
각각의 제어 비트가 소거될 때, 예를 들어 BPAREN = '0'이면, 브레이크는 PC가 소정 어드레스와 동일할 때 트리거된다. BPAREN = '1'이면, 브레이크는 PC가 어드레스들의 소정 포함 범위에 들어갈 때 트리거된다.
몇몇 실시예들에 따르면, 실행된 명령어들만이 브레이크포인트를 생성할 수 있다. PC가 실행되지 않는 어드레스에 있다면, 브레이크포인트는 트리거하지 않는다. 이는 다음을 포함한다:
● 흐름 변경 명령어들(CALL, RETURN 등),
● 스킵 명령어들(per BTFSS, BTFSC), 또는
● PCL, FSR 또는 다른 두 사이클 명령어들 이후의 다음 페치.
또 하나의 제어 비트 필드가 제어 레지스터에서 01, 10, 또는 11로 설정될 때, 브레이크포인트는 데이터 액세스들, 즉 어드레스 및 값 둘 다를 모니터링한다. 연관된 비트들의 세 가지 상태들은 판독 또는 기록 사이클들이 브레이크포인트를 결정하는데 사용되는지의 여부를 선택한다.
데이터가 (적용되는 것처럼) 판독되거나 기록된 후, 데이터 브레이크포인트들은 명령어 실행의 끝에서 필연적으로 브레이크를 일으킨다. 모든 경우들에서, 명령어는 완료될 때까지 실행된다. 따라서, "브레이크"는 실제로 다음 명령어 실행시 발생하고, 그리고 PC는 트리거 명령어 다음에 오는 명령어를 표시할 것이다. 또한, 브레이크는 메모리 어드레스와 데이터 값의 자격요건(qualifier)들이 둘 다 충족되었을 때 트리거될 수 있다.
사이클 카운터(150)는 사용자 코드가 프로파일될 수 있도록, 스톱워치 기능을 제공하는데 사용되는 카운터이다. 사이클 카운터는 각각의 제어 레지스터들에 의해 제어된다. 카운터(150)는 네 개의 8-비트 카운터/레지스터들로 이루어질 수 있다. 카운터(150)는 CPU의 매 Q-사이클의 끝에서 증분될 수 있으며; 멀티-사이클 명령어들(예컨대, GOTO)은 여러 번 카운트한다.
다수의 기능들이 특정 이벤트들에 의해 제어될 수 있도록 하기 위해, 가능한 모드 소스들은 하나의 이벤트 버스로 결합될 수 있다. 이는 사이클 카운터(150), 트레이스 유닛(120), 및 이벤트 결합기 유닛(125)이 이들의 동작들을 선택하기 위해 동일한 설정값들(settings)을 사용할 수 있게 한다.
도 3에 도시된 바와 같은 이벤트 결합기(300)는 다수의 이벤트 입력들(320)을 모니터링하고, 그리고 그 입력들의 결합들 및 시퀀스들에 기초하여 정지(halt) 또는 트리거 출력(190)을 생성할 수 있다. 이벤트 결합기(300)는 각각의 제어 비트가 설정될 때 활성화된다. 비활성화된 결합기들(300)은 출력 이벤트들을 생성하지 않는다. 이벤트 결합기들(300)은 이벤트 채널 정의들 사이에 나열되고, 그리고 사이클 카운터(150)를 개시하거나 중지하는데, 이벤트 결합기 스테이지(310)를 설정하거나 재설정하는데, 트레이스 유닛(120)을 개시하거나 중지하는데, 또는 스택 스냅샷을 획득하는데 사용될 수 있다. 이벤트 결합기 스테이지들(310)은 그 스테이지에 대한 각각의 제어 비트들이 연관된 제어 레지스터들 내에 설정될 때 독립적으로 활성화된다. 스테이지의 현재 출력은 연관된 상태 비트에 반영될 것이다. 스테이지들(310)은 도 3에 도시된 바와 같이 묵시적인 순서를 가지며, 다음과 같은 다수의 방식들로 결합될 수 있다:
● 스테이지는 하나의 이벤트에 의해 개별적으로 활성화될 수 있다,
● 스테이지는 다음의 낮은 스테이지가 활성인 동안 하나의 이벤트에 의해 활성화될 수 있다,
● 스테이지는 하나의 이벤트에 의해 개별적으로 비활성화될 수 있다,
● 스테이지는 하나의 이벤트에 의해 또는 다음의 낮은 스테이지가 비활성화될 때 비활성화될 수 있다.
각각의 제어 비트를 설정함으로써, 결합된 이벤트(들)의 N+1번째 발생만이 출력 이벤트에 신호를 보낼 것이다. N은 0부터 255까지 설정될 수 있다. 결합된 트리거 조건들이 충족되면, 레지스터는 1씩 감분된다. 결합된 트리거 조건들이 충족되면, 이벤트 결합기 이벤트가 생성되고 그리고 카운터는 미리 설정된 값으로 재로딩(reloading)된다. 또한, 임의의 시간에 새로운 카운트 값이 각각의 제어 레지스터에 기록되고, 상기 카운터의 값은 재로딩된다. 예를 들어, 3번째 발생시에 트리거하도록 브레이크포인트를 설정하기 위해, 각각의 카운터 값은 2로 설정되어야 한다.
브레이크포인트 같은 이벤트가 인에이블된 트리거에 의해 발생할 때, TRGOUT 핀(195)에 펄스가 생성될 수 있다. 기본 트리거 출력 신호 동작은 각각의 제어 비트들을 설정함으로써 구성된다. 이 제어 비트들은 예를 들어, 트리거 출력이 대략 트리거 이벤트의 지속기간 동안 어서트(assert)되는 것을 제어할 수 있다. 인접하거나 혹은 중첩하는 이벤트들은 신호를 어서트된 상태로 유지할 수 있다. 상기 제어 비트들은 또한 출력이 최소 시간 주기로 스트레칭(stretching)되는지의 여부를 제어할 수 있다. TRGOUT 원샷이 트리거되면, 시간 주기 내에 발생하는 더 많은 이벤트들이 무시될 것이다. 상기 원샷이 타임 아웃되고 TRGOUT가 제로(zero)로 귀환한 후, 그것은 또 하나의 이벤트에 의해 다시 트리거될 수 있다. 상기 원샷은 에지 트리거되고, 그리고 이벤트 신호가 지속되더라도 소정 시간 주기 이후 소거될 것이다.
소프트웨어는 각각의 제어 비트를 설정함으로써 트리거 아웃을 일으킬 수 있다. 디바이스가 깨어 있으면, 비트는 1 사이클 이후 하드웨어에 의해 소거된다. TRGOUT는 또한 각각의 제어 비트를 기록함으로써 소거될 수 있거나, 또는 디바이스가 깨어나면 자동으로 소거될 것이다.
향상된 브레이크포인트 기능성은 도 4를 참조하여 다음과 같이 보다 상세히 설명될 것이다. 도 4에 도시된 회로는 두 개의 블록들(400a 및 400b)을 포함한다.
제 1 회로 부분(400a)은 중앙 처리 유닛(CPU)이 인터럽트 서비스 내에서 동작하고 있는지 또는 그의 "정상" (비(non)-예외) 루틴을 실행하고 있는지에 관하여 CPU의 현재 상태를 결정한다. 이를 위해, 두 개의 입력부들, 출력부 및 제어 입력부를 갖는 제 1 멀티플렉서(410)가 제공된다. 제 1 입력부 "0"은 피드백 신호를 수신하고, 제 2 입력부 "1"은 로직 1로 배선 접속된다. 멀티플렉서(410)의 제어 입력부는 최종 단계의 인터럽트 검출 유닛(430)에 의해 생성된 로직 신호를 수신한다. 멀티플렉서(410)의 출력부는 두 개의 입력부들, 출력부 및 제어 입력부를 갖는 제 2 멀티플렉서(420)의 제 1 입력부 "0"과 결합된다. 멀티플렉서(420)의 제어 입력부는 인터럽트 검출로부터의 리턴 유닛(440)으로부터 추가 로직 신호를 수신한다. 멀티플렉서(420)의 제 2 입력 "1"은 로직 0으로 배선 접속된다. 멀티플렉서(420)의 출력부는 D-플립-플롭(450)의 데이터 입력부와 결합된다. 플립-플롭(450)은 시스템 클록(CLK)에 의해 클록 구동되고, 그리고 플립-플롭(450)은 그의 출력단 Q에 멀티플렉서(410)의 제 1 입력부로 피드백되는 출력 신호를 생성한다. 이 출력 신호는 CPU가 인터럽트 서비스 루틴(interrupt service routine; ISR) 내에서 코드를 실행하고 있는지의 여부를 표시한다.
도 4에 도시된 회로의 제 2 부분(400b)은 기능 선택을 제공한다. 3개의 동작 모드들이 선택될 수 있다. 브레이크포인트 이벤트 신호는 위에 개시된 바와 같은 브레이크포인트 유닛에 의해 생성될 수 있다. 그러나, 더 많거나 적은 기능성을 갖는 다른 브레이크포인트 유닛들이 몇몇 실시예들에 따라 사용될 수 있다. 이 브레이크포인트 이벤트 신호는 3개의 AND 게이트들(460, 470 및 480)의 제 1 입력부들에 제공된다. 각각의 AND 게이트(460, 470 및 480)의 제 2 입력부는 동작 모드를 결정하는 로직 신호를 수신한다. 예를 들어, 제 1 신호 "ISR 모드의 브레이크"는 CPU가 인터럽트 서비스 루틴을 실행하고 있을 때에만 브레이크포인트들의 검출을 가능하게 하는데 사용될 수 있다. 제 2 신호 "비-ISR 모드의 브레이크"는 브레이크포인트들이 CPU가 ISR의 코드들을 실행하고 있지 않을 때에만 동작하는 동작 모드를 제공한다. 제 3 신호 "항상 브레이크 모드"는 모든 액티브 브레이크포인트들이 CPU가 인터럽트 서비스 루틴을 실행하는지의 여부와 상관없이 동작하는 기존 동작 모드를 제공한다. AND 게이트들(460 및 470)은 각각, 플립-플롭(450)으로부터 비반전된 출력 신호를 수신하고 플립-플롭(450)으로부터 인버터(475)에 의해 반전된 출력 신호를 수신하는 제 3 입력부를 제공한다. 3개의 입력부들을 갖는 OR 게이트(490)는 3개의 AND 게이트들(460, 470 및 480)로부터 출력 신호들을 수신하도록 제공된다. OR 게이트(490)의 출력부는 최종 브레이크포인트 신호를 제공한다.
플립-플롭(450)은 인터럽트 실행의 현재 상태를 저장한다. 최종 단계의 인터럽트 검출 유닛(430)은 인터럽트가 발생하는 때를 결정하는데 사용된다. 일단 최종 단계 인터럽트 검출 유닛(430)이 단지 각각의 출력 신호를 생성하면, 인터럽트 발생을 방지하기 위해 아무것도 할 수 없을 때 그것이 활성화된다는 점이 중요하다. 그렇지 않으면 이는 거짓 검출을 일으킬 것이고, 거짓 검출은 부적절한 행위를 유발할 수 있다. "최종 단계 인터럽트 검출" 출력 신호가 활성화되면, 디바이스가 인터럽트 서비스 루틴(ISR)으로부터 현재 실행되고 있음을 표시하는 플립-플롭(450)이 세트(set)될 것이고, 결과적으로 "ISR 실행" 신호는 하이(high)가 되어 유지될 것이다.
플립-플롭(450)은 "인터럽트 검출로부터의 리턴"시 자체적으로 소거될 것이다. 이는 전형적으로 단지 ISR로부터 리턴하는 데에만 사용되는 특별한 명령어 디코드이다. "최종 단계 인터럽트 검출"과 "인터럽트 검출로부터의 리턴"은 상호 배타적임을 주목해야 한다.
플립-플롭(450)은 또한 시스템 리셋시 자체적으로 소거될 것이다. 이것은 중요한데, 왜냐하면 시스템이 리셋된 후, ISR로부터 이미 실행되고 있는 경우의 디바이스는 그렇지 않으면 이제 비(non)-ISR로부터 실행된다고 고려될 것이기 때문이다.
다른 회로들은 CPU의 현재 상태를 결정하는데 사용될 수 있다. 예를 들어, CPU는 ISR 실행 신호로서 사용될 수 있는 인터럽트가 실행되고 있는지의 여부를 실제로 보여주는 내부 플래그들을 가질 수 있다. 게다가, 네스트된(nested) 인터럽트 서비스 루틴들의 검출을 가능하게 하고 그리고 우선순위화된 인터럽트들의 실행을 가능하게 하는 회로들이 제공될 수 있고, 따라서 이 회로들은 더 높게 우선순위화된 ISR로 현재의 낮은 우선순위 ISR을 인터럽트할 수 있게 한다. CPU가 ISR로부터의 코드를 실행하는지의 여부를 정확하게 표시하는 신호가 제공되는 것은 필수적이다.
도 4의 블록(400b)은 이러한 "ISR 실행" 신호가 브레이크포인트 이벤트 발생을 허용하거나 거부하기 위해 연관된 브레이크포인트 로직에 의해 어떻게 사용될 수 있는지를 보여준다. 이 로직은 세 가지 상호 배타적인 설정들을 갖는데, 이 설정들은: ISR 내부의 브레이크포인트들만을 가능하게 하는 "ISR의 브레이크 모드"; ISR 외의 브레이크포인트들만을 가능하게 하는 "비(non)-ISR의 브레이크 모드"; 및 ISR 실행에 상관없이 브레이크포인트들을 가능하게 하는 "항상 브레이크 모드"이다. 이 두 가지들의 결합은 브레이크포인트가 인터럽트 상태에 기초하여 구성될 수 있게 한다. 상호 배타적인 신호들은 하나 이상의 구성 레지스터들을 이용하는 각각의 구성 로직에 의해 생성될 수 있다. 예를 들어, 구성 레지스터의 비트 필드는 3개의 상이한 동작 모드들을 인코딩하는데 사용될 수 있다. 다른 실시예들에 따라서는 다른 신호 디코딩이 사용될 수 있다.
인터럽트가 발생하고 있는지를 정확하게 결정하는 것은 어려울 수 있다. 인터럽트가 발생할지를 명확하게 표시하는 신호를 사용하는 것이 필요하다. 인터럽트 프로세스로의 스테이징(staging)이 종종 있으며, 인터럽트의 초기 단계들은 인터럽트 발생을 방지하기 위해 지연되거나 차단될 수 있다. 따라서, 지연되거나 차단될 수 없는 최종 신호만이 사용될 수 있다. 디바이스 리셋시, 시스템은 인터럽트되지 않았으며, 비(non)-ISR 실행이라고 고려되어야 한다. 플립-플롭(450)에 대한 적당한 리셋 없이, 리셋 이전의 상태가 유지될 수 있고 그리고 부적절한 브레이크포인트 매칭이 발생할 것이다.
도 5는 개발 프로그래밍을 실행하고 그리고 예를 들어 USB 인터페이스를 통해 외부 디버거/프로그래밍 유닛(520)과 연결되는 퍼스널 컴퓨터와 같은 호스트를 갖는 전형적인 디버깅/프로그래밍 시스템을 도시한다. 외부 디버거 프로그래밍 유닛(520)은 디버거/프로그래머(520)의 내부에 생성된 전원 전압을 공급할 수 있는 전용 인터페이스를 제공한다. 그러나, 다른 실시예들은 전용 전원을 통해 공급 전압을 제공할 수 있거나, 또는 타겟 시스템은 자체 전원이 공급될 수 있다. 실제 디버그/프로그래밍 인터페이스는 동기식 직렬 인터페이스에 의해, 디버거/프로그래밍 유닛(520)에 의해 제공된 단방향 클록 신호(ICDCLK) 및 양방향 데이터 라인(ICDData)이 제공될 수 있다. 따라서, 최소 3개의 연결 라인들에서, ICDCLK, ICDData 및 기준 포텐셜(GND)이 디버거/프로그래밍 유닛(520)을 타겟 시스템(510)과 결합시키는데 사용될 수 있으며, 최소한 상기 타겟 시스템(510)은 위에 개시한 바와 같은 다양한 실시예들에 따른 디버깅/프로그래밍 인터페이스를 갖는 마이크로컨트롤러일 수 있다.
이러한 시스템은 사용자가 호스트 상에 실행되는 디버깅 프로그램을 프로그래밍할 수 있게 하여, 위에 설명한 바와 같은 조건들을 갖는 여러 브레이크포인트들을 설정한다. 디버깅 소프트웨어가 소스 코드 내의 브레이크포인트들의 위치에 관련하여 여러 브레이크포인트들의 추적을 유지하는 동안, 디버거/프로그래머(520)는 브레이크포인트 정보를, 각각의 브레이크포인트들을 설정하고 그 연관된 레지스터들을 구성하는 타겟 디바이스에 전달한다. 예를 들어, 메모리에 저장된 데이터 값의 매치에 의해 트리거되는 특정 브레이크포인트가 설정될 수 있고, 그리고 브레이크포인트가 인터럽트 서비스 루틴이 실행될 때에만 트리거되는 강화된 기능이 활성화된다. 이후 사용자는 호스트 PC(530) 상에 실행되는 디버거 소프트웨어를 통해 타겟 디바이스(510)의 소프트웨어의 실행을 개시한다. 타겟 소프트웨어의 실행은 두 조건들이 참일 때에만, 즉 타겟(510)의 CPU가 인터럽트 서비스 루틴을 실행하고 그리고 특정 메모리 위치가 소정 값에 매칭했을 때에만 중지된다. 또 하나의 설정에 따르면, 서브루틴은 타겟 소프트웨어의 메인 루틴 및 인터럽트 서비스 루틴 둘 다에 의해 사용될 수 있다. 특히 ISR로부터 서브루틴을 호출할 때, 사용자가 실행된 코드가 갖는 문제점에 직면하면, 브레이크포인트는 정상적으로 각각의 서브루틴에 설정될 것이다. 그러나, 서브루틴이 인터럽트 서비스 루틴에 의해 단지 드물게 호출되면, 타겟 소프트웨어의 실행은 각각의 서브루틴을 호출하는 메인 루틴에 의해 야기되는 많은 실행 중지들을 일으킬 수 있다. 이는 디버깅을 전혀 쓸모없게 만들 수 있다. 일 실시예에 따르면, 사용자는 이러한 상황에서 디버거 동작 모드를 설정하여, 위에 설명한 바와 같은 인터럽트 루틴들을 실행할 때에만 브레이크포인트들을 가능하게 할 수 있다. 이제, 타겟 소프트웨어의 실행은 서브루틴이 인터럽트 서비스 루틴으로부터 호출될 때 서브루틴 내에서만 중지되고, 이에 따라 다수의 다른 가능한 브레이크포인트 이벤트들을 필터링하여 제거하고, 그렇지 않으면 이 브레이크포인트 이벤트들은 실행을 중지하고 그리고 타겟 디버깅을 다소 쓸모없게 할 수 있다.

Claims (20)

  1. 디버그 기능들을 갖는 프로세서 디바이스로서,
    중앙 처리 유닛;
    인터럽트 제어기;
    인터럽트가 발생했음을 표시하는 제 1 모드 또는 코드의 정상 실행을 표시하는 제 2 모드로 설정되도록 동작 가능한 상태 유닛; 및
    상기 상태 유닛과 결합되고 그리고 구성 가능한 브레이크포인트를 포함하는 디버그 유닛 - 여기서, 상기 디바이스가 인터럽트 서비스 루틴에서 동작하는 경우에만 브레이크포인트가 활성화되는 조건이 설정될 수 있음 - 을 포함하는, 프로세서 디바이스.
  2. 제 1 항에 있어서,
    상기 상태 유닛은:
    최종 단계의 인터럽트 검출 유닛, 및
    인터럽트 검출로부터의 리턴 유닛을 포함하는, 프로세서 디바이스.
  3. 제 2 항에 있어서,
    상기 최종 단계의 인터럽트 검출 유닛은 상기 디바이스가 상기 인터럽트 서비스 루틴에 강제적으로 들어갈 때 인터럽트가 발생했음을 표시하는 로직 신호만을 생성하는, 프로세서 디바이스.
  4. 제 2 항에 있어서,
    상기 상태 유닛은:
    로직 1을 수신하는 제 1 입력부를 가지며 상기 최종 단계의 인터럽트 검출 유닛에 의해 제어되는 제 1 멀티플렉서;
    제 1 입력부에서 로직 0을 수신하고, 상기 제 1 멀티플렉서의 출력부와 결합된 제 2 입력부를 갖고, 그리고 상기 인터럽트 검출로부터의 리턴 유닛에 의해 제어되는 제 2 멀티플렉서; 및
    상기 제 2 멀티플렉서로부터 출력 신호를 수신하고 그리고 상기 제 1 멀티플렉서의 제 2 입력부와 결합된 출력부를 갖는 클록 제어 레지스터 - 상기 레지스터의 출력부는 상기 중앙 처리 유닛의 현재 인터럽트 상태를 표시함 - 를 더 포함하는, 프로세서 디바이스.
  5. 제 4 항에 있어서,
    상기 레지스터는 D-플립-플롭인, 프로세서 디바이스.
  6. 제 1 항에 있어서,
    상기 디버그 유닛은 상기 디바이스가 인터럽트 서비스 루틴을 실행하고 있지 않을 때 브레이크포인트를 활성화하도록 추가로 구성될 수 있는, 프로세서 디바이스.
  7. 제 6 항에 있어서,
    상기 디버그 유닛은 항상 브레이크포인트를 활성화하도록 추가로 구성될 수 있는, 프로세서 디바이스.
  8. 제 7 항에 있어서,
    상기 디버그 유닛은 세 가지 동작 모드들 중 하나를 설정하기 위해 로직 게이트들을 포함하는 모드 선택 회로를 포함하며, 여기서 제 1 모드는 상기 중앙 처리 유닛이 인터럽트 서비스 루틴을 실행할 때에만 브레이크포인트의 트리거링을 가능하게 하고, 제 2 모드는 상기 중앙 처리 유닛이 인터럽트 서비스 루틴을 실행하지 않을 때에만 브레이크포인트의 트리거링을 가능하게 하고, 그리고 제 3 모드는 항상 브레이크포인트의 트리거링을 가능하게 하는, 프로세서 디바이스.
  9. 제 1 항에 있어서,
    다음의 조건들, 명령어 어드레스; 명령어 어드레스 범위; 소정 어드레스로의 데이터 판독 액세스 및 소정 어드레스로의 데이터 기록 액세스 중 적어도 하나의 조건에 의해 브레이크포인트들이 정의될 수 있도록 구성된 브레이크포인트 구성 유닛을 포함하는 프로세서 디바이스.
  10. 제 9 항에 있어서,
    브레이크포인트에 대한 데이터 기록 액세스의 조건은 소정 데이터 어드레스의 데이터 값을 추가로 정의할 수 있는, 프로세서 디바이스.
  11. 제 9 항에 있어서,
    프로그램의 실행이 상기 브레이크포인트에서 중지되기 전에 충족되는 것을 필요로 하는 브레이크포인트 발생들의 횟수가 정의될 수 있는, 프로세서 디바이스.
  12. 제 9 항에 있어서,
    프로그램의 실행 중지를 생성하기 위해 복수의 이벤트들을 결합하도록 동작 가능한 이벤트 결합기를 더 포함하는 프로세서 디바이스.
  13. 디버그 기능들을 갖는 프로세서 디바이스 내에서 실행된 코드를 디버깅하기 위한 방법으로서,
    중앙 처리 유닛(CPU)에 의해 코드를 실행하는 단계;
    디버그 유닛에 의해 상기 코드를 실행하는 동안 상기 CPU의 인터럽트 서비스 상태를 결정하는 단계;
    상기 CPU가 인터럽트 서비스 루틴을 실행하고 있을 때에만 브레이크포인트가 활성화되도록 상기 디버그 유닛 내에서 상기 브레이크포인트를 구성하는 단계; 및
    브레이크포인트의 발생시, 상기 CPU가 인터럽트 서비스 루틴 내의 명령어들을 실행하고 있는 경우, 상기 디버그 유닛 내의 상기 브레이크포인트만을 활성화시키는 단계를 포함하는, 실행된 코드 디버깅 방법.
  14. 제 13 항에 있어서,
    상기 CPU의 상기 인터럽트 서비스 상태를 결정하기 위해, 상기 디버그 유닛은 인터럽트 서비스 루틴의 실행으로 이어지는 상기 CPU의 최종 단계의 인터럽트 상태를 결정하고, 그리고 인터럽트 명령어로부터의 리턴의 실행을 결정하도록 구성되는, 실행된 코드 디버깅 방법.
  15. 제 13 항에 있어서,
    상기 디버그 유닛은 상기 디바이스가 인터럽트 서비스 루틴을 실행하고 있지 않을 때 브레이크포인트를 활성화하도록 추가로 구성될 수 있는, 실행된 코드 디버깅 방법.
  16. 제 15 항에 있어서,
    상기 디버그 유닛은 항상 브레이크포인트를 활성화하도록 추가로 구성될 수 있는, 실행된 코드 디버깅 방법.
  17. 제 16 항에 있어서,
    상기 디버그 유닛의 동작 모드를 선택하는 단계를 더 포함하고, 여기서 제 1 모드는 상기 중앙 처리 유닛이 인터럽트 서비스 루틴을 실행할 때에만 브레이크포인트의 트리거링을 가능하게 하고, 제 2 모드는 상기 중앙 처리 유닛이 인터럽트 서비스 루틴을 실행하지 않을 때에만 브레이크포인트의 트리거링을 가능하게 하고, 그리고 제 3 모드는 항상 브레이크포인트의 트리거링을 가능하게 하는, 실행된 코드 디버깅 방법.
  18. 제 13 항에 있어서,
    다음의 조건들, 명령어 어드레스; 명령어 어드레스 범위; 소정 어드레스로의 데이터 판독 액세스 및 소정 어드레스로의 데이터 기록 액세스 중 적어도 하나의 조건에 의해 브레이크포인트들이 정의될 수 있도록 브레이크포인트 구성을 구성하는 단계를 더 포함하는, 실행된 코드 디버깅 방법.
  19. 제 18 항에 있어서,
    브레이크포인트에 대한 데이터 기록 액세스의 조건은 소정 데이터 어드레스의 데이터 값을 추가로 정의할 수 있는, 실행된 코드 디버깅 방법.
  20. 제 18 항에 있어서,
    프로그램의 실행이 상기 브레이크포인트에서 중지되기 전에 충족되는 것을 필요로 하는 브레이크포인트 발생들의 횟수가 정의될 수 있는, 실행된 코드 디버깅 방법.
KR20147034076A 2012-05-07 2013-05-07 인터럽트 상태에 기초한 구성 가능한 브레이크포인트를 갖는 디바이스 KR20150008447A (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US201261643707P 2012-05-07 2012-05-07
US61/643,707 2012-05-07
PCT/US2013/039938 WO2013169767A1 (en) 2012-05-07 2013-05-07 Device having configurable breakpoint based on interrupt status

Publications (1)

Publication Number Publication Date
KR20150008447A true KR20150008447A (ko) 2015-01-22

Family

ID=48468809

Family Applications (1)

Application Number Title Priority Date Filing Date
KR20147034076A KR20150008447A (ko) 2012-05-07 2013-05-07 인터럽트 상태에 기초한 구성 가능한 브레이크포인트를 갖는 디바이스

Country Status (6)

Country Link
US (1) US9336122B2 (ko)
EP (1) EP2847681B1 (ko)
JP (1) JP6116670B2 (ko)
KR (1) KR20150008447A (ko)
CN (1) CN104471545B (ko)
WO (1) WO2013169767A1 (ko)

Families Citing this family (19)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9785536B2 (en) 2013-11-29 2017-10-10 Nxp Usa, Inc. Code injection for conditional breakpoints
GB2530050B (en) * 2014-09-10 2021-07-21 Advanced Risc Mach Ltd Debugging in a data processing apparatus
GB2551747B (en) * 2016-06-29 2019-04-10 Advanced Risc Mach Ltd Diagnostic data capture
US10073759B2 (en) 2016-09-29 2018-09-11 International Business Machines Corporation Identification and handling of nested breakpoints during debug session
US10761967B2 (en) * 2018-05-16 2020-09-01 Texas Instruments Incorporated Managing and maintaining multiple debug contexts in a debug execution mode for real-time processors
US11099975B2 (en) 2019-01-24 2021-08-24 International Business Machines Corporation Test space analysis across multiple combinatoric models
US11010285B2 (en) 2019-01-24 2021-05-18 International Business Machines Corporation Fault detection and localization to generate failing test cases using combinatorial test design techniques
US11010282B2 (en) 2019-01-24 2021-05-18 International Business Machines Corporation Fault detection and localization using combinatorial test design techniques while adhering to architectural restrictions
US11263116B2 (en) 2019-01-24 2022-03-01 International Business Machines Corporation Champion test case generation
US11106567B2 (en) 2019-01-24 2021-08-31 International Business Machines Corporation Combinatoric set completion through unique test case generation
WO2020186518A1 (en) 2019-03-21 2020-09-24 Hangzhou Fabu Technology Co. Ltd Method and apparatus for debugging, and system on chip
US11232020B2 (en) 2019-06-13 2022-01-25 International Business Machines Corporation Fault detection using breakpoint value-based fingerprints of failing regression test cases
US11036624B2 (en) 2019-06-13 2021-06-15 International Business Machines Corporation Self healing software utilizing regression test fingerprints
US10963366B2 (en) 2019-06-13 2021-03-30 International Business Machines Corporation Regression test fingerprints based on breakpoint values
US11422924B2 (en) 2019-06-13 2022-08-23 International Business Machines Corporation Customizable test set selection using code flow trees
US10970197B2 (en) 2019-06-13 2021-04-06 International Business Machines Corporation Breakpoint value-based version control
US10970195B2 (en) 2019-06-13 2021-04-06 International Business Machines Corporation Reduction of test infrastructure
US10990510B2 (en) 2019-06-13 2021-04-27 International Business Machines Corporation Associating attribute seeds of regression test cases with breakpoint value-based fingerprints
CN112540288B (zh) * 2020-11-30 2023-02-21 海光信息技术股份有限公司 用于硅后芯片验证的方法、系统、设备以及存储介质

Family Cites Families (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS6418348U (ko) * 1987-07-23 1989-01-30
JPH0675819A (ja) * 1992-08-27 1994-03-18 Mitsubishi Electric Corp マイクロプロセッサ
US5951696A (en) * 1996-11-14 1999-09-14 Hewlett-Packard Company Debug system with hardware breakpoint trap
JP2003271416A (ja) * 2002-03-12 2003-09-26 Seiko Epson Corp 情報処理装置及び電子機器
US7334161B2 (en) * 2004-04-30 2008-02-19 Arm Limited Breakpoint logic unit, debug logic and breakpoint method for a data processing apparatus
US7865704B2 (en) 2006-03-29 2011-01-04 Freescale Semiconductor, Inc. Selective instruction breakpoint generation based on a count of instruction source events
KR20070109432A (ko) * 2006-05-11 2007-11-15 삼성전자주식회사 커널 인지 디버깅 장치 및 방법
CN101777021B (zh) * 2010-01-21 2012-07-04 龙芯中科技术有限公司 微处理器中精确数据断点的实现装置及其方法
KR101717494B1 (ko) * 2010-10-08 2017-03-28 삼성전자주식회사 인터럽트 처리 장치 및 방법

Also Published As

Publication number Publication date
US20130297975A1 (en) 2013-11-07
JP6116670B2 (ja) 2017-04-19
JP2015516099A (ja) 2015-06-04
WO2013169767A1 (en) 2013-11-14
EP2847681B1 (en) 2019-08-07
CN104471545A (zh) 2015-03-25
US9336122B2 (en) 2016-05-10
EP2847681A1 (en) 2015-03-18
CN104471545B (zh) 2017-10-27

Similar Documents

Publication Publication Date Title
US9336122B2 (en) Device having configurable breakpoint based on interrupt status
KR101430218B1 (ko) 디버그 상태 기계 및 이를 포함하는 프로세서
US7266725B2 (en) Method for debugging reconfigurable architectures
US8024614B2 (en) Debugger and debugging method for debugging a system-on-chip device including a microprocessor core
EP2847682B1 (en) Processor device with reset condition trace capabilities
US20070011492A1 (en) Generation of trace data
CN107111546B (zh) 用于在多核心微控制器中产生跨核心断点的系统及方法
US20020144235A1 (en) Debugging embedded systems
JP2005196774A (ja) 1サイクルまたはnサイクルの歩進を使用してシステム・オン・チップをデバッグするためのシステムと方法
JP6397815B2 (ja) 命令トレース能力を有するプロセッサデバイス
EP0902367B1 (en) Data processing unit with debug capabilities
WO2009111108A1 (en) Method and apparatus for sharing debug resources
US20020120801A1 (en) Technique for capturing information
RU2432601C2 (ru) Метод внедрения детерминизма среди множества интервалов тактирования
US20060259774A1 (en) Watermark counter with reload register
Tröger et al. Software-implemented fault injection at firmware level
CN113220567A (zh) 一个用于时分复用流水线处理器的程序调试方法
Peng et al. Towards A Unified Hardware Abstraction Layer Architecture for Embedded Systems
Melear Emulation techniques for microcontrollers with internal caches and multiple execution units
Stollon et al. An On-Chip Debug System

Legal Events

Date Code Title Description
A201 Request for examination
E902 Notification of reason for refusal
E601 Decision to refuse application