KR20150128680A - 프로그램 가능한 cpu 레지스터 하드웨어 컨텍스트 스왑 메커니즘 - Google Patents

프로그램 가능한 cpu 레지스터 하드웨어 컨텍스트 스왑 메커니즘 Download PDF

Info

Publication number
KR20150128680A
KR20150128680A KR1020157023608A KR20157023608A KR20150128680A KR 20150128680 A KR20150128680 A KR 20150128680A KR 1020157023608 A KR1020157023608 A KR 1020157023608A KR 20157023608 A KR20157023608 A KR 20157023608A KR 20150128680 A KR20150128680 A KR 20150128680A
Authority
KR
South Korea
Prior art keywords
context
register
interrupt
registers
instruction
Prior art date
Application number
KR1020157023608A
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 KR20150128680A publication Critical patent/KR20150128680A/ko

Links

Images

Classifications

    • 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
    • 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/30076Arrangements for executing specific machine instructions to perform miscellaneous control operations, e.g. NOP
    • G06F9/3009Thread control instructions
    • 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 or look ahead
    • G06F9/3861Recovery, e.g. branch miss-prediction, exception handling
    • G06F9/3865Recovery, e.g. branch miss-prediction, exception handling using deferred exception handling, e.g. exception flags
    • 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/46Multiprogramming arrangements
    • G06F9/461Saving or restoring of program or task context
    • G06F9/462Saving or restoring of program or task context with multiple register sets

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Executing Machine-Instructions (AREA)
  • Hardware Redundancy (AREA)

Abstract

중앙 처리 유닛(CPU)은, 명령어들의 실행을 중단하기 위한 인터럽트 유닛; 레지스터들의 각 세트가 동일한 개수의 CPU 레지스터들을 구비하는 복수의 컨텍스트 정의 레지스터 세트들; 선택된 레지스터 세트를 상기 CPU 내에 결합시키고, 그리고 예외의 발생시 상기 복수의 컨텍스트 정의 레지스터 세트들 중 소정 레지스터 세트로 스위칭하는 스위칭 유닛; 및 명령어에 의해 개시되는 상기 복수의 컨텍스트 정의 레지스터의 레지스터 세트의 선택을 제어하도록 구성되고, 또한 현재 사용된 컨텍스트를 나타내도록 동작 가능한 제어 레지스터를 갖는다.

Description

프로그램 가능한 CPU 레지스터 하드웨어 컨텍스트 스왑 메커니즘{PROGRAMMABLE CPU REGISTER HARDWARE CONTEXT SWAP MECHANISM}
관련 출원에 대한 상호 참조
본 출원은, 2013년 3월 12일 출원된 미국 가출원 번호 61/777,887 호의 이익을 주장하며, 상기 미국 가출원은 그 전체가 본 출원에 통합된다.
기술 분야
본 개시는 중앙 처리 유닛(CPU)에 관한 것으로, 특히 마이크로프로세서 또는 마이크로컨트롤러들에 사용되는 CPU들에 관한 것이다.
대부분의 CPU들은, 소위 인터럽트 루틴을 수행하기 위해 현재의 명령어 실행을 중단하는 인터럽트 기능을 제공한다. 현재의 실행으로부터 이러한 예외 또는 인터럽트 루틴으로의 스위칭은 종종, 특정 CPU들에서 예를 들어 최대 28 CPU 사이클 길이에 상당한 인터럽트 컨텍스트 스위칭과 연관된 대기 시간(latency)를 일으킨다.
따라서, 인터럽트들의 향상된 처리가 필요하다.
실시예에 따르면, 중앙 처리 유닛(CPU)은, 명령어들의 실행을 중단하기 위한 인터럽트 유닛; 레지스터들의 각 세트가 동일한 개수의 CPU 레지스터들을 구비하는 복수의 컨텍스트 정의 레지스터 세트들; 선택된 레지스터 세트를 상기 CPU 내에 결합시키고, 그리고 예외의 발생시 상기 복수의 컨텍스트 정의 레지스터 세트들 중 소정 레지스터 세트로 스위칭하는 스위칭 유닛; 및 명령어에 의해 개시되는 상기 복수의 컨텍스트 정의 레지스터의 레지스터 세트의 선택을 제어하도록 구성되고, 또한 현재 사용된 컨텍스트를 나타내도록 동작 가능한 제어 레지스터를 포함할 수 있다.
추가 실시예에 따르면, 상기 제어 레지스터는 현재의 컨텍스트를 나타내는 제 1 비트필드, 및 상기 명령어에 의해 선택된 가장 최근의 컨텍스트를 나타내는 제 2 비트필드를 포함할 수 있다. 추가 실시예에 따르면, 상기 CPU는 컨텍스트 스위치를 개시하기 위한 명령어를 실행하도록 동작 가능하다. 추가 실시예에 따르면, 상기 명령어는 전용 컨텍스트 스왑 명령어일 수 있다. 추가 실시예에 따르면, 상기 제어 레지스터는 판독 전용일 수 있다. 추가 실시예에 따르면, 상기 제어 레지스터는 판독 가능하고 적어도 부분적으로 쓰기 가능하며, 상기 명령어는 컨텍스트 스위치를 개시하도록 상기 제어 레지스터의 콘텐츠를 변경하기 위해 상기 제어 레지스터에 제공되는 이동 데이터 명령어이다. 추가 실시예에 따르면, 상기 인터럽트 유닛은 복수의 우선순위 레벨들을 복수의 인터럽트 소스들에 할당하도록 동작 가능한 인터럽트 제어기를 포함할 수 있다. 추가 실시예에 따르면, 상기 복수의 레지스터 세트들의 각각은 인터럽트 레벨에 할당될 수 있고, 이에 따라, 인터럽트 발생시 상기 복수의 컨텍스트 정의 레지스터 세트들의 각각의 레지스터 세트가 상기 인터럽트 레벨에 따라 상기 스위칭 유닛에 의해 선택된다. 추가 실시예에 따르면, 할당되지 않은 인터럽트 레벨은 상기 복수의 컨텍스트 정의 레지스터 세트들 중 디폴트 레지스터 세트로 디폴트할 수 있다. 추가 실시예에 따르면, 할당되지 않은 인터럽트 레벨에서의 인터럽트 발생시에는 어떠한 컨텍스트 스위치도 개시되지 않을 것이다. 추가 실시예에 따르면, 레지스터 세트가 또 하나의 레지스터 세트에 이미 할당되어 있던 우선순위 레벨에 할당되면, 상기 CPU는 가장 낮은 수를 갖는 레지스터 세트를 선택된 우선순위 레벨에 할당하고 그리고 각각의 다른 레지스터 세트를 할당하지 않도록 동작 가능하다. 추가 실시예에 따르면, 상기 CPU는 상기 인터럽트 레벨들을 상기 복수의 레지스터 세트들 중 하나의 세트에 할당하기 위한 퓨즈 필드를 더 포함할 수 있다. 추가 실시예에 따르면, 컨텍스트 스위치가 수행된 후, 상기 제어 레지스터는 새로운 컨텍스트로 업데이트될 수 있다.
또 하나의 실시예에 따르면, 레지스터들의 각 세트가 동일한 개수의 CPU 레지스터들을 구비하는 복수의 컨텍스트 정의 레지스터 세트들을 포함하는 중앙 처리 유닛(CPU)에서 컨텍스트 스위치를 수행하기 위한 방법은, 예외의 발생시 상기 복수의 컨텍스트 정의 레지스터 세트들 중 소정 레지스터 세트로 자동으로 스위칭하는 단계; 및 컨텍스트 제어 레지스터에서 현재 사용된 컨텍스트를 나타내는 단계를 포함할 수 있으며, 상기 복수의 컨텍스트 정의 레지스터의 레지스터 세트의 선택은 추가로 명령어를 실행함으로써 수동으로 개시될 수 있다.
상기 방법의 추가 실시예에 따르면, 상기 컨텍스트 제어 레지스터는 현재의 컨텍스트를 나타내는 제 1 비트필드, 및 상기 명령어에 의해 선택된 가장 최근의 컨텍스트를 나타내는 제 2 비트필드를 포함할 수 있다. 상기 방법의 추가 실시예에 따르면, 상기 방법은 컨텍스트 스위치를 개시하기 위한 명령어를 실행하는 것을 더 포함할 수 있다. 상기 방법의 추가 실시예에 따르면, 상기 명령어는 전용 컨텍스트 스왑 명령어일 수 있다. 상기 방법의 추가 실시예에 따르면, 상기 제어 레지스터는 판독 전용일 수 있다. 상기 방법의 추가 실시예에 따르면, 상기 제어 레지스터는 판독 가능하고 적어도 부분적으로 쓰기 가능하며, 상기 명령어는 컨텍스트 스위치를 개시하도록 상기 컨텍스트 제어 레지스터의 콘텐츠를 변경하기 위해 상기 컨텍스트 제어 레지스터에 제공되는 이동 데이터 명령어이다. 상기 방법의 추가 실시예에 따르면, 상기 방법은 복수의 우선순위 레벨들을 복수의 인터럽트 소스들에 할당하는 것을 더 포함할 수 있다. 상기 방법의 추가 실시예에 따르면, 상기 복수의 레지스터 세트들의 각각은 인터럽트 레벨에 할당될 수 있고, 이에 따라, 인터럽트 발생시 상기 복수의 컨텍스트 정의 레지스터 세트들의 각각의 레지스터 세트가 상기 인터럽트 레벨에 따라 스위칭 유닛에 의해 선택된다. 상기 방법의 추가 실시예에 따르면, 할당되지 않은 인터럽트 레벨은 상기 복수의 컨텍스트 정의 레지스터 세트들 중 디폴트 레지스터 세트로 디폴트할 수 있다. 상기 방법의 추가 실시예에 따르면, 할당되지 않은 인터럽트 레벨의 인터럽트 발생시에는 어떠한 컨텍스트 스위치도 개시되지 않을 수 있다. 상기 방법의 추가 실시예에 따르면, 레지스터 세트가 또 하나의 레지스터 세트에 이미 할당되어 있던 우선순위 레벨에 할당되면, 상기 CPU는 가장 낮은 수를 갖는 레지스터 세트를 선택된 우선순위 레벨에 할당하고 그리고 각각의 다른 레지스터 세트를 할당하지 않도록 동작 가능하다. 상기 방법의 추가 실시예에 따르면, 상기 방법은 상기 인터럽트 레벨들을 상기 복수의 레지스터 세트들 중 하나의 세트에 할당하기 위해 퓨즈 필드를 제공하는 것을 더 포함할 수 있다. 상기 방법의 추가 실시예에 따르면, 상기 방법은 컨텍스트 스위치가 수행된 후, 상기 컨텍스트 제어 레지스터를 새로운 컨텍스트로 업데이트하는 것을 더 포함할 수 있다.
도 1은 실시예의 블록도이다.
도 2는 컨텍스트 상태 레지스터의 실시예를 도시한 도면이다.
도 3은 CPU의 실시예를 도시하는 또 하나의 블록도이다.
도 4는 실시예에 따른 타이밍도이다.
도 5a 및 도 5b는 특수 기능 명령어의 실시예를 도시한 도면이다.
도 6은 퓨즈 필드의 예를 도시한 도면이다.
도 7은 예시적인 예외 처리를 도시하는 흐름도이다.
도 8은 예시적인 예외 처리를 도시하는 또 하나의 흐름도이다.
메인 명령어 시퀀스(메인 프로그램)의 실행 동안, 컨텍스트는 소정 개수의 CPU 레지스터들에 의해 정의된다. CPU 레지스터들은, 일반적으로 레지스터 파일 또는 레지스터들의 세트를 형성하는 CPU 내의 해당 레지스터들로서 정의되며, 상기 레지스터 파일 또는 레지스터들의 세트는 산술 로직 유닛 및 다른 처리 로직과 결합되고 그리고 명령어들에 의해 1차 소스들 또는 목적지들(destinations)로서 사용되어 기본 데이터 및 어드레스 처리를 수행한다. 따라서, 주변기기들의 기능들을 제어하는 범용 메모리 및 다른 특수 기능 레지스터들은 일반적으로 위의 설명에 맞지 않으면 통용되는 컨텍스트(current context)의 일부인 것으로 여겨지지 않는다. 마이크로프로세서들 또는 마이크로컨트롤러들의 일부 실시예들은 메모리 뱅크에 의해 형성되는 레지스터 파일을 사용하며, 여기서 모든 특수 기능 레지스터들은 데이터 메모리에 메모리 맵핑된다. 메모리 뱅크가 선택되면, 메모리 뱅크 내의 모든 메모리 위치들은 컨텍스트를 정의할 수 있는 범용 레지스터 또는 특수 기능 레지스터를 형성한다. 하지만, 이러한 구현들에서는 보통, 레지스터들의 서브세트만이 컨텍스트로서 고려된다. 다른 실시예들은 다수의 전용 CPU 레지스터들, 예컨대 16 또는 32 레지스터들을 사용하며, 이 16 또는 32 레지스터들은 데이터 메모리의 일원이 아니고, CPU 명령어들의 1차 소스 및/또는 목적지로 사용된다. 이 레지스터들의 일부 또는 모두는 또한 데이터 메모리에 메모리-맵핑될 수 있다.
인터럽트들과 같은 예외들은 비동기적으로 발생하고, 따라서 그들의 발생은 예측될 수 없다. 서브루틴들은 일반적으로 동기적으로 실행되는데, 즉 메인 프로그램에서 서브루틴 호출이 어디서 실행될지는 정확히 알려진다. 일반적으로, 예외가 실행되었다면, 컨텍스트를 정의하는 레지스터들(context defining registers)의 콘텐츠는 메인 프로그램이 방해받지 않고 실행될 수 있도록 예외의 실행 동안 변경되지 말아야 한다. 그렇지 않으면 CPU의 예상치 못한 문제가 발생할 수 있다. 서브루틴의 실행에 대해서도 또한 동일한 상황이 적용될 수 있다. 따라서, 컨텍스트는 서비스 루틴의 실행에 앞서 또는 서브루틴의 일부 경우들에서 저장될 필요가 있고, 그리고 CPU가 메인 명령어 시퀀스의 실행으로 돌아가기 전에 복원될 필요가 있다.
다양한 실시예들에 따르면, 프로그램 가능한 CPU 레지스터 하드웨어 컨텍스트 스왑 메커니즘이 제공될 수 있다. 본 개시는 자동 컨텍스트 스위치와 수동 컨텍스트 스위치를 구별한다. 여기서 용어 "자동"은 어떠한 전용 명령어도 실행할 필요없이 컨텍스트 스왑이 자동으로 개시됨을 가리킨다. 즉, 인터럽트 신호는 상기 예외뿐만 아니라 컨텍스트 스위치도 일으킨다. 이에 반하여, "수동 컨텍스트 스위치"는 전용 명령어 또는 제어 레지스터의 하나 이상의 특수 비트들의 설정에 의해 개시된다. 따라서, "수동" 컨텍스트 스위치는 CPU에 의해 실행되는 하나 이상의 명령어들에 의해 개시된다. 하지만, 실제 컨텍스트 스위치는 명령어 시퀀스에 의한 레지스터들의 전통적인 저장/복원에 반하는 어떠한 명령어도 실행할 필요없이 수행된다. 따라서, 두 방법들 모두에서는 제로 오버헤드 컨텍스트 스위치(zero overhead context switch)가 수행된다. 제로 오버헤드는 컨텍스트 스위치를 수행할 추가 시간을 필요로 하지 않는 것으로 이해되어야 한다. 따라서, 예를 들어 "자동" 컨텍스트 스위치 동안에는, 컨텍스트 스위치는 인터럽트 서비스 루틴으로 분기하는데 필요한 천이 시간 동안 수행된다. "수동" 스위치에서는, 컨텍스트 스위치는 각각의 명령어를 실행하는데 필요한 시간만을 필요로 한다. 일부 실시예들에서, 이러한 명령어는 실제 스위치를 수행하기에 충분히 긴 실행 시간을 가질 수 있다. 이것은 하드웨어에 의존할 수 있고, 따라서 일부 실시예들에서는, 이러한 명령어가 다른 명령어들만큼 빠르게 실행되지 않을 수 있다.
일부 실시예들에 따르면, 사용자들이 소프트웨어를 이용하여 CPU 레지스터 컨텍스트들 사이를 교환(swap)할 수 있게 하는 전용 CPU 명령어, 예를 들어 기억용 코드 "CTXTSWP(W)"로 인코딩된 명령어가 제공될 수 있다. 다양한 실시예들이 또한 하드웨어 예를 들어 인터럽트 기반 컨텍스트 스위칭으로도 동작하도록 설계될 수 있다.
일부 실시예들에 따르면, CPU 레지스터 컨텍스트는 인터럽트 우선순위 레벨들과 관련되고, 따라서 사용자 프로그램 가능하다. 레지스터 컨텍스트는, 선택된 인터럽트들이 트리거되고 컨텍스트가 ISR 복귀 동안 투과적으로(transparently) 복구될 때 예외 처리 동안에 투과적으로 스위칭된다. 사용자 프로그램에 의해 제공될 어떠한 추가 프로그램 단계들도 필요치 않다. 따라서, 개개의 명령어들에 의해 레지스터 콘텐츠를 저장할 필요없는 현재 컨텍스트의 자동 저장이 수행된다. 따라서, 특정 실시예들에서, 예를 들어 특정 종래의 마이크로컨트롤러들에서 예를 들어 최대 28 CPU 사이클들까지 또는 그 이상 저장할 수 있는, 인터럽트 컨텍스트 스위칭과 연관된 모든 대기 시간(latency)이 제거된다.
아주 작은 활성 코드를 포함하는 빈번한 높은 우선순위 인터럽트들을 갖는 애플리케이션들에서는, 컨텍스트 교환 대기 시간이 총 실행 시간을 지배하여 각각의 디바이스 처리량(throughput)을 제한한다. 다양한 실시예들에 따르면, 보다 빠른 디바이스 클록 속도가 필요없이 성능에 있어 효과적인 향상이 제공될 수 있다. 따라서, 다양한 실시예들에 따르면, 하드웨어 (인터럽트 기반) 컨텍스트 스위칭에 의한 이용에 앞서 컨텍스트들을 초기화하는 수단이 제공되거나, 또는 디바이스 에뮬레이션 시스템이 디버깅 동안 컨텍스트들을 조사(view)/변경하는 수단이 제공된다. 또한, 특정 컨텍스트를 우선순위 레벨에 할당하는 것은 인터럽트 서비스 루틴들을 갖는 특정 우선순위 레벨들에 대한 어떠한 컨텍스트 스위치도 선택할 수 없게 하는데, 상기 인터럽트 서비스 루틴들은 컨텍스트를 변경하지 않거나, 메인 프로그램에 사용되지 않는 레지스터들에만 영향을 미친다.
따라서, 다양한 실시예들은 컨텍스트들이 (전형적으로 하드웨어 인터럽트 컨텍스트들로서의 사용에 앞서) 초기화될 수 있게 하고, 디버거가 디버그 모드 내에서 컨텍스트들에 판독/기록할 수 있게 하고, 그리고 프로시저 또는 라이브러리 호출들에의 입장 및 퇴장(entry and exit to procedure or library calls)을 가속화하도록 인터럽트들과 함께 사용하기 위해 할당되지 않은 컨텍스트들을 코드가 사용할 수 있게 한다. 위에 언급한 바와 같이, 특정 프로세서들에서는 오버헤드의 28 사이클들까지 저장될 수 있고 컨텍스트 데이터 지속성이 제공될 수 있다. 이 특징은 컨텍스트가 전용이면 로컬 변수들을 저장/복원해야 할 필요성을 제거한다.
많은 종래의 프로세서들에 따르면, 컨텍스트는 초기화되거나 조사될 수 있어야 하고, 그리고/또는 소프트웨어를 이용하여 교환될 수 있어야 한다. 이것은 인터립트 복귀들이 하드웨어와 소프트웨어 제어 컨텍스트 스위칭 사이를 구별할 수 있는 기능을 가져온다(임의의 인터럽트 네스팅(nesting)을 지원한다).
일부 실시예들에 따르면, 출원인에 의해 제조된 마이크로컨트롤러들의 dsPIC33 페밀리에 따른 예를 들어 디지털 신호 제어기에서는, 최대 4개의 추가 CPU 레지스터 컨텍스트들(W0 내지 W14)이 제공될 수 있다. 일부 실시예들에 따르면, 이하에서 보다 상세히 설명되는 바와 같이, 이것은 4개의 세트들의 섀도우(shadow) 레지스터들을 추가함으로써 수행될 수 있다. 또한, 다른 실시예들에 따르면, 더 많거나 적은 컨텍스트들이 제공될 수 있다. 스택 포인터(W15) 및 모든 다른 CPU 레지스터들은 모든 컨텍스트들에 공통으로 남아있을 수 있다. 컨텍스트들은 다양한 실시예들에 따른 하드웨어 또는 소프트웨어를 통해 교환될 수 있다.
하드웨어 컨텍스트 교환(swap)에서는, 예를 들어 퓨즈들에 의해 컨텍스트들이 인터럽트 우선순위 레벨(Interrupt Priority Level; IPL)에 할당되고 예외 처리(exception processing) 동안 투과적으로 교환된다. 이것은 현재 컨텍스트의 콘텐츠를 관련 섀도우 레지스터들에 저장된 컨텍스트의 콘텐츠와 자동으로 교환함으로써 제로 오버헤드로(with) 수행될 수 있다.
소프트웨어 컨텍스트 교환에서는, 컨텍스트들이 인터럽트로부터의 복귀 (RETFIE) 명령어(return from interrupt (RETFIE) instruction)를 이용하여 투과적으로 교환된다. 다시, 서비스 루틴에서 빠져나와 메인 프로그램으로 복귀하던지 관계없이, 이 명령어는 그 명령어가 실행될 필요가 있기 때문에 제로 오버헤드와의 컨텍스트 교환을 일으킨다. 일부 실시예들에 따르면, 컨텍스트들은 또한, 전용 CPU 명령어, 예를 들어 기억용 코드 "CTXTSWP(W)"를 이용하는 명령어를 사용하여 수동으로 교환될 수 있다. 컨텍스트들은 지속적인데, 즉 컨텍스트들은 교환될(swapped out of) 때 보존된다. 일부 실시예들에 따라, 현재의 활성 컨텍스트만이 데이터 메모리의 특수 기능 레지스터 공간에 메모리 맵핑될 수 있다. 따라서, 현재의 활성 컨텍스트는 조작될 수 있지만, 비활성 컨텍스트들은 변경될 수 없다.
인터럽트 서비스 루틴(interrupt service routine; ISR)들을 짧지만 자주 호출하였던 애플리케이션들, 예를 들어 스위칭 모드 전력 공급 장치(SMPS) 애플리케이션들에 있어서는, 인터럽트 입장/퇴장 오버헤드는 제한 성능 계수가 되었다. 저장/복원 CPU 레지스터들은 총 ISR 실행 시간의 30%까지 차지할(account for) 수 있다. 인터럽트 우선순위 레벨(IPL)에 근거하는 투과적인(transparent) 컨텍스트 교환은 동일한 클록 속도로 더 높은 성능을 (또는 동일한 처리량을 유지하는데 더 낮은 전력을) 가능케 한다.
다양한 실시예들에 따르면,
- 제로 또는 낮은 오버헤드를 구비함으로써 디바이스 성능을 상당히 향상시킬 수 있고;
- 어떠한 새로운 데이터 위험 요소(data hazards)도 도입하지 않고 네스팅된 인터럽트들로 동작함으로써 이해하고 사용하기에 단순하고;
- 디바이스 타이밍 관점에서 다루기 쉽고;
- 기존 Dev 툴에 쉽게 통합되고; 그리고
- 완벽하게 하위 호환성이 있는(backwards compatible), 비용적인 측면에서 효과적인 CPU 컨텍스트 교환 해결책이 제공될 수 있다.
도 1은 실시예에 따른 마이크로프로세서 또는 마이크로컨트롤러의 블록도를 도시한다. 복수의 내부의 및/또는 외부의 인터럽트 소스들을 제어/관리하도록 구성될 수 있는 인터럽트 제어기(120)와 연결되는 중앙 처리 유닛(CPU)(110)이 도시되어 있다. 도 1은 또한, 레지스터들(135a..n)을 포함하는 디폴트 컨텍스트(130), 및 컨텍스트 스위치 제어 유닛(160)을 통해 CPU(110)와 결합된 추가 레지스터 세트들(140)을 도시한다. 일반적으로, 중앙 처리 유닛은 하나 이상의 레지스터들, 제어 로직, 산술 로직 유닛, 명령어 디코더, 프로그램 카운터, 및 다양한 입/출력 인터페이스로 이루어진다고 고려된다. 도 1은 CPU(110)를 별도의 블록으로 도시하지만, 도 1에 도시된 요소들의 일부 또는 모두는 실제 CPU의 일원이라고 고려될 수 있음을 이해해야 한다.
위에 언급한 바와 같이, 컨텍스트는 복수의 소정 레지스터들의 콘텐츠에 의해 정의될 수 있다. 예를 들어, 도 1은 레지스터들(135a..135n)을 포함하는 컨텍스트(130)를 도시한다. 컨텍스트에 포함된 레지스터들의 수는 프로세서 구조에 따라 변경될 수 있다. 특정 프로세서 구조들에서 최소의 레지스터들만이 실제 컨텍스트를 정의한다. 따라서, 프로세서에 사용할 수 있는 한 서브세트의 레지스터들만이 컨텍스트를 정의한다. 사용자가 서브루틴 또는 인터럽트 서비스 루틴의 실행중에 다른 레지스터들을 조작하면, 사용자는 반드시 각각의 다른 레지스터들이 각각의 로드(load) 및 저장 명령어들에 의해 저장됨을 확인해야 한다. 하지만, 다른 실시예들은 컨텍스트를 정의할 모든 이용 가능한 CPU 레지스터들을 포함할 수 있다. 도 1은 복수의 추가 레지스터 세트들을 제공하는데 사용되는 메모리 블록(140)을 추가로 도시한다. 각 추가 레지스터 세트는 컨텍스트의 전체 콘텐츠를 저장할 수 있다. 즉, 각 추가 레지스터 세트는 현재의 컨텍스트만큼 많은 레지스터들을 갖는다. 예를 들면, 도 1에 도시된 바와 같이, 각 추가 레지스터 세트는 n개의 레지스터들을 갖는다. 추가 레지스터 세트들(140)은 전용 메모리 공간에 구현될 수 있다. 일 실시예에 따르면, 4개의 추가 세트들의 컨텍스트 레지스터들이 구현될 수 있다. 따라서, 블록들(130 및 140)은 5개의 서로 다른 컨텍스트들을 제공한다. 컨텍스트 스위치는 블록(130 또는 140)에 있을 수 있는 현재 세트의 레지스터들로부터 다른 비활성 4개의 레지스터 세트들 중 하나로의 스위치를 의미한다. 따라서, 각각의 컨텍스트 콘텐츠는 스위치시 변경되지 않고 유지된다. 몇몇 실시예들에 따르면, 액티브 컨텍스트만이 또한 데이터 메모리에 메모리 맵핑된다. 따라서, 현재의 활성 컨텍스트는 또한 데이터 메모리를 통해 액세스될 수 있다.
도 1은, 컨텍스트들 중 하나, 예컨대 디폴트 컨텍스트(130)를, 또는 추가 레지스터 세트 블록(140) 내의 레지스터 세트들 중 하나를, 선택하기 위해 제어 레지스터(150)에 의해 제어되는 컨텍스트 스위치 제어 유닛(160)을 도시한다. 게다가, 인터럽트 제어기(120)는 모든 내부의 인터럽트 및/또는 외부의 인터럽트를 다루고, 또한 실제 CPU의 일부분으로 고려될 수 있다. 인터럽트 제어기는 서로 다른 우선순위 레벨들을 갖는 인터럽트들을 발생시키기 위해 CPU(110)에 하나 이상의 인터럽트 신호들을 제공할 수 있다. 실시예에 따르면, 각각의 우선순위 레벨은 특정 레지스터 세트, 디폴트 레지스터 세트(130), 또는 추가 레지스터 세트들(140) 중 하나에 할당될 수 있다. 따라서, 인터럽트가 발생할 때마다, 스위칭 유닛(160)은 관련 컨텍스트 레지스터 세트를 자동으로 선택하도록 제어된다. 게다가, CPU는 소위 수동 컨텍스트 스위치를 일으키는 전용 명령어를 구비하거나, 또는 수동 컨텍스트 스위치를 수행하기 위해 제어 레지스터(150)에 쓸 수 있게 한다.
도 2는 컨텍스트 상태 레지스터의 형태로 제어 레지스터(150)의 예를 도시한다. 일부 실시예들에 따르면, 이러한 레지스터는 단지 판독될 수 있다. 레지스터(150)는 두 개의 별도의 비트필드들(CCTX[2:0] 및 MCTX[2:0])을 제공할 수 있다. 실시예에 따른 각 비트필드는 최대 8개의 서로 다른 컨텍스트들을 정의할 수 있게 하는 3개의 비트들을 갖는다. 구현된 컨텍스트 레지스터 세트들의 개수에 따라 더 많거나 적은 비트들이 사용될 수 있다. 비트필드(CCTX[2:0])는 현재 선택된 컨텍스트를 나타내지만, 비트필드(MCTX[2:0])는 수동으로 설정된 마지막 컨텍스트를 나타낸다. 따라서, CPU의 현재 상태에 의존하여, 이 비트필드들의 콘텐츠는 서로 다를 수 있다. 컨텍스트 스위치가 자동으로 개시되든지 수동으로 개시되든지 간에 발생할 때마다 비트필드(CCTX[2:0])는 업데이트된다. 비트필드(MCTX[2:0])는 컨텍스트를 스위칭하기 위한 각각의 명령어가 실행될 때 수동 컨텍스트 스위치 동안 단지 업데이트된다.
도 3은 전형적인 16 비트 마이크로컨트롤러의 보다 상세한 블록도를 도시한다. 하지만, 다양한 실시예들에 따른 개념이 더 높거나 낮은 마이크로프로세서 또는 마이크로컨트롤러들에 구현될 수 있다. 도 3에 도시된 CPU의 실시예는 종래의 마이크로컨트롤러 요소들 및 디지털 신호 컨트롤러 기능들을 갖는 혼합 신호 마이크로컨트롤러에 관한 것이다. 따라서, CPU의 블록도는 컨텍스트의 일부분으로 고려되지 않는 다양한 레지스터들을 보여준다. 여기서, 컨텍스트는 워킹 레지스터들(working registers)(WREG0 ... WREG14)에 의해 형성된다. 추가로, 각자가 컨텍스트를 형성하기 위해 15개의 레지스터들을 포함하는 4개의 컨텍스트 블록이 제공된다. WREG15는 스택 포인터이고 컨텍스트의 일부분으로 여겨지지 않는 상태 레지스터와 유사하다. 알 수 있는 바와 같이, 특정 레지스터들은 이 디바이스의 두 동작 모드들에, 즉 마이크로컨트롤러로서 동작할 때 또는 디지털 신호 컨트롤러로서 동작할 때, 사용될 수 있다.
도 4는 컨텍스트들이 예를 들어 프로그램 가능한 퓨즈들을 사용하여 인터럽트 우선순위 레벨과 연관될 수 있음을 도시한다. 하지만, 제어 레지스터가 다양한 섀도우 레지스터 세트들을 인터럽트 우선순위 레벨과 동적으로 연관시키도록 사용될 수 있다. 도 4의 타이밍도의 위에는 순차적인 사이클들이 나타나 있다. 사이클(1)의 시작에서, 예외 처리는 인터럽트 요청 신호(int_request)를 어서트(assert)함으로써 시작된다. 사이클(1) 동안에는 이전 또는 현재의 컨텍스트가 여전히 활성이므로, 현재 실행된 명령어는 여전히 적절한 컨텍스트를 이용할 수 있다. 같은 시간 동안에는, 현재의 인터럽트 우선순위 레벨이 새로운 컨텍스트와 연관되는지가 확인된다. 사이클(2) 동안에는, 필요하면 컨텍스트는 인터럽트 우선순위 레벨에 따라 새로운 컨텍스트로 스위칭된다. 비-동작 명령어들(no-operation instructions)을 삽입하는 사이클(2 및 3) 동안에 또한 알 수 있는 바와 같이, 레지스터(WREG15)의 컨텐츠는 스택에 푸시(push)된다. 인터럽트 서비스 루틴의 제 1 명령어의 실행은 사이클(4)에서 발생한다.
일부 실시예들에 따르면, 컨텍스트들은 명령어를 이용하여 수동으로 교환될 수 있다. 이것은 인터럽트들(interrupts)(예컨대, 라이브러리 호출들) 외부의 컨텍스트들을 이용하기 위한 수단을 제공하고, 여기서는 IPL들에 할당되지 않은 컨텍스트들만이 사용되어야 한다. 게다가, 이것은 예외 처리에 의한 사용에 앞서 컨텍스트들을 초기화하기 위한 수단을 제공하고, 여기서 인터럽트들은 디스에이블(disable)되어야 한다. 또한, 이것은 회로 내 에뮬레이터들 또는 디버거들(및 테스트, 현재 전부 정밀하게 조사 중이지만)에서와 같은 개발 툴(tool)들을 위한 컨텍스트 관찰 가능성 및 제어 가능성을 제공한다. 명령어들(MCTXI 및 CCTXI)은 다양한 실시예들에 따른 CTXTSWP(W) 실행 동안 업데이트될 수 있다.
도 5는 워킹 레지스터(W) 내에 유지되는 문자(literal) 또는 값을 이용하여 타겟 컨텍스트를 특정하는 가능한 컨텍스트 교환 명령어들의 예를 도시한다.
게다가, 인터럽트로부터의 복귀 명령어(RETFIE)는 선택적으로 적절한 컨텍스트로 복귀한다:
IF
Unstacked IPL is associated with a context, swap to that context
ELSE
Return to manual swap context identified in MCTXI register.
예외 처리 동작에 관련하는 이 접근책은 컨텍스트들이 자동으로 및 수동으로 둘 다 스위칭되는 예외들 및/또는 호출들을 네스팅할 때 컨텍스트 일관성을 보장한다. 일부 실시예들에 따른 수동 컨텍스트 스위치는 각각의 기능을 제공하도록 실행될 소스 코드를 필요로 하는데, 예를 들어 위에 개시된 실시예들에서는 하나의 명령어가 컨텍스트 스위치를 강제하도록 CPU에 의해 실행되어야 한다. 자동 컨텍스트 스위치는 컨텍스트 스위치가 인터럽트 발생시 자동으로 수행되기 때문에 실제 스위치를 일으키도록 실행될 어떠한 코드도 필요로 하지 않는다. 어느 경우에나, 일단 스위치가 수행되었다면, 각각 선택된 컨텍스트를 보여주는 제어 레지스터가 업데이트된다.
출원인에 의해 제조된 dsPIC33 페밀리 마이크로컨트롤러의 아키텍처를 이용하여 도 3에 도시된 바와 같은 일 실시예에 따른 특정 구현이 이하에서 설명된다. 디폴트 컨텍스트(0) 외에도, 최대 4개의 CPU 레지스터 컨텍스트들(컨텍스트 1 내지 4)이 파라미터(NUM_ALT_CPU_CONTEXTS)의 값을 기반으로 CPU 코어에 예시될 수 있다. NUM_ALT_CPU_CONTEXTS = 0이면, 디바이스 내부에는 컨텍스트(0)만이 존재한다. 각각의 추가 컨텍스트는 WREG0 내지 WREG14로 이루어지고 지속적이다. 즉, CPU가 해당 컨텍스트를 떠날(leave) 때마다 각 컨텍스트의 콘텐츠가 변경되지는 않는다. 모든 컨텍스트들 내의 레지스터들(WREG0 내지 WREG14)은 리셋 동안 소거되고, 초기화되지 않은 레지스터 리셋이 또한 임의의 활성 컨텍스트에 적용된다. 어떠한 다른 CPU 레지스터들도 추가 컨텍스트들에 포함되지 않는다. PUSH/POP.s 명령어들이 어떠한 컨텍스트에서도 실행될 수 있다. 컨텍스트들은 하드웨어를 통해(자동) 또는 소프트웨어를 이용하여(수동) 스위칭될 수 있다:
● 하드웨어 컨텍스트 스위칭은 자동적이고 사용자에게 투과적이다(transparent). 컨텍스트가 특정 인터럽트 우선순위 레벨(IPL)과 연관될 때, 컨텍스트는 그 레벨에서 임의의 인터럽트의 예외 처리 동안 도입된다(entered). 컨텍스트는 인터럽트 ISR의 RETFIE 명령어의 실행 동안 퇴거된다. 하드웨어 컨텍스트 스위칭은 어떠한 추가 오버헤드도 기동하지 않는다.
● CTXTSWP(W) 명령어를 사용하는 소프트웨어 컨텍스트 스위칭은 사용자 제어하에 있다. 실시예에 따르면, 명령어의 실행은 소프트웨어 인터록(interlock)을 만족시키는 것을 조건으로 한다.
실시예에 따르면, 컨텍스트 상태 레지스터(CTXTSTAT)는 현재의 컨텍스트 식별자(CCTXI[2:0]) 상태 필드 및 수동 컨텍스트 식별자(MCTXI[2:0]) 상태 필드를 포함하는 어드레스(0x005A)에 위치한 판독 전용 레지스터이다. CCTXI[2:0] 필드는 사용자에게 어느 CPU W-레지스터 컨텍스트가 현재 사용되고 있는지를 나타낸다. 이 필드는 자동 인터럽트 기반 하드웨어 스위칭을 통해 또는 CTXTSWP(W) 명령어의 실행에 의해 생기는 컨텍스트 변화의 결과로서, W-레지스터 컨텍스트가 변경될 때마다 업데이트된다. MCTXI[2:0] 필드는 사용자에게 어느 CPU W-레지스터 컨텍스트가 CTXTSWP(W) 명령어의 실행에 의해 생기는 컨텍스트 변화의 결과로서, 가장 최근에 선택되었는지를 나타낸다. MCTXI[2:0] 필드는 RETFIE 명령어에 의해 사용되어, 어떠한 자동 인터럽트 기반 컨텍스트 스위칭도 없는 경우에 수동 (소프트웨어) 컨텍스트 스위치들을 추적한다.
각각의 추가 컨텍스트는 FALTREF 퓨즈 내의 3-비트 퓨즈 (CTXTn[2:0]) 필드의 값에 의해 정의된 CPU 인터럽트 우선순위 레벨(IPL)과 연관된다. 퓨즈 비트 필드들은 표 1 및 도 6에 도시된 바와 같이 각 컨텍스트에 할당된다.
CTXTn 퓨즈 필드
할당된 IPL CTXTn[2:0]
없음 3'b111
7 3'b110
6 3'b101
5 3'b100
4 3'b011
3 3'b010
2 3'b001
1 3'b000
일부 실시예들에 따르면, 트랩(trap)들을 위한 컨텍스트 스위칭은 지원될 수 없다. CTXTn[2:0] 퓨즈 필드가 지워질 때에는(CTXTn[2:0] = 3'b111), 어떠한 IPL도 해당 컨텍스트와 연관되지 않는다.
FALTREG 퓨즈가 지워질 때 어떠한 대체 컨텍스트들도 할당되지 않음을 보장하기 위해, CTXTn 퓨즈 필드 내에 프로그램된 3-비트 값은 (IPL-1)임에 유의한다. 예를 들면, 컨텍스트 1을 IPL 6과 연관시키기 위해, 사용자는 3'b101을 CTXT1[2:0]에 프로그램할 것이다. 추가 컨텍스트에 할당되지 않은 모든 IPL 레벨들은 현재의 컨텍스트를 항상 이용할 것이다(즉, 컨텍스트는 변경되지 않을 것이다). 대안적으로, 일부 실시예들에 따르면, 할당되지 않은 IPL 레벨은 디폴트 컨텍스트, 예를 들어 제 1 컨텍스트를 정의하는 레지스터 세트에 자동으로 할당될 수 있다.
사용자가 부주의로 1보다 많은 추가 컨텍스트를 동일한 IPL에 할당했다면, CPU 내의 하드웨어는 가장 낮은 수를 갖는 컨텍스트가 사용되도록 할당에 우선순위를 매길 것이다(예를 들면, CTXT1 = CTXT2 = 3'b110이면, 컨텍스트 1이 IPL7에 할당될 것이고 컨텍스트 2는 비할당될 것이다). 이러한 시나리오가 잘못되었다고 여겨지더라도(따라서 추천되지 않더라도), 사용되지 않은 (비할당된) 컨텍스트는 소프트웨어 컨텍스트 스위칭 이용에 사용될 수 있는 상태로 유지될 것이다. 예외 처리 동안, CPU는 CTXTn 필드들을, CPU가 IPL에 응답하는(즉, IPL로 이동하는 프로세스에서) 그 IPL과 비교할 것이다. 매치가 있으면, CPU는 예외 처리 동안 선택된 컨텍스트로 투과적으로 스위칭할 것이다. 매치가 없으면, CPU는 현재 컨텍스트를 계속 이용할 것이다. 새로운 (또는 기존) 컨텍스트는 관련 ISR의 시작시에 즉시 이용될 수 있을 것이다. 예외 처리는 (통상시처럼) 복귀 IPL을 축적한다. (stack) 현재의 활성 컨텍스트는 현재의 컨텍스트 식별자 필드(CTXTSTAT.CCTXI[2:0]) 내의 CTXTSTAT 레지스터에 표시된다. 이 레지스터는 CPU가 또 하나의 컨텍스트로 스위칭할 때마다 업데이트된다. RETFIE 명령어의 실행 동안, 복귀 IPL은 (복귀 PC 및 나머지 SRL 비트들과 함께) 통상시처럼 축적되지 않으며, 대체(alternative) 컨텍스트들에 할당된 IPL들과 비교된다. 매치가 발견되면, RETFIE는 할당된 컨텍스트로 다시 스위칭할 것이다. 어떠한 매치도 발견되지 않으면, RETFIE는 수동 컨텍스트 식별자 상태 레지스터(CTXTSTAT.MCTXI[2:0])에 정의된 컨텍스트로 스위칭할 것이다. MCTXI[2:0]에 유지된 수동 컨텍스트로 스위칭하는 것은 애플리케이션 코드로 소프트웨어 및 인터럽트 기반 컨텍스트 스위칭을 둘 다 사용할 수 있게 한다. RETFIE 실행 동안 CPU는 (필요하면) 선택된 컨텍스트로 투과적으로 스위칭할 것이다. 새로운 (또는 기존) 컨텍스트는 다음 명령어의 실행의 시작시에 즉시 이용될 수 있을 것이고, 이에 따라 CTXTSTAT.CCTXI[2:0]은 업데이트될 것이다.
2개의 추가 CPU 컨텍스트들을 지원하는 디바이스에 대한 (소프트웨어 컨텍스트 스위칭이 없는) 코드 흐름 예가 도 7에 도시되어 있다. 컨텍스트 1(C1)은 IPL6에 할당되고, 컨텍스트 2(C2)는 IPL3에 할당된다.
컨텍스트가 IPL에 할당되지 않을 때, 또는 그 IPL과 연관된 인터럽트들이 디스에이블될 때, 사용자는 (CPU IPL에 영향을 미치지 않을) CTXTSWP(W) 명령어들 중 하나를 실행함으로써 소프트웨어를 통해 컨텍스트들을 스위칭하는 것을 선택할 수 있다. CTXTSWP(W) 명령어들은 일 실시예에 따른 PWRSAV 연산 코드(opcode)의 서브-디코드일 수 있다. CTXTSWP 명령어는 리터럴 값(literal value)을 사용하여 타겟 컨텍스트를 결정한다. CTXTSWPW 명령어는, 타겟 컨텍스트가 W 레지스터의 LSB들에서 정의되는 경우에는 레지스터 직접 어드레싱(register direct addressing)을 이용한다. CTXTSWP(W) 명령어들의 실행은 특정 실시예에 따른 소프트웨어 인터록의 영향을 받을 수 있다. 성공적으로 실행될 때, 상기 명령어는 두 개의 사이클들에서 명령어 오퍼랜드(operand)에 의해 정의된 컨텍스트로 스위칭하고 그리고 수동 컨텍스트 식별자(CTXTSTAT.MCTXI[2:0])와 현재 컨텍스트 식별자(CTXTSTAT.CCTXI[2:0]) 레지스터 필드를 둘 다 새로운 컨텍스트 값으로 업데이트할 것이다. 새로운 컨텍스트는 다음 명령어의 실행의 시작시에(즉, 확실히(without a hazard)) 즉시 사용될 수 있을 것이다. 상기 명령어는 디스에이블될 것이고 어떠한 에러도 보고됨이 없이(즉, 어떠한 영향도 미치지 않음) 2 사이클 FNOP가 다음과 같은 사용자 시도를 해야 함에 따라 실행할 것이다:
● 지원되지 않는 컨텍스트로 스위칭하려는 시도
또는
● 현재의 활성 컨텍스트로 스위칭하려는 시도
또는
● 추가 컨텍스트들을 지원하지 않는 디바이스에서(on) 명령어를 실행하려는 시도(즉, NUM_ALT_CPU_CONTEXTS = 0)
도 8은 혼합 하드웨어 및 수동 소프트웨어 컨텍스트 스위칭의 예를 보여준다. 소프트웨어(수동 스위칭)를 통한 스위칭 컨텍스트들은 주로 IPL에 할당된 컨텍스트들을 초기화하는 수단으로 이용되도록 의도된다(그 IPL과 연관된 모든 인터럽트들이 디스에이블될 때). 초기화 소프트웨어는 활성 컨텍스트를 디폴트 컨텍스트 0으로 되돌릴 것으로 (이것이 필요하지 않지만, 선택된 컨텍스트가 코드의 어딘가 다른 곳에서는 사용되지 않는다면) 예상된다. 하지만, 일부 컨텍스트들을 IPL들에 기반한 하드웨어 스위칭에 할당하고, 애플리케이션 런-타임 실행 동안 CTXTSWP(W) 명령어를 이용하는 소프트웨어 스위칭과 함께 사용하기 위해 다른 컨텍스트들을 남겨두는 것이 가능하다. RETFIE 명령어가 복귀된 (적층되지 않은) IPL이 대체 컨텍스트와 연관됨을 찾지 못한다면, 그것이 CTXTSTAT.MCTXI[2:0]에 유지되는 마지막으로 알려진 수동 업데이트된 컨텍스트 번호로 복귀하도록 수동 컨텍스트 식별자(CTXTSTAT.MCTXI[2:0])는 임의의 수동으로 스위칭된 컨텍스트들을 추적하는데 사용된다. 리셋시, CTXTSTAT.MCTXI[2:0] = 3'b000이다. 위에 논의된 바와 같이, 소프트웨어 컨텍스트 스위칭이 애플리케이션 메인 코드 내에 이용되지 않는다면, 사용자는 초기화 이후에 CTXTSTAT.MCTXI[2:0] = 3'bOOO(디폴트 컨텍스트)임을 보장해야 할 것으로 예상된다.
예외들은 CTXTSWP(W) 명령어들에 의해 금지되지 않는다. 예외가 CTXTSWP(W) 실행의 어느 쪽 사이클의 CPU(Q1)에든 도달하면, 상기 명령어는 예외 처리의 제 1 사이클들 동안 완료될 것이다. 예외가 CTXTSWP(W) 명령어 이전에 혹은 이후에 도달하면, 예외 처리는 정상적으로 진행될 것이다.
또 하나의 특정 실시예에 따르면, 소프트웨어 인터록이 만족되면(즉, nvm_cpu_op_unlock이 CTXTSWP(W)의 사이클 1 동안 어서트되면), 컨텍스트 교환 및 CXTXSTAT 레지스터 업데이트는 인터럽트 또는 트랩 처리기 벡터 페치(trap handler vector fetch)가 시작될 때까지는 완료될 것이다. 예외 처리는 정상적으로 진로를 지시할(vector) 것이고, 처리기는 CTXTSWP(W) 명령어 다음의 어드레스로 복귀할 것이다. 예외가 또 하나의 컨텍스트에 할당되는 IPL에서의 인터럽트이면(CTXTSWP(W)에 할당된 컨텍스트들 및 IPL-기반 사용은 동시에 이용될 때 배타적이어야 함), 컨텍스트는 예외 처리 동안 다시 스위칭할 것이다. 하지만, IPL 기반 컨텍스트 변화는 어떠한 소프트웨어 구동 컨텍스트 변화 후에도 발생할 것이고, 따라서 관련 ISR RETFIE 명령어는 올바른 컨텍스트(즉, CTXTSWP(W) 명령어에 의해 단지 선택된 컨텍스트)로 복귀할 것이다.
다른 또 하나의 실시예에 따르면, 소프트웨어 인터록이 만족되지 않으면, CTXTSWP(W)는 2~ FNOP로서 실행될 것이고, 컨텍스트는 변경되지 않을 것이다. 예외 처리는 정상적으로 진로를 지시할 것이고, 처리기는 CTXTSWP(W) 명령어 다음의 어드레스로 복귀할 것이다.
이 특정 실시예에 따른 CPU는 0과 4의 추가 CPU 레지스터 컨텍스트들 사이를 지원할 수 있다. 도 3에 도시된 바와 같은 CPU 레지스터 컨텍스트는 WREGO 내지 WREG14로 정의된다. 어떠한 다른 CPU 레지스터도 추가 컨텍스트들에 포함되지 않는다. 컨텍스트 스위칭은 예외 처리 및 RETFIE 동안에 또는 CTXTSWP(W) 명령어의 실행을 통해 달성된다.
CTXTSWP(W) 명령어들은 2 사이클들의 명령어 오퍼랜드에 정의된 컨텍스트로 스위칭할 것이다. 새로운 컨텍스트는 다음 명령어의 실행의 시작시 즉시 이용될 수 있을 것이다. CTXTSWP(W) 명령어들은 또한, 새롭게 선택된 컨텍스트 값으로 CTXTSTAT.MCTXI[2:0] 레지스터 필드를 업데이트할 것이다.
특정 실시예에 따라 CTXTSWP(W) 명령어들에 대한 일부 사용 고려 사항들이 있다: 1. SR은 추가 컨텍스트들의 일부가 아님을 유의해야 한다. 결과적으로, CPU 레지스터 컨텍스트들을 스위칭하기 위해 CTXTSWP(W)를 이용할 때, 사용자들은 SRL 레지스터를 수동으로 저장/복원해야 할 것이다. 2. 복귀 컨텍스트가 스택 CPU IPL 값에 의해 함축적으로 정의되는 하드웨어 컨텍스트 스위칭과는 다르게, CTXTSWP(W) 명령어들은 어떠한 이력(history)도 저장하지 않는다. 따라서, CTXTSWP(W) 명령어들을 이용할 때 CPU 컨텍스트들을 추적하는 것은 사용자 책임이다.
(제 2 사이클에서) SR을 언-스택(un-stack)한 후, RETFIE 명령어는 언-스택된 IPL[2:0] 값을 조사할 것이다. IPL[2:0]이 CPU 레지스터 컨텍스트와 연관되면, 복귀 명령어는 그 컨텍스트로 스위칭할 것이다. IPL[2:0]이 CPU 레지스터 컨텍스트와 연관되지 않으면, 복귀 명령어는 수동 컨텍스트 식별자(CTXTSTAT.MCTXI[2:0]) 레지스터 필드에 유지된 컨텍스트 넘버로 스위칭할 것이다. 이것은, 예외 처리 동작에 연동하여, 컨텍스트들이 자동으로 및 수동으로 둘 다 스위칭되는 예외들 및/또는 호출들을 네스팅할 때 컨텍스트 일관성을 보장한다. 위의 두 경우들 모두에서, 현재 컨텍스트 식별자(CTXTSTAT.CCTXI[2:0]) 레지스터 필드는 그에 따라 업데이트된다. 수동 컨텍스트 식별자(CTXTSTAT.MCTXI[2:0]) 레지스터 필드의 상태는 영향받지 않는다. 새로운 컨텍스트는 다음 명령어의 실행의 시작시에 (어떠한 RAW 위험도 없이) 즉시 사용될 수 있을 것이다. 이전의 컨텍스트의 콘텐츠는 어떠한 방법으로도 스위치에 의한 영향을 받지 않는다.
또 하나의 실시예에 따르면, 컨텍스트 스위치를 수행하기 위한 어떠한 특수 명령어도 필요치 않을 수 있는데, 그 이유는 일부 실시예들에 따른 수동 컨텍스트 스위치에서 제어 레지스터 내의 각각의 비트들을 수동으로 설정함으로써 컨텍스트 스위치가 수행되기 때문이다. 이러한 실시예에서, 제어 레지스터는 판독 가능해야 하고 적어도 부분적으로는 쓰기 가능해야 한다. 두 방법들 모두에서는, 예를 들어 오버헤드를 갖는 종래의 인터럽트 서비스 루틴에서처럼, 어떠한 오버헤드 명령어들도 컨텍스트 레지스터들의 콘텐츠를 실제로 저장하기 위하여 실행될 필요가 없다.
상기 언급된 다양한 실시예들은 다른 실시예들의 다양한 특징들과 결합될 수 있다. 본 명세서에서 언급되지 않는 한, 다양한 실시예들에 설명된 어떠한 특징도 반드시 배타적인 특징을 갖는 것은 아니다. 따라서, 특징들의 다양한 조합은 다양한 실시예들에 개시된 처리 유닛에 구현될 수 있다.

Claims (26)

  1. 중앙 처리 유닛(CPU)으로서,
    명령어들의 실행을 중단하기 위한 인터럽트 유닛;
    레지스터들의 각 세트가 동일한 개수의 CPU 레지스터들을 구비하는 복수의 컨텍스트 정의 레지스터 세트들;
    선택된 레지스터 세트를 상기 CPU 내에 결합시키고, 그리고 예외의 발생시 상기 복수의 컨텍스트 정의 레지스터 세트들 중 소정 레지스터 세트로 스위칭하는 스위칭 유닛; 및
    명령어에 의해 개시되는 상기 복수의 컨텍스트 정의 레지스터의 레지스터 세트의 선택을 제어하도록 구성되고, 또한 현재 사용된 컨텍스트를 나타내도록 동작 가능한 제어 레지스터를 포함하는, 중앙 처리 유닛.
  2. 제 1 항에 있어서,
    상기 제어 레지스터는 현재의 컨텍스트를 나타내는 제 1 비트필드, 및 상기 명령어에 의해 선택된 가장 최근의 컨텍스트를 나타내는 제 2 비트필드를 포함하는, 중앙 처리 유닛.
  3. 제 2 항에 있어서,
    상기 CPU는 컨텍스트 스위치를 개시하기 위한 명령어를 실행하도록 동작 가능한, 중앙 처리 유닛.
  4. 제 3 항에 있어서,
    상기 명령어는 전용 컨텍스트 스왑 명령어인, 중앙 처리 유닛.
  5. 제 4 항에 있어서,
    상기 제어 레지스터는 판독 전용인, 중앙 처리 유닛.
  6. 제 3 항에 있어서,
    상기 제어 레지스터는 판독 가능하고 적어도 부분적으로 쓰기 가능하며, 상기 명령어는 컨텍스트 스위치를 개시하도록 상기 제어 레지스터의 콘텐츠를 변경하기 위해 상기 제어 레지스터에 제공되는 이동 데이터 명령어인, 중앙 처리 유닛.
  7. 제 1 항에 있어서,
    상기 인터럽트 유닛은 복수의 우선순위 레벨들을 복수의 인터럽트 소스들에 할당하도록 동작 가능한 인터럽트 제어기를 포함하는, 중앙 처리 유닛.
  8. 제 7 항에 있어서,
    상기 복수의 레지스터 세트들의 각각은 인터럽트 레벨에 할당될 수 있고, 이에 따라, 인터럽트 발생시 상기 복수의 컨텍스트 정의 레지스터 세트들의 각각의 레지스터 세트가 상기 인터럽트 레벨에 따라 상기 스위칭 유닛에 의해 선택되는, 중앙 처리 유닛.
  9. 제 8 항에 있어서,
    할당되지 않은 인터럽트 레벨은 상기 복수의 컨텍스트 정의 레지스터 세트들 중 디폴트 레지스터 세트로 디폴트하는, 중앙 처리 유닛.
  10. 제 8 항에 있어서,
    할당되지 않은 인터럽트 레벨에서 인터럽트 발생시에는 어떠한 컨텍스트 스위치도 개시되지 않는, 중앙 처리 유닛.
  11. 제 8 항에 있어서,
    레지스터 세트가 또 하나의 레지스터 세트에 이미 할당되어 있던 우선순위 레벨에 할당되면, 상기 CPU는 가장 낮은 수를 갖는 레지스터 세트를 선택된 우선순위 레벨에 할당하고 그리고 각각의 다른 레지스터 세트를 할당하지 않도록 동작 가능한, 중앙 처리 유닛.
  12. 제 8 항에 있어서,
    상기 인터럽트 레벨들을 상기 복수의 레지스터 세트들 중 하나의 세트에 할당하기 위한 퓨즈 필드를 더 포함하는 중앙 처리 유닛.
  13. 제 1 항에 있어서,
    컨텍스트 스위치가 수행된 후, 상기 제어 레지스터는 새로운 컨텍스트로 업데이트되는, 중앙 처리 유닛.
  14. 레지스터들의 각 세트가 동일한 개수의 CPU 레지스터들을 구비하는 복수의 컨텍스트 정의 레지스터 세트들을 포함하는 중앙 처리 유닛(CPU)에서 컨텍스트 스위치를 수행하기 위한 방법으로서,
    예외의 발생시 상기 복수의 컨텍스트 정의 레지스터 세트들 중 소정 레지스터 세트로 자동으로 스위칭하는 것; 및
    컨텍스트 제어 레지스터에서 현재 사용된 컨텍스트를 나타내는 것을 포함하고,
    상기 복수의 컨텍스트 정의 레지스터의 레지스터 세트의 선택은 추가로 명령어를 실행함으로써 수동으로 개시될 수 있는, 컨텍스트 스위치 수행 방법.
  15. 제 14 항에 있어서,
    상기 컨텍스트 제어 레지스터는 현재의 컨텍스트를 나타내는 제 1 비트필드, 및 상기 명령어에 의해 선택된 가장 최근의 컨텍스트를 나타내는 제 2 비트필드를 포함하는, 컨텍스트 스위치 수행 방법.
  16. 제 15 항에 있어서,
    컨텍스트 스위치를 개시하기 위한 명령어를 실행하는 것을 더 포함하는, 컨텍스트 스위치 수행 방법.
  17. 제 16 항에 있어서,
    상기 명령어는 전용 컨텍스트 스왑 명령어인, 컨텍스트 스위치 수행 방법.
  18. 제 17 항에 있어서,
    상기 제어 레지스터는 판독 전용인, 컨텍스트 스위치 수행 방법.
  19. 제 16 항에 있어서,
    상기 제어 레지스터는 판독 가능하고 적어도 부분적으로 쓰기 가능하며, 상기 명령어는 컨텍스트 스위치를 개시하도록 상기 컨텍스트 제어 레지스터의 콘텐츠를 변경하기 위해 상기 컨텍스트 제어 레지스터에 제공되는 이동 데이터 명령어인, 컨텍스트 스위치 수행 방법.
  20. 제 14 항에 있어서,
    복수의 우선순위 레벨들을 복수의 인터럽트 소스들에 할당하는 것을 더 포함하는, 컨텍스트 스위치 수행 방법.
  21. 제 20 항에 있어서,
    상기 복수의 레지스터 세트들의 각각은 인터럽트 레벨에 할당될 수 있고, 이에 따라, 인터럽트 발생시 상기 복수의 컨텍스트 정의 레지스터 세트들의 각각의 레지스터 세트가 상기 인터럽트 레벨에 따라 스위칭 유닛에 의해 선택되는, 컨텍스트 스위치 수행 방법.
  22. 제 21 항에 있어서,
    할당되지 않은 인터럽트 레벨은 상기 복수의 컨텍스트 정의 레지스터 세트들 중 디폴트 레지스터 세트로 디폴트하는, 컨텍스트 스위치 수행 방법.
  23. 제 21 항에 있어서,
    할당되지 않은 인터럽트 레벨의 인터럽트 발생시에는 어떠한 컨텍스트 스위치도 개시되지 않는, 컨텍스트 스위치 수행 방법.
  24. 제 21 항에 있어서,
    레지스터 세트가 또 하나의 레지스터 세트에 이미 할당되어 있던 우선순위 레벨에 할당되면, 상기 CPU는 가장 낮은 수를 갖는 레지스터 세트를 선택된 우선순위 레벨에 할당하고 그리고 각각의 다른 레지스터 세트를 할당하지 않도록 동작 가능한, 컨텍스트 스위치 수행 방법.
  25. 제 21 항에 있어서,
    상기 인터럽트 레벨들을 상기 복수의 레지스터 세트들 중 하나의 세트에 할당하기 위해 퓨즈 필드를 제공하는 것을 더 포함하는, 컨텍스트 스위치 수행 방법.
  26. 제 14 항에 있어서,
    컨텍스트 스위치가 수행된 후, 상기 컨텍스트 제어 레지스터를 새로운 컨텍스트로 업데이트하는 것을 더 포함하는, 컨텍스트 스위치 수행 방법.
KR1020157023608A 2013-03-12 2014-03-07 프로그램 가능한 cpu 레지스터 하드웨어 컨텍스트 스왑 메커니즘 KR20150128680A (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US201361777887P 2013-03-12 2013-03-12
US61/777,887 2013-03-12
PCT/US2014/022056 WO2014159123A1 (en) 2013-03-12 2014-03-07 Programmable cpu register hardware context swap mechanism

Publications (1)

Publication Number Publication Date
KR20150128680A true KR20150128680A (ko) 2015-11-18

Family

ID=50442635

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020157023608A KR20150128680A (ko) 2013-03-12 2014-03-07 프로그램 가능한 cpu 레지스터 하드웨어 컨텍스트 스왑 메커니즘

Country Status (6)

Country Link
US (1) US9619231B2 (ko)
EP (1) EP2972842B1 (ko)
KR (1) KR20150128680A (ko)
CN (1) CN105144100B (ko)
TW (1) TWI619076B (ko)
WO (1) WO2014159123A1 (ko)

Families Citing this family (25)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10732976B2 (en) * 2013-01-10 2020-08-04 Nxp Usa, Inc. Integrated circuit processor and method of operating the integrated circuit processor in different modes of differing thread counts
US9858083B2 (en) * 2013-03-14 2018-01-02 Microchip Technology Incorporated Dual boot panel SWAP mechanism
US9928094B2 (en) * 2014-11-25 2018-03-27 Microsoft Technology Licensing, Llc Hardware accelerated virtual context switching
US20160170466A1 (en) * 2014-12-15 2016-06-16 Jefferson H. HOPKINS Power saving multi-width processor core
US10802866B2 (en) 2015-04-30 2020-10-13 Microchip Technology Incorporated Central processing unit with DSP engine and enhanced context switch capabilities
JP2017037370A (ja) * 2015-08-06 2017-02-16 富士通株式会社 計算機、プロセス制御方法およびプロセス制御プログラム
GB2547912B (en) * 2016-03-02 2019-01-30 Advanced Risc Mach Ltd Register access control
US10496573B2 (en) * 2017-03-31 2019-12-03 Intel Corporation Context-sensitive interrupts
US10489382B2 (en) * 2017-04-18 2019-11-26 International Business Machines Corporation Register restoration invalidation based on a context switch
US10838733B2 (en) 2017-04-18 2020-11-17 International Business Machines Corporation Register context restoration based on rename register recovery
US10649785B2 (en) 2017-04-18 2020-05-12 International Business Machines Corporation Tracking changes to memory via check and recovery
US10572265B2 (en) 2017-04-18 2020-02-25 International Business Machines Corporation Selecting register restoration or register reloading
US10552164B2 (en) 2017-04-18 2020-02-04 International Business Machines Corporation Sharing snapshots between restoration and recovery
US11010192B2 (en) 2017-04-18 2021-05-18 International Business Machines Corporation Register restoration using recovery buffers
US10564977B2 (en) 2017-04-18 2020-02-18 International Business Machines Corporation Selective register allocation
US10963261B2 (en) 2017-04-18 2021-03-30 International Business Machines Corporation Sharing snapshots across save requests
US10540184B2 (en) 2017-04-18 2020-01-21 International Business Machines Corporation Coalescing store instructions for restoration
US10545766B2 (en) 2017-04-18 2020-01-28 International Business Machines Corporation Register restoration using transactional memory register snapshots
US10782979B2 (en) 2017-04-18 2020-09-22 International Business Machines Corporation Restoring saved architected registers and suppressing verification of registers to be restored
US10740108B2 (en) 2017-04-18 2020-08-11 International Business Machines Corporation Management of store queue based on restoration operation
CN109117253B (zh) * 2017-06-26 2022-05-24 阿里巴巴集团控股有限公司 一种微内核调度的方法和装置
JP2019219984A (ja) * 2018-06-21 2019-12-26 ルネサスエレクトロニクス株式会社 メモリモジュール
TWI703500B (zh) * 2019-02-01 2020-09-01 睿寬智能科技有限公司 可縮短內文交換時間之方法及其半導體裝置
CN110928574A (zh) * 2019-11-20 2020-03-27 深圳市汇顶科技股份有限公司 微控制器、中断处理芯片、设备及中断处理方法
CN117795476A (zh) * 2021-09-08 2024-03-29 哲库科技(上海)有限公司 用于触发零周期上下文切换的系统和方法

Family Cites Families (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US3825902A (en) * 1973-04-30 1974-07-23 Ibm Interlevel communication in multilevel priority interrupt system
US5640582A (en) * 1992-05-21 1997-06-17 Intel Corporation Register stacking in a computer system
TW200511111A (en) * 2003-07-30 2005-03-16 Koninkl Philips Electronics Nv Microcontroller with an interrupt structure having programmable priority levels with each priority level associated with a different register set
JP2006092042A (ja) * 2004-09-21 2006-04-06 Sanyo Electric Co Ltd 情報処理装置及びコンテキスト切り替え方法
JP4127848B2 (ja) * 2006-08-24 2008-07-30 ネットクリアスシステムズ株式会社 タスク処理装置
US20080307208A1 (en) * 2007-06-07 2008-12-11 Fujitsu Limited Application specific processor having multiple contexts
US7996651B2 (en) * 2007-11-30 2011-08-09 Microchip Technology Incorporated Enhanced microprocessor or microcontroller
US20100110089A1 (en) * 2008-11-06 2010-05-06 Via Technologies, Inc. Multiple GPU Context Synchronization Using Barrier Type Primitives
US8825926B2 (en) * 2009-04-13 2014-09-02 Microchip Technology Incorporated Processor with assignable general purpose register set

Also Published As

Publication number Publication date
EP2972842A1 (en) 2016-01-20
EP2972842B1 (en) 2020-05-20
US9619231B2 (en) 2017-04-11
TW201502993A (zh) 2015-01-16
WO2014159123A1 (en) 2014-10-02
US20150019847A1 (en) 2015-01-15
CN105144100B (zh) 2019-12-31
TWI619076B (zh) 2018-03-21
CN105144100A (zh) 2015-12-09

Similar Documents

Publication Publication Date Title
KR20150128680A (ko) 프로그램 가능한 cpu 레지스터 하드웨어 컨텍스트 스왑 메커니즘
US10318407B2 (en) Allocating a debug instruction set based on the current operating state in a multi-instruction-set data processing apparatus
US7134119B2 (en) Intercalling between native and non-native instruction sets
US8719837B2 (en) Microprocessor architecture having extendible logic
RU2263949C2 (ru) Перезапускаемые транслированные команды
US7000094B2 (en) Storing stack operands in registers
KR102629722B1 (ko) 이동 프리픽스 명령어
WO2003025721A2 (en) Microcontroller with configurable onboard boot-ram
GB2413657A (en) Breakpoint logic unit, debug logic and breakpoint method for a data processing apparatus
JP2008047145A (ja) デュアルスレッドプロセッサ
KR20110044465A (ko) 재구성 프로세서, 재구성 제어 장치 및 방법, 그리고, 스레드 모델링 방법
JPH03158928A (ja) データ処理装置
CN105190551B (zh) 具有存储器区域交换机制的双引导系统
GB2461848A (en) Processor with a privileged stack pointer and a stack pointer used in privileged and non-privileged modes
KR20140135796A (ko) 컨텍스트 스위치를 구비한 마이크로컨트롤러
CN106990939B (zh) 修改数据处理单元的行为
Hanna et al. An embedded Forth core with floating point and branch prediction
US20230315453A1 (en) Forward conditional branch event for profile-guided-optimization (pgo)
GB2412192A (en) Function calling mechanism
US20120159134A1 (en) Exception control method, system, and program
GB2367652A (en) Scheduling control within a system having mixed hardware and software based instruction execution
GB2367658A (en) Intercalling between native and non-native instruction sets

Legal Events

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