KR100960095B1 - 마이크로컨트롤러 명령어 셋트 - Google Patents

마이크로컨트롤러 명령어 셋트 Download PDF

Info

Publication number
KR100960095B1
KR100960095B1 KR1020087012887A KR20087012887A KR100960095B1 KR 100960095 B1 KR100960095 B1 KR 100960095B1 KR 1020087012887 A KR1020087012887 A KR 1020087012887A KR 20087012887 A KR20087012887 A KR 20087012887A KR 100960095 B1 KR100960095 B1 KR 100960095B1
Authority
KR
South Korea
Prior art keywords
instruction
bit
register
instructions
literal
Prior art date
Application number
KR1020087012887A
Other languages
English (en)
Other versions
KR20080053960A (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
Priority claimed from US10/796,771 external-priority patent/US7203818B2/en
Application filed by 마이크로칩 테크놀로지 인코포레이티드 filed Critical 마이크로칩 테크놀로지 인코포레이티드
Publication of KR20080053960A publication Critical patent/KR20080053960A/ko
Application granted granted Critical
Publication of KR100960095B1 publication Critical patent/KR100960095B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • 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
    • 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/34Addressing or accessing the instruction operand or the result ; Formation of operand address; Addressing modes

Landscapes

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

Abstract

마이크로컨트롤러 디바이스는 마이크로컨트롤러의 동작을 조작하기 위한 명령어 셋트를 갖는다. 이 디바이스 및 시스템은 모듈러 에뮬레이션을 가능하게 하는 선형의 어드레스 영역을 인에이블한다. 직접 또는 간접 어드레싱은 레지스터 파일 또는 데이터 메모리를 통해 가능하다. 프로그램 카운터(PC) 및 작업 레지스터(W)를 포함하는 특수 기능 레지스터들은 데이터 메모리에 맵핑된다. 직교(대칭) 명령어 셋트는 모든 어드레싱 모드를 이용하는 모든 레지스터 상에서의 모든 오퍼레이션을 가능하게 한다. 그 결과, 두 파일 레지스터는 모든 두 오퍼랜드 명령어를 이용할 수 있게 된다. 이에 의해 두 레지스터 사이에서 W 레지스터를 통하지 않고 데이터를 직접 이동시킬 수 있게 된다. 따라서, 동작 성능의 향상 및 프로그램 메모리 사용량의 감소를 도모할 수 있다
마이크로컨트롤러, 명령어, 레지스터

Description

마이크로컨트롤러 명령어 셋트{MICROCONTROLLER INSTRUCTION SET}
본 발명은 마이크로컨트롤러에 관한 것으로서, 더욱 상세하게는 마이크로컨트롤러의 동작을 조작하기 위해 이용되는 명령어 셋트에 포함되는 op코드 명령어에 관한 것이다.
관련 출원
본 출원은, 1999년 3월 26일에 출원된 미국 특허 09/280,112호와 동일 명칭 및 동일 발명자이며, 부분적으로 연속되는 것이다. 본 출원은 이하의 출원과 관련되며, 이들는 모든 목적에 대한 참조를 위해 추가된다: 미국 특허 6,055,211, "FORCE PAGE ZERO PAGING SCHEME FOR MICROCONTROLLERS USING DATA ACCESS MEMORY", Randy L. Yach 외; 5,905,880, "ROBUST MULTIPLE WORK INSTRUCTIO AND METHOD THEREFOR", Rodney J. drake 외; 6,192,463, "PROCESSOR ARCHITECTURE SCHEME WHICH USES VIRTUAL ADDRESS REGISTERS TO INPLEMENT DIFFERENT ADDRESSING MODES AND METHOD THEREFOR", Sumit Mitra 외; 6,243,798, "COMPUTER SYSTEM FOR ALLOWING A TWO WORD INSTRUCTION TO BE EXECUTED IN THE SAME NUMBER OF CYCLES AS A SINGLE WORD JUMP INSTRUCTION", Rodney J. drake 외; 6,029,241, "PROCESSOR ARCHITECTURE SCHEME HAVING MULTIPLE BANK ADDRESS OVERRIDE SOURCES FOR SUPPLYING ADDRESS VALUES AND METHOD THEREFORE", Igor Wojenwoda, Sumit Mitra, Rodney J. drake; 6,098,160, "DATA POINTER FOR OUTPUTTING INDIRECT ADDRESSING MODE ADDRESSES WITHIN A SINGLE CYCLE AND METHOD THEREFOR", Rodney J. drake 외; 5,958,039, "MASTER-SLAVE LATCHES AND POST INCREMENT/DECREMENT OPERATION", Allen 외; 5,987,583, "PROCESSOR ARCHITECTURE SCHEME AND INSTRUCTIOJN SET FOR MAXIMIZING AVAILABLE OPCODES AND ADDRESSING SELECTION MODES", Triece 외.
마이크로컨트롤러 장치(MCU)는 수년 동안 전자 산업에 이용되고 있다. 도 1은 미드-레인지 MCU 디바이스에서의 일반적인 코어 메모리 버스의 구조를 나타내고 있다. 많은 경우에, 마이크로컨트롤러는 RISC(Reduced Instruction Set Computing) 마이크로프로세서를 이용한다. 이러한 디바이스 중 일부에서의 높은 동작 성능은, RISC 마이크로프로세서에서 일반적으로 발견되는 여러가지 형태에 기인한다. 이러한 형태는 다음과 같다:
하바드 아키텍쳐(Harvard architecture)
롱 워드 명령어(Long Word Intructions)
싱글 워드 명령어(Single Word Instructions)
싱글 사이클 명령어(Single Cycle Instructions)
명령어 파이프라이닝(Instruction Pipelining)
축소 명령어 셋트(Reduced Instruction Set)
레지스터 파일 아키텍쳐(Register File Architecture)
직교(대칭) 명령어(Orthogonal (Symmetric) Instructions)
하바드 아키텍쳐 :
도 2에 나타난 바와 같이, 하바드 아키텍쳐는 독립 메모리인 프로그램 메모리(26)와 데이터 메모리(22)를 가지며, 각각 독립된 버스를 통해 CPU(24)에 의해 액세스된다. 이는, CPU(34)에 의해 동일한 버스를 이용하여 동일한 메모리(36)로부터 프로그램 및 데이터를 펫치하는, 통상의 폰 노이만 아키텍쳐(von Neumann architecture)의 대역폭을 개선한다. 하나의 명령어를 실행하기 위해서, 폰 노이만 머신은 명령어를 펫치하기 위해 8비트 버스를 통해 한 번 또는 다수(일반적으로 다수)의 액세스를 필요로 한다. 이후 데이터가 펫치되고, 동작이 이루어진 후, 기록된다. 이러한 설명에서 알 수 있듯이, 버스는 극도로 혼잡하게 된다.
이러한 폰 노이만 머신과는 반대로, 하바드 아키텍쳐에서는, 명령어의 모든 14비트가 싱글 명령어 사이클에서 펫치된다. 따라서, 프로그램 메모리가 액세스되는 동안, 하바드 아키텍쳐에서는, 데이터 메모리는 하나의 독립 버스상에 있게 되어 읽기 및 기록이 가능하게 된다. 이러한 분리된 버스는 다음 명령어가 펫치되기 전까지 하나의 명령어가 실행될 수 있도록 한다.
롱 워드 명령어:
롱 워드 명령어는 8비트 데이터 메모리 버스보다 넓은(더 많은 비트의) 명령어를 갖는다. 이는 두 개의 버스가 서로 분리되어 있음으로써 가능하다. 또한, 프로그램 메모리 폭이 아키텍쳐의 요구 사항에 대해 최적화되어 있기 때문에, 프로그램 메모리를 더욱 효율적으로 이용할 수 있도록, 명령어를 8비트 폭 데이터 워드와 는 다른 크기로 할 수 있다.
싱글 워드 명령어:
싱글 워드 명령어 op코드는 14비트로서, 모든 싱글 워드 명령어를 가질 수 있게 된다. 14비트 프로그램 메모리 액세스 버스는, 하나의 사이클에서 14비트 명령어를 펫치한다. 싱글 워드 명령어에서, 프로그램 메모리 로케이션의 워드 개수는 그 디바이스에 대한 명령어의 개수와 동일하다. 이는 모든 로케이션이 가용한 명령어임을 의미한다. 일반적으로 폰 노이만 아키텍쳐(도 3 참조)에서, 대부분의 명령어는 다수의 바이트로 이루어진다. 또한, 4K바이트의 프로그램 메모리를 갖는 디바이스는, 대략 2K의 명령어를 허용할 수 있다. 이러한 2:1 비율은 일반화되어 있으며, 어플리케이션 코드에 의존한다. 한편, 각 명령어가 다수의 바이트를 갖기 때문에, 각 로케이션이 가용한 명령어라는 것은 보장되지 않는다.
명령어 파이프라인:
명령어 파이프라인은 펫치와 명령어 실행이 오버랩된 두 상태의 파이프라인이다. 명령어 펫치는 하나의 머신 사이클("TCY")을 취하며, 실행 또한 또 다른 TCY를 취한다. 그러나, 현재의 명령어 펫치와 이전 명령어 실행이 오버랩됨으로써, 싱글 TCY마다 하나의 명령어는 펫치되고 다른 명령어는 실행된다.
싱글 사이클 명령어:
14비트 폭인 프로그램 메모리 버스에서, 모든 명령어는 하나의 TCY에서 펫치된다. 이 명령어는 필요로 하는 모든 정보를 포함하며, 하나의 사이클에서 실행된다. 만약 명령어의 결과가 프로그램 카운터의 내용을 변경했다면, 실행시 한 사이 클의 딜레이가 발생할 수 있다. 이는 파이프라인이 비워진 후에, 새로운 명령어가 펫치될 것을 요구한다.
축소 명령어 셋트 :
어떠한 명령어 셋트가 잘 구성되고 고도로 직교(대칭)한다면, 보다 적은 명령어로 모든 요청된 업무를 수행할 수 있을 것이다. 보다 적은 명령어에 의해, 모든 셋트가 더 빨리 학습될 수 있게 된다.
레지스터 파일 아키텍쳐 :
레지스터 파일/데이터 메모리는 직접적 또는 간접적으로 어드레스 지정될 수 있다. 프로그램 카운터를 포함하는 모든 특수 기능 레지스터는 데이터 메모리에 맵핑된다.
직교(대칭) 명령어:
직교 명령어는, 어떤 어드레싱 모드를 이용하는 어떤 레지스터 상에서 모든 동작이 수행될 수 있도록 한다. 이러한 대칭적 특징 및 "특수 명령어"의 부족은 프로그래밍을 간결하게 한다. 또한, 학습 곡선이 현저하게 감소된다. 중간-범위 명령어 셋트는, 두 개의 코어 형태에 대해 이용되는 두개의 비-레지스터(non-register) 기반 명령어만을 이용한다. 이 중 하나는 디바이스를 최저 전력 사용 모드로 하는 SLEEP 명령어이다. 다른 하나는 온-칩 왓치독 타이머(on-chip Watchdog Timer; WDT)가 오버플로되어 디바이스 리셋시키는 것을 방지하는 것에 의해, 칩이 적절히 동작하는지를 확인하는 CLRWDT 명령어이다.
클로킹 스킴 /명령어 사이클( Clocking Scheme / Instruction Cycle ):
(OSC1으로부터의) 클록 입력은, 네개의 서로 오버랩되지 않는 직각 위상 클록을 생성하기 위해 내부적으로 네개의 Q1, Q2, Q3, 및 Q4로 분할된다. 내부적으로, 프로그램 카운터(PC)는 매 Q1마다 증가되고, 명령어는 프로그램 메모리로부터 펫치되고, Q4에서 명령어 레지스터로 랫치된다. 이 명령어는, Q1 내지 Q4를 통해 디코드되고 실행된다. 이 클록과 명령어 실행의 흐름은 도 4 및 5에 나타나 있다.
명령어 흐름/ 파이프라이닝 :
도 4에 나타난 바와 같은 "명령어 사이클"은, 도 4 및 5에 나타난 바와 같이, TCY를 구성하는 네개의 Q 사이클(Q1, Q2, Q3, 및 Q4)을 포함한다. 도 5에서 모든 명령어는, 어떤 프로그램 브랜치를 제외하면, 하나의 사이클에서 수행된다. 프로그램 브랜치는, 새로운 명령어가 펫치되고 실행되는 동안 펫치 명령어가 파이프라인으로부터 "비워지기" 때문에, 두개의 사이클을 취한다.
디코드와 실행이 또 다른 명령어 사이클을 취하는 동안에, 펫치는 하나의 사이클을 취한다. 그러나 파이프라이닝에 의해, 각각의 명령어는 하나의 사이클에서 효율적으로 실행된다. 만약 명령어가 프로그램 카운터의 변경을 유발하면(예를 들면 GOTO), 명령어를 완료하기 위해 별도의 사이클이 필요하게 된다(도 5). 명령어 펫치는 프로그램 카운터를 Q1으로 증가시키면서 시작된다. 실행 사이클에 있어서, 펫치된 명령어는, Q1 사이클에서 "명령어 레지스터(IR)"에 랫치된다. 이 명령어는 이후 Q2, Q3, 및 Q4에서 디코드되고 실행된다. 데이터 메모리는 Q2 동안 읽혀지고(오퍼랜드 읽기) Q4 동안 기록된다(목적지 기록). 도 5는 명령어 처리 과정을 나타내기 위한 두가지 상태의 파이프라인의 동작을 나타내고 있다. 시간 TCY0에서, 제1 명령어는 프로그램 메모리로부터 펫치된다. TCY1에서, 제1 명령어가 실행되고 제2 명령어가 펫치된다. TCY2에서, 제2 명령어가 실행되고 제3 명령어가 펫치된다. TCY3에서, 제4 명령어가 실행되고 제3 명령어(CALL SUB_1)는 펫치된다. 제3 명령어의 실행이 완료하면, CPU는, 제4 명령어의 어드레스를 스택으로 보내고, 프로그램 카운터(PC)를 SUB_1의 어드레스로 변경한다. 이는 TCY3 동안 펫치된 명령어가 파이프라인으로부터 "비워질" 필요가 있다는 것을 의미한다. TCY4에서는, 제4 명령어가 비워지고(NOP로서 실행됨) SUB_1 어드레스의 명령어가 펫치된다. 마지막으로 TCY5에서, 제5 명령어가 실행되고 SUB_1+1 어드레스의 명령어가 펫치된다.
비록 이러한 종래의 마이크로컨트롤러가 유용하다 할지라도, 다양한 모듈이 에뮬레이트될 수는 없다. 또한, 도 1에 나타난 바와 같은 형태의 마이크로컨트롤러는, 어드레스 영역이 선형화될 수 없다. 결과적으로, 종래의 마이크로컨트롤러는 컴파일러 에러 문제가 발생할 수 있다. 이에 따라, 모듈러 에뮬레이션을 가능하게 하기 위해 어드레스 영역을 선형화할 수 있는 마이크로컨트롤러를 위한 디바이스, 방법, 및 시스템이 요구된다. 또한 컴파일러 에러를 줄이기 위한 기술도 요구된다.
본 발명은, 종래의 기술에서 발견되는 다수의 컴파일러 에러를 없앤 마이크로컨트롤러 명령어 셋트를 제공함으로써, 상기와 같은 문제점과 그외의 결점 및 단점을 극복하고자 한다. 또한, 모듈러 에뮬레이션을 가능하게 하는 선형화된 어드레스 영역을 실현한 디바이스 및 시스템을 제공하고자 한다.
본 발명은, 중앙처리장치; 및 상기 중앙처리장치와 연결되며 n 뱅크들로 분할되는 선형 어드레스 영역을 갖는 데이터 메모리를 포함하는 마이크로컨트롤러로서: 상기 중앙처리장치는, 레지스터 파일을 형성하기 위하여 상기 뱅크들 중 어느 하나 또는 두개의 뱅크의 일부의 메모리와 상기 데이터 메모리 내의 소정의 로케이션에 매핑된 사용자 정의된 일부의 메모리 영역을 결합한 가상 뱅크에 액세스하는 뱅크 선택 장치, 상기 레지스터 파일과 연결된 산술 논리 장치, 상기 산술 논리 장치에 연결되고 상기 데이터 메모리의 상기 뱅크 중의 어느 하나에 맵핑되는 적어도 하나의 작업 레지스터를 포함하는 복수의 특수 기능 레지스터, 및 상기 데이터 메모리에 맵핑되는 프로그램 카운터를 위한 프로그램 카운터 레지스터를 포함하고, 상기 산술 논리 장치를 제어하기 위한, 또한 상기 뱅크 선택 장치가 상기 뱅크 중의 어느 하나 또는 상기 가상 뱅크에 액세스하는 지를 표시하는 비트를 포함하는 명령어를 구비하는 명령어 셋트를 갖는 마이크로컨트롤러를 제공한다.
또한, 상기 명령어 셋트는, 1110 1010 kkkk kkkk로 인코딩되는 명령어를 포 함하고, 상기 명령어가 실행될 때, 8비트 리터럴이 파일 선택 레지스터에 의해 지정되는 로케이션에 복사되고, 이후 상기 파일 선택 레지스터는 감소되고, 상기 리터럴 'k'는 상기 명령어의 kkkk kkkk 부분에 표시되어 있는 것을 특징으로 한다.
또한, 상기 명령어 셋트는, 1110 1001 ffkk kkkk로 인코딩되는 명령어를 포함하고, 상기 명령어가 실행될 때, 파일 선택 레지스터로부터 부호없는 6비트 리터럴을 뺄셈하여 얻어진 결과를 상기 파일 선택 레지스터에 저장하고, 상기 리터럴은 상기 명령어의 kk kkkk 부분에 표시되고, 상기 파일 선택 레지스터는 상기 명령어의 ff 부분에 표시되어 있는 것을 특징으로 한다.
또한, 상기 명령어 셋트는, 1110 1001 11kk kkkk로 인코딩되는 명령어를 포함하고, 상기 명령어가 실행될 때, 파일 선택 레지스터로부터 부호없는 6비트 리터럴을 뺄셈하여 얻어진 결과를 상기 파일 선택 레지스터에 리턴하여 저장하고, 상기 리터럴은 상기 명령어의 kk kkkk 부분에 표시되어 있는 것을 특징으로 한다.
또한, 상기 명령어 셋트는, 1110 1000 ffkk kkkk로 인코딩되는 명령어를 포함하고, 상기 명령어가 실행될 때, 파일 선택 레지스터와 부호없는 6비트 리터럴을 덧셈하여 얻어진 결과를 상기 파일 선택 레지스터에 저장하고, 상기 리터럴은 상기 명령어의 kk kkkk 부분에 표시되고, 상기 파일 선택 레지스터는 상기 명령어의 ff 부분에 표시되어 있는 것을 특징으로 한다.
또한, 상기 명령어 셋트는, 1110 1000 11kk kkkk로 인코딩되는 명령어를 포함하고, 상기 명령어가 실행될 때, 파일 선택 레지스터와 상기 명령어의 kk kkkk 부분에 의해 표시되는 6비트 리터럴을 덧셈하여 얻어진 결과를 상기 파일 선택 레 지스터에 저장하는 것을 특징으로 한다.
또한, 상기 명령어 셋트는, 1110 1011 0sss ssss 1111 dddd dddd dddd로 인코딩되는 명령어를 포함하고, 상기 명령어가 실행될 때, 8비트 값이 dddd dddd dddd의 12비트 값으로 표시되는 목적지에 복사되고, 상기 목적지에 복사된 상기 8비트 값의 로케이션은 파일 선택 레지스터의 값과 상기 sss ssss의 7비트 리터럴 값을 덧셈함으로써 지정되는 것을 특징으로 한다.
또한, 상기 명령어 셋트는, 1110 1011 1sss ssss 1111 xxxx xddd dddd로 인코딩 되는 명령어를 포함하고, 상기 명령어가 실행될 때, 8비트 값이 상기 명령어의 ddd dddd 부분에 의해 표시되는 로케이션에 복사되고, 상기 8비트 값의 로케이션은 파일 선택 레지스터의 값과 상기 sss ssss의 7비트 리터럴 값을 덧셈함으로써 결정되는 것을 특징으로 한다.
또한, 상기 명령어 셋트는 0000 0000 0001 0100으로 인코딩되는 명령어를 포함하고, 상기 명령어가 실행될 때, 다음 명령어의 어드레스가 하드웨어 스택에 푸시되는 것을 특징으로 한다.
또한, 상기 명령어 셋트는, 0000 0000 0001 0100으로 인코딩되는 명령어를 포함하고, 상기 명령어가 실행될 때, 제1 레지스터의 값은 상기 프로그램 카운터의 상위 16비트에 복사되고, 제2 레지스터의 값은 상기 프로그램 카운터의 하위 8비트에 복사되는 것을 특징으로 한다.
또한, 상기 사용자 정의된 일부의 메모리 영역은 상기 가상 뱅크 내의 00h 내지 5Fh의 어드레스 범위를 갖고, 첫번째 뱅크의 일부의 메모리 영역은 상기 가상 뱅크 내의 60h 내지 7Fh의 어드레스 범위를 갖고, 및 두번째 뱅크의 일부의 메모리 영역은 상기 가상 뱅크 이내의 80h 내지 FFh의 어드레스 범위를 갖는 것을 특징으로 한다.
또한, 제1 모드 및 제2 모드를 정의하기 위한 프로그래머블 인덱스 비트를 더 포함하고, 상기 제1 모드에서 상기 가상 뱅크는 상기 데이터 메모리의 상기 사용자 정의된 일부의 메모리 영역을 제외한 두개의 뱅크들의 일부의 메모리 영역을 결합하고, 상기 제2 모드에서 상기 가상 뱅크는 상기 데이터 메모리의 상기 사용자 정의된 일부의 메모리 영역을 포함하여 두개의 뱅크들의 일부의 메모리 영역을 결합하는 것을 특징으로 한다.
또한, 상기 프로그래머블 인덱스 비트는 퓨즈에 의해 구현되는 것을 특징으로 한다.
또한, 상기 프로그래머블 인덱스 비트는 소프트웨어에 의해 구현되는 것을 특징으로 한다.
또한, 상기 프로그래머블 인덱스 비트는 플래그/스위치 방식에 의해 구현되는 것을 특징으로 한다.
본 발명은 레지스터 파일 또는 데이터 메모리에 직접적 또는 간접적으로 어드레스를 지정할 수 있다. 프로그램 카운터(PC) 및 작업 레지스터(Working Register; W)를 포함하는 모든 특수 기능 레지스터는, 데이터 메모리에 맵핑된다. 본 발명은, 어떤 어드레싱 모드를 이용하는 어떤 레지스터 상에서 모든 동작을 수 행할 수 있도록 하는 직교(대칭) 명령어 셋트를 갖는다. 이러한 대칭적 특징 및 '특수한 최적 상태'의 부족은, 본 발명에서 프로그래밍을 간결하고 효율적으로 한다. 또한, 기록용 소프트웨어 어플리케이션의 학습 곡선이 현저하게 감소된다. 본 발명이 종래의 기술에 비해 향상된 특징은, 어떠한 두 개의 오퍼랜드 명령어를 사용하기 위한 두 개의 파일 레지스터를 허용한다는 것이다. 이는 데이터가, W 레지스터를 통하지 않고 두 레지스터 사이를 직접 이동할 수 있도록 하여, 동작 성능을 향상시키고 프로그램 메모리의 사용을 감소시킨다.
본 발명에 따른 바람직한 실시예는, ALU/W 레지스터, PLA, 8비트 곱셈기, 스택을 갖는 프로그램 카운터(PC), 테이블 랫치/테이블 포인터, ROM 랫치/IR 랫치, FSR, 인터럽트 벡터링 소자(interrupt vectoring circuitry), 및 최대 공통 상태 레지스터(most common status register)를 포함한다. 종래의 기술과는 달리, 본 발명의 구성은, 개별적인 모듈에서의 타이머, 모든 리셋 발생 소자(WDT, POR, BOR, 등), 인터럽트 플래그, 인에이블 플래그, INTCON 레지스터, RCON 레지스터, 설정 비트, 디바이스 ID 워드, ID 로케이션, 및 클록 드라이버의 필요성을 제거하였다.
상세한 설명 및 첨부한 도면을 참조하는 추가적인 실시예는 본 발명을 더욱 명확하게 할 것이다.
본 발명은, 다양한 실시예를 통해, 모듈러 에뮬레이션을 가능하게 하는 선형 화된 어드레스 영역을 포함하는 마이크로컨트롤러 명령어 셋트 및 마이크로컨트롤러 아키텍쳐를 제공하는 디바이스, 방법 및 시스템을 제공한다.
본 발명의 바람직한 실시예에 따른 디바이스의 아키텍쳐는, 4-상태 내부 클럭 스킴과 16비트의 명령어 및 8비트 데이터 경로를 이용하여, 종래의 하바드 아키텍쳐를 변경한다. 또한, 본 바람직한 실시예는, 페이징 및 뱅킹(banking)에 대한 필요성을 제거한 선형화된 메모리 어드레싱 스킴을 갖는다. 본 발명의 메모리 어드레싱 스킴은 프로그램 메모리의 어드레스 부여 능력(addressability)을 2M 바이트까지 확장할 수 있다. 모듈의 에뮬레이션 역시 본 발명에 의해 제공된다.
본 발명은, 종래의 기술에서 발생하는 많은 컴파일러 에러를 없앤 마이크로컨트롤러 명령어 셋트를 제공함으로써, 상기한 문제점과 그 외의 단점 및 결함을 해결한다. 또한, 모듈러 에뮬레이션을 가능하게 하는 선형화된 어드레스 영역을 실현한 디바이스 및 시스템을 제공한다.
본 발명은 레지스터 파일 또는 데이터 메모리에 직접적 또는 간접적으로 어드레스를 지정할 수 있다. 프로그램 카운터(PC) 및 작업 레지스터(W)를 포함하는 모든 특수 기능 레지스터는 데이터 메모리에 맵핑된다. 본 발명은, 어떠한 어드레싱 모드를 이용하는 어떠한 레지스터에서 모든 오퍼레이션을 수행할 수 있도록 하는 직교(대칭) 명령어 셋트를 갖는다. 이 대칭적인 특징 및 '특수한 최적 상태'의 부족은 본 발명에 따른 프로그래밍을 간단하지만 효율적으로 만든다. 또한, 학습 곡선을 현저하게 감소시킨다. 종래의 기술에 비해 구조적으로 개선된 본 발명의 특징은, 어떠한 두 개의 오퍼랜드 명령어에 사용될 두 개의 파일 레지스터를 허용한 다. 이는 데이터가, W 레지스터를 거치지 않고, 두 개의 레지스터 사이에서 직접 이동될 수 있도록 하고, 이에 의해 동작 성능이 향상되며 프로그램 메모리의 사용을 감소시킨다. 도 6은 본 발명에 따른 마이크로컨트롤러 코어를 나타낸 블록도이다.
본 발명에 따른 마이크로컨트롤러 코어(100)가 도 6에 나타나 있다. 일반적으로, 도 6에서의 연결 신호 라인은 이 신호 라인의 대역폭(비트)을 표시하는 슬래시(/)와 숫자를 포함할 수 있다. 도 6의 오른쪽 상부를 참조하면, 데이터를 저장하고 데이터를 중앙 처리 장치(후술함)와 통신하기 위해 이용되는 데이터 메모리(104)를 확인할 수 있다. 데이터 메모리(104)는 다수의 어드레스 로케이션을 포함한다. 본 발명의 바람직한 실시예에서, 데이터 메모리(104)는, 16 페이지 또는 뱅크로 분할된 다수의 선형화된 4K 메모리이다. 일반적으로, 각각의 뱅크는 256 어드레스 로케이션을 갖는다. 바람직한 실시예에서, 다수의 뱅크 중의 하나는 범용 또는 특수 목적 레지스터로 할당되며, 이 경우 최상위 뱅크, 뱅크 0으로 지시된다.
선택 회로(108)는, 어드레스 랫치(102)를 통해 데이터 메모리(104)에 연결된다. 선택 회로(108)는 데이터 메모리(104)의 뱅크 어드레스 값을 제공하는 다수의 소스 중에서 하나를 선택하기 위해 이용된다.
본 발명에 따른 바람직한 실시예에서는, 작업 레지스터(W; 136)를 갖는 ALU(140), PLA, 8비트 곱셈기, 스택(170)을 갖는 프로그램 카운터(PC; 168), 테이블 랫치(124), 테이블 포인터(148), IR 랫치(126)를 갖는 ROM 랫치(152), FSR(120,121,122), 인터럽트 벡터링 소자, 및 최대 공통 상태 레지스터를 포함한 다. 종래의 기술과는 달리, 본 발명의 구성은 개별적인 모듈의 타이머, 모든 리셋 발생 소자(WDT,POR,BOR 등), 인터럽트 플래그, 인에이블 플래그, INTCON 레지스터, RCON 레지스터, 설정 비트, 디바이스 ID 워드, ID 로케이션, 및 클록 드라이버의 필요성을 제거한다.
I/O 리스트( List ):
입력/출력(I/O) 명령의 일반적인 리스트가 본 발명에서 이용되며, 이 I/O 리스트는 [표 1]에 나타나 있다.
이름 카운트I/O 정규 오퍼레이션 오퍼레이션 테스트 모듈 프로그램 모듈 에뮬레이션 모듈
addr<21:0> 22/O Program Memory address
nqbank<3:0> 4/O Active low RAN bank
d<15:0> 16/I Program memory data
db<7:0> 8/I/O data bus
forcext 1/I Force external instruction test mode
irp<7:0> 8/O Peripheral Address
irp9 1/O Instruction register bit 9
ncodeprt 1/I Active low code protect
neprtim 1/I Active low end of EPROM write
nhalt 1/I Active low halt
nintake 1/I Active low interrupt acknowledge early and wake up from sleep
np<7:0> 8/O Table latch data
npcmux 1/O Active low PC multiplex
npchold 1/O Active low PC hold
nprtchg 1/I Active low port change interrupt
nq4clrwdt 1/O Active low clear wdt
nq4sleep 1/O Active low sleep
nqrd 1/O Active low read file
nreset 1/I Active low reset
nwrf 1/O Active low write file
q1:q4 4/I 4-phase Q clocks
q13 1/I Combination of Q clocks
q23 1/I Combination of Q clocks
q41 1/I Combination of Q clocks
test0 1/I Test mode 0
tsthvdet 1/I High voltage detedt
wreprom 1/O Write eprom
writem 1/O Write memory
wrtbl 1/O Table write instruction
nintakd 1/I Interrupt acknowledge
intak 1/I Interrupt acknowledge
클로킹 스킴 /명령어 사이클( Clocking Scheme / Instruction Cycle )
(OSC1으로부터의) 클럭 입력은, 도 7에 나타난 바와 같이, 서로 오버랩되지 않는 직각 위상의 네개의 클럭을 생성하기 위해, 내부적으로 네개로 분할된다. 내부적으로, 프로그램 카운터(PC)는 매 Q1 마다 증가되고, 명령어는 프로그램 메모리로부터 펫치되고, Q4를 이용하여 명령어 레지스터로 랫치된다. 명령어는 디코드되고 Q4를 통해 다음의 Q1 동안 실행된다. PLA 디코딩은 Q1 동안 완료된다. Q2 및 Q3 사이클 동안에, 오퍼랜드는 메모리 또는 주변 장치로부터 읽혀지고, ALU는 연산을 수행한다. Q4 동안, 결과가 목적지 로케이션에 기록된다. 클럭 및 명령어의 실행 흐름은 도 8에 나타나 있다.
Q 사이클 액티비티(Q Cycle Activity )
각 명령어 사이클(TCY)은, 도 7에 나타낸 바와 같이 네개의 Q 사이클(Q1 내지 Q4)로 이루어진다. Q 사이클은 디바이스 오실레이터 사이클(TOSC)과 동일하다. Q 사이클은, 각 명령어 사이클의 디코드, 읽기, 데이터 처리, 기록 등에 대한 타이밍/목적지를 제공한다. 이어지는 도면(도 7)은, Q 사이클과 명령어 사이클과의 관계를 나타내고 있다. 실행 명령어 사이클(TCY)을 구성하는 네개의 Q 사이클은 다음과 같이 일반화된다:
Q1: 명령어 디코드 사이클 또는 강제된 NOP
Q2: 명령어 읽기 사이클 또는 NOP
Q3: 데이터 처리
Q4: 명령어 기록 사이클 또는 NOP
각각의 명령어는, 상세한 Q 사이클 오퍼레이션을 갖는다.
명령어 흐름/파이프라인( Instruction Flow / Pipelining )
"명령어 사이클"은 네개의 Q 사이클(Q1,Q2,Q3, 및 Q4)로 이루어진다. 펫치 및 실행 명령어는, 디코드 및 실행이 또 다른 명령어 사이클을 취하는 동안 펫치가 하나의 명령어 사이클을 취하는 방식으로, 파이프라인으로 보내진다. 하지만 파이프라이닝이기 때문에, 각 명령어는 하나의 사이클 내에서 효과적으로 실행된다. 여기에는 몇가지 형태의 명령어 흐름이 있다. 그 첫번째 형태는 보통 1워드 1사이클 파이프라인 명령어이다. 도 9에 나타난 바와 같이 실행되기 위해, 이 인스트럭션은 하나의 유효 사이클을 취할 것이다. 두번째 형태는 1워드 2사이클 파이프라인 비움 명령어이다. 이러한 명령어는 관련된 브랜치, 관련 호출, 스킵 및 리턴을 포함한다. 어떠한 명령어가 PC를 변경하면, 파이프라인으로 보내진 펫치는 폐기된다. 이는 도 10에 나타난 바와 같이, 명령어가 실행을 위한 두 개의 사이클을 취하도록 한다. 세번째 형태는, 테이블 오퍼레이션 명령어이다. 이러한 명령어는 삽입하기 위한 펫치, 프로그램 메모리로의 읽기 또는 기록을 위한 사이클을 중지시킨다. 테이블 오퍼레이션의 실행되는 동안 펫치된 명령어는 1 사이클 동안 저장되고, 도 11에 나타난 바와 같이 테이블 오퍼레이션의 직후에 그 사이클에서 실행된다. 네번째 형태는 새로운 2워드 명령어이다. 이 명령어는 MOVFF 및 MOVLF를 포함한다. 이들 명령어에서, 명령어 이후의 펫치는 어드레스의 나머지를 포함한다. 첫번째 워드가 실행되는 동안의 MOVFF 명령어에서, 머신은 소스 레지스터 읽기를 실행한다. 두번째 워드가 실행되는 동안, 소스 어드레스가 획득되고, 이후에 명령어는 도 12에 나타난 바와 같이 이동을 완료한다. MOVLF는, 도 13에 나타난 바와 같이, 두 사이클로 두개의 리터럴 값을 FSRnH 및 FSRnL로 이동시키지만, 도12와 유사한 것이다. 다섯번째 형태는, CALL 및 GOTO에 대한 2워드 명령어이다. 이들 명령어에서, 명령어 이후의 펫치는, 점프 또는 호출 목적지 어드레스의 나머지를 포함한다. 보통, 이러한 명령어는, 두개의 명령어 워드를 펫치하기 위한 두 개의 사이클과 이후의 파이프라인 비움을 위한 하나의 사이클을 포함하는, 실행을 위한 3사이클을 필요로 한다. 하지만, 두번째 펫치에서 빠른 속도의 경로를 제공함으로써, PC가 명령어 실행의 첫번째 사이클에서 완전한 값으로 업데이트될 수 있고, 도 14에 나타난 바와 같이 2사이클 명령어가 될 수 있다. 여섯번째 형태는, 인터럽트 인식 실행이다. 인터럽트 동안의 명령어 사이클은, 이하의 인터럽트 섹션에서 논의된다.
ALU
본 발명은, 도 6에 나타난 바와 같이, 8비트 연산 및 논리 장치(ALU; 142)와 작업 레지스터(136)를 구비한다. ALU(142)는 범용 연산 장치이다. 이것은 작업 레지스터와 어떤 레지스터 파일 사이에서의 데이터 연산 및 불리언 기능을 수행한다. ALU(142)는 8비트 폭이고, 덧셈, 뺄셈, 시프트, 및 논리 연산이 가능하다. 비록 언급하지는 않았더라도, 연산 오퍼레이션은 사실상 2에 대한 보수(complement)이다. 작업(W) 레지스터(136)는, ALU(140) 오퍼레이션에 이용되는 8비트 작업 레지스터이다. W 레지스터(136)는 어드레스로 불러낼 수 있고, 직접 기록되고 읽어낼 수 있다. ALU(140)는, 두개의 오퍼랜드 또는 단일의 오퍼랜드에 대한 연산 또는 논리 오퍼레이션을 수행할 수 있다. 모든 단일 오퍼랜드 명령어는, W 레지스터(136) 또는 주어진 파일 레지스터상에서 동작한다. 두개의 오퍼랜드 명령어에 있어서, 하나의 오퍼랜드는 W 레지스터(136)에 존재하고, 다른 하나의 오퍼랜드는 파일 레지스터 또는 8비트 직접 상수, 또는 등가의 저장 매체에 존재할 수 있다.
명령어가 실행됨에 따라, ALU(140)는, 상태(STATUS) 레지스터(이후 설명함)의 캐리(C), 숫자 캐리(DC), 영(zero;Z), 오버플로(OV), 및 음수(N) 비트의 값에 영향을 미칠 수 있다. C 및 DC 비트는, 뺄셈에서 각각 보로우(borrow) 및 숫자 보로우 비트로서 동작한다.
본 발명에 따른 바람직한 실시예는, 도 6에 나타난 바와 같이, 디바이스의 ALU(142)에 포함된 8×8 하드웨어 곱셈기(134)를 포함한다. 하드웨어 오퍼레이션에 의한 곱셈에 의해, 오퍼레이션은 하나의 명령어 사이클에서 완료된다. 이 하드웨어 오퍼레이션은, 16비트의 결과를 제공하는 부호 없는 곱셈이다. 이 결과는 16비트 곱셈 레지스터(PRODH:PRODL)에 저장된다. 곱셈기는 상태 레지스터의 어떠한 플래그에도 영향을 미치지 않는다.
상태 레지스터( Status Register )
상태 레지스터는 ALU(140)의 상태 비트를 포함한다. 상태 레지스터는 도 15에 나타나 있다. 본 발명의 바람직한 실시예에서, 비트 7 내지 5는 실행되지 않고 '0'으로 읽혀진다.
비트 4는 "N", 음의 비트이다. 이 비트는 부호 있는 연산에 이용된다(2의 보수). 이것은 결과가 음수인지를 표시하는 것으로서, (ALU MSb=1), 1=결과가 음수, 0=결과가 양수임을 표시한다.
비트 3은 "OV",오버플로 비트이다. 이 비트는 부호있는 연산에 이용된다(2의 보수). 이것은, 상태를 변경하는 부호 비트(비트 7)를 유발하는, 7비트 크기의 오버플로를 표시한다. 이 비트는, 1=부호있는 연산에서 발생한 오버플로, (이 연산 오퍼레이션에서), 0=오버플로가 발생하지 않았음을 나타낸다.
비트 2는 "Z", 영(zero) 비트이다. 이 비트는, 1=연산 또는 논리 오퍼레이션의 결과가 영, 0=연산 또는 논리 오퍼레이션의 결과가 영이 아님을 나타낸다.
비트 1은 "DC", 숫자 캐리/보로우(Digit carry/borrow) 비트이다. 이 비트는, 1=발생한 결과의 4번째 하위 차수 비트로부터의 캐리아웃(carry-out), 0=발생한 결과의 4번째 하위 차수 비트로부터의 캐리아웃 없음을 나타낸다.
보로우에 있어서, 극성은 반대가 될 수도 있다.
비트 0은, "C", 캐리/보로우 비트이다. 이 비트는, 1=발생한 결과의 최상위 비트로부터의 캐리아웃, 0=결과의 최상위 비트로부터의 캐리아웃 없음을 나타낸다. 비트 1에서처럼, 보로우에 있어서 극성은 반대가 된다.
C 및 DC 비트는, 뺄셈에서, 각각 보로우 및 숫자 보로우 비트로서 동작한다. 캐리는 ALU 비트 7 캐리아웃이다. 숫자 캐리는 ALU 비트 3 캐리아웃이다. ALU 결과 비트<7:0>이 '0'이면, 영은 참(true)이다. N은 ALU 결과 비트 7이다. 2의 보수 결과가 +127을 초과하거나 -128 미만인 경우, 오버플로 비트가 셋트된다. 오버플로는 ALU 비트6 캐리아웃과 ALU 비트7 캐리아웃의 XOR이다. 모든 다른 레지스터처럼, 상태 레지스터도 어떤 명령어에 대한 목적지일 수 있다. 만약 상태 레지스터가 어떤 상태 비트에 영향을 주는 명령어에 대한 기록 목적지라면, 이후 상태 비트로의 기록은 디스에이블된다. 그 비트는 ALU 결과 및 명령어 내용에 따라 셋트되거나 소거된다. 따라서, 목적지가 상태 레지스터인 명령어의 결과는, 의도한 바와 달라질 수 있다.
예를 들면, CLRF REG 명령어는 이 레지스터를 0으로 기록하고 Z 비트를 셋트한다. CLRF STATUS 명령어는 N, OV, DC 및 C 비트에 대한 기록을 디스에이블하고, Z 비트를 셋트한다. 이는 상태 레지스터를 000u u1uu로 만든다. 그 결과, 다른 상태 비트에 영향을 미치지 않는 BCF, BSF, SWAPF 및 MOVWF 명령어만이, 상태 레지스터를 변경하는데 이용되는 것이 바람직하다. 상태 비트에 영향을 미치는 다른 명령어에 대해서는, "명령어 셋트 요약'을 참조할 수 있다.
프로그램 카운터 모듈( Program Counter Module )
프로그램 카운터(PC; 168; 도 6 참조)는 최대 21비트까지 확장될 수 있도록 변경된다. 이는 PCLATH 레지스터와 유사하게 동작하는 5비트 PCLATU 레지스터를 추가함으로써 이루어진다. PC(168)는, 프로그램 메모리에서, 워드보다는 바이트로 어드레스가 지정되도록 변경된다. 이를 구현하기 위해, 항상 0인 PC(168)의 LSb에, 바이트 어드레싱 비트가 존재한다. PCL의 LSb 비트는 읽기는 가능하지만, 기록은 불가능하다. 사용자가 LSb에 '1'을 기록하고자 할지라도, 결과는 '0'이 될 것이다. 감춰진 테스트 EPROM을 허용하기 위해, PC(168)에는 감춰진 22번째 비트(비트 21)가 존재한다(도 16 참조). 이 PC 비트는 일반적으로 0이다. 테스트 모드 또는 프로그래밍 모드로 진입할 때, 이 비트는 셋트되고 명령어가 테스트 영역으로부터 펫치될 것이다. 이 비트가 셋트되면, 프로그램의 실행에 의해서는 소거될 수 없고, 디바이스가 리셋되어야만 한다.
프로그램 카운터(PC; 168)는 도 16에 나타난 바와 같이, 21비트 레지스터이다. PC(168)의 하부 바이트인 PCL(184)은, 데이터 메모리(104)에 맵핑된다(도 6 참조). PCL(184)는 다른 레지스터처럼, 읽기 및 기록이 가능하다. PCH(182) 및 PCU(180)는 PC의 상부 바이트이며, 어드레스로 직접 불러낼 수는 없다. PCH(182) 및 PCU(180)는 데이터 또는 프로그램 메모리에 맵핑되지 않기 때문에, PCLATH(178; PC 상부 랫치) 및 PCLATU(176; PC 상위 랫치)는, PC(168)의 상부 바이트에 대한 랫치를 홀딩함으로써 이용된다.
*PCLATH(178) 및 PCLATU(176)은 데이터 메모리(104)에 맵핑된다. 사용자는, PCLATH(178)를 통해 PCH(182)에, PCLATU(176)을 통해 PCU(180)를 읽기 및 기록할 수 있다. PC(168)는, 이하의 경우를 제외하고는, Q1 동안 각각의 명령어가 펫치된 후에 2씩 증가되는 워드이다.
- GOTO, CALL, RETURN, RETLW, RETFIE, 또는 브랜치 명령어에 의해 변경됨.
- 인터럽트 응답에 의해 변경됨.
- 명령어에 의해 PCL(168)로의 목적지 기록함.
"스킵"은, 스킵된 어드레스에서 강제된 NOP 사이클과 동일하다. 도 16 및 17은 다양한 상황에서 프로그램 카운터의 오퍼레이션을 나타낸다.
도 16을 참조하여, 서로 다른 명령어에 대한 PC(168), PCLATH(178), 및 PCLATU(176)의 오퍼레이션을 아래에서 설명한다:
a. PCL 에서의 읽기 명령어( Read instructions on PCL ):
PCL(184)을 읽어내는 명령어. d=0인 모든 바이트 명령어; MOVFF PCL, X; CPFSEQ; CPFSGT; CPFSLT; MULWF; TSTFSZ, 이후 PCL을 데이터 버스로, 이후 ALU 또는 목적지로. 마지막으로, PCH를 PCLATH로 및 PCU를 PCLATU로.
b. PCL 에서의 기록 명령어( Write instuctions on PCL ):
PCL(184)에 기록하는 명령어. 예를 들면, MOVWF; CLRF; SETF, 이후 데이터 버스(174)에 8비트 데이터 기록 및 이후 PCL(184)로. 또한, PCLATH를 PCH로, 및 PCLATU를 PCU로.
c. PCL 에서의 읽기-변경-기록 명령어( Read - Modify - Write instructions on PCL):
PCL에서 읽기-기록-변경 오퍼레이션을 수행하는 명령어. d=1인 모든 바이트 명령어; 비트 명령어; NEGF. 읽기: PCL을 데이터 버스로 다시 ALU로. 기록: 8비트 결과를 데이터 버스로 그리고 PCL로; 이후 PCLATH를 PCH로; 및 마지막으로 PCLATU를 PCU로.
읽기-변경-기록은 그 결과만이 PCL(184)에 영향을 준다. PCH(182) 및 PCU(180)는, PCLATH(178) 및 PCLATU(176)의 각각의 값으로 로드된다. 예를 들면, "ADDWF" 명령어에 있어서, PCL(184)은 다음과 같은 점프를 발생시킬 수 있다. 만약 이 명령어 이전에 PC=0003F0h, W=30h, PCLATH=05h, 및 PCLATU=1h이면, 이 명령어 이후에 PC=010520h가 된다. 계산된 참 20비트 점프(true 20-bit computed jump)를 수행하기 위해, 사용자는, 20비트 목적지 어드레스를 계산하고, PCLATH(178) 및 PCLATU(176)에 기록하고, 이후 하부의 값을 PCL(168)에 기록할 필요가 있다.
d. RETURN 명령어( RETURN instruction ):
PC<20:0>로의 스택<MRU>. 도 17을 이용하여, GOTO 및 CALL 명령어를 위한 PC(168), PCLATH(178), 및 PCLATU(176)의 오퍼레이션을 설명한다.
e. CALL , GOTO 명령어( CALL , GOTO instruction ):
목적지 어드레스는 2워드 명령어(op코드)로 제공된다. op코드<6:0>를 첫번째 워드 PCL<7:1>로. 첫번째 워드 op코드<7>를 PCLATH<7:1> 및 PCH<0>로. 두번째 워드 op코드<6:0>를 PCLATH<7:1> 및 PCH<7:1>로. 두번째 워드 op코드<11:7>를 PCLATU<4:0> 및 PCU<4:0>로.
다음의 PC(168)와 관련된 오퍼레이션은, PCLATH(178) 및 PCLATU(176)를 변경하지 않는다:
a. RETLW, RETURN, RETFIE 명령어.
b. 인터럽트 벡터는 PC로 강제됨.
c. PCL(예를 들어. PSF PCL, 2)상의 읽기-변경-기록 명령어.
리턴 스택 오퍼레이션( Return Stack Operation )
본 발명은 깊이 31 레벨의 리턴(또는 하드웨어) 스택을 갖는다. 이 스택의 깊이는, 더욱 복잡한 프로그램을 수행하기 위해, 종래의 기술보다 더욱 증가되었다. 이 스택은, 프로그램 및 데이터 메모리 영역의 일부분이 아니다.
PC(168)는, CALL 또는 RCALL 명령어가 실행되거나 인터럽트가 인지되었을 때, 스택상에 푸시된다. PC(168) 값은, RETURN, RETLW, 또는 RETFIE 명령어에 의해 스택에서 풀 오프(pull off)된다. PCLATU(176) 및 PCLATH(178)는, 어떠한 리턴 명령어에 의해서도 영향받지 않는다.
스택은 21비트 RAM 및 5비트 스택포인터에 의해 31워드처럼 동작하며, 모든 리셋 이후에 스택포인터는 00000b로 초기화된다. 스택포인터 000h와 관련된 RAM 워드는 존재하지 않는다. 이것은 단지 리셋값일 뿐이다. CALL 형태의 명령어가 스택으로의 푸시를 발생하는 동안, 스택포인터가 먼저 증가되고, 스택포인터에 의해 지시된 RAM 로케이션에는 PC의 내용이 기록된다. RETURN 형태의 명령어가 스택으로부터 팝(pop)을 발생하는 동안, STKPTR에 의해 지시된 RAM 로케이션의 내용은 PC로 이동되고 이후 스택포인터는 감소된다.
스택의 최상부 액세스( Top Of Stack Access )
스택의 최상부는 읽기 및 기록 가능하다. 세개의 레지스터 로케이션, 즉, TOSU, TOSH, 및 TOSL는, STKPTR에 의해 지시된 스택 RAM 로케이션을 어드레스 지정한다. 이는 필요시, 사용자가 소프트웨어 스택을 구현할 수 있도록 한다. CALL 또는 RCALL 명령어 또는 인터럽트 후에, 소프트웨어는 TOSU, TOSH, 및 TOSL 레지스터를 읽음으로써 푸시된 값을 읽어낼 수 있다. 이러한 값은 사용자가 지정한 소프트웨어 스택 상에 위치될 수 있다. 리턴시에, 소프트웨는 TOSU, TOSH, 및 TOSL를 되돌리고, 리턴을 수행한다. 사용자는, 의도하지 않은 스택 오퍼레이션을 방지하기 위해, 이 시간 동안 글로벌 인터럽트 인에이블 비트를 디스에이블시켜야만 한다.
PUSH POP 명령어( PUSH and POP instruction )
스택의 최상부(TOP)는 읽기 및 기록 가능하기 때문에, 정규 프로그램의 실행을 방해하지 않으면서 스택상에 값을 푸시하고 스택으로부터 값을 불러내는(pull off) 기능이 요구된다. 스택상에 현재의 PC 값을 푸시하기 위해, PUSH 명령어가 실행될 수 있다. 이는 스택상에 현재의 PC 값을 푸시하고, TOS=PC 및 PC=PC+2로 설정한다. 정규 실행을 방해하지 않으면서, TOS 값을 스택으로부터 불러내고 스택상에 이미 푸시되어 있던 값으로 되돌리는 기능은, POP 명령어를 이용함으로써 수행된다. POP 명령어는 스택으로부터 TOS 값을 불러내지만, 이 값은 PC에 기록되지 않으며, 스택상에 이미 푸시되어 있던 값은 이후 TOS 값이 된다.
리턴 스택포인터( STKPTR )( Return Stack Pointer )
SKTPTR 레지스터는, 리턴 스택포인터 값과 오버플로 및 언더플로 비트를 포함한다. 스택 오버플로 비트(STKOVF) 및 언더플로 비트(STKUNF)는 스택 상태를 소프트웨어로 검증할 수 있도록 한다. STKOVF 및 STKUNF 비트는 POR 리셋에 의해서만 소거된다.
PC가 스택상에 31번 푸시된 후(스택으로부터 어떤 값의 팝핑도 없이), 32번째 푸시는, STKPTR을 11111b로 유지하면서, 31번째에 푸시된 값을 덮어쓰기 하고, STK-OVF를 셋트한다. 33번째 푸시는, STKPTR을 11111b로 유지하면서, 32번째 푸시에 덮어쓰기 한다(계속 반복됨).
스택이, 스택을 언로드(unload)하기에 충분한 횟수만큼 팝핑된 후, 다음의 팝핑은, STKPTR을 00000b로 유지하면서, 영(0)의 값을 PC에 리턴하고, STKUNF 비트를 셋트한다. 다음의 팝핑은, STKPTR을 00000b으로 유지하면서, 다시 영(0)을 리턴한다. 언더플로에서 영(0)을 PC로 리턴하는 것은, 스택 상태가 검증될 수 있도록 하고 적절한 동작이 취해질 수 있는 리셋 벡터에 프로그램을 벡터링 하는 효과가 있다.
스택포인터는 STKPTR 레지스터를 통해 액세스될 수 있다. 사용자는 스택포인터 값을 읽기 및 기록할 수 있다. 이것은 리턴 스택 관리를 위한 RTOS에 의해 이용될 수 있다. 도 18은 STKPTR 레지스터를 나타내고 있다. 스택포인터의 값은 31에 이르기까지, 0일 수 있다. 리셋시의 스택포인터의 값은 0일 수 있다. 스택포인터는 푸시 시에는 증가되며, 팝핑 시에는 감소된다.
스택 오버플로/ 언더플로 리셋( Stack Overflow / Underflow Resets )
사용자의 선택에 따라, 오버플로 및 언더플로는 프로그램 코드를 인터럽트하기 위한 디바이스 리셋을 유발할 수 있다. 리셋은 설정 비트인 STVRE에 의해 인에이블된다. STVRE 비트가 디스에이블되면, 오버플로 또는 언더플로는 적절한 STKOVF 또는 STKUNF 비트를 셋트하여 리셋을 유발하지 않게 된다. STVRE가 인에이블되면, 오버플로 또는 언더플로는 적절한 STKOVF 또는 STKUNF 비트를 셋트하고, WDT 리셋과 특성이 매우 비슷한 디바이스 리셋을 유발하게 된다. 이러한 각각의 경우에서, STKOVF 또는 STKUNF 비트는, 사용자 소프트웨어가 이들을 소거하거나 POR 리셋이 이들을 소거할 때까지는 소거되지 않는다. 도 18 내지 21은 스택 레지스터를 나타낸다. 도 22 내지 29는 스택 오퍼레이션을 나타낸다.
프로그램 메모리( Program Memory )
본 발명에 따른 바람직한 실시예는, 2메가바이트(2M)×8의 사용자 프로그램 메모리 영역을 갖는다. 프로그램 메모리 영역은 실행을 위한 명령어를 우선적으로 포함하지만, 데이터 테이블이 테이블 읽기/기록 명령어를 이용하여 저장되거나 액세스될 수도 있다. 또다른 2M×8 테스트 프로그램 메모리 영역이, 테스트 ROM, 설정 비트, 및 인증용 워드를 위해 이용될 수 있다.
디바이스들은, 2M×8 프로그램 메모리 영역을 어드레스 지정할 수 있는 21비트 프로그램 카운터를 갖는다. 또한, 정규 오퍼레이션 시에는 감추어져 있으며, 셋트될 경우, 설정 비트, 디바이스 ID 및 테스트 ROM에 액세스할 수 있도록 하는, 22번째 PC 비트를 갖는다. 이 비트는, 테스트 모드 또는 프로그램 모드 시에 셋트될 수 있고, 이 비트를 소거하기 위해서는 디바이스가 리셋되어야 한다. 사용자 프로그램 메모리 영역은, 이 비트에 대해 액세스될 수 없다. PC는, 짝수 바이트 경계에서 프로그램 메모리의 명령어에 액세스해야만 하기 때문에, PC의 LSb는 '0'이 되고 PC는 각 명령어에 대해 2씩 증가한다.
리셋 벡터는 000000h에 존재하고, 최상위 인터럽트 벡터는 000008h에 존재하며, 최하위 인터럽트 벡터는 000018h에 존재한다(도 30 참조).
프로그램 메모리 조직( Program Memory Organization )
프로그램 메모리에서의 각 로케이션은 바이트 어드레스를 갖는다. 또한, 각 인접한 2 바이트는 워드 어드레스를 갖는다. 도 31은 바이트 및 워드 어드레스를 갖는 프로그램 메모리의 맵을 나타내고 있다. 프로그램 메모리 내에서, 명령어는 워드로 정렬된다. 도 32는 몇몇의 예시 명령어과 맵에 위치된 이러한 명령어에 대한 16진수 코드를 갖는 프로그램 메모리의 맵을 나타내고 있다. 테이블 오퍼레이션은 바이트 엔티티를 가지고 동작한다. 테이블 블럭은 워드 정렬을 요구하는 것은 아니며, 어떠한 바이트 어드레스에서 시작되거나 종료될 수 있다. 만약 테이블 기록이 내부 프로그램 메모리 또는 외부 워드 폭 플래시 메모리를 프로그램하는 데에 이용된다면, 이에 대한 예외가 된다. 프로그래밍시에, 기록 데이터는, 프로그래밍 방법(method)에서 이용되는 워드 폭에 따라 정렬될 필요가 있다.
프로그램 메모리 모드( Program Memory Modes )
본 발명은, 다음 다섯 가지의 가능한 프로그램 메모리 설정 중의 하나로 동작할 수 있다. 이 설정은 설정 비트에 의해 선택된다. 이 가능한 모드들은 다음과 같다:
* MP - 마이크로프로세서
* EMC - 확장된 마이크로컨트롤러
* PEMC - 보호된 확장된 마이크로컨트롤러
* MC - 마이크로컨트롤러
* PMC - 보호된 마이크로컨트롤러
마이크로컨트롤러 및 보호된 마이크로컨트롤러 모드는 내부 실행만을 허용한다. 프로그램 메모리의 범위를 초과하는 모든 액세스는 영(0)으로 읽기된다. 보호된 마이크로컨트롤러 모드는, 코드 보호 특성을 가능하게 한다. 마이크로컨트롤러는 프로그램되지 않은 디바이스에 대한 디폴트 모드이다.
확장된 마이크로컨트롤러 모드는, 외부 프로그램 메모리뿐만 아니라 내부 프로그램 메모리에도 액세스한다. 실행은 내부 및 외부 메모리 사이를 자동으로 스위칭한다. 어드레스의 21비트는, 2M바이트의 프로그램 메모리 범위를 허용한다. 보호된 확장된 마이크로컨트롤러 모드는, 실행 및 외부 프로그램 메모리의 테이블 읽기/기록이 가능한 동안, 내부 메모리로의 테이블의 읽기/기록을 방지함으로써 내부 프로그램 메모리를 코드 보호한다.
마이크로프로세서 모드는 외부 프로그램 메모리에만 액세스한다. 온-칩 프로그램 메모리는 무시된다. 어드레스의 21비트는, 2M바이트 범위의 프로그램 메모리를 허용한다.
테스트 메모리 및 설정 비트는, TBLRD 명령어를 이용함으로써 디바이스의 정규 오퍼레이션 동안 읽기 가능하다. 이들 영역은, RCON 레지스터의 LWRT 비트가 셋트되거나 디바이스가 테스트 및 프로그래밍 모드인 경우, TBLWT 명령어를 이용하여 변경된다.
이러한 영역은 테스트 및 프로그래밍 모드에서만 실행될 수 있다.
확장된 마이크로컨트롤러 모드 및 마이크로프로세서 모드는, I/O 핀의 일부로서 정의된 외부 메모리 버스를 갖는 디바이스에서만 유용한 것이다. 표 2는, 내부 및 외부 메모리의에 액세스할 수 있는 모드들에 대한 리스트이다. 도 33은 또다른 프로그램 모드에서의 디바이스 메모리 맵을 나타내고 있다.
오퍼레이팅 모드 내부 프로그램 메모리 외부 프로그램 메모리
마이크로프로세서 액세스 불가 실행/TBLRD/TBLWT
확장된 마이크로컨트롤러 실행/TBLRD/TBLWT 실행/TBLRD/TBLWT
보호된 확장된 마이크로컨트롤러 실행 실행/TBLRD/TBLWT
마이크로컨트롤러 실행/TBLRD/TBLWT 액세스 불가
보호된 마이크로컨트롤러 실행/TBLRD 액세스 불가
외부 프로그램 메모리 인터페이스( External Program Memory Interface )
마이크로프로세서 또는 확장된 마이크로컨트롤러 모드가 선택되면, 네개의 포트가 시스템 버스로 설정된다. 두개의 포트 및 세번째의 일부는 멀티플렉스된 어드레스/데이터 버스가 되고, 다른 하나의 포트의 일부는 제어 신호용으로 이용된다. 외부의 구성요소들은 어드레스 및 데이터를 디멀티플렉스할 필요가 있다. 외부 메모리 인터페이스는 8비트 데이터 모드 또는 16비트 데이터 모드로 동작할 수 있다. 외부 메모리 인터페이스의 어드레스는 항상 바이트 어드레스이다.
도 36 및 37은 각각 16비트 및 8비트의 외부 메모리 접속을 설명한다. 외부 프로그램 메모리 버스는, 핀들의 I/O 포트 기능을 공유한다. 도 38은 I/O 핀 기능에서 외부 버스 기능의 일반적인 맵핑에 대한 리스트이다. 확장된 마이크로컨트롤러 모드에서, 디바이스가 내부 메모리를 초과하여 실행될 때, 제어 신호는 활성화되지 않는다. 이들은, AD<15:0>, A<19:0>가 세가지 상태를 갖고; OE, WRH, WRL, UB, 및 LB 신호는 '1'이고; UBA0 및 ALE 는 '0'인 상태로 진행할 것이다..
16비트 외부 인터페이스(16- Bit External Interface )
외부 인터페이스가 16비트이면, 명령어는 16비트 워드로 펫치된다. OE 출력 인에이블 신호는, 프로그램 메모리의 두개의 바이트를 즉시 16비트 워드로 출력하도록 한다. 어드레스의 최하위 비트, 즉, BA0은 메모리 디바이스에 연결될 필요가 없다.
비록 메모리가 외부적으로는 16비트 워드를 읽어내더라도, 외부 테이블 읽기는 논리적으로 한번에 1바이트씩 수행된다. 어드레스에서 최하위 비트는 내부적으로 상부 및 하부 바이트를 선택한다(LSb=0이면 하위 바이트, LSb=1이면 상위 바이트). 마이크로프로세서 및 확장된 마이크로 컨트롤러 모드에서의 외부 어드레스는, 21비트 폭을 가지며, 이는 2M바이트까지의 어드레싱을 가능하게 한다.
16비트 버스상에서의 외부 테이블 기록은, 논리적으로 한번에 1바이트씩 수행된다. 실제적인 기록은, 도 34에 나타난 바와 같이, 연결된 외부 디바이스의 타입 및 MEMCON 레지스터의 WM<1:0> 비트에 의존하게 된다. 테이블 오퍼레이션 섹션은, 실제적인 기록 사이클을 설명한다.
8비트 외부 인터페이스(8- Bit External Interface )
외부 인터페이스가 8비트이면, 명령어는 8비트의 두개의 바이트로써 펫치될 것이다. 두 바이트는 하나의 명령어 사이클 내에서 펫치된다. 어드레스에서 최하위 비트는, 메모리 디바이스에 연결된다. 사이클의 Q3 부분동안 프로그램 메모리로부터 읽어내기 위해, OE 출력 인에이블 신호 및 BA0=1가 명령어에서 최상위 바이트를 인에이블하고, 이후 BA0은 0으로 변경되며, 최하위 바이트는 사이클의 Q4 부분에서 읽어내어진다. 이는 16비트 명령어 워드를 형성하기 위함이다.
외부 테이블 읽기도 한번에 1바이트씩 이루어진다. 외부 테이블 기록 또한 한번에 1바이트씩 이루어진다. WRL은 매 외부 기록시마다 활성화된다.
8비트 인터페이스가 선택되면, WRH, UB, 및 UL 라인들은 이용되지 않고, 핀들은 I/O 포트 기능으로 복귀한다. 설정 비트는 외부 인터페이스의 8비트 모드를 선택한다.
외부 대기 사이클( External Wait Cycles )
외부 메모리 인터페이스는 대기 사이클을 제공한다. 외부 메모리 대기 사이클은, 외부 버스를 통한 테이블 읽기 및 테이블 기록 오퍼레이션에만 적용된다. 디바이스 실행은 명령어 펫치에 종속되기 때문에, 펫치 속도보다 빠르게 실행하는 것은 감지하지 못한다. 그래서 프로그램 펫치가 느려질 필요가 있다면, 프로세서 속도는 또다른 TCY 시간으로 늦춰질 것이다.
MEMCON 레지스터의 WAIT<1:0> 비트는, 메모리 펫치 사이클 당 0, 1, 2, 또는 3 추가 TCY 사이클을 선택한다. 대기 사이클은, 16비트 인터페이스상에서의 테이블 읽기/기록에 대해서 효과적이다. 8비트 인터페이스의 테이블 읽기/기록에 대해서, 대기는 단지 Q4에서만 발생한다.
파워업 시의 대기에 대한 디폴트 셋팅은, 최대 3 TCY 사이클의 대기로 설정된다. 이는, 저속 메모리가, 리셋 후 즉시 마이크로프로세서 모드로 동작하도록 한다. WAIT로 불리는 설정 비트는, 대기 상태를 인에이블 또는 디스에이블한다. 도 39는 16비트 인터페이스를 나타내고 있고, 도 40은 8비트 인터페이스를 나타내고 있으며, 각각의 경우는, 대기 없는 프로그램 메모리 명령어 펫치 및 대기 상태를 갖는 테이블 읽기를 보여준다.
외부 버스 신호 디스에이블( External Bus Signal Disables )
외부 버스에 관련된 핀들의 이용을 다양하게 하기 위해서, 몇몇 디스에이블이 설정 비트에 제공된다. 또한, 전체의 외부 버스의 디스에이블을 위하여, 도 35에 나타난 바와 같이, MEM-CON의 EBDIS 비트가 등록되며, 이는 확장된 마이크로컨트롤러 모드에서 수행될 수 있고 DMA 기능을 허용한다. 이 디스에이블은 사용자에게 전체 외부 버스 인터페이스의 세가지 상태를 허용한다. 이는, I/O 핀 기능을 통한 프로그램 제어에 의한 외부 디바이스의 직접적인 제어뿐만 아니라, DMA 오퍼레이션을 허용한다.
에뮬레이터 시스템에서, -ME 디바이스는, 외부 인터페이스로서의 핀들의 상태를 검출하기 위한 I/O 포트 기능을 허용하기 위해, 버스 디스에이블 설정 비트를 표시하기 위한 입력을 가져야만 한다. -ME 디바이스는 또한, 에뮬레이터 시스템이 마이크로프로세서 모드인지 확장된 마이크로컨트롤러 모드인지를 표시하기 위한 특수 입력 핀을 갖는다.
데이터 메모리( Data Memory )
데이터 메모리 및 범용 RAM의 크기는, 본 발명에서, 4096바이트까지 확장될 수 있다. 데이터 메모리 어드레스는 12비트 폭이다. 데이터 메모리는, 범용 레지스터(GPR) 및 특수 기능 레지스터(SFP)를 포함하는, 256바이트의 16뱅크로 분할된다.
GPR은, 결합된 GPR 레지스터 사이즈의 바이트 폭 RAM 어레이로써 형성된다. SFP는, 일반적으로 기능이 제어될 수 있는 주변장치에 분산된다.
뱅크는, 뱅크 선택 레지스터(BSR<3:0>)에 의해 선택된다. BSR 레지스터는, 16뱅크보다 많은 뱅크에 액세스할 수 있지만, 직접 긴 어드레싱 모드(direct long addressing mode)에서는, 12비트 어드레스 또는 16뱅크로 제한된다. BSR은 적절히 제한된다.
디바이스 명령어는, 하나의 명령어 사이클에서, 특정 위치에 대해 읽기, 수정, 및 기록을 수행할 수 있다. 매 사이클에 대해 하나의 어드레스만이 발생하기 때문에, 하나의 사이클 내에서 하나의 로케이션에서 읽어내고 동시에 다른 로케이션에 변경/기록하는 것은 불가능하다. 도 42는 데이터 메모리 맵의 일례를 나타내고 있다.
범용 레지스터( General Purpose Registers )
모든 PIC 디바이스에서, 모든 데이터 RAM은, 모든 명령어에 의한 레지스터로써 이용될 수 있다. 데이터 메모리의 대부분의 뱅크는, GPR 메모리만을 포함한다. GPR 메모리는 모든 디바이스의 뱅크0에 포함되어 있다.
뱅크0의 GPR의 개수의 최소값은 128이다. 액세스 RAM으로 불리는 이 GPR 영역은, 프로그래머가, BSR의 셋팅에 상관없이 액세스할 수 있는 데이터 구조를 갖도록 하는 데에 필수적이다.
특수 기능 레지스터( Special Function Registers )
SFR은, 통상적으로 디바이스 및 주변장치의 제어와 상태 기능을 위해 이용되는, 특수 레지스터이다. 이들은 모든 명령어에 의해 액세스 가능하다. 모든 SFR는, 가능하다면, 뱅크15의 상위 128바이트에 포함된다. 만약 SFR이 특정 디바이스상의 가능한 모든 로케이션을 이용하지 않는다면, 사용되지 않는 로케이션들은 구현되지 않을 것이며 '0'으로 읽혀질 것이다. LCD 컨트롤러와 같은 어떤 디바이스는, 뱅크15가 아닌 다른 뱅크에 SFR 영역을 가질 수도 있다.
뱅크15에서 SFR의 경계는, 디바이스 각각에 대해 변경될 수도 있다. 적어도 16 GPR가 액세스 뱅크에 포함될 수 있다. 도 43은 가능한 특수 기능 레지스터 맵을 나타내고 있다. 도 44 및 45는 코어 특수 기능 레지스터의 요약을 나타내고 있다.
어드레싱 모드( Addressing Modes )
본 발명은 7가지의 데이터 어드레싱 모드를 제공한다.
* inherent
* literal
* direct short
* direct forced
* direct long
* indirect
* indexed indirect offset
이들 모드 중에서, '직접 강제된(direct forced)', '직접 긴(direct long)', 및 '간접 표시된(indirect indexed)'의 세 개의 모드는 PIC 구조에서 새롭게 도입된 것이다.
고유한( Inherent )
DAW와 같은 몇몇의 명령어는, op코드에 명백하게 정의되지 않은 어드레스 지정은 필요로 하지 않는다.
리터럴( Literal )
리터럴 명령어는, 통상적으로 ADDLW와 같은 수학적인 오퍼레이션에 이용되는 리터럴 상수 필드를 포함한다. 리터럴 어드레싱은 GOTO, CALL, 및 브랜치 op코드에 이용된다.
직접 짧은( Direct Short )
대부분의 수학적인 명령어 및 이동 명령어는, 직접 짧은 어드레싱 모드로 동작한다. 이 어드레싱 모드에서, 명령어는 데이터에 있어서 최하위 어드레스의 8비트를 포함한다. 어드레스의 4비트는 뱅크 선택 레지스터 또는 BSR로부터 유지된다. BSR은, 데이터 메모리 영역에서 뱅크들 사이의 스위칭에 이용된다(도 47 참조).
대용량 범용 메모리 영역에 대한 필요성은, 범용 RAM 뱅킹 스킴을 지시한다. BSR의 하위 니블(4비트)은 현재 활성화된 범용 RAM 뱅크를 선택한다. 이를 지원하기 위해, MOVLB 뱅크 명령어가 명령어 셋트에 제공된다.
현재 선택된 뱅크가 구현되지 않는다면(뱅크13 참조), 어떠한 읽기는 모두 '0'을 읽어낼 것이다. 어떤 기록은 비트 버킷(bucket)으로 이루어지고, 상태 레지스터 비트는 적절히 셋트/소거된다.
직접 강제된( Direct Forced )
모든 특수 기능 레지스터(SFR)는, 데이터 메모리 영역 내에 맵핑된다. SFR에 쉽게 액세스할 수 있도록 하기 위해서, 일반적으로 모든 SFR는 뱅크15에 맵핑된다. 액세스를 단순화하기 위해서, 공통 RAM에 있어서 뱅크0의 하위 절반 및 BSR의 내용에 관계없이, SFR에 대한 뱅크15의 상위 절반에 대한 어드레스를 가리키는 명령어에 1비트 필드를 둔다. BSR=n으로 셋트된 BSR에서, 어떤 명령어로써 3뱅크로 어드레스 지정할 수 있게 되는데, 뱅크0 및 15는 직접 강제된 모드이고 뱅크"n"은 직접 짧은 모드이다.
직접 긴( Direct Long )
직접 긴 어드레싱은, 데이터 어드레스의 모든 12비트를 명령어 내로 코드한다. MOVFF 명령어만이 이 모드를 이용한다.
간접 어드레싱( Indirect Addressing )
간접 어드레싱은 데이터 메모리를 어드레싱하는 모드로서, 여기에서 명령어의 데이터 메모리 어드레스는 또다른 레지스터에 의해 결정된다. 이는 데이터 메모리 내의 데이터 테이블 또는 스택에 대해 유용하다. 도 53은 간접 어드레싱의 동작을 나타내고 있다. FSR 레지스터의 값은, 데이터 메모리 어드레스로서 이용된다.
간접 어드레싱 레지스터( Indirect Addressing Registers )
본 발명은 간접 어드레싱용으로 세개의 12비트 레지스터를 갖는다. 이 레지스터는 다음과 같다:
* FSR0H 및 FSR0L
* FSR1H 및 FSR1L
* FSR2H 및 FSR2L.
SFR는 12비트 레지스터이고, 4096바이트 데이터 메모리 어드레스 범위의 어느 곳이라도 어드레스 지정할 수 있다.
또한, 물리적으로 구현되지 않은 INDF0, INDF1, 및 INDF2 레지스터가 존재한다. FSR 레지스터에 관련된 값은 데이터의 어드레스가 되고, 이들 레지스터로의 읽기 또는 기록은 간접 어드레싱을 활성화한다. 만약 파일 INDF0(또는 INDF1,2)이 FSR을 통해 간접적으로 읽혀지면, 모든 '0'이 읽혀진다(영(0)비트가 셋트된다). 마찬가지로, INDF0(또는 INDF1,2)이 간접적으로 기록되면, 오퍼레이션은 NOP와 동일하게 되고, STATUS 비트는 영향을 받지 않는다.
간접 어드레싱 오퍼레이션( Indrect Addressing Operation )
각 INDF 레지스터는 관련된 네개의 어드레스를 갖는다. 네개의 INDF 로케이션 중의 하나로 데이터 액세스가 이루어지면, 선택된 어드레스는 FSR 레지스터를 다음과 같이 설정한다:
* 간접 액세스 후에 FSR의 값(어드레스)을 자동-감소 (후-감소)
* 간접 액세스 후에 FSR의 값(어드레스)을 자동-증가 (후-증가)
* 간접 액세스 전에 FSR의 값(어드레스)을 자동-증가 (선-증가)
* 간접 액세스 후에 FSR의 값(어드레스)을 변경하지 않음 (변경 없음).
자동-증가 또는 자동-감소의 특성을 이용할 때, FSR로의 영향은, 상태 레지스터에 반영되지 않는다. 예를 들어, 간접 어드레스가 FSR을 '0'으로 하더라도, Z비트는 셋트되지 않는다. 이러한 특성을 추가함으로써, FSR이, 데이터 테이블 오퍼레이션뿐만 아니라 스택포인터로서도 이용될 수 있게 한다.
인덱스된 간접 오프셋( indexed indirect offset )
각 INDF는, 인덱스된 간접 액세스를 수행하는, 그와 관련된 어드레스를 갖는다. 이 INDF 로케이션으로의 데이터 액세스가 발생하면, FSR은 다음과 같이 설정된다:
* 간접 액세스의 이전에 어드레스를 형성하기 위해, FSR의 값 및 W 레지스터의 지시된 값을 덧셈.
* FSR의 값은 변경되지 않음.
간접 어드레싱 ( INDF ) 레지스터의 간접 기록( Indirect Writing of Indirect Addressing Registers)
만약 FSR 레지스터가 간접 레지스터(FEFh-FEBh, FE7h-FE3h, FDFh-FDBh) 중의 어느 하나를 가리키는 값을 포함하면, 간접적인 기록이 NOP와 동일하게 되는 반면에(STATUS비트는 영향을 받지 않음), 간접 읽기는 00h(영(0)비트가 셋트됨)를 읽게 된다.
포인터( FSR ) 레지스터의 간접 기록( Indirect Writing of Pointer Register )
타겟 어드레스를 FSRnH 또는 FSRnL 레지스터로 하는 간접 어드레싱 오퍼레이션이 수행되면, 기록 오퍼레이션은 전 또는 후 증가/감소 기능을 결정하게 된다. 예를 들면:
FSR0=FE8h(FSR0L의 로케이션보다 1 작음)
W=50h
MOVWF*(++FSR0);(PREINC0)
이는 FSR0을 1씩 FE9h까지 증가시켜, FSR0L을 가리키게 된다. 이후, FSR0L로의 W의 기록은, FSR0L을 50h로 변경한다. 하지만,
FSR0=FE9h(FSR0L의 로케이션)
W=50h
MOVWF *FSR0++;(POSTINC0)
이는 FSR0의 증가와 동시에 FSR0L에 W를 기록할 것이다. W의 기록은 후-증가보다 우선하며, FSR0L은 50h가 될 것이다.
명령어 셋트 요약( Instruction Set Summary )
본 발명에 따른 명령어 셋트는 77 명령어를 포함한다. 종래의 아키텍쳐에서의 과다한 페이지 및 뱅크 스위칭에 의해, 프로그램 및 데이터 메모리 맵은 선형화될 필요가 있었고, 명령어 셋트는 이러한 선형화에 적합하도록 변경되었다. 본 발명에 따른 바람직한 실시예에서의 데이터 메모리 영역은, 각각 256바이트의 16뱅크로 이루어지며 최대 4K바이트를 갖는다. 하나의 뱅크에 모든 특수 기능 레지스터가 위치하는 본 발명에 따른 바람직한 실시예에서는, 가상 뱅크를 강제하는 파일 조작을 수행하는 모든 명령어의 op코드 내의 한 비트를 지정하는 것이 바람직하다. 그래서, 특수 기능 레지스터에 액세스하기 위해 뱅크들을 스위칭할 필요는 없다.
프로그램 메모리 영역은, 본 바람직한 실시예에서 최대 2M바이트가 될 수 있도록 종래의 시스템으로부터 수정된다. PC는 13비트에서 21비트까지 증가되고, 점프를 유발하는 명령어(CALL, GOTO)는 PC의 21비트 값을 로드할 수 있도록 2워드 명령어로 변경된다. 종래의 기술로부터 개선된 또다른 점은, 모듈러 에뮬레이션을 포함한다는 것이다. 이는 에뮬레이션을 위한 두 칩 사이의 통신을 필요로하고, 요망되는 속도를 보장하기 위해서, 하나의 명령어 사이클 내에서 서로 다른 소스 및 목적지 레지스터를 갖도록 하는 것은 불가능하다. 따라서, 종래의 기술에서의 MOVPF 및 MOVFP 명령어는 제거된다. 한편, 이러한 기능들을 유지하기 위해서, 2워드 명령어인 MOVFF 가 추가되었다.
본 발명에서의 명령어 셋트는 세 형태의 그룹으로 분류된다.
* 바이트-기반
* 비트-기반
* 리터럴 및 제어 오퍼레이션
이러한 형태는 도 56에 나타내어져 있다. 도 54는 이 op코드들에 대한 필드 설명을 나타내고 있다. 이러한 설명은, 도 57 내지 59 및 부록 A내의 각 특수 명령어 설명에서의 op코드들을 이해하는데 도움이 된다. 도 114는 명령어 디코드 맵을 나타낸다.
바이트-기반 명령어에서, 'f'는 파일 레지스터 지시자(designator)를 의미하고, 'd'는 목적지 지시자를 의미한다. 파일 레지스터 지시자는, 명령어에 의해 이용되어질 파일 레지스터를 특정한다. 목적지 지시자는 오퍼레이션의 결과가 위치될 곳을 특정한다. 만약 'd'='0'이면, 결과는 W레지스터에 위치된다. 만약 'f'='1'이면, 결과는 명령어에 의해 특정된 파일 레지스터에 위치된다.
다시, 바이트-기반 명령어에서, 'a'는 가상 뱅크 선택 비트를 의미한다. 만약 'a'='0'이면, 뱅크 선택 레지스터(BSR)는 오버라이드되고, 가상 뱅크가 선택된다. 만약 'a'='1'이면, BSR은 오버라이드되지 않는다.
비트-기반 명령어에서, 'b'는 오퍼레이션에 의해 영향받은 비트의 수를 선택하는 비트 필드 지시자를 의미하고, 'f'는 이 비트가 위치하고 있는 파일의 어드레스를 의미한다.
리터럴 및 제어 오퍼레이션에서, 'k'는 8, 12, 16, 20비트 상수 또는 리터럴 값을 의미한다. 또한, 's'는 빠른 호출/복귀 선택 비트를 의미한다. 만약 's'='0'이면, 섀도우 레지스터는 이용되지 않는 상태이다. 만약 's'='1'이면, W, BSR, 및 상태 레지스터는 RETURN 또는 RETFIE 명령어에 의해 섀도우 레지스터로부터 업데이트되거나, 또는 섀도우 레지스터가 CALL 명령어에 의해 그와 관계된 레지스터로부터 로드된다. 마지막으로, 'n'은, 관련된 브랜치 명령어에 대한 점프의 목적지 및 크기를 결정하기 위한 2의 보수(complement number)를 의미한다.
명령어 셋트는 매우 직교하며, 아래와 같이 그룹지어진다:
* 바이트-기반 오퍼레이션
* 비트-기반 오퍼레이션
* 리터럴 및 제어 오퍼레이션.
모든 명령어는, 아래의 경우를 제외하고는, 하나의 싱글 명령어 사이클내에서 실행된다:
* 조건부 테스트가 참
* 프로그램 카운터가 명령어의 결과로서 변경됨
* 파일로부터 파일로의 이동이 실행됨
* 테이블 읽기 또는 테이블 기록 명령어가 실행됨.
이러한 경우에서의 실행은, NOP로 실행되는 제2의 사이클을 포함하는 두개의 명령어 사이클을 갖는다.
소스/목적지로서의 특수 기능 레지스터( Special Function Register as Source/Destination)
특수 기능 레지스터를 포함하는, 본 발명에서의 직교하는 명령어 셋트는, 모든 파일 레지스터의 읽기 및 기록을 허용한다. 여기에는 사용자가 알아야만 하는 몇가지 특수한 경우가 있다:
목적지로서의 STATUS( STATUS as destination )
만약 명령어가 상태 레지스터에 기록한다면, Z, C, DC, OV, 및 N비트는 명령어의 결과에 의해 셋트되거나 소거될 수 있고, 기록된 원래의 데이터 비트에 덮어쓰기한다.
소스 또는 목적지로서의 PCL( PCL as source or destination )
PCL상의 읽기, 기록 또는 읽기-변경-기록은 다음과 같은 결과를 가질 것이다:
* 읽기 PCL에 있어서, 최초 PCU를 PCLATU로; 이후 PCH를 PCLATH로 ; 이후 PCL를 목적지로.
* 기록 PCL에 있어서, PCLATU를 PCU로; 이후 PCLATH를 PCH로; 그리고 8비트 결과값을 PCL로.
* 읽기-변경-기록에 있어서: 먼저 PCL를 ALU 오퍼랜드로; 이후 PCLATH를 PCH로, 이후 PCLATU를 PCU로, 그리고 8비트 결과를 PCL로.
여기에서,
PCL = 프로그램 카운터 하부 바이트
PCH = 프로그램 카운터 상부 바이트
PCLATH = 프로그램 카운터 상부 홀딩 랫치
PCU = 프로그램 카운터 상위 바이트
PCLATU = 프로그램 카운터 상위 홀딩 랫치
목적지 = 목적지, W 또는 f.
비트 조작( Bit Manipulation )
모든 비트 조작 명령어는, 먼저 전체의 레지스터를 읽고, 선택된 비트를 조작하고, 결과를 기록함으로써 수행된다(읽기-변경-기록(R-M-W)). 사용자는, 포트와 같은 몇몇의 특수 기능 레지스터를 조작할 때, 이러한 점을 인지하고 있어야한다. 디바이스에 의해 조작되는 상태 비트(인터럽트 플래그 비트 포함)는, Q1 사이클에서 셋트되거나 소거된다. 그래서 이러한 비트를 포함하는 레지스터에서의 R-M-W 명령어의 수행은 문제되지 않는다.
도 60 내지 113은, 본 발명에 따른 명령어 셋트 내의 각 명령어의 일반적인 동작을 나타낸 흐름도이다. 각각의 도면은, 본 발명에 따른 명령어 셋트 내의 명령어의 펫치 및 실행에 대한 일반적인 단계뿐만 아니라 특징적인 단계들도 나타내고 있다. 예를 들면, 도 60은, ADDWF, ADDWFC, ANDWF, COMF, DECF, INCF, IORWF, MOVF, RLCF, RLNCF, RRCF, RRNCF, SUBFWB, SUBWF, SUBWFB, SWAPF, XORWF, MOVWF, 및 NOP와 같은 명령어를 포함하는, 바이트-기반 파일 레지스터 오퍼레이션의 펫치에 대한 단계들을 나타내고 있다. 비슷하게, 도 61에서는, ADDWF, ADDWFC, ANDWF, COMF, DECF, INCF, IORWF, MOVF, RLCF, RLNCF, RRCF, RRNCF, SUBFWB, SUBWF, SUBWFB, SWAPF, 및 XORWF와 같은 명령어를 포함하는 바이트-기반 파일 레지스터의 실행에 대한 단계를 나타내고 있다(MOVWF는 더미 읽기로만 동작하고, NOP는 더미 읽기 및 더미 기록으로 동작한다).
도 77은, 다음과 같은 명령어를 포함하는 리터럴 오퍼레이션에 대한 펫치 단계를 나타낸다: ADDLW, ANDLW, IORLW, MOVLW, SUBLW, 및 XORLW. 위와 마찬가지로, 도 78에서는, 다음과 같은 명령어를 포함하는 리터럴 오퍼레이션에 대한 실행 단계를 나타낸다: ADDLW, ANDLW, IORLW, MOVLW, SUBLW, 및 XORLW.
도 90은, 다음과 같은 명령어를 포함하는 브랜치 오퍼레이션의 펫치에 대한 흐름도이다: BC, BN, BNC, BNN, BNV, BNZ, BV, 및 BZ. 마찬가지로, 도 91은, 다음과 같은 명령어를 포함하는 브랜치 오퍼레이션의 실행에 대한 흐름도이다: BC, BN, BNC, BNN, BNV, BNZ, BV, 및 BZ. 나머지 도면들도, 명령어 셋트 내의 다른 명령어의 펫치 및 실행의 단계들을 나타낸다.
완전한 명령어를 획득하기 위해 두번의 펫치를 필요로 하는, 이러한 다중 워드 명령어에 있어서, 전체의 펫치 및 실행 처리를 설명하기 위해서는 세개의 흐름도가 이용된다. 예를 들면, MOVFF 명령어는 도 70 내지 72에 걸쳐 설명되었다. 도 70은 비교적 표준적인 펫치 오퍼레이션을 나타낸다. 또한, 도 71에서, 오퍼레이션 박스의 왼쪽에서 MOVFF의 첫번째 부분의 실행을 나타내고, 오퍼레이션 박스의 오른쪽에서는 이 명령어의 두번째 워드의 펫치를 나타내고 있다. 그리고, 도 72에서는, MOVFF 명령어의 두번째 워드의 실행 단계를 간단하게 나타내고 있다. 유사한 흐름도들이 다른 멀티-워드 명령어에 대해 제공된다: LFSR(도 79 내지 81); GOTO(도 102 내지 104); CALL(도 105 내지 107); TBLRD*, TBLRD*+, TBLRD*-, 및 TBLRD+*(도 108 내지 110); TBLWT*, TBLWT*+, TBLWT*-, 및 TBLWT+*(도 111 내지 113).
부록 A에는, 본 발명에 따른 명령어 셋트의 op코드 및 명령어의 상세한 리스트가 포함되었다. 부록 A의 기재는, 본 명세서에서 참조를 위한 목적으로 이용될 수 있다.
리터럴 오프셋으로 인덱스된( Indexed Literal Offset )
도 115는 또다른 어드레싱 모드로서, 특히, 리터럴 오프셋으로 인덱스된 어드레싱 모드를 나타내고 있다. 하나의 실시예에서, 리터럴 오프셋으로 인덱스된 어드레싱 모드는, 인덱스 비트(index bit)로 불리는 콘텍스트 비트(context bit)를 '1'로 프로그래밍함으로써 인에이블된다. 인덱스 비트가 인에이블되도록 프로그램되면, 리터럴 오프셋으로 인덱스된 어드레싱 모드는, 어드레스 의존적으로 되고, 명령어 워드의 액세스 비트의 값에 종속된다. 이 모드는, 직접 강제된 어드레스를 이용하는 명령어에 대해서만 적용된다.
만약 액세스 비트가 '1'로 셋트되면, 이전의 아키텍쳐로부터 어드레스가 결정되는 방식에 있어서는 어떠한 변경도 없으며, 어드레싱 모드는 직접 짧은 모드로 변경된다. 만약 액세스 비트의 값이 '0'이면, 명령어 워드에 포함된 어드레스는, 디코드되어 5Fh의 값과 비교된다. 만약 어드레스가 5Fh보다 크면, 어드레싱 모드는 직접 강제된 모드로 디코드된다. 만약 액세스 비트가 영(0)이고 명령어 워드의 어드레스가 05Fh보다 작거나 같으면, 어드레싱 모드는 리터럴 오프셋으로 인덱스된 어드레싱 모드가 된다. 이렇게 되는 경우에, 명령어 워드의 어드레스는 FSR2의 내용과 더해지는 리터럴 값으로 변경된다. 이 결과값은, 위에서 조작될 어드레스로서 이용된다.
도 116은, 인덱스된 리터럴 오프셋이 인에이블될 때, 액세스 뱅크가 어떻게 분할되는 지를 나타낸다. 로케이션 00h 내지 5Fh는, 메모리의 어떤 로케이션으로도 맵핑될 수 있다. 액세스 뱅크의 이 부분에 대한 시작 어드레스는, FSR2H:FSR2L 레지스터에 포함된 어드레스에 맵핑된다.
FSR2 로의 변경( Modification to FSR2 )
리터럴 오프셋으로 인덱스된 모드를 제공하기 위해서, 명령어 레지스터의 하위 7비트는, FSR2의 내용에 덧셈하기 위한 네개의 가능한 값 중의 하나에 포함된다. IR에 포함된 데이터는 부호없는 정수로 간주되고, 그 결과는 FSR2에 저장되지 않는다. 네개의 어드레싱 모드는 다음과 같다:
* 간접 (INDF);
* 증가/감소를 갖는 간접 (FSR2+), (+FSR2), 및 (FSR2-);
* 오프셋을 갖는 간접 (FSR2+ W, W의 내용은 오프셋으로 이용됨); 및
* 리터럴 오프셋을 갖는 간접 (FSR2 + 리터럴).
본 발명은, 불려내질 때, 하나 이상의 작업이 마이크로컨트롤러에 의해 수행되는 명령어의 셋트를 포함한다. 이 명령어 중의 몇몇은 아래에서 설명된다. 이러한 명령어는, 예를 들면 스위치 또는 다른 동등한 수단에 의해, 특수한 상황에서 불려내어질 수 있다.
"PUSHL" 명령어는 8비트 리터럴 값을 스택으로 푸시한다. PUSHL 명령어의 정확한 구조는, 0<=k<=225인 "PUSHL k" 이다. 이 커맨드의 발동은 마이크로컨트롤러의 상태에 영향을 미치지 않는다. PUSHL 명령어의 인코딩은 "1110 1010 kkkk kkkk"이고, 여기에서 8비트 리터럴은 명령어의 kkkk kkkk 부분에 의해 지시된다. 여기서, 8비트 리터럴은, 제2 파일 선택 레지스터("FSR2")가 지시하는 어드레스의 위치로 복사되고, 이후 FSR2는 감소된다.
"SUBFSR" 명령어는 파일 선택 레지스터("FSR")로부터 5비트 리터럴을 뺄셈한다. 이 커맨드의 구조는, 0<=f<=2 및 0<=k<=63인, "SUBFSR f,k"이다. 이 커맨드의 실행은, 마이크로컨트롤러의 상태에 영향을 미치지 않는다. 커맨드의 인코딩은, 실행될 때, FSRf로부터 6비트(부호없는) 리터럴의 뺄셈을 수행하고 그 결과를 다시 FSRf에 저장하는 "1110 1001 ffkk kkkk"이 되는데, 여기에서 명령어의 "ff" 부분은 특정 파일 선택 레지스터를 지시하고, 명령어의 "kk kkkk" 부분은 리터럴을 지시한다.
"SUBULNK" 명령어는 제2 파일 선택 레지스터("FSR2")로부터 5비트 리터럴을 뺄셈하고, 결과값을 리턴한다. 이 커맨드의 구조는, 0<=k<=63인, "SUBULNK k"이다. 이 커맨드의 실행은 마이크로컨트롤러의 상태에 영향을 미치지 않는다. 이 커맨드의 인코딩은, "1110 1001 11kk kkkk"가 되고, 실행될 때, FSR2로부터 6비트(부호없는) 리터럴을 뺄셈하고, 그 결과를 FSR2에 저장하고, 결과를 리턴하고 그 실행을 호출자(caller)로 되돌린다.
"ADDFSR" 명령어는 5비트 리터럴을 FSR과 덧셈한다. 이 명령어의 구조는, 0<=f<=2 및 0<=k<=63인, "ADDFSR f, k"이다. 마이크로컨트롤러의 상태는 이 인트스럭션에 의해 영향받지 않는다. 이 명령어의 인코딩은, "1110 1000 ffkk kkkk"이고, 실행시에, 6비트(부호없는) 리터럴이 FSRf에 덧셈되고 그 결과 값은 FSRf에 저장되는데, 여기에서 명령어의 "ff" 부분은 특정 파일 선택 레지스터를 지시하고 명령어의 "kk kkkk" 부분은 리터럴을 지시한다.
"ADDULNK" 명령어는 5비트 리터럴을 FSR2와 덧셈하고, 결과를 리턴하고, 실행을 호출 루틴으로 되돌린다. 이 명령어의 구조는, 0<=k<=63인, "ADDULNK k"이다. 이 명령어의 실행은 마이크로컨트롤러의 상태를 변경하지 않는다. 이 명령어의 인코딩은, "1110 1000 11kk kkkk"인데, 여기에서 실행시, (명령어의 "kk kkkk" 부분에 의해 지시되는)6비트(부호없는) 리터럴은 FSR2와 덧셈되고, 그 결과는 FSR2에 저장되고, 실행은 호출자로 리턴된다.
"MOVSF" 명령어는, 스택 로케이션을 범용 레지스터("GSR")에 저장한다. 이 명령어의 구조는, 0<=s<=127 및 0<=d<=4095인, "MOVSF s, d"이다. 이 명령어의 실행은 마이크로컨트롤러의 상태에 영향을 미치지 않는다. 이 명령어의 인코딩은 두개의 워드이며, 워드 1은 "1110 1011 0sss ssss"이고 워드 2는 "1111 dddd dddd dddd"인데, 여기에서 명령어의 첫번째 워드의 "sss ssss" 부분은 소스를 지시하고, 두번째 워드의 "dddd dddd dddd" 부분은 목적지를 지시한다. 이 명령어의 실행시에, 7비트 리터럴 값 s는 FSR2의 값에 덧셈되고, 12비트 값 d에 의해 지시된 로케이션에 복사되는 8비트 값의 소스 어드레스가 된다. FSR2 값은 MOVSF 명령어에 영향받지 않으며, 또한, 마이크로컨트롤러의 상태에 영향을 받지 않는다.
"MOVSS" 명령어는 스택 로케이션을 다른 스택 로케이션에 복사한다. 이 명령어의 구조는, 0<=s<=127 및 0<=d<=127인, "MOVSS s, d"이다. 이 명령어의 실행은 마이크로컨트롤러의 상태에 영향을 미치지 않는다. 이 명령어의 인코딩은 두개의 워드이며, 워드 1은 "1110 1011 1sss ssss"이고 워드 2는 "1111 xxxx xddd dddd"인데, 여기에서 명령어의 첫번째 워드의 "sss ssss" 부분은 소스를 지시하고, 두번째 워드의 "ddd dddd" 부분은 목적지를 지시한다. 이 명령어의 실행시에, 7비트 리터럴 값 s는 FSR2의 값에 덧셈되고, 7비트 값 d와 FSR2의 값을 덧셈함으로써 결정된 어드레스에 의해 지시된 로케이션에 복사되는 8비트 값에 대한 소스 어드레스가 된다. FSR2 값은 MOVSS 명령어에 의해 영향받지 않으며, 마이크로컨트롤러의 상태에 의해서도 영향받지 않는다.
"CALLW" 명령어는 간접 호출이다. 이 명령어의 구조는 "CALLW"이다. 이 명령어의 실행은 마이크로컨트롤러의 상태에 영향을 미치지 않는다. 이 커맨드의 인코딩은, "0000 0000 0001 0100"이고, 명령어의 실행시에, 다음 명령어의 어드레스가 하드웨어 스택에 푸시된다. 특히, PCLATU:PCLATH와 같은 첫번째 레지스터로부터의 값은, 프로그램 카운터("PC")의 상위 16비트에 복사되고, W 레지스터("WREG")와 같은 두번째 레지스터의 값은 PC의 하위 8비트에 복사된다.
이러한 본 발명은, 상술한 목적 및 장점뿐만 아니라 이에 속하는 과제도 달성할 수 있다. 본 발명이 특정의 실시예를 참조하여 묘사되고, 설명되었지만, 이는 본 발명을 한정하려는 것이 아니며, 그러한 한정을 의도하는 것도 아니다. 본 발명은, 이 기술분야의 당업자에 있어서, 형태 및 기능에 있어서의 다양한 수정물, 대체물, 및 균물물의 적용이 가능하다. 본 발명에서 묘사되고 설명된 실시예는 단지 예시일 뿐, 본 발명의 범위를 한정하지 않는다. 따라서, 본 발명은 첨부한 청구항의 정신 및 범위, 모든 균등물에 의해 한정되어야 할 것이다
[부록]
Figure 112008038360855-pat00001
Figure 112008038360855-pat00002
Figure 112008038360855-pat00003
Figure 112008038360855-pat00004
Figure 112008038360855-pat00005
Figure 112008038360855-pat00006
Figure 112008038360855-pat00007
Figure 112008038360855-pat00008
Figure 112008038360855-pat00009
Figure 112008038360855-pat00010
Figure 112008038360855-pat00011
Figure 112008038360855-pat00012
Figure 112008038360855-pat00013
Figure 112008038360855-pat00014
Figure 112008038360855-pat00015
Figure 112008038360855-pat00016
Figure 112008038360855-pat00017
Figure 112008038360855-pat00018
Figure 112008038360855-pat00019
Figure 112008038360855-pat00020
Figure 112008038360855-pat00021
Figure 112008038360855-pat00022
Figure 112008038360855-pat00023
Figure 112008038360855-pat00024
Figure 112008038360855-pat00025
Figure 112008038360855-pat00026
Figure 112008038360855-pat00027
Figure 112008038360855-pat00028
Figure 112008038360855-pat00029
Figure 112008038360855-pat00030
Figure 112008038360855-pat00031
Figure 112008038360855-pat00032
Figure 112008038360855-pat00033
Figure 112008038360855-pat00034
Figure 112008038360855-pat00035
Figure 112008038360855-pat00036
Figure 112008038360855-pat00037
Figure 112008038360855-pat00038
도 1은 종래기술의 중간-범위 마이크로컨트롤러 유닛에 대한 블록도.
도 2는 종래기술의 하바드 아키텍쳐에 대한 블록도.
도 3은 종래기술의 폰 노이만 아키텍쳐에 대한 블록도.
도 4는 종래 기술의 클록/명령어 사이클에 대한 타이밍도.
도 5는 다중 명령어의 실행에 대한 도면.
도 6은 본 발명에 따른 마이크로컨트롤러 코어의 블록도.
도 7은 본 발명에 따른 Q 사이클 동작의 타이밍도.
도 8은 본 발명에 따른 클록/명령어 사이클에 대한 타이밍도.
도 9는 본 발명에 따른 명령어 파이프라인 흐름도.
도 10은 본 발명에 따른 명령어 파이프라인 흐름도.
도 11은 본 발명에 따른 명령어 파이프라인 흐름도.
도 12는 본 발명에 따른 명령어 파이프라인 흐름도.
도 13은 본 발명에 따른 명령어 파이프라인 흐름도.
도 14는 본 발명에 따른 명령어 파이프라인 흐름도.
도 15는 본 발명에 따른 상태 레지스터의 블록도.
도 16은 본 발명에 따른 프로그램 카운터의 블록도.
도 17은 본 발명에 따른 CALL 및 GOTO 명령어를 이용하는 프로그램 카운터의 블록도.
도 18은 본 발명에 따른 스택포인터 레지스터의 블록도.
도 19는 본 발명에 따른 스택 상위 레지스터의 최상부에 대한 블록도.
도 20은 본 발명에 따른 스택 상부 레지스터의 최상부에 대한 블록도.
도 21은 본 발명에 따른 스택 하부 레지스터의 최상부에 대한 블록도.
도 22는 본 발명에 따른 스택 리셋 동작을 나타낸 도면.
도 23은 본 발명에 따른 초기화된 스택상에서 제1 CALL을 나타낸 도면.
도 24는 본 발명에 따른 스택상에서 제2 연속 CALL을 나타낸 도면.
도 25는 본 발명에 따른 스택상에서 제31 및 제32 연속 CALL을 나타낸 도면.
도 26은 본 발명에 따른 스택상에서 리턴 POP 동작을 나타낸 도면.
도 27은 본 발명에서 스택 리턴 pop이 스택 오버플로 상태를 유발하는 것을 나타낸 도면.
도 28은 본 발명에 따른 스택상에서 PUSH 명령어를 나타낸 도면.
도 29는 본 발명에 따른 스택상에서 POP 명령어를 나타낸 도면.
도 30은 본 발명에 따른 프로그램 메모리 맵 및 스택에 대한 블록도.
도 31은 본 발명에 따른 메모리 맵에 대한 블록도.
도 32는 본 발명에 따른 메모리의 명령어에 대한 블록도.
도 33은 다른 프로그램 모드에서의 본 발명에 따른 디바이스 메모리 맵을 나타낸 블록도.
도 34는 본 발명에 따른 MEMCON 레지스터를 설명하기 위한 블록도.
도 35는 본 발명에 따른 CONFIG7 설정 바이트를 설명하기 위한 블록도.
도 36은 본 발명에 따른 16비트 외부 메모리 접속 설정에 대한 블록도.
도 37은 본 발명에 따른 8비트 외부 메모리 접속 설정에 대한 블록도.
도 38은 본 발명에 따른 대표적인 포트 기능에 대한 리스트.
도 39는 본 발명에 따른 16비트 모드에서의 외부 프로그램 메모리 버스에 대한 타이밍도.
도 40은 본 발명에 따른 8비트 모드에서의 외부 프로그램 메모리 버스에 대한 타이밍도.
도 41은 본 발명에 따른 외부 버스 사이클 형태에 대한 리스트.
도 42는 본 발명에 따른 데이터 메모리 맵 및 명령어 'a'비트에 대한 블록도.
도 43은 본 발명에 따른 특수 기능 레지스터의 맵.
도 44는 본 발명에 따른 코어 특수 기능 레지스터를 나타낸 도면.
도 45는 코어 특수 기능 레지스터를 나타낸, 도 44에 연속한 도면.
도 46은 본 발명에 따른 직접 짧은 어드레싱에 대한 블록도.
도 47은 본 발명에 따른 BSR 오퍼레이션에 대한 블록도.
도 48은 에뮬레이션/테스트 모드시의 본 발명에 따른 BSR 오퍼레이션에 대한 블록도.
도 49는 본 발명에 따른 직접 강제된 어드레싱 모드에 대한 블록도.
도 50은 본 발명에 따른 직접 강제된 어드레싱 모드에 대한 블록도.
도 51은 본 발명에 따른 직접 긴 어드레싱 모드에 대한 블록도.
도 52는 본 발명에 따른 간접 어드레싱 모드에 대한 블록도.
도 53은 본 발명에 따른 간접 어드레싱 모드에 대한 블록도.
도 54는 본 발명에 따른 op코드 필드를 나타낸 리스트.
도 55는 본 발명에 따른 간접 어드레싱 심볼의 리스트.
도 56은 본 발명에 따른 명령어의 일반적인 포맷을 나타낸 도면.
도 57은 본 발명에 따른 명령어 셋트의 일부에 대한 리스트.
도 58은 본 발명에 따른 명령어 셋트의 일부에 대한 리스트.
도 59는 본 발명에 따른 명령어 셋트의 일부에 대한 리스트.
도 60은 본 발명에 따른 바이트 기반 파일 레지스터 오퍼레이션에 대한 흐름도.
도 61은 본 발명에 따른 바이트 기반 파일 레지스터 오퍼레이션(실행)에 대한 흐름도.
도 62는 본 발명에 따른 CLRF, NEGF, SETF (펫치) 명령어에 대한 흐름도.
도 63은 본 발명에 따른 CLRF, NEGF, SETF (실행) 명령어에 대한 흐름도.
도 64는 본 발명에 따른 DECFSZ, DCFSNZ, INCFSZ, ICFSNZ (펫치) 명령어에 대한 흐름도.
도 65는 본 발명에 따른 DECFSZ, DCFSNZ, INCFSZ, ICFSNZ (실행) 명령어에 대한 흐름도.
도 66은 본 발명에 따른 CPFSEQ, CPFSQT, CPFSLT, 및 TSTFSZ (펫치) 명령어에 대한 흐름도.
도 67은 본 발명에 따른 CPFSEQ, CPFSQT, CPFSLT, 및 TSTFSZ (실행) 명령어 에 대한 흐름도.
도 68은 본 발명에 따른 MULWF (펫치) 명령어에 대한 흐름도.
도 69는 본 발명에 따른 MULWF (실행) 명령어에 대한 흐름도.
도 70은 본 발명에 따른 MULFF (펫치) 명령어에 대한 흐름도.
도 71은 본 발명에 따른 MULFF (실행1) 명령어에 대한 흐름도.
도 72는 본 발명에 따른 MULFF (실행2) 명령어에 대한 흐름도.
도 73은 본 발명에 따른 BCF, BSF, BTG (펫치) 명령어에 대한 흐름도.
도 74는 본 발명에 따른 BCF, BSF, BTG (실행) 명령어에 대한 흐름도.
도 75는 본 발명에 따른 BTFSC 및 BTFSS (펫치) 명령어에 대한 흐름도.
도 76은 본 발명에 따른 BTFSC 및 BTFSS (실행) 명령어에 대한 흐름도.
도 77은 본 발명에 따른 리터럴 오퍼레이션(펫치)에 대한 흐름도.
도 78은 본 발명에 따른 리터럴 오퍼레이션(실행)에 대한 흐름도.
도 79는 본 발명에 따른 LFSR (펫치) 명령어에 대한 흐름도.
도 80은 본 발명에 따른 LFSR (실행1) 명령어에 대한 흐름도.
도 81은 본 발명에 따른 LFSR (실행2) 명령어에 대한 흐름도.
도 82는 본 발명에 따른 DAW (펫치) 명령어에 대한 흐름도.
도 83은 본 발명에 따른 DAW (실행) 명령어에 대한 흐름도.
도 84는 본 발명에 따른 MULLW (펫치) 명령어에 대한 흐름도.
도 85는 본 발명에 따른 MULLW (실행) 명령어에 대한 흐름도.
도 86은 본 발명에 따른 CLRWDT, HALT, RESET, 및 SLEEP (펫치) 명령어에 대 한 흐름도.
도 87은 본 발명에 따른 CLRWDT, HALT, RESET, 및 SLEEP (실행) 명령어에 대한 흐름도.
도 88은 본 발명에 따른 MOVELB (펫치) 명령어에 대한 흐름도.
도 89는 본 발명에 따른 MOVLB (실행) 명령어에 대한 흐름도.
도 90은 본 발명에 따른 브랜치 오퍼레이션(펫치)에 대한 흐름도.
도 91은 본 발명에 따른 브랜치 오퍼레이션(실행)에 대한 흐름도.
도 92는 본 발명에 따른 BRA 및 RCALL (펫치) 명령어에 대한 흐름도.
도 93은 본 발명에 따른 BRA 및 RCALL (실행) 명령어에 대한 흐름도.
도 94는 본 발명에 따른 PUSH (펫치) 명령어에 대한 흐름도.
도 95는 본 발명에 따른 PUSH (실행) 명령어에 대한 흐름도.
도 96은 본 발명에 따른 POP (펫치) 명령어에 대한 흐름도.
도 97은 본 발명에 따른 POP (실행) 명령어에 대한 흐름도.
도 98은 본 발명에 따른 RETURN 및 RETFIE (펫치) 명령어에 대한 흐름도.
도 99는 본 발명에 따른 RETURN 및 RETFIE (실행) 명령어에 대한 흐름도.
도 100은 본 발명에 따른 RETLW (펫치) 명령어에 대한 흐름도.
도 101은 본 발명에 따른 RETLW (실행) 명령어에 대한 흐름도.
도 102는 본 발명에 따른 GOTO (펫치) 명령어에 대한 흐름도.
도 103은 본 발명에 따른 GOTO (실행1) 명령어에 대한 흐름도.
도 104는 본 발명에 따른 GOTO (실행2) 명령어에 대한 흐름도.
도 105는 본 발명에 따른 CALL (펫치) 명령어에 대한 흐름도.
도 106은 본 발명에 따른 CALL (실행1) 명령어에 대한 흐름도.
도 107은 본 발명에 따른 CALL (실행2) 명령어에 대한 흐름도.
도 108은 본 발명에 따른 TBLRD*, TBLRD*+, TBLRD*-, 및 TBLRD+* (펫치) 명령어에 대한 흐름도.
도 109는 본 발명에 따른 TBLRD*, TBLRD*+, TBLRD*-, 및 TBLRD+* (실행1) 명령어에 대한 흐름도.
도 110은 본 발명에 따른 TBLRD*, TBLRD*+, TBLRD*-, 및 TBLRD+* (실행2) 명령어에 대한 흐름도.
도 111은 본 발명에 따른 TBLWT*, TBLWT*+, TBLWT*-, 및 TBLWT+* (펫치) 명령어에 대한 흐름도.
도 112는 본 발명에 따른 TBLWT*, TBLWT*+, TBLWT*-, 및 TBLWT+* (실행1) 명령어에 대한 흐름도.
도 113은 본 발명에 따른 TBLWT*, TBLWT*+, TBLWT*-, 및 TBLWT+* (실행2) 명령어에 대한 흐름도.
도 114는 본 발명에 따른 명령어 디코드 맵을 나타낸 도면.
도 115는 본 발명에서 학습에 따른 교대 페이징 개념을 나타낸 블록도.
도 116은 본 발명에서 학습에 따른 교대 페이징 개념을 나타낸 블록도.

Claims (15)

  1. 중앙처리장치 및 상기 중앙처리장치와 연결되며 n 뱅크들로 분할되는 선형 어드레스 영역을 갖는 데이터 메모리를 포함하는 마이크로컨트롤러로서:
    상기 중앙처리장치는;
    레지스터 파일을 형성하기 위해 상기 데이터 메모리 내의 두개의 뱅크의 일부의 메모리 영역과 상기 데이터 메모리 내의 소정의 로케이션에 맵핑된 사용자 정의된 부분의 메모리 영역을 결합한 가상 뱅크에 액세스하는 뱅크 선택 장치와, 상기 레지스터 파일과 연결된 산술 논리 장치와, 상기 데이터 메모리의 상기 뱅크들 중의 어느 하나에 맵핑되는 복수의 특수 기능 레지스터와, 상기 데이터 메모리에 맵핑되는 프로그램 카운터를 위한 프로그램 카운터 레지스터와, 및 상기 복수의 특수 기능 레지스터 중 적어도 하나로서 상기 산술 논리 장치와 연결되며 상기 데이터 메모리 내에 맵핑되는 작업 레지스터를 포함하고,
    상기 마이크로컨트롤러는 상기 산술 논리 장치를 제어하기 위한 명령어 셋트를 더 포함하고,
    상기 명령어 셋트 중 적어도 하나의 명령어는 상기 뱅크 선택 장치가 상기 뱅크들 중 어느 하나에 액세스할 것인지 또는 상기 가상 뱅크에 액세스할 것인지를 표시하는 비트를 포함하는 것을 특징으로 하는 마이크로컨트롤러.
  2. 제1항에 있어서,
    상기 명령어 셋트는, 1110 1010 kkkk kkkk로 인코딩되는 명령어를 포함하고, 상기 명령어가 실행될 때, 8비트 리터럴이 파일 선택 레지스터에 의해 지정되는 로 케이션에 복사되고, 이후 상기 파일 선택 레지스터는 감소되고, 상기 리터럴 'k'는 상기 명령어의 kkkk kkkk 부분에 표시되어 있는 것을 특징으로 하는 마이크로컨트롤러.
  3. 제1항에 있어서,
    상기 명령어 셋트는, 1110 1001 ffkk kkkk로 인코딩되는 명령어를 포함하고, 상기 명령어가 실행될 때, 파일 선택 레지스터로부터 부호없는 6비트 리터럴을 뺄셈하여 얻어진 결과를 상기 파일 선택 레지스터에 저장하고, 상기 리터럴은 상기 명령어의 kk kkkk 부분에 표시되고, 상기 파일 선택 레지스터는 상기 명령어의 ff 부분에 표시되어 있는 것을 특징으로 하는 마이크로컨트롤러.
  4. 제1항에 있어서,
    상기 명령어 셋트는, 1110 1001 11kk kkkk로 인코딩되는 명령어를 포함하고, 상기 명령어가 실행될 때, 파일 선택 레지스터로부터 부호없는 6비트 리터럴을 뺄셈하여 얻어진 결과를 상기 파일 선택 레지스터에 리턴하여 저장하고, 상기 리터럴은 상기 명령어의 kk kkkk 부분에 표시되어 있는 것을 특징으로 하는 마이크로컨트롤러.
  5. 제1항에 있어서,
    상기 명령어 셋트는, 1110 1000 ffkk kkkk로 인코딩되는 명령어를 포함하고, 상기 명령어가 실행될 때, 파일 선택 레지스터와 부호없는 6비트 리터럴을 덧셈하여 얻어진 결과를 상기 파일 선택 레지스터에 저장하고, 상기 리터럴은 상기 명령어의 kk kkkk 부분에 표시되고, 상기 파일 선택 레지스터는 상기 명령어의 ff 부분에 표시되어 있는 것을 특징으로 하는 마이크로컨트롤러.
  6. 제1항에 있어서,
    상기 명령어 셋트는, 1110 1000 11kk kkkk로 인코딩되는 명령어를 포함하고, 상기 명령어가 실행될 때, 파일 선택 레지스터와 상기 명령어의 kk kkkk 부분에 의해 표시되는 6비트 리터럴을 덧셈하여 얻어진 결과를 상기 파일 선택 레지스터에 저장하는 것을 특징으로 하는 마이크로컨트롤러.
  7. 제1항에 있어서,
    상기 명령어 셋트는, 1110 1011 0sss ssss 1111 dddd dddd dddd로 인코딩되는 명령어를 포함하고, 상기 명령어가 실행될 때, 8비트 값이 dddd dddd dddd의 12비트 값으로 표시되는 목적지에 복사되고, 상기 목적지에 복사된 상기 8비트 값의 로케이션은 파일 선택 레지스터의 값과 상기 sss ssss의 7비트 리터럴 값을 덧셈함으로써 지정되는 것을 특징으로 하는 마이크로컨트롤러.
  8. 제1항에 있어서,
    상기 명령어 셋트는, 1110 1011 1sss ssss 1111 xxxx xddd dddd로 인코딩 되 는 명령어를 포함하고, 상기 명령어가 실행될 때, 8비트 값이 상기 명령어의 ddd dddd 부분에 의해 표시되는 로케이션에 복사되고, 상기 8비트 값의 로케이션은 파일 선택 레지스터의 값과 상기 sss ssss의 7비트 리터럴 값을 덧셈함으로써 결정되는 것을 특징으로 하는 마이크로컨트롤러.
  9. 제1항에 있어서,
    상기 명령어 셋트는 0000 0000 0001 0100으로 인코딩되는 명령어를 포함하고, 상기 명령어가 실행될 때, 다음 명령어의 어드레스가 하드웨어 스택에 푸시되는 것을 특징으로 하는 마이크로컨트롤러.
  10. 제1항에 있어서,
    상기 명령어 셋트는, 0000 0000 0001 0100으로 인코딩되는 명령어를 포함하고, 상기 명령어가 실행될 때, 제1 레지스터의 값은 상기 프로그램 카운터의 상위 16비트에 복사되고, 제2 레지스터의 값은 상기 프로그램 카운터의 하위 8비트에 복사되는 것을 특징으로 하는 마이크로컨트롤러.
  11. 제1항에 있어서,
    상기 사용자 정의된 일부의 메모리 영역은 상기 가상 뱅크 내의 00h 내지 5Fh의 어드레스 범위를 갖고, 첫번째 뱅크의 일부의 메모리 영역은 상기 가상 뱅크 내의 60h 내지 7Fh의 어드레스 범위를 갖고, 및 두번째 뱅크의 일부의 메모리 영역 은 상기 가상 뱅크 이내의 80h 내지 FFh의 어드레스 범위를 갖는 마이크로컨트롤러.
  12. 제1항에 있어서,
    제1 모드 및 제2 모드를 정의하기 위한 프로그래머블 인덱스 비트를 더 포함하고,
    상기 제1 모드에서 상기 가상 뱅크는 상기 데이터 메모리의 상기 사용자 정의된 일부의 메모리 영역을 제외한 두개의 뱅크들의 일부의 메모리 영역을 결합하고, 상기 제2 모드에서 상기 가상 뱅크는 상기 데이터 메모리의 상기 사용자 정의된 일부의 메모리 영역을 포함하여 두개의 뱅크들의 일부의 메모리 영역을 결합하는 마이크로컨트롤러.
  13. 제12항에 있어서,
    상기 프로그래머블 인덱스 비트는 퓨즈에 의해 구현되는 마이크로컨트롤러.
  14. 제12항에 있어서,
    상기 프로그래머블 인덱스 비트는 소프트웨어에 의해 구현되는 마이크로컨트롤러.
  15. 제12항에 있어서,
    상기 프로그래머블 인덱스 비트는 플래그/스위치 방식에 의해 구현되는 마이크로컨트롤러.
KR1020087012887A 2003-10-23 2004-10-18 마이크로컨트롤러 명령어 셋트 KR100960095B1 (ko)

Applications Claiming Priority (4)

Application Number Priority Date Filing Date Title
US51391003P 2003-10-23 2003-10-23
US60/513,910 2003-10-23
US10/796,771 2004-03-09
US10/796,771 US7203818B2 (en) 1999-03-26 2004-03-09 Microcontroller instruction set

Related Parent Applications (1)

Application Number Title Priority Date Filing Date
KR1020067009992A Division KR100897857B1 (ko) 2003-10-23 2004-10-18 마이크로컨트롤러 명령어 셋트

Publications (2)

Publication Number Publication Date
KR20080053960A KR20080053960A (ko) 2008-06-16
KR100960095B1 true KR100960095B1 (ko) 2010-05-31

Family

ID=37610221

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020087012887A KR100960095B1 (ko) 2003-10-23 2004-10-18 마이크로컨트롤러 명령어 셋트

Country Status (3)

Country Link
KR (1) KR100960095B1 (ko)
CN (1) CN1898641B (ko)
TW (1) TWI339354B (ko)

Families Citing this family (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2008023427A1 (fr) * 2006-08-24 2008-02-28 Netcleus Systems Corporation Dispositif de traitement de tâche
US7996651B2 (en) * 2007-11-30 2011-08-09 Microchip Technology Incorporated Enhanced microprocessor or microcontroller
US8793426B2 (en) * 2009-02-11 2014-07-29 Microchip Technology Incorporated Microcontroller with linear memory access in a banked memory
US9747105B2 (en) * 2009-12-17 2017-08-29 Intel Corporation Method and apparatus for performing a shift and exclusive or operation in a single instruction
KR102514717B1 (ko) * 2016-10-24 2023-03-27 삼성전자주식회사 메모리 컨트롤러 및 이를 포함하는 메모리 시스템
TWI707272B (zh) * 2019-04-10 2020-10-11 瑞昱半導體股份有限公司 可執行指令的電子裝置以及指令執行方法

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20010043826A (ko) * 1999-03-26 2001-05-25 씨. 필립 채프맨 마이크로 컨트롤러 명령어 집합

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20010043826A (ko) * 1999-03-26 2001-05-25 씨. 필립 채프맨 마이크로 컨트롤러 명령어 집합

Also Published As

Publication number Publication date
CN1898641B (zh) 2015-03-25
KR20080053960A (ko) 2008-06-16
TW200530920A (en) 2005-09-16
CN1898641A (zh) 2007-01-17
TWI339354B (en) 2011-03-21

Similar Documents

Publication Publication Date Title
US7203818B2 (en) Microcontroller instruction set
EP0138419B1 (en) Central processing unit for a digital computer
US8539210B2 (en) Context switching with automatic saving of special function registers memory-mapped to all banks
EP0465248B1 (en) Pseudo-linear bank switching memory expansion
KR20000076310A (ko) 리스크 구조를 갖는 8 비트 마이크로콘트롤러
KR100465388B1 (ko) Risc 구조의 8비트 마이크로 제어기
EP2215544B1 (en) Enhanced microprocessor or microcontroller
JP2004086837A (ja) データ処理装置
EP0614137A2 (en) Data processing system providing an extensible register and method thereof
KR100960095B1 (ko) 마이크로컨트롤러 명령어 셋트
US4893235A (en) Central processing unit for a digital computer
KR100897857B1 (ko) 마이크로컨트롤러 명령어 셋트
US20050154868A1 (en) Apparatus and method for processing a sequence of jump instructions
JP2007234065A (ja) データ処理装置
FIELD MAXQ7665/MAXQ7666 USER’S GUIDE
CIRCUITS 51MX Architecture Reference Specification and Instruction Set
JP2007048317A (ja) データ処理装置

Legal Events

Date Code Title Description
A107 Divisional application of patent
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: 20130507

Year of fee payment: 4

FPAY Annual fee payment

Payment date: 20140512

Year of fee payment: 5

FPAY Annual fee payment

Payment date: 20150508

Year of fee payment: 6

FPAY Annual fee payment

Payment date: 20160510

Year of fee payment: 7

FPAY Annual fee payment

Payment date: 20170508

Year of fee payment: 8

FPAY Annual fee payment

Payment date: 20180510

Year of fee payment: 9

FPAY Annual fee payment

Payment date: 20190430

Year of fee payment: 10