KR20100101090A - 개선된 마이크로프로세서 또는 마이크로컨트롤러 - Google Patents

개선된 마이크로프로세서 또는 마이크로컨트롤러 Download PDF

Info

Publication number
KR20100101090A
KR20100101090A KR1020107010628A KR20107010628A KR20100101090A KR 20100101090 A KR20100101090 A KR 20100101090A KR 1020107010628 A KR1020107010628 A KR 1020107010628A KR 20107010628 A KR20107010628 A KR 20107010628A KR 20100101090 A KR20100101090 A KR 20100101090A
Authority
KR
South Korea
Prior art keywords
register
registers
memory
indirect
program counter
Prior art date
Application number
KR1020107010628A
Other languages
English (en)
Other versions
KR101531372B1 (ko
Inventor
조셉 쥴리처
자차리아스 마디누스 스밋
씬 스테드만
비비엔 델포트
제롤드 에스 제넥
라이언 스캇 엘리슨
에릭 츠로에더
Original Assignee
마이크로칩 테크놀로지 인코포레이티드
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 마이크로칩 테크놀로지 인코포레이티드 filed Critical 마이크로칩 테크놀로지 인코포레이티드
Publication of KR20100101090A publication Critical patent/KR20100101090A/ko
Application granted granted Critical
Publication of KR101531372B1 publication Critical patent/KR101531372B1/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/46Multiprogramming arrangements
    • G06F9/461Saving or restoring of program or task context

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)

Abstract

마이크로컨트롤러 디바이스는, CPU(central processing unit); 상기 CPU와 연결되고, 복수의 메모리 뱅크들로 분할되어 있는 데이터 메모리; 및 상기 데이터 메모리에 메모리-매핑될 수 있는 복수의 특수 기능 레지스터들 및 범용 레지스터들로서, 적어도 상태 레지스터, 뱅크 선택 레지스터, 복수의 간접 메모리 어드레스 레지스터들, 작업 레지스터, 및 프로그램 카운터 하이 래치의 특수 기능 레지스터들은 모든 메모리 뱅크들에 메모리-매핑되는 복수의 특수 기능 레지스터들 및 범용 레지스터들을 포함하고, 컨텍스트 절환 발생시, 상기 CPU는 상기 상태 레지스터, 상기 뱅크 선택 레지스터, 상기 복수의 간접 메모리 어드레스 레지스터들, 상기 작업 레지스터, 및 상기 프로그램 카운터 하이 래치의 컨텐츠를 자동적으로 세이브하도록 동작가능하고, 상기 컨텍스트 절환으로부터의 복귀시, 상기 상태 레지스터, 상기 뱅크 선택 레지스터, 상기 복수의 간접 메모리 어드레스 레지스터들, 상기 작업 레지스터, 및 상기 프로그램 카운터 하이 래치의 상기 컨텐츠를 복구한다.

Description

개선된 마이크로프로세서 또는 마이크로컨트롤러{ENHANCED MICROPROCESSOR OR MICROCONTROLLER}
본 발명은 마이크로프로세서들 또는 마이크로컨트롤러들에 관한 것이다.
마이크로컨트롤러들은 일반적으로 시스템 온 칩으로 만들어지며, 마이크로프로세서와 복수의 주변 부품들을 포함한다. 8 비트, 16 비트, 및 32 비트 아키텍처를 갖는 다양한 마이크로컨트롤러들이 있다. 종래의 마이크로컨트롤러들(예를 들면, 마이크로칩 테크놀로지사에 의해 제조된 8 비트 마이크로컨트롤러들)은 유연한 아키텍처를 제공한다. 이러한 마이크로컨트롤러들은 프로그램 메모리와 데이터 메모리가 분리되어 있는 하버드 아키텍처(Harvard architecture)를 포함한다. 이러한 타입의 마이크로컨트롤러들은 데이터 메모리로의 액세스를 가능하게 하는 특정 뱅킹 시스템을 더 포함한다. 일반적으로, 데이터 메모리는 복수의 뱅크들로 분할되며, 뱅크 선택 레지스터는 뱅크들 중 어느 것이 현재 선택되어 액세스가능한 지를 정의한다. 다른 뱅크들을 액세스하기 위해, 뱅크 선택 레지스터는 재프로그램되어야 한다. 뱅킹 방식에서는 정의된 메모리 뱅크로의 액세스만을 허용할 지라도, 이들 컨트롤러들은 소정 뱅크로의 절환을 강제하는 명령들을 포함한다. 이는 일반적인 액세스 제한에도 불구하고 개선되고 강력한 성능을 제공한다.
하지만, 메모리 액세스시 병목현상이 여전히 존재한다. 따라서, 개선된 마이크로컨트롤러 아키텍처에 대한 요구가 있다.
일실시예에 따르면, 마이크로프로세서 또는 마이크로컨트롤러 디바이스는, CPU(central processing unit); 상기 CPU와 연결되고, 복수의 메모리 뱅크들로 분할되어 있는 데이터 메모리; 및 상기 데이터 메모리에 메모리-매핑될 수 있는 복수의 특수 기능 레지스터들 및 범용 레지스터들로서, 적어도 상태 레지스터, 뱅크 선택 레지스터, 복수의 간접 메모리 어드레스 레지스터들, 작업 레지스터, 및 프로그램 카운터 하이 래치의 특수 기능 레지스터들은 모든 메모리 뱅크들에 메모리-매핑되는 복수의 특수 기능 레지스터들 및 범용 레지스터들을 포함하고, 컨텍스트 절환 발생시, 상기 CPU는 상기 상태 레지스터, 상기 뱅크 선택 레지스터, 상기 복수의 간접 메모리 어드레스 레지스터들, 상기 작업 레지스터, 및 상기 프로그램 카운터 하이 래치의 컨텐츠를 자동적으로 세이브하도록 동작가능하고, 상기 컨텍스트 절환으로부터의 복귀시, 상기 상태 레지스터, 상기 뱅크 선택 레지스터, 상기 복수의 간접 메모리 어드레스 레지스터들, 상기 작업 레지스터, 및 상기 프로그램 카운터 하이 래치의 상기 컨텐츠를 복구한다.
추가 실시예에 따르면, 상기 디바이스는 상기 CPU와 연결된 인터럽트 유닛을 더 포함할 수 있고, 상기 컨텍스트 절환은 인터럽트에 의해 유도될 수 있다. 추가 실시예에 따르면, 상기 컨텍스트 절환은 소프트웨어로 유도될 수 있다. 추가 실시예에 따르면, 상기 상태 레지스터, 상기 뱅크 선택 레지스터, 상기 복수의 간접 메모리 어드레스 레지스터들, 상기 작업 레지스터, 및 상기 프로그램 카운터 하이 래치의 상기 컨텐츠는 복수의 추가 레지스터들에 세이브될 수 있다. 추가 실시예에 따르면, 상기 상태 레지스터, 상기 뱅크 선택 레지스터, 상기 복수의 간접 메모리 어드레스 레지스터들, 상기 작업 레지스터, 및 상기 프로그램 카운터 하이 래치의 상기 컨텐츠는 스택 또는 추가 메모리에 세이브될 수 있다. 추가 실시예에 따르면, 각 메모리 뱅크는 메모리 매핑되는 상기 제1 및 제2 간접 어드레싱 모드 레지스터들로의 읽기 또는 쓰기 액세스시 간접 어드레싱 액세스를 발생시키는 복수의 간접 어드레싱 모드 레지스터들; 제1 프로그램 카운터 레지스터; 상태 레지스터; 복수의 간접 메모리 어드레스 레지스터들; 뱅크 선택 레지스터; 작업 레지스터; 프로그램 카운터 하이 래치 레지스터; 및 인터럽트 제어 레지스터를 가질 수 있다. 추가 실시예에 따르면, 상기 특수 기능 레지스터들은 메모리 뱅크 어드레스 0에서 시작하여 매핑될 수 있다. 추가 실시예에 따르면, 상기 디바이스는 2개의 간접 어드레싱 모드 레지스터들과 4개의 간접 메모리 어드레스 레지스터들을 포함할 수 있고, 간접 어드레싱 모드 레지스터로의 액세스는 상기 4개의 간접 메모리 어드레스 레지스터들 중 2개의 연접된 간접 메모리 어드레스 레지스터들을 이용하며, 상기 특수 기능 레지스터들은 메모리 뱅크 어드레스 0에서 0Bh까지 매핑된다. 추가 실시예에 따르면, 상기 디바이스는 상기 CPU와 연결된 프로그램 메모리를 더 포함할 수 있고, 상기 간접 메모리 어드레스 레지스터들내의 한 비트는 간접 메모리 액세스가 상기 데이터 메모리에서 수행될지 또는 상기 프로그램 메모리에서 수행될지를 나타낸다.
다른 실시예에 따르면, CPU(central processing unit); 상기 CPU와 연결되고, 복수의 메모리 뱅크들로 분할되어 있는 데이터 메모리; 및 복수의 특수 기능 레지스터들 및 범용 레지스터들을 포함하는 마이크로프로세서 또는 마이크로컨트롤러 디바이스 동작 방법으로서, 적어도 상태 레지스터, 뱅크 선택 레지스터, 복수의 간접 메모리 어드레스 레지스터들, 작업 레지스터, 및 프로그램 카운터 하이 래치의 특수 기능 레지스터들을 모든 메모리 뱅크들에 메모리 매핑하는 단계; 컨텍스트 절환 발생시, 상기 상태 레지스터, 상기 뱅크 선택 레지스터, 상기 복수의 간접 메모리 어드레스 레지스터들, 상기 작업 레지스터, 및 상기 프로그램 카운터 하이 래치의 컨텐츠를 자동적으로 세이브는 단계; 및 상기 컨텍스트 절환으로부터의 복귀시, 상기 상태 레지스터, 상기 뱅크 선택 레지스터, 상기 복수의 간접 메모리 어드레스 레지스터들, 상기 작업 레지스터, 및 상기 프로그램 카운터 하이 래치의 상기 컨텐츠를 복구하는 단계를 포함할 수 있다.
추가 실시예에 따르면, 상기 방법은 인터럽트에 의해 상기 컨텍스트 절환을 유도하는 단계를 더 포함할 수 있다. 추가 실시예에 따르면, 상기 컨텍스트 절환은 소프트웨어로 유도될 수 있다. 추가 실시예에 따르면, 상기 상태 레지스터, 상기 뱅크 선택 레지스터, 상기 복수의 간접 메모리 어드레스 레지스터들, 상기 작업 레지스터, 및 상기 프로그램 카운터 하이 래치의 상기 컨텐츠는 복수의 추가 레지스터들에 세이브될 수 있다. 추가 실시예에 따르면, 상기 상태 레지스터, 상기 뱅크 선택 레지스터, 상기 복수의 간접 메모리 어드레스 레지스터들, 상기 작업 레지스터, 및 상기 프로그램 카운터 하이 래치의 상기 컨텐츠는 스택 또는 추가 메모리에 세이브될 수 있다. 추가 실시예에 따르면, 각 메모리 뱅크는 메모리 매핑되는 상기 제1 및 제2 간접 어드레싱 모드 레지스터들로의 읽기 또는 쓰기 액세스시 간접 어드레싱 액세스를 발생시키는 복수의 간접 어드레싱 모드 레지스터들; 제1 프로그램 카운터 레지스터; 상태 레지스터; 복수의 간접 메모리 어드레스 레지스터들; 뱅크 선택 레지스터; 작업 레지스터; 프로그램 카운터 하이 래치 레지스터; 및 인터럽트 제어 레지스터를 가질 수 있다. 추가 실시예에 따르면, 상기 특수 기능 레지스터들은 메모리 뱅크 어드레스 0에서 시작하여 매핑될 수 있다. 추가 실시예에 따르면, 상기 방법은 2개의 간접 어드레싱 모드 레지스터들과 4개의 간접 메모리 어드레스 레지스터들을 이용할 수 있고, 간접 어드레싱 모드 레지스터로의 액세스는 상기 4개의 간접 메모리 어드레스 레지스터들 중 2개의 연접된 간접 메모리 어드레스 레지스터들을 이용하며, 상기 특수 기능 레지스터들은 메모리 뱅크 어드레스 0에서 0Bh까지 매핑된다. 추가 실시예에 따르면, 상기 방법은 상기 CPU와 연결된 프로그램 메모리를 더 이용할 수 있고, 상기 간접 메모리 어드레스 레지스터들내의 한 비트는 간접 메모리 액세스가 상기 데이터 메모리에서 수행될지 또는 상기 프로그램 메모리에서 수행될지를 나타낸다.
본 발명의 다른 기술적인 장점들은 다음의 도면, 설명, 및 청구범위로부터 이 기술분야의 당업자에게 명백할 것이다. 본 발명의 다양한 실시예들은 설명한 장점들의 서브셋만을 얻을 수 있다. 어떠한 장점도 실시예들에 중요하지 않다.
동일한 참조부호는 동일한 구성요소를 나타내는 첨부한 도면들과 관련된 다음의 설명을 참조하면 본 발명과 그 장점들을 보다 완전히 이해할 수 있다.
도 1은 일실시예에 따른 마이크로컨트롤러 아키텍처의 블록도이다.
도 2는 프로그램 카운터 및 내부 버스에의 연결예를 나타낸 도면이다.
도 3 내지 도 6은 실행되는 명령에 따른 프로그램 카운터에서의 서로다른 동작들을 나타낸 도면이다.
도 7은 스택 및 제어 로직의 일실시예를 나타낸 도면이다.
도 8은 프로그램 메모리 맵 및 스택의 일실시예를 나타낸 도면이다.
도 9는 뱅크 선택 레지스터의 일실시예를 나타낸 도면이다.
도 10은 데이터 메모리내의 메모리 뱅크 구조의 일실시예를 나타낸 도면이다.
도 11은 간접 메모리 액세스를 위한 액세스 방식을 나타낸 도면이다.
도 12는 일실시예에 따른 특수 기능 레지스터 요약을 나타낸 표이다.
도 13a 및 도 13b는 일실시예에 따른 마이크로프로세서 또는 마이크로컨트롤러의 명령어 세트를 나타낸 표이다.
본 발명이 특정 실시예를 참조하여 특별히 도시되고 설명되었지만, 이러한 참조는 본 발명을 한정하지 않고, 그러한 한정을 의미하지도 않는다. 개시된 본 발명은 이 기술분야의 당업자에 의해 형태와 기능에 있어 다양한 수정물, 대체물, 등가물이 고려될 수 있다. 본 발명의 도시되고 설명된 실시예들은 단지 예로서, 본 발명의 범위를 한정하지 않는다.
도 1은 일실시예에 따른 하버드 타입 아키텍처에서 프로그램 및 데이터 메모리 액세스와 관련한 마이크로프로세서 또는 마이크로컨트롤러의 중앙처리장치(CPU)의 서로다른 기능 유닛들을 나타낸다. 명령 레지스터(110)는 제어 로직(130)에 의해 디코딩될 수 있는 패치 명령을 저장할 수 있다. 각각 어드레스를 저장하는 복수의 간접 어드레싱 레지스터들(150)이 제공될 수 있다. 도 1에서는 개별적으로 도시하였지만, 이들 및 다른 특수 기능 레지스터들은 특수 기능 레지스터 블록(185)의 일부이다. 간접 어드레싱 액세스를 수행하기 위해, 특수 기능 레지스터 블록(185)내의 전용 특수 기능 레지스터로의 읽기 또는 쓰기가 수행된다. 이러한 간접 어드레싱 액세스가 실행되는 경우에, 제어 로직(130)은 입력측에서 간접 어드레스 레지스터(150)로부터 어드레스를 수신하는 멀티플렉서(140)를 제어한다. 일실시예에 따르면, 간접 어드레스 레지스터들은 프로그램 메모리(120) 또는 데이터 메모리(160)로의 간접 액세스가 수행될 지를 결정하기 위해 제어 로직(130)에 의해 디코딩되는 소정 비트, 예를 들어 최상위 비트를 갖는다.
8 비트 아키텍처에서, 데이터 메모리는 8 비트 폭이다. 하버드 아키텍처에 따르면, 프로그램 메모리는 데이터 메모리와 분리되어 있으며, 다른 사이즈를 가질 수 있다. 예를 들면, 일실시예로, 프로그램 메모리는 14, 15 또는 16 비트 폭일 수 있다. 따라서, 예를 들어 8 비트 직접 어드레스를 포함하는 명령들이 디코딩될 수 있다. 어떤 명령은 예를 들어 상대 어드레싱을 수행하기 위해 다른 레지스터와 결합될 수 있는 더 많은 어드레스 비트들을 포함할 수 있다.
데이터 메모리(160)는 7 또는 8 비트로 디코딩될 수 있는 복수의 뱅크들로 분할될 수 있다. 각 뱅크는 레지스터 파일로서 간주될 수 있다. 일실시예에 따르면, 데이터 메모리는 각각 256개의 어드레스가능 메모리 위치들을 갖는 총 16개의 뱅크들을 포함하여 총 4096 바이트의 메모리가 된다. 다른 실시예에 따르면, 128개의 어드레스가능 메모리 위치들을 갖는 16개의 뱅크들이 제공될 수 있다. 다양한 실시예들에 따르면, 다른 구성들이 가능하다. CPU는 작업 레지스터(180)와 연결된 ALU(Arithmetic Logic Unit)(170)를 더 포함할 수 있다. 작업 레지스터(180)는 블록(185)의 복수의 특수 기능 레지스터들 중 하나이다. 상술한 바와 같이, 데이터 메모리(160)는 복수의 뱅크들 1...n으로 분할될 수 있다. 소정의 어드레싱 모드들을 제외하고, 명령들은 일반적으로 선택 메모리 뱅크로의 액세스만을 갖는다. 따라서, 특수 기능 레지스터 블록(185)으로부터의 어떤 중요한 특수 기능 레지스터들은 데이터 메모리(160)와 특수 기능 레지스터 블록(185) 사이의 화살표로 나타낸 모든 메모리 뱅크들 1...n에 매핑된 메모리이다. 다양한 실시예들에 따르면, 모든 메모리 뱅크들에 매핑되지 않은 특수 기능 레지스터들은 각각 서로다른 메모리 위치들에 있는 단일 메모리 뱅크에 매핑될 수 있다. 다양한 실시예들에 따르면, 어떤 특수 기능 레지스터들은 전혀 메모리에 매핑되지 않는다.
모든 메모리 뱅크들로의 어떤 특수 기능 레지스터들의 매핑이 각 메모리 뱅크의 액세스가능 프리 RAM을 제한할 지라도, 중요한 특수 기능 레지스터에 액세스하는데 필요한 많은 다른 뱅크 절환 시퀀스들을 피할 수 있다. 예를 들면, 마이크로컨트롤러는 모든 메모리 뱅크들에 매핑된 작업 레지스터(180)와 같은 12개의 특수 기능 레지스터들을 가질 수 있다. 따라서, 일실시예에 따르면, 각 메모리 뱅크는 각 메모리 뱅크의 사이즈에 따라 244개 또는 116개의 프리 메모리 위치들을 가질 수 있다. 다양한 실시예들에 따라 다른 구성들이 가능하다.
일실시예에 따르면, 개선된 마이크로컨트롤러는 8 비트 ALU(170)와 작업 레지스터(180)(WREG)를 포함할 수 있다. ALU(170)는 범용 연산장치일 수 있으며, 작업 레지스터(180)내의 데이터와 어떤 레지스터 파일내의 데이터 간의 산술 함수 및 부울 함수를 수행한다. ALU(170)는 8 비트 폭일 수 있으며, 가산, 감산, 시프트, 및 로직 연산들을 수행할 수 있다. 달리 언급이 없다면, 산술 연산들은 사실상 2의 보수일 수 있다. WREG(180)는 ALU 연산들에 사용되는 8 비트 작업 레지스터일 수 있다. WREG 레지스터(180)는 어드레스가능하며, 직접 쓰여지거나 읽혀질 수 있다. 일실시예에 따르면, WREG(180)는 16개의 모든 뱅크들에 매핑되는 12개의 공통적인 SFR들 중 하나로서, 그 어드레스는 예를 들어 09h일 수 있다. ALU(170)는 두개의 오퍼랜드 또는 단일 오퍼랜드로 산술 및 로직 연산들을 수행할 수 있다. 모든 단일 오퍼랜드의 명령들은 WREG 레지스터(180) 또는 소정의 파일 레지스터에서 동작한다. 두개의 오퍼랜드 명령들에 대하여, 오퍼랜드들 중 하나는 WREG 레지스터(180)이고, 나머지 하나는 파일 레지스터 또는 8 비트 즉시 상수(immediate constant)이다. 실행되는 명령에 따라, ALU(170)는 상태 레지스터(190)내의 Carry(C), Digit Carry(DC) 또는 Zero(Z) 비트들의 값들에 영향을 줄 수 있다. C 및 DC 비트들은 감산시 각각 바로우(borrow) 및 디지트 바로우 아웃 비트로서 동작한다. 이들 상태 비트들에 영향을 주는 예들은 하기에 보다 상세히 설명될 SUBLW 및 SUBWF와 같은 명령들이다.
도 1에 도시한 상태 레지스터(190)는 캐리/바로우, 디지트 캐리/바로우, 및 제로 플래그와 같은 ALU의 산술 상태; 하위 두 뱅크 선택을 나타내는 RP<1:0>; 직접 어드레싱을 위한 비트들; 간접 어드레싱을 위한 뱅크 선택 레지스터 비트를 나타내는 IRP; 타임 아웃 비트, 및 파워 다운 비트를 포함할 수 있다.
일실시예에 따르면, 개선된 마이크로컨트롤러는 역방향 호환성을 유지하기 위해 BSR(Bank Select Register)을 포함하며, 또한 RP<1:0>도 유지될 수 있다. RP<1:0>과 BSR<1:0> 사이에는 완전한 양방향 미러링이 있을 수 있기 때문에, 한 레지스터를 바꾸면 자동적으로 나머지 레지스터도 바뀐다. 따라서, RP<1:0>과 BSR<1:0>은 동일한 물리적인 메모리를 지시한다.
개선된 마이크로컨트롤러가 복수의 완전한 간접 어드레스 레지스터들(150)(파일 선택 레지스터들)을 포함할 지라도, 비트 IRP는 역방향 호환성을 위해 유지될 수 있으며, 이것은 FSR0H<0>의 직접, 양방향 미러이다. 따라서, FSR0H<0>를 바꾸면, 자동적으로 IRP가 바뀌고, 그 반대도 마찬가지이다. IRP와 FSRH0h<0>은 동일한 물리적인 메모리를 지시한다.
일실시예에 따르면, 상태 레지스터(190)는 모든 뱅크들 전체에 걸쳐 공통적이며, 03h에 위치할 수 있다. 하기에 보다 상세히 설명될 인터럽트시의 고속 컨텍스트 세이빙은 TO와 PD를 제외한 모든 상태 비트들에 대하여 이행된다. 상태 레지스터는 어떤 다른 레지스터와 마찬가지로 어떤 명령에 대한 목적지일 수 있다. 상태 레지스터가 Z, DC 또는 C 비트들에 영향을 주는 명령에 대한 목적지이면, 이들 비트들은 디바이스 로직에 따라 세트 또는 클리어된다. 또한, TO 및 PD 비트들에는 쓸 수 없다. 따라서, 목적지로서 상태 레지스터(190)를 갖는 명령의 결과는 의도한 것과 다를 수 있다. 예를 들면, 명령 CLRF STATUS는 TO 및 PD를 제외한 모든 비트들을 클리어하고, 그리고 나서 Z 비트는 디바이스 로직에 의해 자동적으로 세트될 것이다. 이것에 의해 상태 레지스터(190)는 '000u u100'(여기서, u=불변)가 된다. C 및 DC 비트들은 감산시 각각 바로우 및 디지트 바로우 아웃 비트로서 동작한다.
따라서, 상태 레지스터(190)는 다음의 비트들을 포함할 수 있다.
IRP: Indirect Register Bank Select bit(역방향 호환용. 미러들 FSR0H<0>) 1 = 뱅크 2,3(100h-1FFh); 0 = 뱅크 0,1(00h-FFh)
RP<1:0>: Register Bank Select bits(역방향 호환용. 미러들 BSR<1:0>) 00 = 뱅크 0(00h-7Fh); 01 = 뱅크 1(80h-FFh); 10 = 뱅크 2(100h-17Fh); 11 = 뱅크 3(180h-1FFh)
TO: Time-out bit(인터럽트시 자동적으로 세이브되지 않음) 1 = 파워-업, CLRWDT 명령 또는 SLEEP 명령 후; 0 = 워치독 타이머 타임-아웃 발생;
PD: Power-down bit(인터럽트시 자동적으로 세이브되지 않음) 1 = 파워-업 후 또는 CLRWDT 명령에 의함; 0 = SLEEP 명령의 실행에 의함
Z: Zero bit: 1 = 산술 또는 로직 연산 결과가 제로; 0 = 산술 또는 로직 연산 결과가 제로가 아님.
DC: Digit Carry/Borrow bit(ADDWF, ADDLW, SUBLW, SUBWF 명령들): 1 = 결과의 4번째 하위 비트에서 캐리-아웃 발생; 0 = 결과의 4번째 하위 비트에서 캐리-아웃 없음.
C: Carry/Borrow bit(ADDWF,ADDLW,SUBLW,SUBWF 명령들): 1 = 결과의 최상위 비트에서 캐리-아웃 발생; 0 = 결과의 최상위 비트에서 캐리-아웃 없음.
바로우에 대하여, 극성이 반전될 수 있다. 감산은 두번째 오퍼랜드의 2의 보수를 더함으로써 실행된다. 회전(RRF,RLF) 명령들에 대하여, 이 비트는 소스 레지스터의 상위 또는 하위 비트로 로딩된다.
개선된 마이크로컨트롤러 코어는 그 레지스터 파일들(뱅크들) 또는 데이터 메모리를 직접적으로 또는 간접적으로 어드레싱할 수 있다. 일실시예에 따르면, 프로그램 카운터(PC)와 작업 레지스터(WREG)를 포함하는 모든 특수 기능 레지스터들은 데이터 메모리에 매핑된다. 개선된 마이크로컨트롤러 코어는 어떤 어드레싱 모드를 이용하여 어떤 레지스터에서 어떤 동작도 수행할 수 있게 하는 직교(대칭) 명령어 세트를 갖는다. 이러한 대칭적인 특징 및 '특수한 최적의 상황들'의 결여는 개선된 마이크로컨트롤러 코어를 이용한 프로그래밍을 단순하지만 효율적이게 만들어 사용자의 학습 곡선은 상당히 줄어든다.
일실시예에 따르면, 블록들(프로그램 카운터; 명령 디코드; ALU; ROM 래치/IR 래치; FSR들 및 어드레스 생성 로직; 작업 레지스터; WREG; STATUS내의 상태 비트들; 고속 컨텍스트 세이빙으로 인터럽트 벡터링 제어; 뱅크 선택 레지스터 BSR)이 코어내에서 구현될 수 있다.
블록들(스택; 리셋 생성 회로(워치독 타이머(WDT), POR(power on reset), BOR(brown out reset) 등); 프로그램 메모리; 주변장치들; RAM; RAM 어드레스 제어; Q-클록 생성기 및 제어; 인터럽트 인에이블 및 플래깅; 인터럽트 제어 레지스터들; 구성 비트들; 디바이스 ID 워드; ID 위치들; 클록 드라이버들)은 CPU의 일부로서 간주되지 않을 수 있다.
상술한 바와 같이, 일실시예에 따르면, 레지스터들((간접 어드레싱에 사용되고 물리적인 레지스터가 아닐 수 있는) INDF0; (간접 어드레싱에 사용되고 물리적인 레지스터가 아닐 수 있는) INDF1; PCL(PC LSB); STATUS; FSR0L(간접 메모리 어드레스 0, LSB); FSR0H(간접 메모리 어드레스 0, MSB); FSR1L(간접 메모리 어드레스 1, LSB); FSR1H(간접 메모리 어드레스 1, MSB); 작업 레지스터 WREG; BSR(Bank Select Register); PCLATH(프로그램 카운터 PC<14:8>용 쓰기 버퍼); 인터럽트 제어 레지스터 INTCON)은 16개의 모든 뱅크들 전체에 걸쳐 공통일 수 있다.
일실시예에 따르면, 마이크로프로세서 또는 마이크로컨트롤러는 소정의 특수 기능 레지스터(115)와 연결될 수 있는 인터럽트 제어 유닛(105)을 더 포함할 수 있다. 인터럽트 또는 어떤 다른 컨텍스트 절환(예를 들면, 소프트웨어 트랩들)의 발생시, 모든 메모리 뱅크들에 매핑된 특수 기능 레지스터들로부터 선택된 레지스터들((TO 및 PD를 제외한) STATUS; BSR, PCLATH, WREG, FSR0(FSR0H와 FSR0L), 및 FSR1(FSR1H와 FSR1L))의 컨텐츠들은 자동적으로 세이브된다. 인터럽트로부터의 복귀시 레지스터들은 그들의 이전 인터럽트 값들로 자동적으로 복구된다.
이를 위해, 도 1에 도시한 마이크로프로세서 또는 마이크로컨트롤러 코어는 상술한 레지스터들의 컨텐츠를 저장할 적어도 하나의 추가 레지스터 세트(115)를 가질 수 있다. 하지만, 다른 실시예들에 따르면, 컨텍스트 절환시 이들 레지스터들의 컨텐츠를 저장하기 위해 스택, 추가 데이터 메모리 등이 제공될 수 있다.
도 2에 도시한 바와 같이, 프로그램 카운터 PC는 두개의 연접 8 비트 레지스터들 PCL(230)과 PCH(240)로 이루어지며, 프로그램 메모리내의 워드들을 어드레싱하고, 일실시예에 따르면 예를 들어 15비트 폭이다. 따라서, 프로그램 카운터 PC는 최대 32kW를 어드레싱하는데 사용될 수 있다. PCL(230)(PC의 하위 바이트)은 데이터 메모리(160)에 매핑되기 때문에, 모든 뱅크들 전체에 걸쳐 공통이며, 예를 들어 어드레스 02h에 위치한다. PCL(240)은 어떤 다른 레지스터와 마찬가지로 읽기 및 쓰기가 가능하다. PCL(230)로의 쓰기 또는 읽기-수정-쓰기(read-modify-write)의 명령에 의해 PCL(230)이 수정될 때는 언제든, CPU는 새로운 어드레스에 있는 명령을 검색하기 위해 강제 NOP를 실행할 필요가 있다. PCH(240)는 PC의 상위 바이트로서, 직접적으로 어드레스할 수 없다. PCH는 데이터 또는 프로그램 메모리에 매핑되지 않을 수 있기 때문에, 레지스터 PCLATH(220)(PC 상위 래치)는 PC의 상위 비트들(PCH<6:0>)에 대한 홀딩 래치들로서 사용된다. 일실시예에 따르면, PCLATH(220)는 데이터 메모리에 매핑된다. 따라서, 이것은 모든 뱅크들 전체에 걸쳐 공통이며, 어드레스 OAh에 위치할 수 있다. PCLATH(220)는 레지스터의 명시적 로딩에 의해서만 업데이트된다. 따라서, 일실시예에 따르면, 그것을 업데이트하는 다른 명령들은 없다. 개선된 마이크로컨트롤러는, PCLATH(220)의 업데이트가 PCH(240)를 자동적으로 업데이트하지 않도록 설계될 수 있다. PCH(240)는 GOTO, CALL 및 CALLW 명령들에 의해 PCLATH(220)의 컨텐츠로만 업데이트된다. PC는, GOTO, CALL, RETURN, RETLW, RETFIE, 또는 브랜치 명령에 의해 수정되는 경우와, 인터럽트 응답에 의해 수정되는 경우와, 명령에 의한 PCL로의 목적지 쓰기로 인한 경우를 제외하고, Q1의 라이징 에지에서 각 명령이 패치된 후에 1 만큼 증분된다.
"스킵들"은 스킵된 어드레스에 있는 강제 NOP 사이클과 동등하다. 도 2에 도시한 바와 같이, 서로다른 명령들을 위한 PC(230,240) 및 PCLATH(220)의 동작들은 다음과 같다.
Read instructions on PCL(230): PCL(230) → 데이터 버스(200) → ALU(170) 또는 목적지.
Write instructions on PCL(230): 8-비트 데이터 → 데이터 버스(200) → PCL(230).
Read-Modify-Write instructions on PCL(230): PCL(230)로 읽기-쓰기-수정 동작을 행하는 어떤 명령. Read: PCL(230) → 데이터 버스(200) → ALU(170); Write: 8-비트 결과 → 데이터 버스 → PCL(230).
RETURN instruction: TOS → PC<14:0>(230,240).
도 3은 추가로 패치 명령(210)과 프로그램 카운터(230,240)에 대한 그의 영향을 나타낸다. 도 3은 다음의 명령들에 적용된다.
GOTO instruction: 목적지 어드레스가 2 워드 명령(opcode)(210)에 제공된다. Opcode<7:0> → PCL<7:0>(230); Opcode<10:8> → PCH<2:0>(240); PCLATH<6:3> (220) → PCH<6:3>(240).
CALL instruction: 11 비트 목적지 어드레스가 명령(210)에 제공된다. 현재 어드레스(PC +1)를 스택으로 푸쉬함(push). Opcode<7:0> → PCL<7:0>(230); Opcode<10:8> → PCH<2:0>(240); PCLATH<6:3>(220) → PCH<6:3>(240).
도 4는 다음 명령들의 구성을 나타낸다.
BRA instruction: 9 비트의 부호화된 오프셋(signed, offset)이 명령(210)에 제공된다. Opcode<8:0> + PC(+1) → PC.
도 5는 다음 명령들의 구성을 나타낸다.
BRW instruction: 8 비트의 비부호화된 오프셋(unsigned, offset)이 WREG(180)에 제공된다. PC(+1) + WREG → PC.
도 6은 다음 명령들의 구성을 나타낸다.
CALLW instruction: 8 비트의 목적지 어드레스가 WREG(180)에 제공된다. 현재 어드레스(PC+1)를 스택으로 푸시됨. WREG<7:0> → PCL<7:0>; PCLATH<6:0> → PCH<6:0>.
테스트 메모리 영역을 인에이블시키기 위해, 프로그램 카운터(230,240)는 숨겨진 16번째 비트인 PC<15>를 가질 수 있다. PC<15>가 세트되면, 명령들은 테스트 영역으로부터 패치될 것이다. 사용자 모드에서, PC<15>는 언제나 0 이며, 소프트웨어로 수정될 수 없다. 테스트 모드에서, PC<15>는 0으로 디폴트되지만, "구성 로드" 명령에 의해 세트될 수 있으며, 또한 "리셋 PC" 명령에 의해 클리어될 수 있다. 테스트 메모리 액세스는 다음과 같이 ICD(in circuit debugger)로 동작할 수 있다.
ICD_v1: ICD 벡터를 패치하기 위해 PC<15>가 하이로 강제되지만, 첫번째 명령(GOTO ICD_ROUTINE)이 실행된 후에 0으로 복귀한다. 디버그 exec를 나올 때까지, PC<14:11>는 '1111b'로 강제되지만 PCLATH는 영향받지 않는다. ICD_v2: ICD 디버그 exec가 사용자 메모리내에 있으면, ICD_V1을 따른다. 디버그 exec가 테스트 메모리내에 있으면, ICD 벡터를 패치하기 위해 PC<15>는 하이로 강제되고, icd_return에서 제로로 복귀한다.
다양한 실시예들에 따른 개선된 마이크로컨트롤러 디바이스들은 도 7에 도시한 15 비트 폭과 16 비트 깊이의 스택 메모리를 지원할 수 있다. 정상 동작동안, 스택(310)은 16 워드 깊이로 간주된다. 정상 모드에서, 스택(310)에 제공되는 직접 사용자 액세스는 없다. 스택은 프로그램 또는 데이터 메모리 공간의 일부가 아니다. CALL 또는 CALLW 명령이 실행되거나 인터럽트 요구가 승인되면, 전체 PC(Program Counter)가 스택으로 푸시된다. PC 값은 RETURN, RETLW, 또는 RETFIE 명령에서 스택으로부터 풀된다(pull off). PCLATH는 CALL 또는 RETURN 타입 명령들의 어떠한 것에 의해서도 영향받지 않는다.
스택(310)은 15 비트 RAM과 4 비트 스택 포인터에 의해 16 워드로 동작한다. 1111b/0000b를 넘는 포인터의 증분/감분은 그것을 0000b/1111b로 랩 어라운드하게 할 것이다. CALL 타입 명령 동안, 스택 포인터는 증분되고 PC의 컨텐츠들은 스택(310)으로 로딩된다. RETURN 타입 명령 동안, 지시된 컨텐츠들은 PC로 전달되고 나서 스택 포인터가 감분된다. 스택 포인터는 모든 리셋들 후에 '1111b'로 초기화된다. 첫번째 콜은 포인터가 0000b로 랩하게 할 것이다.
스택 포인터가 1111b/0000b를 넘어 증분/감분되고 스택으로의 데이터 전달/스택으로부터의 데이터 전달이 새로운 어드레스에서 행해지면 스택 오버플로우/언더플로우 이벤트가 발생한다. 오버플로우 이벤트는 첫번째 CALL에서 발생하지 않아야 한다. 16번째 연속 콜에서, 스택 포인터는 1111b의 값을 가질 것이다. 17번째 연속 CALL은 스택 포인터가 0000b로 랩 어라운드하게 하고, 이 위치에서 PC가 로딩되게 할 것이다. 이는 오버플로우 이벤트를 이룬다. 0000b에 도달하기에 충분한 시간에 스택이 팝되면, 추가 팝은 0000b에 있는 컨텐츠들이 PC로 전달되게 하여 스택 포인터가 감분될 것이다. 스택 포인터는 1111b로 랩되고, 이는 언더플로우 이벤트를 이루지 않는다. 1111b로부터의 데이터 전달이 시도되면, 다음 연속 팝에서만 언더플로우 이벤트가 발생할 것이다. 사용자 모드에서, 스택 오버플로우 또는 언더플로우는 PCON 레지스터에서 적절한 비트(STOF 또는 STUF)를 세트하고, 소프트웨어 리셋을 발생시킬 것이다.
ICD 모드에 있는 경우에, 스택은 두개의 세그먼트들을 가질 수 있다. 정상 사용자 모드 스택은 여전히 16 워드 깊이를 갖지만, 별도의 ICD 스택이 제공될 수 있다. ICD 모드에서, 스택 및 스택 포인터의 탑(top)을 액세스할 수 있을 것이다. ICD 모드에서, TOS(top of the stack)는 읽기와 쓰기가 가능하다. 두개의 레지스터 위치들 TOSH 및 TOSL은 스택 포인터(STKPTR)에 의해 지시되는 스택 RAM 위치를 어드레스할 것이다. CALL 타입 명령후에, 소프트웨어는 TOSH 및 TOSL 레지스터들을 읽음으로써 푸시된 값을 읽을 수 있다. 이들 값들은 사용자 정의 소프트웨어 스택에 배치될 수 있다. TOS 레지스터들로의 쓰기는 다음 RETURN 타입 명령에서 PC가 새로운 값으로 업데이트되게 할 것이다.
STKPTR 레지스터는 스택 포인터 값을 포함한다. 이전에 설명한 바와 같이, STKPTR은 ICD 모드에서만 액세스가능하다. ICD 모드에서, 스택 포인터는 STKPTR 레지스터를 통해 액세스될 수 있다. 사용자는 스택 포인터 값들을 읽고 쓸 수 있다. 스택 포인터는 모든 리셋들 후에 '1111b'로 초기화된다. ICD 모드에서, 자동 소프트웨어 리셋은 오버플로우/언더플로우 이벤트에 적용되지 않을 것이다. 하지만, PCON 레지스터내의 스택 오버플로우(STOF) 또는 언더플로우(STUF) 비트는 여전히 세트되어 스택 상태의 소프트웨어 검증이 가능하다. 리셋은 언더플로우/오버플로우에서 실행되지 않기 때문에, 스택 포인터(STKPTR)는 리셋되지 않을 것이다. 오버플로우/언더플로우에서, 스택 포인터는 랩 어라운드되고, 그리고 나서 정상 동작을 재개한다. 사용자는 오버플로우(STOF) 또는 언더플로우(STUF) 비트들을 명시적으로 클리어하여야 하며, 비트들은 다음 오버플로우/언더플로우에서 자동적으로 다시 세트될 것이다. 스택 오버플로우/언더플로우 이벤트들은 스택 포인터 하드웨어를 이용하여 스택 포인터를 수정하는 명령에 의해서만 발생될 수 있다.
이는 CALL, TRAP; RETURN, RETFIE, RETLW; 어떤 인터럽트 및 ICD 트랩들을 포함한다. ALU를 통해 스택 포인터를 수정하는 명령들(ICD 모드 전용)은 스택 언더플로우/오버플로우 상태를 만들지 않으며, 따라서 (STOF) 또는 (STUF) 비트들을 세트하지 않을 것이다. 예들은 (ICD 모드 전용) INCE STKPTR; DECF STKPTR; ADDWF STKPTR 이다.
디바이스가 리셋되면, PC는 리셋 벡터(0h)로 로딩된다. 스택 포인터는 '1111b'로 초기화되고, TOS(Top of Stack register)는 '0000h' 이다. 두번째 푸시는 스택 포인터를 증분시키고 나서 현재 PC를 스택 레벨로 로드한다. 16번째 연속 콜에서, 스택 포인터는 1111b의 값을 가질 것이다. 17번째 연속 콜은 스택 포인터가 0000b로 랩 어라운드하게 하고, PC가 이 위치에서 로딩될 것이다. 이는 오버플로우 이벤트를 이룬다. RETURN 팝은 PC로 지시된 스택 컨텐츠들을 복사하고 나서 스택 포인터를 감분시킬 것이다. 0000b에 도달하기에 충분한 시간에 스택이 팝되면, 추가 팝은 0000b에 있는 컨텐츠들이 PC로 전달되게 하고 스택 포인터가 감분될 것이다. 스택 포인터는 1111b로 랩되고, 이는 언더플로우 이벤트를 이루지 않는다. 1111b로부터의 데이터 전달이 시도될 때, 다음 연속 팝에서만 언더플로우 이벤트가 발생할 것이다. 디버그(ICD) 모드에서, 특수 명령은 STKPTR이 증분되게 할 것이다. PC는 TOS로 로딩되지 않는다. INCF STKPTR 명령(이 명령은 PUSH 명령과 동등함)을 실행하기 전에 반드시 TOS가 적절한 데이터로 로딩되게 하는 것은 사용자에게 달려 있다. DECF STKPTR 명령들이 스택 포인터를 감분시키고, PC는 TOS 값으로 로딩되지 않는다.
도 8에 도시한 바와 같이, 15 비트 프로그램 카운터(400)는 32k x 14 비트 프로그램 메모리 공간을 어드레스할 수 있다. 프로그램 메모리 공간(430)은 주로 실행 명령을 포함하지만, (레거시 프로그램 메모리 읽기/쓰기 인프라스트럭처 뿐만 아니라, 간접 어드레싱과 관련된 새로운 기능(FSR 섹션 참조)을 이용하여) 데이터 테이블들도 저장 및 액세스될 수 있다. 정상 동작동안 숨겨진 16번째 PC 비트가 있으며, 세트되면 구성 비트들, 디바이스 ID, 및 테스트 메모리(440)를 위한 또 하나의 32k x 14 메모리를 어드레스할 수 있다. 이 비트는 테스트 모드 또는 프로그래밍 모드에서만 세트된다. 도 8에 도시한 바와 같이, 리셋 벡터는 '0000h'에 있으며, 인터럽트 벡터는 '0004h'에 있다.
일실시예에 따르면, 개선된 마이크로컨트롤러는 데이터 메모리(160)와 최대 2048 바이트의 범용 RAM을 어드레스할 수 있다. 데이터 메모리 어드레스 버스는 11 비트 폭이다. 데이터 메모리는 GPRs(General Purpose Registers)과 SFRs(Special Function Registers)를 각각 포함하는 128 바이트의 16개의 뱅크들로 분할된다. 이 뱅크는 도 9에 도시한 뱅크 선택 레지스터(BSR<3:0>)에 의해 선택된다. BSR 레지스터는 16개의 뱅크들 이상을 액세스할 수 있지만, ICD 레지스터들을 위한 큰 데이터 공간을 위해 ICD 모드에서만 허용될 수 있다(ICD 모드에서는 32개의 뱅크들이 액세스될 수 있다). 비트들 BSR0 및 BSR1은 각각 RP0 및 RP1과 같이 상태 레지스터에 매핑된다. 이는 종래 디바이스들과의 역방향 호환을 하기 위해서이다. BSR0/1로의 읽기 또는 쓰기는 RP0/1에 영향을 주며, 그 반대도 마찬가지이다. 도 10은 예시적인 데이터 메모리 맵을 나타낸다.
코어가 ICD 모듈로 동작중일 때 또는 다른 실시예에서, 총 4096개의 어드레스를 위해 뱅크들의 총 개수는 32개로 확장될 수 있다. 이는 ICD 레지스터들이 데이터 공간에 매핑되어 사용자 메모리 맵의 어떤 것도 사용하지 않기 위함이다. 이것은 ICD 모듈이 인에이블될 때만 인에이블될 것이다. 사용자는 뱅크 15 보다 큰 어떠한 뱅크로도 액세스할 수 없을 것이다. 다양한 실시예들에 따라 다른 구성들이 가능하다.
도 11은 데이터 메모리 어드레싱 모드인 간접 어드레싱 방식의 일실시예를 나타낸 것으로, 명령내의 데이터 메모리 어드레스는 또 하나의 레지스터에 의해 결정된다. 이것은 데이터/프로그램 메모리내의 데이터 테이블들 또는 스택들에 유용할 수 있다. FSR(file select register)(960)의 값은 데이터 메모리 어드레스로서 사용된다. 개선된 마이크로컨트롤러는 간접 어드레싱을 위한 두개의 16 비트 레지스터쌍들(960)을 갖는다. 이들 소위 파일 선택 레지스터쌍들은 FSR0H 및 FSR0L와; FSR1H 및 FSR1L이다. FSR들(960)은 16 비트 레지스터들이며, 따라서 최대 65,536개의 위치들의 어드레싱이 가능하다. 이들 파일 선택 레지스터들(960)내의 단일 비트(965)는 데이터 메모리(160)로의 액세스가 수행될지 또는 프로그램 메모리(120)로의 액세스가 수행될지를 결정하는데 사용될 수 있다. 이를 위해, 로직 유닛(930)은 각 메모리들을 액세스하기 위한 프로그램 메모리 어드레스(910) 또는 RAM 어드레스(920)로 파일 선택 레지스터(960)의 컨텐츠를 전달한다.
비간접 어드레싱은 멀티플렉서(940)를 통한 패치 명령(950)의 각 컨텐츠 "파일"을 이용한다. 그리고 나서, 뱅크 액세스가 RAM 어드레스(920)를 통해 수행되며, 여기서 뱅크 어드레스는 완전한 어드레스(920)를 이루기 위해 각 뱅크 액세스 레지스터에 의해 제공된다. 도 11에 도시한 바와 같이, 파일 선택 레지스터들(960)은 간접 어드레싱을 위해 제공된다. 간접 어드레싱을 위해, 멀티플렉서(940)의 출력은 각 파일 선택 레지스터(960)의 컨텐츠를 통해 "파일" 어드레스를 제공한다. 간접 어드레싱이 선택되면, 각 파일 선택 레지스터(960)의 참조부호(965)로 나타낸 비트 15는 프로그램 메모리 어드레스(910)를 통해 프로그램 메모리(120)로의 액세스가 수행될지 또는 데이터 어드레스(920)를 통해 데이터 메모리(160)로의 액세스가 수행될지를 결정하는데 사용된다. 간접 어드레싱은 멀티플렉서(940)를 제어하는 각 선택 신호(도시하지 않음)를 통해 초기화된다.
FSRn<15>가 0 이면, 데이터 메모리(160)가 어드레싱된다. FSRn<15>가 1 이면, 프로그램 메모리(120)가 어드레싱된다. 데이터 메모리(160)는 이 어드레스 공간의 첫번째 절반(0000h 내지 7FFFh)에 매핑된다. FSRn<15>가 0 이면, FSRn<10:0>은 데이터 메모리 위치들 000h 내지 7FFh를 가리킨다. 이 경우에, FSRn<11:14>는 무시된다. 프로그램 메모리(120)는 이 어드레스 공간의 상부 절반(8000h 내지 FFFFh)에 매핑된다. FSRn<15>가 1 이면, FSRn<14:0>은 프로그램 메모리 어드레스들 0000h 내지 7FFFh를 지시한다. 요약하면, 어드레스들 8000h 이상은 프로그램 메모리를 지시하고, 8000h 보다 아래에 있는 어드레스들은 데이터 메모리를 지시하며, 하위 11 비트들만 어드레스 디코딩을 위해 사용된다.
또한, 물리적으로 구현되지 않는 가상 레지스터들 INDF0 및 INDF1(도 10 참조)가 있다. 이들 레지스터들로의 읽기 또는 쓰기는 간접 어드레싱을 활성화시키며, 해당 FSR 레지스터내의 값은 데이터의 어드레스이다. 파일 INDF0(또는 INDF1) 자체가 FSR을 통해 간접적으로 읽혀지면, 모든 '0'들이 읽혀진다(제로 비트가 세트됨). 마찬가지로, INDF0 (또는 INDF1)가 간접적으로 쓰여지면, 동작은 NOP와 동등하며, 상태 비트들은 영향받지 않는다. 프로그램 메모리 공간(FSRn<15> = 1)으로의 간접 쓰기들은 아무런 효과가 없으며, 실행되는 NOP의 등가를 이룰 것이다. 프로그램 메모리 공간(FSRn<15> = 1)로부터의 간접 읽기들은 프로그램 메모리 위치의 첫번째 8 비트가 목적지 레지스터로 전달되게 하고, EEDATH/PMDATH는 상위 6 비트로 업데이트될 것이다. 다양한 실시예들에 따르면, 간접 어드레싱을 위해 다른 메커니즘이 구현될 수 있다.
도 12는 데이터 메모리의 어떤 뱅크 n에 사용되는 실시예에 따른 모든 특수 기능 레지스터들의 요약을 나타낸다.
도 13a 및 도 13b는 명령어 세트로서, 상술한 아키텍처를 이용한 개선된 명령들이 하기에 상세히 설명되어 있다.
ADDFSR Add Literal to FSRn: 신택스: ADDFSR n,k
오퍼랜드들: -32≤k≤31
n ∈ [0,1]
오퍼레이션: FSR(n) + k → FSR(n)
영향을 받는 상태: 없음
인코딩: 11 0001 0nkk kkkk
설명: 부호화된 6 비트 리터럴 'k'가 'n'으로 특정된 FSR의 컨텐츠들에 부가된다. FSRn은 범위 0000h -FFFFh로 한정된다. 이들 경계들 너머로의 FSRn의 증분/감분은 FSRn이 랩 어라운드되게 할 것이다. 어드레스들 8000h 이상은 프로그램 메모리를 지시한다는 것을 주목하시오. 8000h 보다 아래에 있는 어드레스들은 데이터 메모리를 지시하며, 하위 11 비트만 어드레스 디코딩을 위해 사용된다.
워드들: 1
사이클들: 1
Q 사이클 액티비티:
Q1 Q2 Q3 Q4
디코드 FSRn' 읽기 데이터 처리 FSRn에 쓰기
예: ADDFSR 1,23h
명령 전 FSR1 = 0FFh
명령 후 FSR1 = 0122h
ADDWFC ADD WREG and CARRY bit to f: 신택스: ADDWFC f{,d}
오퍼랜드들: 0 ≤ f ≤ 127
d ∈ [0,1]
오퍼레이션: (WREG) + (f) + (C) → dest
영향을 받는 상태: C,DC,Z
인코딩: 11 1101 dfff ffff
설명: WREG, CARRY 플래그, 및 데이터 메모리 위치 'f'를 더하시오. 'd'가 '0'이면, WREG내에 결과가 배치된다. 'd'가 '1'이면, 데이터 메모리 위치 'f'내에 결과가 배치된다.
사이클들: 1
Q 사이클 액티비티:
Q1 Q2 Q3 Q4
디코드 reg 'f' 읽기 데이터 처리 목적지에 쓰기
예: ADDWFC REG,0
명령 전 CARRY 비트 = 1
REG = 02h
WREG = 4Dh
명령 후 CARRY 비트 = 0
REG = 02h
WREG = 50h
ASRF Arithmetic Right Shift: 신택스: ASRF f{,d}
오퍼랜드들: 0 ≤ f ≤ 127
d ∈ [0,1]
오퍼레이션: (f<7>) → dest<7>
(f<7:1>) → dest<6:0>,
(f<0>) → C,
영향을 받는 상태: C,Z
인코딩: 11 0111 dfff ffff
설명: 레지스터 'f'의 컨텐츠들은 CARRY 플래그를 통해 우측으로 한 비트 시프트된다. MSb는 변경되지 않는다. 'd'가 '0'이면, WREG내에 결과가 배치된다. 'd'가 '1'이면, 레지스터 'f'내에 결과가 다시 저장된다.
워드들: 1
사이클들: 1
Q 사이클 액티비티:
Q1 Q2 Q3 Q4
디코드 reg 'f' 읽기 데이터 처리 목적지에 쓰기
예: ASRF REG,0
명령 전 REG = 1110 0110
C = 1
명령 후 REG = 1110 0110
WREG = 1111 0011
C = 0
BRA Relative Branch: 신택스: BRA k
오퍼랜드들: -256≤k≤255
오퍼레이션: (PC) + k → PC
영향을 받는 상태: 없음
인코딩: 11 001k kkkk kkkk
설명: 2의 보수 'k'를 PC에 더하시오. PC는 다음 명령을 패치하기 위해 증분되기 때문에, 새로운 어드레스는 PC + 1 + k가 될 것이다. 이 명령은 2 사이클 명령이다.
워드들: 1
사이클들: 2
Q 사이클 액티비티:
Q1 Q2 Q3 Q4
디코드 리터럴 'k' 읽기 데이터 처리 PC에 쓰기
오퍼레이션 없음 오퍼레이션 없음 오퍼레이션 없음 오퍼레이션 없음
예: 0023h BRA 005h
명령 전 PC = 어드레스(0023h)
명령 후 PC = 어드레스(0029h)
BRW Relative Branch with WREG: 신택스: BRW
오퍼랜드들: 없음
오퍼레이션: (PC) + (WREG) → PC
영향을 받는 상태: 없음
인코딩: 00 0000 0000 1011
설명: WREG(비부호화됨)의 컨텐츠들을 PC에 더하시오. PC는 다음 명령을 패치하기 위해 증분되기 때문에, 새로운 어드레스는 PC + 1 + (WREG)가 될 것이다. 이 명령은 2 사이클 명령이다. WREG의 컨텐츠들은 비부호화된 넘버로서 처리된다.
워드들: 1
사이클들: 2
Q 사이클 액티비티:
Q1 Q2 Q3 Q4
디코드 reg WREG 읽기 데이터 처리 PC에 쓰기
오퍼레이션 없음 오퍼레이션 없음 오퍼레이션 없음 오퍼레이션 없음
예: 0024h BRW
명령 전 PC = 어드레스(0024h)
WREG = 85h
명령 후 PC = 어드레스(00AAh)
CALLW Subroutine Call With WREG: 신택스: CALLW
오퍼랜드들: 없음
오퍼레이션: (PC) + 1 → TOS,
(WREG) → PC<7:0>,
(PCLATH<6:0>) → PC<14:8>
영향을 받는 상태: 없음
인코딩: 00 0000 0000 1010
설명: WREG로 서브루틴 콜. 먼저, 리턴 어드레스(PC + 1)는 리턴 스택으로 푸시된다. 그리고 나서, WREG의 컨텐츠들은 PC<7:0>로 로딩되고, PCLATH의 컨텐츠들은 PC<14:8>로 로딩된다. CALLW는 2 사이클 명령이다.
워드들: 1
사이클들: 2
Q 사이클 액티비티:
Q1 Q2 Q3 Q4
디코드 레지스터 WREG 읽기 데이터 처리 PC에 쓰기
오퍼레이션 없음 오퍼레이션 없음 오퍼레이션 없음 오퍼레이션 없음
예: 0025h CALLW
명령 전 PC = 어드레스(0025h)
WREG = 1Ah
PCLATH = 10h
명령 후 TOS = 어드레스(0026h)
PC = 101Ah
WREG = 1Ah
PCLATH = 10h
LSLF Logical Left Shift: 신택스: LSLF f{,d}
오퍼랜드들: 0≤f≤127
d ∈ [0,1]
오퍼레이션: (f<7>) → C
(f<6:0>) → dest<7:1>
0 → dest<0>
영향을 받는 상태: C,Z
인코딩: 11 0101 dfff ffff
설명: 레지스터 'f'의 컨텐츠들은 CARRY 플래그를 통해 좌측으로 한 비트 시프트된다. '0'은 LSb로 시프트된다. 'd'가 '0' 이면, WREG내에 결과가 배치된다. 'd'가 '1' 이면, 레지스터 'f'내에 결과가 다시 저장된다.
워드들: 1
사이클들: 1
Q 사이클 액티비티:
Q1 Q2 Q3 Q4
디코드 reg 'f' 읽기 데이터 처리 목적지에 쓰기
예: LSLF REG, 0
명령 전 REG = 1110 0110
C = 0
명령 후 REG = 1110 0110
WREG = 1100 1100
C = 1
LSRF Logical Right Shift: 신택스: LSRF f{,d}
오퍼랜드들: 0≤f≤127
d ∈ [0,1]
오퍼레이션: 0 → dest<7>
(f<7:1>) → dest<6:0>,
(f<0>) → C,
영향을 받는 상태: C,Z
인코딩: 11 0110 dfff ffff
설명: 레지스터 'f'의 컨텐츠들은 CARRY 플래그를 통해 우측으로 한 비트 시프트된다. '0'은 MSb로 시프트된다. 'd'가 '0'이면, WREG내에 결과가 배치된다. 'd'가 '1'이면, 레지스터 'f'내에 결과가 다시 저장된다.
워드들: 1
사이클들: 1
Q 사이클 액티비티:
Q1 Q2 Q3 Q4
디코드 레지스터 'f' 읽기 데이터 처리 목적지에 쓰기
예: LSRF REG,0
명령 전 REG = 1110 0110
C = 1
명령 후 REG = 1110 0110
WREG = 0111 0011
C = 0
MOVIW Move INDFn to WREG, with pre/post increment/decrement
신택스: MOVIW ++/--FSRn++/--
n ∈ [0,1]
오퍼랜드들:
오퍼레이션: INDFn → WREG
FSRn에 선/후 증분/감분 오퍼레이션 적용.
영향을 받는 상태: Z(목적지가 WREG인 경우에만)
인코딩: 00 0000 0001 0nmm
MM Operation
00 ++FSRn
01 --FSRn
10 FSRn++
11 FSRn--
설명: 이 명령은 간접 레지스터들(INDFn) 중 하나와 WREG 사이에서 데이터를 이동시키는데 사용된다. 이 이동 전/후에, 포인터(FSRn)는 그것을 선/후 증분/감분시킴으로써 업데이트된다. FSRn은 범위 0000h - FFFFh로 한정된다. 이들 경계 너머로의 이것의 증분/감분은 이것이 랩 어라운드되게 할 것이다. 7FFFh 보다 큰 어드레스들은 프로그램 메모리를 지시한다는 것을 주목하시오. 8000h 보다 아래에 있는 어드레스들은 데이터 메모리를 지시하며, 하위 11 비트만이 어드레스 디코딩에 사용된다. FSRn에서의 증분/감분 동작은 어떠한 상태 비트들에도 영향을 주지 않을 것이다. 이 명령은 00h의 값이 WREG로 이동하면 Z 플래그에만 영향을 줄 수 있다.
워드들: 1
사이클들: 1
Q 사이클 액티비티:
Q1 Q2 Q3 Q4
디코드 필요하다면 포인터를 업데이트 데이터 처리 목적지 레지스터에 쓰기
소스 레지스터 읽기. 필요하다면 포인터를
업데이트.
예: MOVIW FSR0++
명령 전 FSR0 = 22h
WREG = FFh
(22h) = 12h
(23h) = 33h
명령 후 FSR0 = 23h
WREG = 12h
(22h) = 12h
(23h) = 33h
예: MOVIW ++ FSR0
명령 전 FSR0 = 22h
WREG = FFh
(22h) = 12h
(23h) = 33h
명령 후 FSR0 = 23h
WREG = 33h
(22h) = 12h
(23h) = 33h
MOVIW Move INDFn to WREG, Indexed Indirect Addressing
신택스: MOVIW [k]FSRn
오퍼랜드들: -32≤k≤31
n ∈ [0,1]
오퍼레이션: (FSRn + k) → WREG
FSRn + k에 의해 지시된 위치와 WREG 사이에서 데이터를 이동.
영향을 받는 상태: Z(목적지가 WREG인 경우에만)
인코딩: 11 1111 0nkk kkkk
설명: 이 명령은 FSRn + k에 의해 지시되는 위치와 WREG 사이에서 데이터를 이동시키는데 사용된다. FSRn은 k로 업데이트되지 않는다. 어드레스가능 범위는 0000h - FFFFh로 한정된다. 이들 경계 너머로의 인덱싱은 어드레스 랩-어라운드를 발생시킬 것이다. 어드레스들 8000h 이상은 프로그램 메모리를 지시한다는 것을 주목하시오. 8000h 보다 아래에 있는 어드레스들은 데이터 메모리를 지시하며, 하위 11 비트만이 어드레스 디코딩에 사용된다. 어드레스 계산(FSRn으로의 k의 부가)은 어떠한 상태 비트들에도 영향을 주지 않을 것이다. 이 명령은 00h의 값이 WREG로 이동하면 Z 플래그에만 영향을 줄 수 있다.
워드들: 1
사이클들: 1
Q 사이클 액티비티:
Q1 Q2 Q3 Q4
디코드 어드레스 계산. 데이터 처리 목적지 레지스터에 쓰기
소스 레지스터 읽기.
예: MOVIW [5]FSR0
명령 전 FSR0 = 22h
WREG = FFh
(22h) = 12h
(27h) = 39h
명령 후 FSR0 = 22h
WREG = 39h
(22h) = 12h
(27h) = 39h
예: MOVIW [-5]FSR0
명령 전 FSR0 = 22h
WREG = FFh
(1Dh) = 17h
(22h) = 12h
명령 후 FSR0 = 22h
WREG = 17h
(1Dh) = 17h
(22h) = 12h
MOVLB Move literal to BSR: 신택스: MOVLB k
오퍼랜드들: 0≤k≤15
오퍼레이션: k → BSR
영향을 받는 상태: 없음
인코딩: 00 0000 0010 kkkk
설명: 4 비트 리터럴 'k'는 BSR(Bank Select Register)에 로딩된다.
워드들: 1
사이클들: 1
Q 사이클 액티비티:
Q1 Q2 Q3 Q4
디코드 리터럴 'k' 읽기 데이터 처리 BSR에 리터럴 'k'를 쓰기
MOVLP Move literal to PCLATH: 신택스: MOVLP k
오퍼랜드들: 0≤k≤127
오퍼레이션: k → PCLATH
영향을 받는 상태: 없음
인코딩: 11 0001 1kkk kkkk
설명: 7 비트 리터럴'k'는 PCLATH 레지스터에 로딩된다.
워드들: 1
사이클들: 1
Q 사이클 액티비티:
Q1 Q2 Q3 Q4
디코드 리터럴 'k' 읽기 데이터 처리 PCLATH에 리터럴 'k'를 쓰기
MOVWI Indexed Indirect Move: 신택스: MOVWI[k]FSRn
오퍼랜드들: -32≤k≤31
n ∈ [0,1]
오퍼레이션: WREG → (FSRn+k)
WREG와 FSRn + k에 의해 지시된 위치 사이에서 데이터를 이동.
영향을 받는 상태: Z(목적지가 WREG인 경우에만)
인코딩: 11 1111 1nkk kkkk
설명: 이 명령은 WREG와, FSRn + k로 지시된 위치 사이에서 데이터를 이동시키는데 사용된다. FSRn은 k로 업데이트되지 않는다. 어드레스가능 범위는 0000h - FFFFh로 한정된다. 이들 경계 너머로의 인덱싱은 어드레스 랩 어라운드를 발생시킬 것이다. 어드레스 8000h 이상은 프로그램 메모리를 지시한다. 8000h 보다 아래에 있는 어드레스들은 데이터 메모리를 지시하며, 하위 11 비트만이 어드레스 디코딩에 사용된다. 어드레스 계산(FSRn에의 k의 부가)은 어떠한 상태 비트들에도 영향주지 않을 것이다.
워드들: 1
사이클들: 1
Q 사이클 액티비티:
Q1 Q2 Q3 Q4
디코드 어드레스 계산. 데이터 처리 목적지 레지스터에 쓰기
소스 레지스터 읽기.
예: MOVWI[3]FSR0
명령 전 FSR0 = 22h
WREG = FFh
(22h) = 12h
(25h) = 56h
명령 후 FSR0 = 22h
WREG = FFh
(22h) = 12h
(25h) = FFh
예: MOVWI[-1]FSR0
명령 전 FSR0 = 22h
WREG = FFh
(21h) = 56h
(22h) = 12h
명령 후 FSR0 = 22h
WREG = FFh
(21h) = FFh
(22h) = 12h
Q 사이클 액티비티:
Q1 Q2 Q3 Q4
디코드 레지스터 'f' 읽기 데이터 처리 목적지에 쓰기
MOVWI Move WREG to INDFn, with pre/post increment/decrement
신택스: MOVWI ++/--FSRn++/--
오퍼랜드들:
n ∈ [0,1]
오퍼레이션: WREG → INDFn
사용되는 FSR 에 선/후 증분/감분 오퍼레이션을 적용.
영향을 받는 상태: Z(목적지가 WREG인 경우에만)
인코딩: 00 0000 0001 1nmm
MM Operations
00 ++FSRn
01 --FSRn
10 FSRn++
11 FSRn--
설명: 이 명령은 WREG와, 간접 레지스터들(INDFn) 중 하나의 사이에서 데이터를 이동시키는데 사용된다. 이 이동 전/후에, 포인터(FSRn)는 그것을 선/후 증분/감분시킴으로써 업데이트된다. FSRn은 범위 0000h - FFFFh로 한정된다. 이들 경계 너머로의 이것의 증분/감분은 이것이 랩 어라운드되게 할 것이다. 어드레스들 8000h 이상은 프로그램 메모리를 지시한다는 것을 주목하시오. 8000h 보다 아래에 있는 어드레스들은 데이터 메모리를 지시하며, 하위 11 비트만이 어드레스 디코딩에 사용된다. FSRn에서의 증분/감분 동작은 어떠한 상태 비트들에도 영향주지 않을 것이다.
워드들: 1
사이클들: 1
Q 사이클 액티비티:
Q1 Q2 Q3 Q4
디코드 필요하다면 포인터를 데이터 처리 INDFn에 쓰기.
업데이트 필요하다면 포인터를
업데이트.
예: MOVWI FSR0--
명령 전 FSR0 = 22h
WREG = FFh
(21h) = 56h
(22h) = 12h
명령 후 FSR0 = 21h
WREG = FFh
(21h) = 56h
(22h) = FFh
예: MOVWI --FSR0
명령 전 FSR0 = 22h
WREG = FFh
(21h) = 56h
(22h) = 12h
명령 후 FSR0 = 21h
WREG = FFh
(21h) = FFh
(22h) = 12h
RESET Software Reset: 신택스: RESET
오퍼랜드들: 없음
오퍼레이션: nMCLR 실행. MCLR 리셋에 의해 영향받는 모든 레지스터들과 플래그들을 리셋. PCON.nSWRST 플래그를 세트.
영향을 받는 상태: 모두
인코딩: 00 0000 0000 0001
설명: 이 명령은 소프트웨어로 MCLR 리셋을 실행하기 위한 방법을 제공한다.
워드들: 1
사이클들: 1
Q 사이클 액티비티:
Q1 Q2 Q3 Q4
디코드 리셋 시작 오퍼레이션 없음 오퍼레이션 없음
예: RESET
명령 후 Registers = Reset Value
Flags* = Reset Value
SUBWFB Subtract WREG from f with Borrow: 신택스: SUBWFB f{,d}
오퍼랜드들: 0≤f≤127
d ∈ [0,1]
오퍼레이션: (f) - (WREG) - (B) → dest
영향을 받는 상태: C,DC,Z
인코딩: 11 1011 dfff ffff
설명: 레지스터 'f'에서 WREG 및 BORROW 플래그(CARRY)를 감산한다(2의 보수 방법). 'd'가 '0'이면, WREG내에 결과가 저장된다. 'd'가 '1'이면, 레지스터 'f'내에 결과가 다시 저장된다.
워드들: 1
사이클들: 1
예 1: SUBWFB REG, 1
명령 전 REG = 19h(0001 1001)
WREG = 0Dh(0000 1101)
C = 1(So B = 0)
명령 후 REG = 0Ch(0000 1100)
WREG = 0Dh(0000 1101)
C = 1(No Borrow)
DC = 0(Indicates a digit borrow)
예 2: SUBWFB REG, 0
명령 전 REG = 1Bh(0001 1011)
WREG = 1Ah(0001 1010)
C = 0(So B = 1)
명령 후 REG = 1Bh(0001 1011)
WREG = 00h
C = 1(No Borrow)
DC = 1(No digit borrow)
Z = 1 Result is zero

Claims (18)

  1. 마이크로프로세서 또는 마이크로컨트롤러 디바이스로서,
    CPU(central processing unit);
    상기 CPU와 연결되고, 복수의 메모리 뱅크들로 분할되어 있는 데이터 메모리; 및
    상기 데이터 메모리에 메모리-매핑될 수 있는 복수의 특수 기능 레지스터들 및 범용 레지스터들로서, 적어도 상태 레지스터, 뱅크 선택 레지스터, 복수의 간접 메모리 어드레스 레지스터들, 작업 레지스터, 및 프로그램 카운터 하이 래치의 특수 기능 레지스터들은 모든 메모리 뱅크들에 메모리-매핑되는 복수의 특수 기능 레지스터들 및 범용 레지스터들을 포함하고,
    컨텍스트 절환 발생시, 상기 CPU는 상기 상태 레지스터, 상기 뱅크 선택 레지스터, 상기 복수의 간접 메모리 어드레스 레지스터들, 상기 작업 레지스터, 및 상기 프로그램 카운터 하이 래치의 컨텐츠를 자동적으로 세이브하도록 동작가능하고, 상기 컨텍스트 절환으로부터의 복귀시, 상기 상태 레지스터, 상기 뱅크 선택 레지스터, 상기 복수의 간접 메모리 어드레스 레지스터들, 상기 작업 레지스터, 및 상기 프로그램 카운터 하이 래치의 상기 컨텐츠를 복구하는 것을 특징으로 하는 마이크로프로세서 또는 마이크로컨트롤러 디바이스.
  2. 제1항에 있어서,
    상기 CPU와 연결된 인터럽트 유닛을 더 포함하고, 상기 컨텍스트 절환은 인터럽트에 의해 유도되는 것을 특징으로 하는 마이크로프로세서 또는 마이크로컨트롤러 디바이스.
  3. 제1항에 있어서,
    상기 컨텍스트 절환은 소프트웨어로 유도되는 것을 특징으로 하는 마이크로프로세서 또는 마이크로컨트롤러 디바이스.
  4. 제1항에 있어서,
    상기 상태 레지스터, 상기 뱅크 선택 레지스터, 상기 복수의 간접 메모리 어드레스 레지스터들, 상기 작업 레지스터, 및 상기 프로그램 카운터 하이 래치의 상기 컨텐츠는 복수의 추가 레지스터들에 세이브되는 것을 특징으로 하는 마이크로프로세서 또는 마이크로컨트롤러 디바이스.
  5. 제1항에 있어서,
    상기 상태 레지스터, 상기 뱅크 선택 레지스터, 상기 복수의 간접 메모리 어드레스 레지스터들, 상기 작업 레지스터, 및 상기 프로그램 카운터 하이 래치의 상기 컨텐츠는 스택 또는 추가 메모리에 세이브되는 것을 특징으로 하는 마이크로프로세서 또는 마이크로컨트롤러 디바이스.
  6. 제1항에 있어서,
    각 메모리 뱅크는 메모리 매핑되는 상기 제1 및 제2 간접 어드레싱 모드 레지스터들로의 읽기 또는 쓰기 액세스시 간접 어드레싱 액세스를 발생시키는 복수의 간접 어드레싱 모드 레지스터들; 제1 프로그램 카운터 레지스터; 상태 레지스터; 복수의 간접 메모리 어드레스 레지스터들; 뱅크 선택 레지스터; 작업 레지스터; 프로그램 카운터 하이 래치 레지스터; 및 인터럽트 제어 레지스터를 갖는 것을 특징으로 하는 마이크로프로세서 또는 마이크로컨트롤러 디바이스.
  7. 제6항에 있어서,
    상기 특수 기능 레지스터들은 메모리 뱅크 어드레스 0에서 시작하여 매핑되는 것을 특징으로 하는 마이크로프로세서 또는 마이크로컨트롤러 디바이스.
  8. 제7항에 있어서,
    2개의 간접 어드레싱 모드 레지스터들과 4개의 간접 메모리 어드레스 레지스터들을 더 포함하고, 간접 어드레싱 모드 레지스터로의 액세스는 상기 4개의 간접 메모리 어드레스 레지스터들 중 2개의 연접된 간접 메모리 어드레스 레지스터들을 이용하며, 상기 특수 기능 레지스터들은 메모리 뱅크 어드레스 0에서 0Bh까지 매핑되는 것을 특징으로 하는 마이크로프로세서 또는 마이크로컨트롤러 디바이스.
  9. 제1항에 있어서,
    상기 CPU와 연결된 프로그램 메모리를 더 포함하고, 상기 간접 메모리 어드레스 레지스터들내의 한 비트는 간접 메모리 액세스가 상기 데이터 메모리에서 수행될지 또는 상기 프로그램 메모리에서 수행될지를 나타내는 것을 특징으로 하는 마이크로프로세서 또는 마이크로컨트롤러 디바이스.
  10. CPU(central processing unit); 상기 CPU와 연결되고, 복수의 메모리 뱅크들로 분할되어 있는 데이터 메모리; 및 복수의 특수 기능 레지스터들 및 범용 레지스터들을 포함하는 마이크로프로세서 또는 마이크로컨트롤러 디바이스 동작 방법으로서,
    적어도 상태 레지스터, 뱅크 선택 레지스터, 복수의 간접 메모리 어드레스 레지스터들, 작업 레지스터, 및 프로그램 카운터 하이 래치의 특수 기능 레지스터들을 모든 메모리 뱅크들에 메모리 매핑하는 단계;
    컨텍스트 절환 발생시, 상기 상태 레지스터, 상기 뱅크 선택 레지스터, 상기 복수의 간접 메모리 어드레스 레지스터들, 상기 작업 레지스터, 및 상기 프로그램 카운터 하이 래치의 컨텐츠를 자동적으로 세이브는 단계; 및
    상기 컨텍스트 절환으로부터의 복귀시, 상기 상태 레지스터, 상기 뱅크 선택 레지스터, 상기 복수의 간접 메모리 어드레스 레지스터들, 상기 작업 레지스터, 및 상기 프로그램 카운터 하이 래치의 상기 컨텐츠를 복구하는 단계를 포함하는 것을 특징으로 하는 마이크로프로세서 또는 마이크로컨트롤러 디바이스 동작 방법.
  11. 제10항에 있어서,
    인터럽트에 의해 상기 컨텍스트 절환을 유도하는 단계를 더 포함하는 것을 특징으로 하는 마이크로프로세서 또는 마이크로컨트롤러 디바이스 동작 방법.
  12. 제10항에 있어서,
    상기 컨텍스트 절환은 소프트웨어로 유도되는 것을 특징으로 하는 마이크로프로세서 또는 마이크로컨트롤러 디바이스 동작 방법.
  13. 제10항에 있어서,
    상기 상태 레지스터, 상기 뱅크 선택 레지스터, 상기 복수의 간접 메모리 어드레스 레지스터들, 상기 작업 레지스터, 및 상기 프로그램 카운터 하이 래치의 상기 컨텐츠는 복수의 추가 레지스터들에 세이브되는 것을 특징으로 하는 마이크로프로세서 또는 마이크로컨트롤러 디바이스 동작 방법.
  14. 제10항에 있어서,
    상기 상태 레지스터, 상기 뱅크 선택 레지스터, 상기 복수의 간접 메모리 어드레스 레지스터들, 상기 작업 레지스터, 및 상기 프로그램 카운터 하이 래치의 상기 컨텐츠는 스택 또는 추가 메모리에 세이브되는 것을 특징으로 하는 마이크로프로세서 또는 마이크로컨트롤러 디바이스 동작 방법.
  15. 제10항에 있어서,
    각 메모리 뱅크는 메모리 매핑되는 상기 제1 및 제2 간접 어드레싱 모드 레지스터들로의 읽기 또는 쓰기 액세스시 간접 어드레싱 액세스를 발생시키는 복수의 간접 어드레싱 모드 레지스터들; 제1 프로그램 카운터 레지스터; 상태 레지스터; 복수의 간접 메모리 어드레스 레지스터들; 뱅크 선택 레지스터; 작업 레지스터; 프로그램 카운터 하이 래치 레지스터; 및 인터럽트 제어 레지스터를 갖는 것을 특징으로 하는 마이크로프로세서 또는 마이크로컨트롤러 디바이스 동작 방법.
  16. 제15항에 있어서,
    상기 특수 기능 레지스터들은 메모리 뱅크 어드레스 0에서 시작하여 매핑되는 것을 특징으로 하는 마이크로프로세서 또는 마이크로컨트롤러 디바이스 동작 방법.
  17. 제15항에 있어서,
    2개의 간접 어드레싱 모드 레지스터들과 4개의 간접 메모리 어드레스 레지스터들을 이용하는 단계를 더 포함하고, 간접 어드레싱 모드 레지스터로의 액세스는 상기 4개의 간접 메모리 어드레스 레지스터들 중 2개의 연접된 간접 메모리 어드레스 레지스터들을 이용하며, 상기 특수 기능 레지스터들은 메모리 뱅크 어드레스 0에서 0Bh까지 매핑되는 것을 특징으로 하는 마이크로프로세서 또는 마이크로컨트롤러 디바이스 동작 방법.
  18. 제10항에 있어서,
    상기 CPU와 연결된 프로그램 메모리를 이용하는 단계를 더 포함하고, 상기 간접 메모리 어드레스 레지스터들내의 한 비트는 간접 메모리 액세스가 상기 데이터 메모리에서 수행될지 또는 상기 프로그램 메모리에서 수행될지를 나타내는 것을 특징으로 하는 마이크로프로세서 또는 마이크로컨트롤러 디바이스 동작 방법.
KR1020107010628A 2007-11-30 2008-11-26 개선된 마이크로프로세서 또는 마이크로컨트롤러 KR101531372B1 (ko)

Applications Claiming Priority (5)

Application Number Priority Date Filing Date Title
US99158007P 2007-11-30 2007-11-30
US60/991,580 2007-11-30
US12/147,746 2008-06-27
US12/147,746 US8539210B2 (en) 2007-11-30 2008-06-27 Context switching with automatic saving of special function registers memory-mapped to all banks
PCT/US2008/084939 WO2009073542A1 (en) 2007-11-30 2008-11-26 Enhanced microprocessor or microcontroller

Publications (2)

Publication Number Publication Date
KR20100101090A true KR20100101090A (ko) 2010-09-16
KR101531372B1 KR101531372B1 (ko) 2015-06-24

Family

ID=40676939

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020107010628A KR101531372B1 (ko) 2007-11-30 2008-11-26 개선된 마이크로프로세서 또는 마이크로컨트롤러

Country Status (6)

Country Link
US (2) US8539210B2 (ko)
EP (1) EP2215548A1 (ko)
KR (1) KR101531372B1 (ko)
CN (1) CN101868783B (ko)
TW (1) TWI479411B (ko)
WO (1) WO2009073542A1 (ko)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20140075436A (ko) * 2012-12-11 2014-06-19 삼성전자주식회사 특수 기능 레지스터를 포함하는 시스템 온 칩 및 그 동작 방법
KR20170018752A (ko) * 2015-08-10 2017-02-20 삼성전자주식회사 부채널 공격에 대응하는 전자 장치

Families Citing this family (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8234543B2 (en) * 2009-03-06 2012-07-31 Via Technologies, Inc. Detection and correction of fuse re-growth in a microprocessor
US8677189B2 (en) * 2011-11-16 2014-03-18 GM Global Technology Operations LLC Recovering from stack corruption faults in embedded software systems
CN104025026B (zh) * 2011-12-29 2019-07-26 英特尔公司 访问用于配置空间的配置和状态寄存器
US9195497B2 (en) * 2012-03-21 2015-11-24 Microchip Technology Incorporated Microcontroller with context switch
US9323575B1 (en) 2015-02-26 2016-04-26 Freescale Semiconductor, Inc. Systems and methods for improving data restore overhead in multi-tasking environments
US9946482B2 (en) * 2015-07-14 2018-04-17 Microchip Technology Incorporated Method for enlarging data memory in an existing microprocessor architecture with limited memory addressing
US10210350B2 (en) * 2015-08-10 2019-02-19 Samsung Electronics Co., Ltd. Electronic device against side channel attacks
KR20180081732A (ko) * 2015-11-13 2018-07-17 가부시키가이샤 한도오따이 에네루기 켄큐쇼 반도체 장치, 전자 부품, 및 전자 기기
US10255073B2 (en) * 2016-05-12 2019-04-09 Microchip Technology Incorporated Microcontroller with variable length move instructions using direct immediate addressing or indirect register offset addressing
GB2577729C (en) 2018-10-04 2021-10-27 Advanced Risc Mach Ltd Processor with Register Bank having Banked Versions of a Register each Associated with an Operating State of the Processor
US11036633B2 (en) 2019-08-22 2021-06-15 Micron Technology, Inc. Hierarchical memory apparatus
TWI778601B (zh) * 2021-04-29 2022-09-21 新唐科技股份有限公司 微控制器、操作系統及控制方法
JP2023082311A (ja) * 2021-12-02 2023-06-14 ローム株式会社 演算装置

Family Cites Families (17)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS58112152A (ja) 1981-12-24 1983-07-04 Nec Corp 半導体集積回路
JPS6414648A (en) * 1987-07-08 1989-01-18 Mitsubishi Electric Corp Arithmetic processor
JP3141146B2 (ja) * 1993-07-27 2001-03-05 三菱電機株式会社 ワンチップマイクロコンピュータ
US5653735A (en) * 1995-06-28 1997-08-05 Pacesetter, Inc. Implantable cardiac stimulation device having an improved backup mode of operation and method thereof
US5987258A (en) * 1997-06-27 1999-11-16 Lsi Logic Corporation Register reservation method for fast context switching in microprocessors
US6055211A (en) 1997-07-03 2000-04-25 Microchip Technology Incorporated Force page zero paging scheme for microcontrollers using data random access memory
US6128641A (en) 1997-09-12 2000-10-03 Siemens Aktiengesellschaft Data processing unit with hardware assisted context switching capability
US6192463B1 (en) * 1997-10-07 2001-02-20 Microchip Technology, Inc. Processor architecture scheme which uses virtual address registers to implement different addressing modes and method therefor
US5987583A (en) 1997-10-07 1999-11-16 Microchip Technology Inc. Processor architecture scheme and instruction set for maximizing available opcodes and address selection modes
US6029241A (en) * 1997-10-28 2000-02-22 Microchip Technology Incorporated Processor architecture scheme having multiple bank address override sources for supplying address values and method therefor
US6708268B1 (en) * 1999-03-26 2004-03-16 Microchip Technology Incorporated Microcontroller instruction set
US20020032829A1 (en) * 2000-06-28 2002-03-14 Z-World, Inc. Microprocessor memory device controller
US6735664B1 (en) * 2000-10-18 2004-05-11 Advanced Micro Devices, Inc. Indirect addressing method and device incorporating the same
JP2002149402A (ja) * 2000-11-14 2002-05-24 Pacific Design Kk データ処理装置およびその制御方法
US6728856B2 (en) * 2001-06-01 2004-04-27 Microchip Technology Incorporated Modified Harvard architecture processor having program memory space mapped to data memory space
US6704601B1 (en) * 2001-08-09 2004-03-09 Pacesetter, Inc. Implantable medical stimulation device having reconfigurable memory
US20030056071A1 (en) * 2001-09-18 2003-03-20 Triece Joseph W. Adaptable boot loader

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20140075436A (ko) * 2012-12-11 2014-06-19 삼성전자주식회사 특수 기능 레지스터를 포함하는 시스템 온 칩 및 그 동작 방법
KR20170018752A (ko) * 2015-08-10 2017-02-20 삼성전자주식회사 부채널 공격에 대응하는 전자 장치

Also Published As

Publication number Publication date
CN101868783B (zh) 2014-03-19
US20140019991A1 (en) 2014-01-16
KR101531372B1 (ko) 2015-06-24
WO2009073542A1 (en) 2009-06-11
EP2215548A1 (en) 2010-08-11
TW200935302A (en) 2009-08-16
US20090144481A1 (en) 2009-06-04
US8539210B2 (en) 2013-09-17
CN101868783A (zh) 2010-10-20
TWI479411B (zh) 2015-04-01

Similar Documents

Publication Publication Date Title
KR101531372B1 (ko) 개선된 마이크로프로세서 또는 마이크로컨트롤러
EP1080406B1 (en) Microcontroller instruction set
KR101564693B1 (ko) 개선된 마이크로프로세서 또는 마이크로컨트롤러
EP3674890B1 (en) Hardware processors and methods for extended microcode patching
KR100462951B1 (ko) Risc 구조를 갖는 8 비트 마이크로콘트롤러
EP0465248B1 (en) Pseudo-linear bank switching memory expansion
WO1997022922A1 (en) Instruction encoding techniques for microcontroller architecture
US8789169B2 (en) Microcomputer having a protection function in a register
JP2004086837A (ja) データ処理装置
JP6143841B2 (ja) コンテキストスイッチを伴うマイクロコントローラ
KR100960095B1 (ko) 마이크로컨트롤러 명령어 셋트
KR100897857B1 (ko) 마이크로컨트롤러 명령어 셋트
Simpson et al. The IBM RT PC ROMP Processor And Memory Management Unit Arc
JP2007048317A (ja) データ処理装置

Legal Events

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

Payment date: 20180601

Year of fee payment: 4