KR20000076310A - 리스크 구조를 갖는 8 비트 마이크로콘트롤러 - Google Patents

리스크 구조를 갖는 8 비트 마이크로콘트롤러 Download PDF

Info

Publication number
KR20000076310A
KR20000076310A KR1019997008411A KR19997008411A KR20000076310A KR 20000076310 A KR20000076310 A KR 20000076310A KR 1019997008411 A KR1019997008411 A KR 1019997008411A KR 19997008411 A KR19997008411 A KR 19997008411A KR 20000076310 A KR20000076310 A KR 20000076310A
Authority
KR
South Korea
Prior art keywords
register
instruction
bit
control signal
operating
Prior art date
Application number
KR1019997008411A
Other languages
English (en)
Other versions
KR100462951B1 (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 KR20000076310A publication Critical patent/KR20000076310A/ko
Application granted granted Critical
Publication of KR100462951B1 publication Critical patent/KR100462951B1/ko

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/76Architectures of general purpose stored program computers
    • G06F15/78Architectures of general purpose stored program computers comprising a single central processing unit
    • G06F15/7807System on chip, i.e. computer system on a single chip; System in package, i.e. computer system on one or more chips in a single package
    • G06F15/7814Specially adapted for real time processing, e.g. comprising hardware timers

Landscapes

  • Engineering & Computer Science (AREA)
  • Computer Hardware Design (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Computing Systems (AREA)
  • Microelectronics & Electronic Packaging (AREA)
  • Executing Machine-Instructions (AREA)
  • Microcomputers (AREA)

Abstract

본 발명은 8 비트 리스크 기반의 마이크로콘트롤러(도 1)에 관한 것으로서, 이 마이크로콘트롤러는 범용 8 비트 ALU(22)에 부가하여 전용 산술 논리 유닛(ALU2)을 갖는 8 비트 레지스터 파일(20)을 포함한다. 이 레지스터 파일은 간접 어드레싱을 위한 논리적인 16 비트 레지스터를 제공하기 위해 한 쌍의 레지스터를 결합시키는 수단(16)을 더 포함한다. 상기 전용 ALU는 레지스터쌍에 대한 특정 산술 함수를 제공하는 16 비트 ALU로서, 범용 8 비트 ALU에 부과된 작업량을 덜어준다. 본 발명의 또 다른 특징은 훨씬 큰 어드레싱 영역을 제공하기 위해 논리적인 16 비트 레지스터의 내용(14')과 결합된 페이징 레지스터(RAMP x, y, z)를 포함한다는 점이다. 본 발명의 8 비트 마이크로콘트롤러의 또 다른 특징은 단일 명령어로 레지스터 파일 내의 임의의 비트 위치에 직접적인 판독 및 기록을 위한 수단(134)이 제공된다는 것이다. 이는 종래의 마이크로콘트롤러에 요구되는 다양한 로드, 쉬프트 및/또는 마스킹 연산의 수행의 필요성을 제거한다.

Description

리스크 구조를 갖는 8 비트 마이크로콘트롤러{EIGHT-BIT MICROCONTROLLER HAVING A RISC ARCHITECTURE}
현재의 초미크론(submicron) CMOS 기술은 복잡한 메모리 및 주변 로직(logic)을 구현하기에 충분한 실리콘 영역을 확보하면서, 복잡한 마이크로콘트롤러 구조를 칩(chip) 상에 집적시키는 것을 가능하게 한다. 첨단 32 비트 및 64 비트 리스크(RISC) 기계에 통상적으로 사용되는 설계 구조 및 방법론을 저가의 8 비트 마이크로콘트롤러 시스템에 효과적으로 사용 및 채용할 수 있다. 이러한 강력하면서도 비용 효율적인 마이크로콘트롤러가 있으면, 시스템의 총 집적도는 계속적으로 증가하게 된다. 또한, 그 하드웨어 구조에 보다 효과적인 프로그램을 실행시킬 수 있으며 더욱 많은 하드웨어 기능들을 집적시킬 수 있다.
최근 몇 년동안 다수의 리스크 구조가 출현하였다. 가장 주목할만한 것은 애플(Apple) 컴퓨터, IBM 및 모토롤라(Motorola)가 합작하여 개발한 파워 PC이다. 비록 리스크 프로세서의 특성을 정의하는 협약이 체결되지 않았지만, 상이한 여러 리스크 구조간에 공통된 특성은 다음과 같다.
(1) 대부분의 명령어는 하나의 사이클(cycle) 동안 수행됨.
(2) 분리되고 간소한 로드(load)/스토어(store) 명령어는 종종 2 개의 사이클 동안 수행됨.
(3) 명령어 디코딩(decoding)은 통상적으로 마이크로코딩(microcoding)이 아닌 하드와이어링(hardwiring)으로 이루어져, 더욱 빠른 실행 시간을 얻을 수 있음.
(4) 대부분의 명령어는 고정된 포맷(format)을 가져서, 명령어 디코딩이 간소함.
(5) 작은 명령어 세트 및 어드레싱 모드(addressing mode).
(6) 데이타 경로는 고도로 파이프라인(pipeline)화되어, 고도의 처리의 병행성을 제공함.
(7) 느린 시스템 램(RAM)과의 과도한 데이타 전송을 피하기 위한 대용량의 고속 레지스터 세트(레지스터 파일로도 알려짐).
여러 반도체 제조사에서 마이크로콘트롤러를 제조한다. 예컨대, 텍사스 인스트루먼츠(Texas Instruments)는 8 비트 마이크로콘트롤러인 TMS370Cx1x 시리즈를 제공한다. 이러한 마이크로콘트롤러가 리스크 구조를 채용한 것은 아니지만, 이는 램 또는 범용 레지스터 세트 중 하나로 사용될 수 있는 램(128 바이트 또는 256 바이트)을 제공한다. 모토롤라는 텍사스 인스트루먼츠의 디바이스(device)와 유사한 이중 목적의 램을 채용한 8 비트 마이크로콘트롤러인 MC6805 계열을 제공한다. 마이크로칩 테크놀로지(Microchip Technology)에서는 PIC16C5X 계열의 마이크로콘트롤러를 제공한다. 이러한 마이크로콘트롤러는 데이타 및 프로그램 명령어가 분리된 메모리 및 버스(bus)를 갖는 하바드 듀얼버스 구조(Havard dual-bus architecture)를 사용한다. 상기 PIC16C5X는 시스템 램과 공유하는 레지스터 파일을 채용한다. PIC16C5X는 하나의 명령어가 실행될 때 그 다음 명령어가 프로그램 메모리로부터 프리팻치(pre-fetch)되는 1 단 명령어 파이프라인을 사용한다. 램이 레지스터의 두 배이기 때문에, 실제 내부 레지스터 세트가 없게 된다. 또한, 제공되는 모든 메모리가 정적 램이기 때문에, 레지스터 동작이 관련되면 성능의 감소가 있게 된다.
전술한 바와 같이, 빠른 설계 주기는 마이크로콘트롤러의 설계에 있어 중요한 고려 사항이다. 마이크로콘트롤러의 설계에 있어서, 소프트웨어가 담당하는 역할의 중요성에 대해서는 의문의 여지가 없다. 따라서, 마이크로콘트롤러 설계의 유용성은 프로그래머(programmer)와 하드웨어 설계자(hardware designer)간의 인터페이스 사양(specification interface), 즉 마이크로콘트롤러의 명령어 세트와 직접적으로 관련된다. 명령어 세트는 임의의 계산 가능한 함수가 합당한 프로그램 공간 내에 구현 가능해야 한다는 점에서 완전해야 한다. 명령어 세트는 자주 사용되는 함수가 비교적 적은 명령어로 구현 가능해야 한다는 점에서 효과적이어야만 한다.
따라서, 응용 프로그램 개발자에게 완전하고 효과적인 명령어 세트를 제공하는 마이크로콘트롤러 설계를 제공하는 것이 바람직하다.
본 발명은 일반적으로 마이크로콘트롤러(microcontroller)에 관한 것으로서, 보다 구체적으로는 감소된 명령어 세트(reduced instruction set)를 실행시키는 마이크로콘트롤러에 관한 것이다.
도 1은 본 발명의 마이크로콘트롤러의 배치도.
도 2는 도 1에 도시된 레지스터 파일의 내부 표현을 도시한 도면.
도 3은 도 2에 도시된 레지스터 파일 내의 레지스터의 구조를 도시한 도면.
도 4는 도 3에 도시된 레지스터 기록 인에이블(enable) 회로의 상세도.
도 5a 및 도 5b는 도 4에 사용된 OR 게이트(gate) 구조를 도시한 도면.
도 6은 도 1에 도시된 상태 레지스터의 내부 구조를 도시한 도면.
도 7은 도 1에 도시된 범용 ALU의 내부 구조를 도시한 도면.
도 8a 및 도 8b는 도 7의 범용 ALU에 포함된 2 개의 ALU 서브유닛(subunit)을 도시한 도면.
도 9는 프로그램 카운터를 도시한 도면.
도 10은 본 발명에 따른 페이징(paging) 레지스터를 사용한 24 비트 논리 어드레스의 구성을 도시한 도면.
도 11은 왓치독 타이머(watchdog timer) 회로를 도시한 도면.
도 12는 도 10에 도시된 페이징 레지스터를 결합한 도 1의 마이크로콘트롤러를 도시한 도면.
도 13은 N 입력 인에이블 AND 게이트를 도시한 도면.
본 발명은 8 비트 리스크 구조를 갖는 마이크로콘트롤러이다. 8 비트 데이타 버스는 램 메모리 스토어, 레지스터 파일, 범용 8 비트 산술 논리 유닛(ALU) 및 상태 레지스터간의 데이타 경로를 제공한다. 마이크로콘트롤러는 램 스토어와 분리된 프로그램 메모리 스토어 및 데이타 버스와 분리된 프로그램 데이타 버스를 제공하는 하바드 구조를 구현한다.
레지스터 파일은 복수 개의 8 비트 레지스터를 포함한다. 레지스터 파일 내의 임의의 레지스터는 논리적인 16 비트 레지스터를 제공하도록 결합될 수 있다. 논리적인 16 비트 레지스터는 효과적인 어드레스 계산을 제공하며, 데이타 메모리 및 프로그램 메모리로의 간접 어드레스 포인터(pointer)로서 사용될 수 있다. 데이타 메모리이건 프로그램 메모리이건간에, 16 비트 어드레스 공간은 프로그램 어드레스 공간 및 데이타 어드레스 공간 둘 모두를 증가시킴으로써 마이크로콘트롤러의 융통성 및 효용성을 크게 증가시킨다. 본 발명의 바람직한 실시예에 있어서, 레지스터 파일은 3 개의 독립적인 논리적인 16 비트 레지스터로 엑세스(access)(즉, 판독/기록)될 수 있는 3 쌍의 8 비트 레지스터를 제공한다.
16 비트 어드레싱의 잇점을 더욱 강화하기 위해서, 레지스터 파일 전용의 제2 산술 논리 유닛을 사용한다. 이 제2 ALU는 16 비트 가산기를 포함하여, 논리적인 16 비트 레지스터에 대해 16 비트 산술 연산을 제공한다. 이 제2 ALU는 16 비트 결과를 논리적인 16 비트 레지스터로 다시 저장할 수 있다. 또한, 이 16 비트 결과는 어드레스의 역할을 할 수 있다. 따라서, 제2 ALU는 장치의 동작 속도를 감소시키는 범용의 8 비트 ALU의 사용 없이 효과적인 16 비트 어드레스 계산을 제공한다.
레지스터 파일에 제공된 16 비트 레지스터의 또 다른 확장은 8 비트 램 페이징 레지스터의 사용을 포함한다. 램 페이징 레지스터의 8 비트는 24 비트의 논리 어드레스를 제공하기 위해 16 비트의 논리적인 16 비트 레지스터와 논리적으로 연관되어 있다. 이 특징은 본질적으로 8 비트 설계의 구조인 마이크로콘트롤러에 대한 유래 없는 어드레싱 영역을 제공한다. 특히, 페이징 레지스터는 각각 페이징 레지스터에 의해 참조되는 64 킬로(64*1024) 바이트 램의 256 개의 페이지로서 메모리를 구성한다. 본 발명의 바람직한 실시예에는 3 개의 페이징 레지스터가 있는데, 각 3 개의 논리적인 16 비트 레지스터에 대한 페이징 레지스터는 레지스터 파일에 의해 제공된다.
본 발명의 레지스터 파일은 레지스터 파일을 포함하는 로직의 전파 지연과 동일한 지연의 레지스터 엑세스를 특징으로 한다. 이러한 조합된 지연이 한 클록 주기보다 훨씬 짧기 때문에, 레지스터 엑세스는 한 클록 싸이클 내에서 잘 일어난다. 또한, 본 발명은 단일 클록 주기 내에서 모든 동작의 수행이 가능한 범용 산술 및 논리 유닛(ALU)을 특징으로 한다. 따라서, 본 발명은 실질적으로 단일 클록 싸이클 내에서 모든 ALU 동작이 가능하다.
또한, 본 발명에 따르면, 레지스터 파일 내의 레지스터는 램의 어드레스 공간의 일부를 차지한다. 이 특징은 일반적으로 램 엑세스와 연관된 통상의 어드레싱 모드를 가능케하여, 레지스터들이 통상의 메모리 위치인것처럼 엑세스될 수 있도록 한다. 또한, 이러한 메모리 위치는 마이크로콘트롤러에 대해 고속 메모리로 동작할 것이다.
비트 스토어는 레지스터 파일의 레지스터간에 임의의 비트 위치에 또는 임의의 비트 위치로부터 하나의 비트의 데이타의 전송을 가능케한다. 바람직한 실시예에 있어서, 그 비트 스토어는 상태 레지스터 내에 위치한다. 이 비트 전송 특징은 다수의 또는 시간이 걸리는 레지스터 쉬프트(shift) 동작을 수행하지 않고도 레지스터 비트 위치의 직접적인 조작을 가능케한다. 많은 마이크로콘트롤러의 응용에 있어서 통상적인 바와 같이, 한 바이트 데이타를 포함하는 개별적인 비트들은 기타 비트와 관계 없이 중요성을 갖는다. 종래 마이크로콘트롤러의 명령어 세트는 레지스터의 왼쪽 및 오른쪽 쉬프트를 제공하기 위해 통상적으로 쉬프트 명령어를 포함한다. 따라서, 레지스터의 주어진 비트 위치의 비트에 대한 엑세스는 좌측 또는 우측 중 한 방향으로 비트를 쉬프트시킴으로서 달성된다. 이는 파괴적인 동작으로, 원래 데이타가 보존되기를 원한다면 레지스터의 내용을 저장해야 한다. 또한, 이 동작은 시간 소모적이고, 그 구현에 다수의 프로그램 명령어를 요한다. 본 발명의 비트 전송 동작은 임의의 비트 위치에 엑세스하기 위한 보다 시간 효율적이며 공간 소모가 덜한 수단을 제공한다.
캐리와의 비교(compare-with-carry) 명령어는 레지스터 파일을 포함하는 8 비트 레지스터의 16 비트 증대를 제공한다. 명령어 세트의 이 특징은 8 비트 환경에서 16 비트량과의 비교를 구현하는 효과적인 방법을 제공하여, 본 발명의 8 비트 마이크로콘트롤러의 계산 성능을 더욱 보강시킨다.
도 1을 참조하면, 본 발명의 마이크로콘트롤러(10)는 8 비트 데이타 버스(12) 구조로 설계되어 있다. 이 데이타 버스는 마이크로콘트롤러를 구성하는 다양한 소자에 대한 데이타 경로를 제공한다. 내부 램은 범용 데이타 스토어의 역할을 한다. 램과 분리된 8 비트 레지스터 파일(20)은 마이크로콘트롤러에 대한 한 세트의 고속 8 비트 메모리 스토어를 제공한다.
범용 산술 및 논리 유닛(ALU-1)(22)은 레지스터에 저장된 데이타에 대한 산술 연산을 제공하기 위해 레지스터 파일에 결합되어 있다. ALU-1의 출력은 8 비트 데이타 버스(12) 및 상태 레지스터(24) 둘 모두에 결합되어 있다. 상태 레지스터를 포함한 다양한 상태 비트는 ALU-1의 결과에 따라 세트(set)된다.
후술하는 바와 같이, 상태 레지스터(24)에 포함된 비트는 인터럽트 인에이블 플래그(interrupt enable flag), 하프캐리(half-carry) 플래그, 2의 보수 오버플로우(overflow) 플래그, 음의 플래그, 음의 플래그 및 2의 보수 플래그간의 XOR에 해당하는 부호 비트, 0 플래그 및 캐리 플래그로 구성된다. 상태 레지스터는 상태 비트에 대한 판독/기록 엑세스를 가능케 하도록 데이타 버스(12)에 결합되어 있다. 데이타 버스(12)에 결합된 추가적인 소자는 서브루틴(subroutine) 호출/복귀 및 인터럽트 핸들링(handling)에 사용되는 스택 포인터(stack pointer), 타이머, 인터럽트 회로, 타이밍 및 제어 회로, EEPROM 및 UART를 포함한다. 포트 드라이버(port driver)에 의해 구동되는 I/O 데이타 레지스터는 마이크로콘트롤러에 대한 I/O 경로(19)를 제공한다.
직접 주소 버스(16)는 프로그램 실행 중에 레지스터 파일 및 램 위치에 대한 직접 엑세스를 제공한다. 간접 주소 버스(14)는 간접 어드레싱을 제공한다. 간접 주소 버스(14)는 레지스터 파일로부터 어드레스를 수신하는 수단, 즉 어드레스를 램 또는 프로그램 카운터(28) 중 하나로 전송하기 위해 레지스터 파일을 간접 주소 버스(14)에 결합시키는 버스 인터페이스(14')를 포함한다.
마이크로콘트롤러(10)의 명령어 실행 소자는 프로그램 메모리에 결합된 프로그램 카운터(28)를 포함한다. 바람직한 실시예에 있어서, 프로그램 메모리는 프로그램 가능한 플래시(flash) 메모리이다. 프로그램 카운터에 의해 특정된 프로그램 명령어는 프로그램 메모리로부터 팻치(fetch)되어 명령어 레지스터로 공급된다. 명령어 레지스터로부터, 프로그램 명령어는 다양한 제어 신호를 발생시키는 명령어 디코더에 의해 디코딩된다. 그 제어 신호는 디코딩된 프로그램 명령어에 따른 동작을 수행하기 위해서, 제어 라인에 의해 마이크로콘트롤러(10)의 기타 소자로 전달된다. 명령어 실행 소자를 접속시키는 버스는 프로그램 버스라고 통칭된다. 데이타 스토어로부터 분리된 프로그램 메모리 스토어의 배열 및 데이타 버스(12)로부터 분리된 프로그램 버스의 사용은 통상적으로 하바드 구조라고 지칭된다.
전술한 바와 같이, 레지스터 파일은 복수 개의 8 비트 레지스터로 구성된다. 본 발명의 바람직한 실시예는 32 개의 8 비트 레지스터를 사용한다. 그러나, 마이크로콘트롤러는 레지스터 파일 내의 레지스터가 더 많거나 더 적더라도 동등하게 잘 동작할 것이라는 것을 주목하기 바란다. 범용 산술 및 논리 유닛(ALU-1)은 레지스터 파일로부터 선택된 레지스터간의 8 비트 산술 연산을 제공하는 8 비트 연산기이다. ALU-1의 출력은 데이타 버스(12)를 통해 레지스터 파일 내의 레지스터로 피드백(feed back)될 수 있다. 아래에 더욱 상세하게 설명하는 바와 같이, 일부 8 비트 레지스터는 논리적인 16 비트 레지스터를 제공하기 위해 쌍으로 결합될 수 있다. 바람직한 실시예에 있어서, 3 쌍의 8 비트 레지스터는 도 1에 도시된 바와 같이 3 개의 논리적인 16 비트 레지스터(X, Y, Z)를 제공한다.
도 2를 참조하면, 본 발명의 레지스터 파일은 32 개의 8 비트 레지스터(R0 내지 R31)를 제공하는 레지스터 회로(100)를 포함한다. 이 레지스터 파일은 3 개의 출력(A, B, C) 및 3 개의 입력(D_BUS, D_ALU2H, D_ALU2L)을 포함한다. 후술하는 바와 같이, 상기 레지스터 회로는 마지막 6 개의 레지스터(R26 내지 R31)를 3 쌍의 논리적인 16 비트 레지스터[R26/R26(X), R29/R28(Y), R31/R30(Z)]로 제공할 수 있다. 2 개의 16 라인 데이타 버스(102, 104)로 구성된 공통 버스 인터페이스는 16 비트 레지스터에 대해 각각 데이타 입력 및 데이타 출력을 제공한다.
데이타 출력 버스(104)는 B 및 A 출력, 즉 16 비트값의 상위 바이트를 제공하는 B 출력 및 하위 바이트를 제공하는 A 출력으로 형성된다. 데이타 입력 버스(102)는 레지스터 파일에 대한 D_ALU2L(하위 바이트) 및 D_ALU2H(상위 바이트) 입력으로 분할된다.
레지스터 파일에 의해 제공된 16 비트 레지스터는 램 및 프로그램 공간 어드레싱에 대한 간접 주소 레지스터 포인터로 사용된다. 메모리 엑세스를 용이하게 하기 위해서, 어드레스 계산에 대한 후증가(post-increment) 및 선감소(pre-decrement)와 같은 방법을 사용한다. 16 비트 레지스터에 대한 16 비트 산술 계산을 위해 ALU-1을 사용하는 것이 가능하지만, ALU-1이 8 비트로 설계되었기 때문에 이러한 연산은 매우 비효율적일 것이다.
따라서, 도 2에 도시된 레지스터 파일은 논리적인 16 비트 레지스터에 수반되는 16 비트 계산을 용이하게 하기 위해 레지스터 파일 전용의 제2 산술 및 논리 유닛(ALU-2)을 포함한다. 산술 및 논리 유닛(ALU-2)은 간접 주소 포인터가 통상적으로 요구되는 특정 연산을 제공하도록 주문 제작된 16 비트 설계이다. ALU-2는 레지스터 파일의 데이타 출력 버스(104)에 의해 제공된 제1 입력을 갖는다. ALU-2는 셀렉터(selector)(110)에 의해 제공되는 제2 입력을 갖는다. 셀렉터(110)는 -1의 수치, +1의 수치 및 상수 K_IN 중 하나를 선택한다. ALU-2의 출력은 레지스터의 내용을 갱신하도록 데이타 입력 버스(102) 상의 X, Y, Z 레지스터로 피드백된다. 다중화기(mux)(114)는 레지스터 파일의 버스 인터페이스(14')에 접속되어 있다. 다중화기(114)의 하나의 입력은 ALU-2의 출력에 접속되어 있고, 다중화기의 제2 입력은 데이타 출력 버스(104)에 접속되어 있다. 이 배열은 다중화기(114)가 ALU-2 또는 레지스터 회로(100) 중 어느 하나로부터 데이타를 선택적으로 출력하도록 한다.
아래의 제어 신호는 전술한 레지스터 파일의 형태의 동작에 관련된다. 그 제어 신호는 V_SEL, ALU2_OP 및 ADDR_SEL을 포함한다. 이 신호는 명령어 디코더로부터 비롯되는 다양한 제어 라인에 의해 전송된다. 이 제어 신호의 관점에서의 레지스터 파일의 동작은 본 발명의 마이크로콘트롤러의 프로그램 명령어를 참조하여 후술될 것이다.
도 2에 도시된 레지스터 회로(100)의 내부 구조는 도 3의 로직 다이어그램에 도시되어 있다. 본 발명의 하나의 실시예에 있어서, 32 개의 레지스터(R0 내지 R31)가 제공되며, 각 레지스터는 한 세트의 8 비트 출력 라인(121) 및 한 세트의 8 비트 입력 라인(123)을 갖는다. 제공된 실제 레지스터의 수는 본 발명에 있어 중요하지 않다.
각 레지스터는 도 3의 각 플립플롭 내에 "x8"이란 참조 번호로 표시된 8 개의 D 플립플롭(flip-flop)의 뱅크(bank)로 구성되어 있다. 레지스터의 출력 라인(121)은 레지스터를 포함하는 각 8 개의 플립플롭의 출력(Q)으로 구성된다. 이와 유사하게, 레지스터의 입력 라인(123)은 레지스터를 포함하는 각 8 개의 플립플롭의 입력(D)로 구성된다.
도 3에 도시된 바와 같이, 짝수 번호의 레지스터(R0, R2, ... R30)는 8 비트의 4:1 다중화기(130)의 출력에 접속된 공통 입력을 갖는다. 이러한 방식으로, 홀수 번호의 레지스터(R1, R3, ... R31)는 홀수 번호의 레지스터와 분리되고 8 비트의 4:1 다중화기(132)의 출력에 접속된 공통 입력을 갖는다. 상기 4:1 다중화기(130)는 짝수 번호의 레지스터에 대한 입력을 제공하기 위해 4 개의 8 비트 입력(D_BUS, K_IN, D_BUS[n], D_ALU2L) 중 하나를 선택한다. 상기 4:1 다중화기(132)는 홀수 번호의 레지스터에 대한 입력을 제공하기 위해 4 개의 8 비트 입력 중 하나를 선택한다. 선택 신호(D_SEL)는 두 다중화기 모두에 접속되어 있고, 각 다중화기(130, 132)의 제1, 제2, 제3 또는 제4 입력 중 하나를 선택한다. 다중화기(130)의 제1 입력(D_BUS)은 8 비트 데이타 버스로부터 얻어진다. 다중화기(130)의 제2 입력(K_IN)은 본 발명의 마이크로콘트롤러의 명령어 세트의 설명과 함께 후술하는 바와 같이 어떤 명령어의 오퍼런드(operand)로부터 얻어진 8 비트 상수이다. 다중화기(130)의 제4 입력(D_ALU2L)은 ALU-2의 16 비트 출력의 하위 바이트이다(도 2). 다중화기(130)로의 입력 D_BUS[n]은 데이타 버스(12)로부터의 비트 라인 중 하나를 지칭한다. 이 비트 라인 n은 다중화기(130)로의 제3 8 비트 입력으로서 8 번 복제된다. 이 D_BUS[n] 입력은 후술하는 BLD 명령어와 함께 사용된다.
다중화기(130)의 출력은 다중화기(132)의 제1, 제2 및 제3 입력으로 복제된다. 다중화기(132)의 제4 입력(D_ALU2H)은 ALU-2의 16 비트의 상위 바이트이다. 따라서, D_SEL이 제1, 제2 또는 제3 다중화기 입력을 선택할 때, 짝수 및 홀수 번호의 레지스터는 동일한 입력, 즉 D_BUS, K_IN 또는 D_BUS[n]으로 나타난다. D_SEL이 제4 다중화기 입력을 선택할 때, 짝수 번호의 레지스터의 입력은 D_ALU2L 입력으로 나타나고, 홀수 번호의 레지스터의 입력은 D_ALU2H 입력으로 나타난다. D_ALU2L 및 D_ALU2H의 중요성은 X, Y 및 Z 레지스터와 관련된 설명에서 명백해질 것이다.
각 레지스터(R0 내지 R31)에 해당하는 8 비트 플립플롭의 뱅크는 D 리드(lead)에 입력을 보내고 플립플롭의 클록 라인(CK)을 활성화시킴으로써 기록된다. 본 발명의 레지스터 구조의 한 장점은 레지스터로의 기록에의 융통성이다. 동작 모드에 따라서, 16 비트 데이타는 한 워드의 데이타로서 레지스터 쌍에 기록될 수 있거나, 레지스터의 한 특정 비트는 한 비트 데이타로서 기록될 수 있다. 이 융통성은 올바른 레지스터 및 비트가 기록되도록 적절한 CK 신호를 활성화시키는 셀렉터 제어 회로(134)에 의해 제공된다. R_SEL 및 WE_R 제어 라인은 함께 작용하여 선택된 레지스터에 해당하는 8 개의 플립플롭을 기록한다. WE_XH, WE_XL, WE_YH, WE_YL, WE_ZH 및 WE_ZL 제어 라인은 16 비트 X, Y 및 Z 레지스터로의 기록을 인에이블시킨다. R_SEL, BIT_SEL 및 WE_BIT 제어 라인은 함께 작용하여 선택된 레지스터의 선택된 비트에 한 비트를 기록한다.
레지스터 내용은 다중화기(120, 122, 124)를 통해 제공되며, 그 다중화기의 출력은 각각 도 2에 도시된 A, B 및 C 출력이다. 이 각 출력 다중화기는 8 비트의 32:1 다중화기로 32 개의 8 비트 입력 중 하나를 선택한다. 각 32 개의 레지스터의 출력은 각 다중화기(120, 122, 124)의 해당 입력에 접속되어 있다. 제어 라인(R_OUTA, R_OUTB, R_OUTC)은 원하는 레지스터의 내용을 출력하기 위해 다중화기를 동작시킨다.
다중화기(120)의 8 비트 출력은 8:1 다중화기(136)에 제공되며, BIT_SEL 제어 라인은 8 비트 중 하나를 선택한다. 상기 다중화기(136) 출력은 비트 테스트 회로(138)에 접속되며, 이 테스트 회로는 선택된 비트가 소거 또는 세트되었는 지를 테스트하기 위해 BTST_CLR 및 BTST_SET 제어 라인에 의해 동작한다. 비트 테스트 회로의 출력은 BR_SKP 제어 라인을 구동시킨다.
본 발명에 따른 마이크로콘트롤러는 전술한 8 비트 레지스터에 부가하여 논리적인 16 비트 레지스터를 제공한다. 이는 레지스터 파일 내의 레지스터의 쌍을 취하여 이를 단일의 레지스터로 취급함으로써 달성된다. 3 개의 16 비트 레지스터(X, Y, Z)는 이 방법으로 제공된다. X 레지스터는 R27/R26의 레지스터 쌍으로 구성되고, Y 레지스터는 R29/R28의 레지스터 쌍으로 구성되며, Z 레지스터는 R31/R30의 레지스터 쌍으로 구성된다.
이제 도 3의 셀렉터 제어 회로(134)를 더욱 상세하게 도시하고 있는 도 4를 살펴본다. 디코더 유닛(140)은 R_SEL의 디코딩에 응답하여 32 개의 출력 중 임의의 하나를 활성화시키는 1:32 디코더이다. 이 디코더의 각 출력 라인은 레지스터에 해당한다. 그 출력은 2 개의 인에이블링(enabling) AND 게이트(142, 144)로 제공된다. 도 13은 한 비트의 인에이블링 입력(A), N 비트의 입력(B) 및 N 비트의 출력을 갖는 인에이블링 AND 게이트(50)의 구조를 상세히 도시하고 있다. 도 13에 확대된 상세도는 이러한 게이트가 N 개의 2 입력 AND 게이트로 구성된다는 것을 보여준다. 각 N 개의 AND 게이트의 제1 입력은 인에이블링 입력(A)을 수신하고, 그 AND 게이트의 제2 입력은 B 입력의 N 비트 중 하나를 수신한다. 따라서, 그 게이트(50)는 인에이블링 입력(A)이 활성화되었을 때 B 입력이 출력으로 통과되도록 한다. 또는, 인에이블링 게이트(142)의 모든 N 개의 출력이 로우(LOW)이다. 도 4를 참조하면, 인에이블링 게이트(142)는 WE_R에 의해 인에이블되고, 인에이블링 게이트(144)는 WE_BIT에 의해 인에이블된다.
계속해서, 인에이블링 게이트(142)의 각 32 개의 출력은 합성 OR 게이트(150 내지 181)의 입력에 접속되어 있다. 인에이블링 게이트(144)의 각 32 개의 출력은 1:8 다중화기(M0 내지 M31)에 접속되어 있다. 각 다중화기(M0 내지 M31)의 8 개의 출력은 합성 OR 게이트(150 내지 181)의 또 다른 입력에 접속되어 있다. 각 합성 OR 게이트는 레지스터(R0 내지 R31)와 연관되어 있다. 도 5a는 합성 OR 게이트(150)의 구조를 도시하고 있다. 이 합성 OR 게이트(150)는 8 개의 분리된 2 입력 OR 게이트(150A 내지 105H)로 구성된다. 한 비트의 입력 라인(190)은 인에이블링 게이트(142)의 출력으로부터 비롯되고, 각 OR 게이트(150A 내지 150H)의 제1 입력에 접속되어 있다. 8 비트 입력 라인(191)은 다중화기(M0)의 출력으로부터 비롯된다. 각 입력 라인(191)은 OR 게이트의 제2 입력에 접속되어 있다. 도 5a에 도시된 바와 같이, OR 게이트는 레지스터(R0)의 하나의 플립플롭의 CK 라인(CK0 내지 CK7)에 접속되어 있다. 이 구성은 합성 OR 게이트(150 내지 175)에 적용된다.
도 4로 복귀하면, 합성 OR 게이트의 일부, 즉 게이트(176 내지 181)는 제3 입력을 가진다는 것을 주의하기 바란다. 이 제3 입력은 X, Y, Z 레지스터의 기록과 관련된 WE_XL, WE_XH, WE_YL, WE_YH, WE_ZL 및 WE_ZH 제어 라인 중 하나이다. 합성 OR 게이트(176)를 상세히 도시한 도 5b에 의해 알 수 있는 바와 같이, 추가적인 한 비트 제어 라인(194)은 각 OR 게이트(176A 내지 176H)의 제3 입력에 접속되어 있다. 이 구성은 합성 OR 게이트(176 내지 181)에 적용된다.
전술한 바와 같이, R_SEL 및 WE_R 제어 라인은 함께 작용하여 8 비트 데이타를 선택된 레지스터에 기록한다. 이는 그 데이타를 그 레지스터에 해당하는 플립플롭에 클록을 가함으로써 달성된다. 예컨대, 데이타를 R0 레지스터에 기록하는 것을 생각해 보자. 5 비트 제어 라인(R_SEL)은 R0 레지스터를 선택하도록 세트된다. 디코더(140)는 그 라인을 디코딩하여 R0 레지스터에 해당하는 출력 라인을 활성화시키고, 그 R0 레지스터는 인에이블링 게이트(142)를 통해 OR 게이트(150)의 입력 라인(190)에 접속된다. 도 5a에 도시된 바와 같이, 입력 라인(190)은 R0 레지스터의 모든 플립플롭에 동시에 클록을 가하여, 플립플롭의 D 입력에 나타난 데이타를 입력한다(도 3).
R_SEL, WE_BIT 및 BIT_SEL 제어 라인을 설명하기 전에, 상태 레지스터(24)를 설명하는 도 6을 살펴보자. 이는 본 발명에 사용된 각 상태 비트에 대한 8 개의 플립플롭, 인터럽트 인에이블 플래그(I), 비트 전송 플래그(T), 하프캐리 플래그(H), 2의 보수 오버플로우 플래그(V), 음의 플래그(N), 음의 플래그 및 2의 보수 플래그간의 XOR에 해당하는 부호 비트(S), 0의 플래그(Z) 및 캐리 플래그(C)로 구성된다. I 플립플롭에 대한 입력은 F_SET 제어 라인에 직접 접속되어 있다. T 플립플롭에 대한 입력은 OR 게이트를 통해 F_SET 제어 라인 및 AND 게이트(228)의 출력에 접속되어 있다. 나머지 플립플롭에 대한 입력은 그 각각의 OR 게이트를 통해 F_SET 제어 라인 및 인에이블링 AND 게이트(230)의 8 개의 출력에 접속되어 있다(도 13).
8:1 다중화기(202)는 모든 상태 레지스터 플래그의 출력을 수신하고, F_OUT 제어 라인의 셋팅값에 따라 플래그 중 선택된 하나를 출력한다. 다중화기(202)의 출력은 BR_SKP 제어 신호를 생성하기 위해 비트 테스트 수단(208)에 제공된다. 또한, 상기 다중화기(202)의 출력은 AND 게이트(218)로 제공되고, 이 AND 게이트의 출력은 데이타 버스(D_BUS[n])의 비트 N에 접속된다. 따라서, H, S, V, N, Z 및 C 플래그는 후술하는 범용 ALU(22)로 제공된다.
각 플립플롭은 그 해당 플립플롭을 리셋시킴으로써 특정 플래그를 용이하게 소거시키는 것을 효과적으로 가능하게 하는 리셋(R)을 포함한다. 각 리셋은 인에이블링 AND 게이트(224)의 8 개의 출력 중 하나에 접속되어 있다. 이 인에이블링 AND 게이트(224)는 T_SEL 제어 라인에 의해 인에이블된다.
I 플립플롭의 클록 입력은 인에이블링 AND 게이트(226)의 출력에 접속되어 있다. T 플립플롭의 클록 입력은 OR 게이트를 통해 인에이블링 게이트(226) 및 T_SEL 제어 라인에 접속되어 있다. 나머지 플립플롭은 그 각각의 OR 게이트를 통해 인에이블링 게이트(226) 및 F_SETALU 제어 라인에 접속되어 있다.
다중화기(210)는 8 비트 버스로부터 입력(D_BUS)을 수신한다. BIT_SEL 제어 라인은 8 비트 중 하나를 AND 게이트(228)로 출력하며, 그 출력은 T 플립플롭에 제공된다. T_SEL 제어 라인은 AND 게이트(228)에 대한 인에이블링 입력의 역할을 한다.
인에이블링 AND 게이트(230)는 범용 ALU(22)로부터의 입력을 수신하고, F_SETALU 제어 라인에 의해 인에이블된다. 이 소자는 ALU 동작 중에 ALU로부터 수신된 상태 플래그를 갱신시킨다. 이는 ALU(22)의 설명과 관련하여 더 설명될 것이다.
각 디코더(204, 206)는 그 8 개의 출력 중 하나를 활성화시키기 위해 F_SEL 제어 라인을 디코딩하며, 그 각 8 개의 출력은 인에이블링 AND 게이트(224, 226)로 제공된다. F_CLR 제어 라인은 게이트(224)를 인에이블시킨다. F_SET 제어 라인은 게이트(226)를 인에이블시킨다.
비트 테스트 수단(208)은 OR 게이트(216)로 입력되는 한 쌍의 AND 게이트(212, 214)로 구성된다. 게이트(214)는 다중화기(202)에 접속되어 있는 반전 입력을 갖는다. 게이트(214)로의 또 다른 입력은 FTST_CLR 제어 라인에 접속되어 있다. 게이트(212)로의 입력은 다중화기(202)의 출력 및 FTST_SET 제어 라인이다.
또한, 다중화기(202)의 출력은 T_OUT 제어 라인에 의해 인에이블되는 AND 게이트(218)에 접속되어 있다. AND 게이트(218)의 출력은 8 비트 데이타 버스의 비트라인 n에 접속되어 있다.
이제부터는 본 발명의 8 비트 마이크로콘트롤러의 또 다른 특징에 대해서 설명한다. 전술한 설명을 상기하면, 레지스터의 임의의 비트 위치를 로드 또는 스토어하는 종래 기술은 레지스터 쉬프트 및/또는 레지스터 마스킹(masking) 연산을 요구하여, 코드가 비효율적이고 코드 크기가 증가된다. 또한, 이는 파괴적인 연산으로 본래 데이타를 보존하려면 레지스터의 내용이 저장되어야 한다.
도 3 내지 도 6에 도시된 R_SEL, WE_BIT 및 BIT_SEL 제어 라인을 살펴보자. 이 제어 라인은 단일 비트를 선택된 레지스터의 특정 비트 위치에 기록하는 것을 가능케하기 위해서 레지스터 회로(100)(도 3)를 동작시킨다. 기록될 비트는 상태 레지스터(24)로부터 얻어지고 D_BUS[n]을 통해 제공된다. 이는 다중화기(202)에서 T 플립플롭의 출력을 선택하도록 F_OUT을 설정하고(도 6) AND 게이트(218)가 그 출력을 데이타 버스로 유도하도록 하기 위해 T_OUT을 활성화시킴으로써 달성된다. 계속해서, 그 비트는 D_SEL이 다중화기(130)의 D_BUS[n]을 선택함으로써 다중화기(130) 및 다중화기(132)의 각 8 개의 출력 라인에서 유효해진다. 이는 그 비트가 모든 레지스터의 모든 플립플롭의 입력에 기록되도록 한다. 예컨대, 그 비트가 R26 레지스터의 제2 비트 위치에 기록되는 경우를 생각해 보자. R26 레지스터를 선택하도록 세트되는 R_SEL 제어 라인은 해당 출력 라인을 활성화시키기 위해서 디코더(140)에 의해 디코딩된다(도 4). WE_BIT 제어 라인은 디코딩된 출력을 R26 레지스터에 해당하는 1:8 다중화기, 즉 M26 다중화기의 입력에 전달하도록 하기 위해서 활성화된다. 제2 비트 위치를 선택하도록 세트되는 BIT_SEL 제어 라인은 그 한 비트 입력을 8 개의 출력 중 제2 출력으로 전달하기 위해 M26 다중화기를 포함하는 각 다중화기를 동작시킨다. M26 다중화기로부터 계속하여, 그 8 개의 출력 라인은 도 5b에 도시된 합성 OR 게이트(176)의 입력(193)의 기능을 한다. 그 입력(193)의 각 라인(0 내지 7)은 OR 게이트(176A 내지 176H)를 통과하여 특정 플립플롭으로 전달된다. 그러나, 단지 하나의 라인만이 활성화되기 때문에, 라인(1)의 경우, 선택된 레지스터의 단지 하나의 플립플롭만이 그 비트를 수신하도록 클록이 가해진다.
이제 도 7에 도시된 본 발명의 범용 ALU(22)를 설명한다. 이 ALU(22)는 각각 특정 연산을 수행할 수 있는 복수 개의 연산 서브유닛(OP1 내지 OPn)으로 구성된다. 범용 ALU에 의해 수행되는 통상의 연산은 각각 분리된 서브유닛에 의해 수행되는 가산, 논리 연산 및 쉬프트 연산을 포함한다. ALU로의 입력, 즉 A, B, K_IN 및 상태 레지스터(24)로부터의 플래그는 각 서브유닛에 제공된다. 이 서브유닛은 해당 연산을 동시에 수행하고, 8 비트 결과(22C) 및 6 비트 상태 결과(22D)를 발생시킨다. 이 병렬 구조는 임의의 ALU 연산이 단일 클록 싸이클 내에 발생하도록 함으로써 직렬 구조에 비해 보다 빠른 실행 시간을 제공한다.
계속해서, 서브유닛의 결과(22C)는 셀렉터(22A)로 제공된다. 이 셀렉터는 연산 서브유닛 중 하나의 결과를 데이타 버스(12)에 출력하기 위해 ALU1_OP에 의해 제어된다. 또한, 상기 상태 결과(22D)는 유사한 방법으로 취급되어, 각 상태 결과는 상태 레지스터(24)가 선택된 연산에 해당하는 상태 결과를 수신하도록 ALU1_OP에 의해 제어된다.
또한, ALU(22)는 XOR 게이트(23) 및 9 입력 AND 게이트(24)를 포함한다. XOR 게이트는 A 입력 및 B 입력의 각 8 개의 비트간에 비트 단위 XOR 연산을 수행한다. XOR 연산의 8 개의 결과는 AND 게이트의 8 개의 반전 입력에 제공된다. A=B일 때, XOR 연산의 모든 8 개의 결과는 논리 "0"가 될 것이다. 이는 CPSE 제어 라인이 활성화되었을 때 AND 게이트의 출력을 논리 "1"로 만들어서, BR_SKP 제어 라인을 활성화시킨다.
전술한 바와 같이, 각 서브유닛(OPn)은 결과(22C)를 제공하도록 A, B 및/또는 K_IN 입력에 의해 동작되고 적절한 상태 플래그를 갱신하는 특정 산술 및 논리 연산을 제공한다. 도 8a 및 도 8b는 두 가지 대표적인 연산 서브유닛을 도시하고 있다. 도 8a는 A 입력 및 K_IN을 통해 제공되는 즉시 상수의 논리적인 AND를 구현하고 있고, 도 8b는 A 입력의 논리적인 왼쪽 쉬프트를 구현하고 있다.
이제 도 9의 프로그램 시퀀싱(sequencing)을 설명한다. 명령어는 프로그램 메모리(25)로부터 팻치되어 명령어 레지스터(21)에 저장된다. 명령어 디코더(23)는 팻치된 명령어의 디코딩하고, 그 명령어를 실행시키기 위해서 제어 라인에 의해 마이크로콘트롤러의 기타 부분으로 전송되는 제어 신호를 생성하는 로직을 포함한다. 그 명령어 디코더는 서브루틴 명령어 및 인터럽트에 응답하여 스택 포인터를 증가 또는 감소시키기 위해 SP_INC 및 SP_DEC를 활성화시킨다.
이와 동시에, 명령어 디코더(23)는 그 다음 명령어를 팻치하기 위해 프로그램 카운터(28)를 "증가"시키기 위한 신호도 생성한다. 이 신호는 =q, -q, +q, +3, +2 및 +1을 포함한다. "=q" 신호는 절대 주소 q에 대한 브랜치(branch)를 특정하는 명령어에 사용된다. "+q" 및 "-q" 신호는 q만큼의 상대적인 포워드(forward) 및 백워드(backward) 브랜치를 특정하는 명령어에 사용된다. 이 각 경우에 있어서, q의 값은 명령어에 포함된다. "+3" 및 "+2" 신호는 스킵(skip) 명령어에 사용되며, 명령어의 크기에 따라 스킵될 메모리 위치의 수가 스킵된다. "+1" 신호는 단순히 다음 명령어로 프로그램 카운터를 증가시킨다. 또한, 이 프로그램 카운터는 다음 명령어의 주소원으로서 X, Y 또는 Z 레지스터 중 하나를 사용하는 명령어에 대한 레지스터 파일(20)로부터의 입력을 수신한다. 또한, 프로그램 카운터는 다음 명령어의 또 다른 주소원으로서 램(27)으로부터의 입력을 수신하며, 램 상의 위치는 X, Y 및 Z 레지스터 중 하나 또는 스택 포인터에 의해 특정된다.
통상적으로, 명령어 디코더는 현재 명령어의 실행 중에 "+1" 신호를 발생시켜 프로그램 카운터(28) 및 프로그램 플래시가 바로 그 다음 명령어를 미리 팻치하도록 한다. 그러나, BR_SKP 제어 라인이 활성화되어 있을 때, 프로그램 카운터(28) 및 명령어 레지스터(21)는 미리 팻치된 명령어를 버리고, 새로운 어드레스를 계산하여 새로운 명령어를 팻치하도록 된다. 보다 구체적인 사항은 특정 브랜치 명령어의 설명과 관련하여 설명한다.
본 발명의 8 비트 마이크로콘트롤러의 또 다른 특징은 도 10에 도시된 바와 같은 강화된 주소 지정 능력이다. 도 10에는 레지스터 파일 외부의 3 개의 추가적인 레지스터, 즉 램 페이징 레지스터(RAMPX, RAMPY, RAMPZ)가 도시되어 있다. 이 램 페이징 레지스터는 종래의 8 비트 마이크로콘트롤러에 비해 상당히 증가된 어드레싱 영역을 제공하기 위해 해당 논리 16 비트 레지스터(X, Y, Z)와 함께 동작한다. 이 개시된 실시예에 있어서, 램 페이징 레지스터는 8 비트 레지스터이다. 그러나, 이는 중요한 사항이 아니며, 상이한 비트 길이를 갖는 레지스터로도 본 발명을 용이하게 동작시킬 수 있다는 것을 알 수 있을 것이다.
도 10을 참조하면, 어드레스가 형성되는 방법이 도시되어 있다. 각 램 페이징 레지스터는 해당 16 비트 레지스터와 연관되어 있다. 예컨대, 램 페이징 레지스터(RMAPX)의 8 비트는 24 비트의 어드레스를 형성하기 위해 X 레지스터의 16 비트와 연관되어 있다. 바람직한 실시예에 있어서, RAMPX의 8 비트는 논리적인 24 비트의 어드레스의 상위 비트(X[23...16])를 제공하고, X 레지스터의 16 비트는 논리적인 24 비트의 어드레스의 하위 비트(X[15...0])를 제공한다. 이 배열에 의해 생성된 메모리 모델은 총 256 개의 페이지에 대해 8 비트 램 페이징 레지스터에 의해 엑세스되는 64 킬로 바이트(64 * 1024)의 페이지의 세트이다.
이제 도 12의 본 발명의 개시된 실시예 내의 램 페이징 레지스터의 한 실시예를 설명한다. 각 램 페이징 레지스터(RAMPX, RAMPY, RAMPZ)는 프로그램 실행 중에 8 비트의 페이지 레퍼런스(reference)를 수신하기 위해 8 비트 데이타 버스(12)에 접속되어 있다. 셀렉터(11)(예컨대, 3:1 다중화기)는 각 램 페이징 레지스터로부터 8 비트를 수신하고, 램 페이징 레지스터 중 선택된 하나의 8 비트를 셀렉터의 출력으로 전송한다. 레지스터 파일(20)의 버스 인터페이스(14')의 16 비트는 간접 어드레스 버스(14)에 의해 전달되는 24 비트의 어드레스를 형성하기 위해 셀렉터(11)로부터의 8 비트와 연관되어 있다.
본 발명의 확장된 24 비트 어드레싱은 24 비트의 주소로 16 M(16 * 1024 * 1024)의 램의 주소 지정이 가능하므로 외부 램(도시되지 않음)의 사용을 가능하게 한다. 마이크로콘트롤러 및 외부 램(도시되지 않음)간의 데이타 엑세스를 위해 외부 24 비트 어드레스 버스(17) 및 8 비트 데이타 버스(15)가 포함되어 있다. 본 발명에 따르면, 레지스터 파일(20), I/O 데이타 레지스터(I/O 공간), 내부 램 및 외부 램이 동일한 데이타 어드레스 공간을 점유한다. 레지스터 파일은 I/O 공간에 할당된 주소에 뒤이은 제1 32 개의 어드레스 위치 및 램의 크기인 N 개의 어드레스 위치를 점유하는 내부 램을 차지한다. 나머지 어드레스 공간은 외부 램에 의해 제공된다. 따라서, 00 내지 (N-1)의 어드레스 영역은 내부 메모리(레지스터 파일, I/O 공간, 램)의 메모리 위치로 매핑(mapping)되며, N 내지 (16M - 1)의 나머지 어드레스 영역은 외부 램의 메모리 위치로 매핑된다. 예컨대, 내부 메모리의 용량이 총 64 킬로 바이트이면, 내부 어드레스 영역은 $00 내지 $FFFF("$"는 16 진수를 나타냄)이고, 외부 램의 어드레스 영역은 $10000 내지 $FFFFFF가 된다. 내부 메모리의 용량은 본 발명의 유용성 또는 동작 가능성 및 허용 실리콘 영역, 소자의 기하학적 형태 및 디자인 규칙과 같은 디자인 기준에 따른 실제 메모리 용량에 영향을 미침이 없이 가변적이다.
어드레스를 내부 어드레스 버스(14) 또는 외부 어드레스 버스(17)로 전송하는 데 제2 셀렉터(13)를 사용하여, 내부 메모리 및 외부 메모리를 정확하게 엑세스할 수 있다. 바람직한 실시예에 있어서, 상기 셀렉터(13)는 단일 다중화기 입력이 그 2 개의 출력 중 하나로 전송되는 1:2 다중화기이다. 여기서, 단일 입력은 셀렉터(11)로부터의 24 비트 어드레스이다. 셀렉터(13)의 출력 중 하나는 어드레스 버스(14)에 접속되어 있으며, 또 다른 출력은 외부 어드레스 버스(17)에 접속되어 있다. 내부 메모리의 어드레스 영역 내의 어드레스를 검출하면, 셀렉터(13)는 그 입력을 어드레스 버스(14)로 전송하게 된다. 24 비트 어드레스 중 단지 하위 16 비트(15...0)만이 어드레스 버스(14)로 전송된다. 역으로, 외부 어드레스 영역 내의 어드레스를 검출하면, 셀렉터(13)는 그 입력을 외부 어드레스 버스(17)로 전송할 것이다. 일반적인 설계자가 설계할 수 있는 어떠한 검출 방법도 가능하다. 예컨대, 24 비트의 어드레스 중 상위 8 비트(23...0)를 모두 OR 연산하여, 그 결과로 셀렉터(13)를 제어할 수 있다. OR 연산의 결과 어드레스가 내부 메모리의 어드레스 영역 이내라는 것을 의미하는 폴스(false)가 되면, 셀렉터(13)는 그 입력을 외부 어드레스 버스(17)로 전송해야 한다. OR 연산의 결과 어드레스가 전체 24 비트 어드레스라는 것을 의미하는 트루(true)가 되면, 셀렉터(13)는 그 입력을 외부 어드레스 버스(17)로 전송해야 한다.
상기에서는 본 발명의 8 비트 마이크로콘트롤러의 특징과 관련되어 하드웨어를 상세하게 설명하였다. 이하에서는 마이크로콘트롤러의 명령어 세트에 대해서 설명한다.
아래의 표 1은 명령어 명령어 세트를 실행시키기 위해 마이크로콘트롤러를 제어하는 제어 라인을 요약한 것이다.
표 1: 제어 라인
ADDR_SEL 레지스터 파일 또는 ALU-2 중 하나에서 16 비트 어드레스를 선택.
ALU1_OP ALU-1에서 수행될 연산을 선택(아래의 표 3 참조).
ALU2_OP ALU-2에서 수행될 연산을 선택.
BIT_SEL 비트를 수신하기 위한 비트(0 내지 7)를 선택.
BR_SKP 브랜치 또는 스킵을 수행하도록 프로그램 카운터를 인에이블시킴.
CPSE A와 B가 동일할 때 BR_SKP 제어를 활성화시킴.
D_SEL 레지스터에 저장될 데이타의 소스(source)를 선택.
F_CLR 특정 상태 플래그를 소거.
F_OUT 상태 플래그를 출력.
F_SET 특정 상태 플래그를 세트시킴.
F_SETALU ALU-1에서 연산의 수행에 응답하여 상태 플래그를 세트시킴.
F_SEL 세트 또는 소거될 상태 플래그를 선택.
R_OUTA 레지스터 파일(100)의 A에서 데이타를 출력하기 위한 레지스터 선택.
R_OUTB 레지스터 파일(100)의 B에서 데이타를 출력하기 위한 레지스터 선택.
R_OUTC 레지스터 파일(100)의 C에서 데이타를 출력하기 위한 레지스터 선택.
R_SEL 데이타를 수신하기 위한 레지스터 선택.
T_SEL 한 비트를 T 플래그에 저장.
T_OUT 데이타 버스의 비트 n의 T 플래그를 로드함.
TST_CLR 선택된 플래그가 소거되었는지 여부를 테스트함.
TST_SET 선택된 플래그가 세트되었는지 여부를 테스트함.
V_SEL ALU-2로의 입력에 대한 값을 선택.
WD_E 왓치독 타이머를 인에이블시킴.
WD_RST 왓치독 타이머의 지연을 리셋시킴.
WD_SEL 왓치독 타이머의 지연을 선택.
WE_BIT 선택된 비트에 대한 기록을 인에이블시킴.
WE_R 선택된 레지스터에 대한 기록을 인에이블시킴.
WE_XH X 레지스터에 대한 기록을 인에이블시킴.
WE_XL X 레지스터에 대한 기록을 인에이블시킴.
WE_YH Y 레지스터에 대한 기록을 인에이블시킴.
WE_YL Y 레지스터에 대한 기록을 인에이블시킴.
WE_ZH Z 레지스터에 대한 기록을 인에이블시킴.
WE_ZL Z 레지스터에 대한 기록을 인에이블시킴.
표 2: 데이타 라인
D_BUS 8 비트 데이타 버스(12)로부터의 데이타.
D_ALU2H 전용 ALU-2로부터의 데이타(상위 바이트).
D_ALU2L 전용 ALU-2로부터의 데이타(하위 바이트).
K_IN 명령어 오퍼런드로부터 얻어진 고정 데이타값.
아래의 표 3은 산술 및 논리 연산을 요약한 것으로서, 특정 연산은 제어 라인인 ALU1_OP에 의해 선택된다. 일부 명령어는 2 개의 레지스터(A, B)로 연산을 수행한다. 기타 명령어는 레지스터 및 상수 k(즉, "즉시" 데이타)로 연산을 수행한다.
표 3: ALU-1 연산(ALU1_OP: n)
n 연산 설명
1 O ←A + B ADD, 캐리(carry) 없는 가산.
2 O ←A + B + Cy ADC, 캐리 있는 가산.
3 O ←A - B SUB, 캐리 없는 감산.
4 O ←A - k SUBI, 즉시 데이타의 감산.
5 O ←A - B - Cy SBC, 캐리 있는 감산.
6 O ←A - B - Cy SBCI, 캐리 있는 즉시 데이타의 감산.
7 O ←A & B AND, 논리곱.
8 O ←A & k ANDI, 즉시 데이타와의 논리곱.
9 O ←A v B OR, 논리합.
10 O ←A v k ORI, 즉시 데이타와의 논리합.
11 O ←A XOR B EOR, 배타적 OR.
12 O ←$FF - A COM, 1의 보수.
13 O ←$00 - A NEG, 2의 보수.
14 O ←A v k SBR, 레지스터 내의 비트를 세트시킴.
15 O ←A & ($FF - k) CBR, 레지스터 내의 비트를 소거.
16 O ←A + 1 INC, 증가.
17 O ←A - 1 DEC, 감소.
18 O ←A & A TST, 0 또는 음수 여부의 테스트.
19 O ←A XOR A CLR, 레지스터를 소거.
20 O ←$FF SER, 레지스터를 세트시킴.
21 R1, R0 ←A x B MUL, 승산(무부호).
22 On+1←AnLSL, 논리적인 왼쪽 쉬프트.
O0←0
Cy ←A7
23 On←An+1LSR, 논리적인 오른쪽 쉬프트.
O7←0
Cy ←A0
24 O0←Cy ROL, 캐리를 통과한 왼쪽 순환.
On+1←An
Cy ←A7
25 O7←Cy ROR, 캐리를 통과한 오른쪽 순환.
On←An+1
Cy ←A0
26 On←An+1(n=0...6) ASR, 산술 오른쪽 쉬프트.
27 O ←A(O0..3←A4..7) SWAP, 니블(nibble)의 교환.
28 A - B CP, 비교 - 플래그만 세트시킴.
A - B - Cy CPC, 캐리 있는 비교 - 플래그만 세트시킴.
29 A - K CPI, 즉시 데이타와의 비교 - 플래그만 세트시킴.
30 무연산(nop; no operation)
아래의 표 4는 전용 ALU-2의 산술 연산의 요약이다.
표 4: ALU-2 연산(ALU2_OP)
n 연산
1 ALU-2 입력의 가산.
2 ALU-2 입력의 감산.
3 무연산.
본 발명의 대부분의 명령어는 단일 클록 사이클 내에서 실행된다. 각 레지스터의 내용은 해당 플립 플롭의 출력에서 항상 이용 가능하다(도 3). 따라서, 선택된 레지스터의 내용은 단지 다중화기를 포함하는 조합 회로의 전파 지연과 동일한 지연만을 요하면서 다중화기(120, 122, 124)의 출력에서 거의 즉시 이용 가능하다. 이 시간 주기는 통상적으로 "조합 지연(combinatorial delay)"이라고 지칭된다.
다음의 산술 및 논리 명령어, 즉 ADD, ADC, SUB, SUBI, SBC, SBCI, AND, ANDI, OR, ORI, EOR, COM, NEG, SBR, CBR, INC, DEC, TST, CLR, SER, LSL, LSR, ROL, ROR, ASR, SWAP, CP, CPC, CPI는 한 클록 사이클 내에서 실행된다. 도 2에서 알 수 있는 바와 같이, A 및 B 입력은 명령어가 팻치 및 디코딩된 직후 바로 범용 ALU(22)에서 이용 가능해진다. R_OUTA 제어 라인은 레지스터의 내용을 ALU(22)에 대한 2 개의 입력 중 하나로 선택 및 출력한다. 명령어가 제2 레지스터 오퍼런드를 특정하면, R_OUTB는 R_OUTA와 유사하게 활성화된다. 대체적으로, K_IN 제어 라인은 즉시 데이타를 사용하는 명령어에 대한 ALU로의 2진 입력의 역할을 한다. 그 동안, ALU의 서브유닛(OPn)(도 7)은 각각의 연산을 수행하고, ALU로의 입력이 셋업되자마자, 또 다른 작은 조합 지연 후에 결과가 산출된다. 명령어에 해당하는 서브유닛의 결과(22C)는 ALU1_OP 제어 라인을 통해 선택되어 데이타 버스(12) 상에 위치된다. 이와 동시에, D_SEL 제어 라인(도 3)은 데이타 버스 입력(D_BUS)를 선택하도록 다중화기(130, 132)를 동작시킨다. R_SEL(및 WE_R) 제어 라인은 결과가 저장되는 레지스터를 선택하고, 그 결과는 "조합 지연" 후에 그 레지스터로 입력된다. 또한, 이와 동시에, ALU에 의해 세트되는 상태 플래그는 F_SETALU를 활성화시킴으로써 상태 레지스터(도6)로 입력된다.
승산 명령어(MUL)는 2 개의 8 비트 레지스터를 승산하여, 그 16 비트 결과를 R0/R1 레지스터쌍에 저장한다. 기타 ALU 명령어와는 달리, MUL 명령어는 2 클록 싸이클을 필요로 하는데, 16 비트 곱의 반은 각 하나의 싸이클 동안에 레지스터쌍의 레지스터에 저장된다.
MOV 명령어는 하나의 클록 싸이클 동안에 레지스터간의 데이타 전송을 제공한다. 이 MOV 명령어는 소스 레지스터 및 목적지 레지스터를 특정한다. 도 2, 도3 및 도 4를 참조하면, R_OUTC 제어 라인은 특정된 소스 레지스터의 내용을 데이타 버스(12)로 유도하도록 다중화기(124)를 동작시킨다. 이와 동시에, D_SEL 제어 라인은 레지스터의 입력(D)에 제공되도록 D_BUS를 출력하기 위해 다중화기(130, 132)를 동작시키고, R_SEL 및 WE_R 제어 라인은 목적지 레지스터에 클록을 가하기 위해 셀렉터 제어 회로(134)를 동작시켜 D_BUS에 의해 제공된 내용을 저장한다.
LDI 명령어는 특정된 데이타를 레지스터로 로드시킨다. 그 데이타는 LDI 명령어의 머신 오피코드(machine op-code)로 특정되어 있고, 다중화기(130)의 K_IN 입력이 된다. D_SEL 제어 라인은 K_IN을 출력하기 위해 다중화기(130, 132)를 동작시키고, R_SEL 및 WE_R 제어 라인은 특정 레지스터에 클록을 가하기 위해 셀렉터 제어 라인(134)을 동작시킨다.
16 비트의 X, Y, Z 레지스터에서의 연산은 X, Y, Z 레지스터에 의해 주소 지정된 메모리 위치로부터 특정 레지스터로 데이타를 전송하는 LD 명령어 및 특정 레지스터로부터 X, Y, Z 레지스터에 의해 주소 지정된 메모리 위치로 데이타를 전송하는 ST 명령어를 포함한다. 이 LD 및 ST 명령어는 그 실행에 2 클록 싸이클을 필요로 한다. 도 2 및 도 3을 참조하면, 제1 클록 싸이클 동안에 R_OUTA 및 R_OUTB 제어 라인은 원하는 16 비트 레지스터의 레지스터쌍(X:R27/R26, Y:R29/R28, Z:R31/R30)을 선택한다. ADDR_SEL 제어 라인은 B:A 출력을 직접 어드레스 버스(14) 상에 위치시키기 위해 셀렉터(114)를 동작시킨다. 또한, ST 명령어의 경우에 있어서, R_OUTC 제어 라인은 데이타가 판독되는 레지스터를 선택하여, 그 데이타를 버스(12) 상에 위치시킨다. 제2 클록 싸이클 동안에, 메모리는 메모리로부터의 데이타를 버스(12) 상에 로드(LD)하거나 데이타를 메모리에 기록(ST)하도록 스트로브(strobe)된다. 또한, LD 명령어의 경우에 있어서, R_SEL 및 WE_R 제어 라인은 D_BUS로부터 특정된 레지스터로 데이타를 기록하도록 선택된다.
LD 및 ST 명령어 각각은 특정 C 언어 특징, 즉 후증가(LD+, ST+) 및 선감소(-LD, -ST) 연산을 잘 지원한다. 전술한 바와 같이, 도 2에 도시된 전용 ALU-2는 이러한 연산에 요구되는 16 비트 산술 연산을 제공한다.
후증가: 제1 클록 싸이클에서, LD 및 ST 명령어에 대한 전술한 동작에 부가하여, 16 비트 어드레스가 버스(14) 상에 위치된 후, V_SEL 제어 라인은 +1 입력을 선택하고 ALU2_OP는 가산 연산을 수행하도록 전용 ALU-2를 동작시킨다. 가산의 결과(102)는 레지스터 회로(100)의 D_ALU2H 및 D_ALU2L 입력에 접속된다. 도 3의 D_SEL 제어 라인은 D_ALU2H 및 D_ALU2L 다중화기 입력을 선택하여, D_ALU2H를 R27, R29 및 R31로 D_ALU2L을 R26, R28 및 R30으로 전송한다. 그 다음, 적절한 WE_[XYZ]L 및 WE_[XYZ]H 제어 라인은 데이타를 올바른 레지스터쌍에 기록하도록 활성화된다.
선감소: 제1 클록 싸이클에서, LD 및 ST 명령어에 대한 전술한 동작에 부가하여, V_SEL은 -1 입력을 선택하고 ALU2_OP는 ALU-2로 하여금 가산을 수행하도록 한다. 그 결과는 (i) 전술한 바와 같이 레지스터 회로로 피드백되고, (ii) 선감소 어드레스의 기능을 하도록 ADDR_SEL에 의해 선택된다.
LD 및 ST 명령어 각각은 테이블 참조 연산을 간소화시키기 위한 제3 변수(LDD, STD)를 갖는다. LDD 및 STD 명령어는 메모리 엑세스 이전에 16 비트 어드레스 레지스터에 더해지는 변위값을 지정한다. 제1 클록에서, LD 및 ST 명령어에 대한 전술한 동작에 부가하여, V_SEL은 K_IN 입력을 선택하고 ALU2_OP는 ALU-2로 하여금 가산을 수행하도록 한다. 그 결과는 변위 주소로 작용하는 ADDR_SEL에 의해 선택된다.
LD 및 ST 명령어에 대한 계산 외에, 전용 ALU-2는 16 비트 가산 및 감산 명령어, 즉 ADIW 및 SBIW 명령어를 용이하게 하기 위해 사용된다. 전용 ALU-2는 범용 ALU(22)를 사용해서는 불가능했을 것인 X, Y, Z 레지스터로 한 클록 싸이클에 계산하는 것을 가능하게 한다. ADIW 및 SBIW 명령어는 X, Y, Z 레지스터 중 하나 및 이에 더해질 상수값을 특정한다. 동작에 있어서, R_OUTA 및 R_OUTB 제어 라인은 전용 ALU-2로의 제1 입력으로서 특정 레지스터쌍을 선택한다. V_OUT은 ALU-2로의 제2 입력으로서 K_IN(상수값)을 선택한다. 그 결과(102)는 레지스터 회로(100)의 D_ALU2H 및 D_ALU2L 입력으로 피드백된다. 도 3에 도시된 D_SEL 제어 라인은 D_ALU2H 및 D_ALU2L 다중화기 입력을 선택하여, D_ALU2H를 R27, R29 및 R31로 D_ALU2L을 R26, R28 및 R30으로 전송한다. 그 다음, 적절한 WE_[XYZ]L 및 WE_[XYZ]H 제어 라인은 데이타를 원하는 레지스터쌍에 기록하도록 활성화된다.
마이크로콘트롤러는 각각 하나의 클록 싸이클 동안 수행되는 상태 레지스터(24)의 여러 플래그를 세트 및 소거하기 위한 명령어를 제공한다. 이 명령어는 BSET 및 BCL과 SEx 및 CLx를 포함하는데, 여기서 x는 I, T, H, S, V, N, Z 또는 C이다. 어셈블리어 레벨에서, SEx 및 CLx 명령어는 추가 오퍼런드를 요하지 않는 반면, BSET 및 BCLR 명령어는 영향 받을 플래그를 나타내는 상태 플래그 오퍼런드(s)를 포함한다.
도 6을 참조하면, 제어 신호 F_SEL은 영향 받을 플래그를 선택하도록 디코더(204, 206)를 동작시킨다. 소거 플래그 명령어의 경우에 있어서, F_CLR 제어 라인은 인에이블링 신호의 역할을 하여, 영향 받는 플래그에 해당하는 인에이블링 AND 게이트(224)에 출력을 제공한다. 그 출력은 플립플롭의 리셋(R) 입력에 접속되어 플립플롭을 소거시킨다. 세트 플래그 명령어의 경우에 있어서, F_SET 제어 라인은 두 가지 목적으로 작용한다. 첫 번째는 상태 플래그(F_SEL에 의해 선택됨) 중의 하나를 세트시키기 위해 각 플리플롭에 대한 입력의 역할을 하는 것이다. 두 번째로는, F_SET 제어 라인은 그 출력이 입력에 클록을 가하기 위한 목적으로 플립플롭 클록 라인에 접속된 인에이블링 AND 게이트(226)에 대한 인에이블링 신호이다.
전술한 바와 같이, 본 발명의 마이크로콘트롤러의 한 특징은 한 클록 싸이클 BST 및 BLD 명령어에 의해 제공되는 비트 엑세스 능력이다. BST 명령어는 상태 레지스터의 T 플래그 내로 복사될 레지스터 내의 비트 위치 및 레지스터를 특정한다. R_OUTC 제어 라인은 그 내용이 다중화기(124)에 의해 데이타 버스(12)로 유도되는 레지스터를 선택한다. 이와 동시에, BIT_SEL 제어 라인은 데이타 버스로부터 원하는 비트를 선택하기 위해 다중화기(210)(도 6)를 동작시키고, 그 다음 그 비트는 T_SEL 제어 라인을 활성화시킴으로써 T 플립플롭으로 로드된다.
BLD 명령어는 T 플래그에 저장된 비트를 특정 레지스터의 특정 비트 위치로 로드한다. F_OUT 제어 라인은 T 플래그를 선택하기 위해 다중화기(202)를 동작시키며, T_OUT 제어 라인은 그 출력을 데이타 버스의 비트 n으로 유도한다. 이와 동시에, 도 3을 참조하면, D_SEL 제어 라인은 다중화기(130, 132)의 제3 입력을 선택하여, 모든 레지스터의 입력으로서 D_BUSN를 출력한다. R_SEL, BIT_SEL 및 WE_BIT 제어 라인(도 4, 도 5a 및 도 5b)은 원하는 레지스터/비트 위치의 플립플롭에 클록을 가한다.
다음은 각 변위량을 특정한 조건부 브랜치 명령어이다.
BRBS[C] - 특정 상태 플래그가 세트[소거]되었을 때 브랜치하라.
BREQ[NE] - Z 플래그가 세트[소거]되었을 때 브랜치하라.
BRCS[CC] - C 플래그가 세트[소거]되었을 때 브랜치하라.
BRLO[SH] - C 플래그가 세트[소거]되었을 때 브랜치하라.
BRMI[PL] - N 플래그가 세트[소거]되었을 때 브랜치하라.
BRLT[GE] - S 플래그가 세트[소거]되었을 때 브랜치하라.
BRHS[HC] - H 플래그가 세트[소거]되었을 때 브랜치하라.
BRTS[TC] - T 플래그가 세트[소거]되었을 때 브랜치하라.
BRVS[VC] - V 플래그가 세트[소거]되었을 때 브랜치하라.
BRIE[ID] - I 플래그가 세트[소거]되었을 때 브랜치하라.
전술한 브랜치 명령어에 부가하여, 특정 레지스터의 특정 비트의 테스트 결과에 기초하여 다음 명령어를 스킵하기 위한 SBRC 및 SBRS 명령어가 제공된다. 이와 유사하게, CPSE 명령어는 2 개의 레지스터의 내용을 비교하여 그 비교 결과에 기초하여 다음 명령어를 스킵, 즉 만약 두 레지스터의 내용이 동일하면 스킵한다. 이 명령어는 브랜치를 했는지 여부에 따라서 하나 또는 두 클록 싸이클 동안 실행된다.
도 6 및 도 9를 참조하면, BRxx 명령어를 팻치하면, F_OUT 제어 라인은 다중화기(202)로부터의 원하는 상태 플래그를 출력하도록 제어 신호를 전달하고, FTST_SET 또는 FTST_CLR 중 어느 하나는 비트 테스트 수단(208)이 적절한 비트 테스트를 수행하도록 활성화된다. 한편, 프로그램 카운터(28)는 증가되어 그 다음 명령어가 미리 팻치된다. 비트 테스트가 실패하면, 다음에 실행될 명령어로서 미리 팻치된 명령어가 선택된다. 비트 테스트가 지나면, BR_SKP 제어 라인이 활성화되어, 프로그램 카운터가 브랜치 명령어를 형성하고 명령어 명령어 레지스터(25)에 새로운 명령어가 로드되도록 한다. 새로운 명령어의 로드는 제2 클록 싸이클을 요한다.
도 3을 참조하면, SBRC 및 SBRS 명령어를 참조한 BR_SKP 제어 신호의 생성이 도시되어 있다. 원하는 레지스터는 R_OUTA 제어 라인을 통하여 다중화기(120)에 의해 선택되고 다중화기(136)의 입력에 접속되어 있다. BIT_SEL 제어 라인은 원하는 비트를 출력하기 위해 다중화기(136)를 동작시키며, 그 다음 그 비트는 BTST_CLR 또는 BTST_SET 제어 라인 중 어느 하나를 활성화시켜 비트 테스트 수단(138)에서 테스트된다. BR_SKP 제어 라인은 그 테스트 결과에 따라 활성화된다.
도 3 및 도 7을 참조하여 CPSE 명령어에 관한 BR_SKP 제어 신호의 생성을 설명한다. R_OUTA 및 R_OUTB 제어 라인을 통한 다중화기(120, 122)의 동작에 의해 당해 2 개의 레지스터의 내용이 범용 ALU(22)의 A 및 B 입력에서 이용 가능해진다. "비교" 동작은 XOR 게이트(23) 및 AND 게이트(24)를 통해 ALU에서 수행된다. CPSE 제어 라인은 AND 게이트의 출력을 인에이블시키도록 활성화되어, A = B일 때 BR_SKP가 활성화된다.
다음은 무조건부 브랜치 명령어를 설명한다. RJMP 명령어는 상대적인 점프(jump) 어드레스를 생성하도록 프로그램 카운터에 더해진 변위값을 특정하고, IJMP 명령어는 Z 레지스터의 내용을 점프 어드레스로 사용하며, JMP 명령어는 프로그램 카운터로 로드되는 점프 어드레스를 특정한다. IJMP 명령어는 Z 레지스터를 비교하는 R31/R30 레지스터쌍을 선택하기 위해 R_OUTA 및 R_OUTB 제어 라인에 대한 제어 신호를 생성한다. 도 2에 도시된 바와 같이, 다중화기(114)는 Z 레지스터의 내용을 간접 어드레스 버스(14) 상에 유도하기 위해 ADDR_SEL에 의해 동작하며, 그 다음 그 Z 레지스터의 내용은 프로그램 카운터(28)로 로드된다.
다음은 서브루틴 관련 명령어를 설명한다. CALL 명령어는 서브루틴의 시작 어드레스를 특정하고, RCALL 명령어는 서브루틴의 시작 어드레스를 생성하기 위해 프로그램 카운터에 더해지는 변위값을 특정하고, ICALL 명령어는 서브루틴의 시작 어드레스로서 Z 레지스터의 내용을 사용한다. ICALL 명령어의 실행 동안에, 레지스터 파일(20)은 IJMP 명령어에 대해 전술한 바와 동일한 방식으로 동작된다. 또한, 서브루틴 호출 명령은 복귀 어드레스를 저장하기 위해 스택 포인터 및 스택, 즉 스택 포인터로 램 상에 주소 지정된 영역을 동작시킨다.
서브루틴 복귀 명령은 단지 프로그램 카운터를 스택 맨위의 내용으로 로드시키고 그에 따라 스택 포인터를 갱신하는 표준 RET 명령어를 포함한다. 또한, 인터럽트 처리기로부터 복귀하기 위한 RETI 명령어가 제공된다. 이 RETI 명령어는 RET와 동일한 동작에 부가하여 상태 레지스터 내의 I 플래그를 세트시키는 동작으로 동작한다.
PUSH 및 POP 명령어는 SP_INC 및 SP_DEC 제어 라인을 활성화시키고 스택(램 내부)에의 기록 및 스택으로부터의 판독 동작에 의해 스택 포인터를 동작시킨다.
IN 및 OUT 명령어는 데이타 버스(12)를 통해 레지스터 및 레지스터 파일의 레지스터와 같이 일련의 플립플롭으로 구성된 I/O 포트 데이타 레지스터간의 데이타 전송을 위해 사용된다. IN 명령어는 I/O 포트로부터 레지스터로 데이타를 로드한다. 특정 포트의 데이타 레지스터의 내용은 데이타 버스(12)로 유도된다. D_SEL 제어 라인은 D_BUS를 출력하기 위해 다중화기(130, 132)를 동작시킨다. R_SEL 및 WE_R 제어 라인은 셀렉터 제어 회로(134)를 동작시켜서 원하는 레지스터에 데이타를 입력시킨다. 역으로, OUT 명령어는 레지스터로부터 I/O 포트로 데이타를 로드시킨다. 데이타는 R_OUTC를 활성화시킴으로써 특정 레지스터로부터 데이타 버스 상에 로드된다. 그 다음, 선택된 포트의 데이타 레지스터의 플립플롭은 데이타 버스(12) 상의 데이타를 입력시키도록 동작된다.
LPM 명령어는 프로그램 메모리로부터 R0 레지스터로 한 바이트의 데이타를 로드시킨다. 프로그램 메모리의 어드레스는 Z 레지스터에 포함되어 있다. Z 레지스터는 다중화기(120, 122)에서 출력 레지스터(R31/R30)로 R_OUTA 및 R_OUTB를 활성화시키고, 다중화기(114)를 통해 결과 16 비트값(도 2)을 어드레스 버스(14) 상에 유도함으로써 엑세스된다. 프로그램 메모리는 엑세스되고, 데이타는 데이타 버스 상에 로드된다. D_SEL 제어 라인(도 3)은 D_BUS 입력을 선택하고, R_SEL 및 WE_R 제어 라인은 셀렉터 제어 회로를 동작시켜 R0 레지스터에 해당하는 플립플롭에 클록을 가하여, D_BUS를 R0 레지스터에 로드시킨다.
SLEEP 명령어는 마이크로콘트롤러를 슬리프 모드(sleep mode)로 세트시킨다. 인터럽트에 의해 깨어나면, 프로그램 카운터 및 명령어 레지스터는 인터럽트 처리기를 실행시키기에 앞서 SLEEP 명령어 다음의 명령어를 로드 및 실행시키기 위해 동작된다.
마이크로콘트롤러는 임의의 사용자가 선택 가능한 시간 간격 내에 타이머가 리셋되지 않으면 마이크로콘트롤러를 리셋시키는 왓치독 타이머(300)를 포함한다(도 1). 도 11은 셀렉터(304)에 접속된 복수 개의 출력을 갖는 카운터(302)로 구성된 타이머(300)를 도시하고 있다. 그 카운터는 1 MHz로 작동하는 내부 발진기에 의해 클록이 공급된다. 카운터의 각 출력은 몇 번의 카운트 후에 활성화된다. 따라서, 카운터(302)는 복수 개의 지연 시간을 갖는 지연 수단으로서 동작한다. 도 11에 도시된 바와 같이, 카운터의 출력은 16 ms 내지 2048 ms의 범위 내에서 16 ms씩 증가로 지연 시간을 제공할 수 있다. 이 지연 시간은 그 출력이 WD_E 제어 라인에 의해 인에이블되는 인에이블링 AND 게이트에 접속된 섹렉터(304)를 통해 WD_SEL 제어 라인에 의해 선택된다. 시간 간격이 경과된 선택된 지연 시간과 동일해질 때 해당 카운터 출력은 하이(high)가 되고, 따라서 MCU 리셋 라인을 활성화시킨다. WD_SEL 및 WD_E 제어 라인은 왓치독 레지스터(308)를 포함하는 플립플롭의 출력이다. 데이타는 데이타 버스(12)를 통해 레지스터(308)로 판독된다.
WDR 명령어는 왓치독 타이머(300)를 리셋시키는 데 사용된다. 명령어 디코더(23)는 카운터(302)를 리셋시키는 WD_RST 신호를 발생시킨다. 따라서, 타이머가 인에이블되면(WD_E가 하이), WDR 명령어는 선택된 지연 시간에 해당하는 주파수로 실행되며, 그렇지 않으면 마이크로콘트롤러는 리셋될 것이다.

Claims (40)

  1. 마이크로콘트롤러(microcontroller)에 있어서,
    명령어 세트와,
    상기 명령어 세트로부터 선택된 명령어를 저장하는 프로그램 메모리와,
    명령어의 실행에 응답하여 제어 신호를 제공하는 복수 개의 제어 라인(control line)을 갖는 명령어 실행 유닛과,
    상기 프로그램 메모리로부터 명령어를 가져와 그 명령어를 상기 명령어 실행 유닛에 로드(load)시키는 팻치(fetch) 수단과,
    상기 팻치 수단을 상기 명령어 실행 유닛에 접속시키는 프로그램 버스(bus)와,
    상기 프로그램 메모리로부터 분리된, 어드레스 공간을 갖는 데이타 메모리와,
    상기 프로그램 메모리로부터 분리된, 상기 데이타 메모리에 접속된 8 비트 데이타 버스와,
    복수 개의 8 비트 레지스터, 2 개의 8 비트 레지스터를 단일의 논리적인 16 비트 레지스터로서 엑세스(access)하기 위한 결합 수단 및 이 결합 수단을 통해 엑세스된 논리적인 16 비트 레지스터 상에서 산술 연산을 수행하도록 상기 결합 수단에 접속된 전용 ALU를 가지며, 상기 데이타 버스에 접속된 레지스터 파일과,
    2 개의 8 비트 레지스터의 내용을 수신하도록 상기 레지스터 파일에 접속된 제1 및 제2 입력, 상수값 데이타를 수신하기 위한 제3 입력, 한 클록 싸이클 내에 결과값을 산출하도록 상기 제1, 제2 및 제3 입력을 선택적으로 동작시키는 수단 및 상기 데이타 버스에 접속된 출력을 갖는 범용 ALU와,
    인터럽트 인에이블 플래그(interrupt enable flag), 비트 전송 플래그, 하프 캐리(half-carry) 플래그, 2의 보수 오버플로우(overflow) 플래그, 음의 플래그, 부호 비트, 0의 플래그 및 캐리 비트를 포함하는 플래그 및 상기 플래그 중 하나를 엑세스 및 테스트하기 위한 비트 테스트 수단을 가지며, 상기 데이타 버스 및 상기 범용 ALU에 접속된 상태 레지스터와,
    프로그램 실행 중에 상기 데이타 메모리 또는 레지스터 파일을 직접 엑세스하도록 상기 명령어 실행 유닛을 접속시키는 직접 어드레스 버스와,
    16 비트 어드레스로 동작하도록 상기 결합 수단으로부터 16 비트 값을 수신하는 어드레스 수신 수단을 가지며, 프로그램 실행 중에 레지스터 파일이 데이타 메모리를 간접 데이타 엑세스하도록 하는 간접 어드레스 버스
    를 포함하며, 상기 레지스터 파일의 8 비트 레지스터는 상기 데이타 메모리의 어드레스 공간 내에 정의된 어드레스를 가짐으로써, 레지스터 및 메모리 위치 둘 모두에 엑세스 가능한 것을 특징으로 하는 마이크로콘트롤러.
  2. 제1항에 있어서, 페이징(paging) 레지스터 및 이 페이징 레지스터의 내용 및 상기 결합 수단에 의해 제공된 16 비트 데이타 둘 모두로부터 어드레스를 형성하는 어드레스 형성 수단을 더 포함하는 것인 마이크로콘트롤러.
  3. 제2항에 있어서, 상기 페이징 레지스터는 8 비트 레지스터이고 상기 8 비트 데이타 버스에 접속되어 있으며, 상기 페이징 레지스터로 한 값을 로드시키는 것은 각 64 킬로 바이트인 256 개의 페이지(page) 중 하나를 특정하는 것인 마이크로콘트롤러.
  4. 제1항에 있어서, 레지스터 및 비트 식별자를 특정하는 머신 오피코드(machine op-code)를 각각 가지는 BST 및 BLD 명령어를 더 포함하며, 상기 명령어 실행 유닛은 상기 BST 및 BLD 명령어의 실행에 응답하여 비트 처리 제어 신호를 생성하고, 이 비트 처리 제어 신호는
    (i) 비트 식별자에 의해 확인된 비트 위치 및 레지스터를 엑세스하도록 레지스터를 동작시키는 것과,
    (ii) 엑세스된 비트 위치의 내용을 상태 레지스터 내의 비트 전송 플래그로의 전송 또는 비트 전송 플래그의 내용을 엑세스된 비트 위치로의 전송 중 어느 하나
    를 유효하게 하는 것인 마이크로콘트롤러.
  5. 제4항에 있어서, 목적지 레지스터 및 소스(source) 레지스터쌍을 특정하는 머신 오피코드를 각각 가지는 제1 복수 개의 명령어를 더 포함하며, 상기 명령어 실행 유닛은 상기 제1 명령어 중 하나의 실행에 응답하여 제1 제어 신호를 생성하고, 이 제1 제어 신호는
    (i) 상기 소스 레지스터쌍의 내용을 간접 주소로서 제공하도록 상기 레지스터 파일의 결합 수단을 동작시키는 것과,
    (ii) 상기 간접 주소에 의해 특정된 메모리 위치의 내용을 엑세스하도록 데이타 메모리를 동작시키는 것과,
    (iii) 상기 메모리 위치의 내용을 목적지 레지스터에 저장시키도록 레지스터 파일을 동작시키는 것
    을 유효하게 하고, 상기 제1 명령어는 LD, LD+, LD- 및 LDD를 포함하는 것인 마이크로콘트롤러.
  6. 제5항에 있어서, 목적지 레지스터쌍 및 소스 레지스터를 특정하는 머신 오피코드를 각각 가지는 제2 복수 개의 명령어를 더 포함하며, 상기 명령어 실행 유닛은 상기 제2 명령어 중 하나의 실행에 응답하여 제2 제어 신호를 생성하고, 이 제2 제어 신호는
    (i) 상기 소스 레지스터의 내용을 엑세스하도록 상기 레지스터 파일을 동작시키는 것과,
    (ii) 상기 목적지 레지스터쌍의 내용을 간접 주소로서 제공하도록 상기 레지스터 파일의 결합 수단을 동작시키는 것과,
    (iii) 상기 소스 레지스터의 내용을 상기 간접 주소에 의해 특정된 메모리 위치에 저장하도록 상기 데이타 메모리를 동작시키는 것
    을 유효하게 하고, 상기 제2 명령어는 ST, ST+, ST- 및 STD를 포함하는 것인 마이크로콘트롤러.
  7. 제6항에 있어서, 상기 명령어 실행 유닛은 상기 LD+ 및 ST+ 명령어의 실행에 응답하여, 상기 레지스터쌍의 내용을 증가시키기 위해 레지스터 파일의 전용 ALU를 동작시키는 제어 신호를 더 생성하는 것인 마이크로콘트롤러.
  8. 제6항에 있어서, 상기 명령어 실행 유닛은 상기 LD- 및 ST- 명령어의 실행에 응답하여, 상기 레지스터쌍의 내용을 감소시키기 위해 레지스터 파일의 전용 ALU를 동작시키는 제어 신호를 더 생성하는 것인 마이크로콘트롤러.
  9. 제6항에 있어서, 상기 LDD 및 STD 명령어의 머신 오피코드는 변위값을 더 포함하며, 상기 명령어 실행 유닛은 상기 LDD 및 STD 명령어의 실행에 응답하여, 상기 결합 수단에 의해 제공된 간접 주소에 상기 변위값을 더하도록 상기 레지스터 파일의 전용 ALU를 동작시키는 제어 신호를 더 생성하는 것인 마이크로콘트롤러.
  10. 제6항에 있어서, 승수 레지스터 및 피승수 레지스터를 특정하는 머신 오피코드를 갖는 승산 명령어를 더 포함하며, 이 승산 명령어는 연관된 상위 바이트 및 하위 바이트의 목적지 레지스터를 가지고, 상기 명령어 실행 유닛은 상기 승산 명령어의 실행에 응답하여 승산 제어 신호를 생성하고, 이 승산 제어 신호는
    (i) 상기 승수 레지스터 및 피승수 레지스터에 의해 특정된 레지스터의 내용을 상기 범용 ALU의 입력으로서 제공하도록 상기 레지스터 파일을 동작시키는 것과,
    (ii) 상기 승산 연산을 수행하도록 상기 범용 ALU를 동작시키는 것과,
    (iii) 상기 승산 연산의 결과를 상기 상위 바이트 및 하위 바이트의 목적지 레지스터에 의해 식별된 레지스터에 저장시키도록 상기 레지스터 파일을 동작시키는 것
    을 유효하게 하는 것인 마이크로콘트롤러.
  11. 제10항에 있어서, 제1 레지스터 및 제2 레지스터를 특정하는 머신 오피코드를 각각 가지는 제3 복수 개의 명령어를 더 포함하며, 상기 명령어 실행 유닛은 상기 제3 명령어 중 하나의 실행에 응답하여 제3 제어 신호를 생성하고, 이 제3 제어 신호는
    (i) 상기 제1 및 제2 레지스터의 내용을 상기 범용 ALU의 입력으로서 제공하도록 상기 레지스터 파일을 동작시키는 것과,
    (ii) 상기 오피코드에 특정된 ALU 연산을 수행하도록 상기 범용 ALU를 동작시키는 것과,
    (iii) 상기 ALU 연산의 결과를 상기 제1 레지스터로 저장시키도록 상기 레지스터 파일을 동작시키는 것
    을 유효하게 하고, 상기 제3 명령어는 ADD, ADC, SUB, SBC, AND, OR 및 EOR를 포함하는 것인 마이크로콘트롤러.
  12. 제11항에 있어서, 레지스터 및 상수값을 특정하는 머신 오피코드를 각각 가지는 제4 복수 개의 명령어를 더 포함하며, 상기 명령어 실행 유닛은 상기 제4 명령어 중 하나의 실행에 응답하여 제4 제어 신호를 생성하고, 이 제4 제어 신호는
    (i) 상기 레지스터의 내용을 상기 범용 ALU의 입력으로서 제공하도록 상기 레지스터 파일을 동작시키는 것과,
    (ii) 상기 상수값을 상기 범용 ALU로의 제4 입력으로서 제공하는 것과,
    (iii) 상기 오피코드에 특정된 ALU 연산을 수행하도록 범용 ALU를 동작시키는 것과,
    (iv) 상기 ALU 연산의 결과를 상기 레지스터로 저장시키기 위해 상기 레지스터 파일을 동작시키는 것
    을 유효하게 하고, 상기 제4 명령어는 SUBI, SBCI, ANDI, ORI, SBR 및 CBR을 포함하는 것인 마이크로콘트롤러.
  13. 제12항에 있어서, 레지스터를 특정하는 머신 오피코드를 각각 가지는 제5 복수 개의 명령어를 포함하며, 상기 명령어 실행 유닛은 상기 제5 명령어 중 하나의 실행에 응답하여 제5 제어 신호를 생성하고, 이 제5 제어 신호는
    (i) 상기 레지스터의 내용을 상기 범용 ALU의 입력으로서 제공하기 위해 상기 레지스터 파일을 동작시키는 것과,
    (ii) 오피코드에 특정된 ALU 연산을 수행하기 위해 상기 범용 ALU를 동작시키는 것과,
    (iii) 상기 ALU 연산의 결과를 상기 레지스터에 저장시키기 위해 상기 레지스터 파일을 동작시키는 것
    을 유효하게 하고, 상기 제5 명령어는 COM, NEG, INC, DEC, TST, CLR 및 SER을 포함하는 것인 마이크로콘트롤러.
  14. 제13항에 있어서, 상태 비트 및 변위값을 특정하는 머신 오피코드를 각각 가지는 제6 복수 개의 명령어를 더 포함하며, 상기 명령어 실행 유닛은 상기 제6 명령어 중 하나의 실행에 응답하여 제6 제어 신호를 생성하고, 이 제6 제어 신호는
    (i) 상기 상태 비트를 테스트하기 위해 상기 비트 테스트 수단을 동작시키고,
    (ii) 그 테스트된 상태 비트의 결과를 기초로, 실행을 위해 로드될 다음 명령어가 현재 명령어의 위치로부터 상기 변위값에 해당하는 크기만큼 떨어진 프로그램 메모리의 위치에서 얻어지도록 상기 팻치 수단을 선택적으로 동작시키는 것
    을 유효하게 하고, 상기 제6 명령어는 BREQ, BRNE, BRCS, BRCC, BRSH, BRLO, BRMI, BRPL, BRHS, BRHC, BRTS, BRTC, BRVS, BRVC, BRID, BRIE, BRBC, BRBS, BRGE 및 BRLT를 포함하는 것인 마이크로콘트롤러.
  15. 제14항에 있어서, 레지스터쌍 및 상수값을 특정하는 머신 오피코드를 각각 가지는 제7 복수 개의 명령어를 포함하며, 상기 명령어 실행 유닛은 상기 제7 명령어 중 하나의 실행에 응답하여 제7 제어 신호를 생성하고, 상기 제7 제어 신호는
    (i) 상기 레지스터쌍의 내용을 상기 전용 ALU로의 입력으로 제공하기 위해 상기 레지스터 파일의 결합 수단을 동작시키는 것과,
    (ii) 상기 상수값을 상기 전용 ALU로의 또 다른 입력으로 제공하는 것과,
    (iii) 가산 및 감산을 수행하도록 상기 ALU를 동작시키는 것과,
    (iv) 상기 연산의 결과를 상기 레지스터쌍에 저장시키도록 상기 레지스터 파일을 동작시키는 것
    을 유효하게 하고, 상기 제7 명령어는 ADIW 및 SBIW를 포함하는 것인 마이크로콘트롤러.
  16. 제15항에 있어서, 레지스터 및 비트 식별자를 특정하는 머신 오피코드를 각각 가지는 제8 복수 개의 명령어를 더 포함하며, 상기 명령어 실행 유닛은 상기 제8 명령어 중 하나의 실행에 응답하여 제8 제어 신호를 생성하고, 상기 제8 제어 신호는
    (i) 상기 레지스터를 엑세스하고 상기 비트에 의해 특정된 비트를 테스트하기 위해 상기 레지스터를 동작시키는 것과,
    (ii) 상기 테스트된 비트의 결과를 기초로 하여, 그 다음 명령어를 스킵(skip)하도록 상기 팻치 수단을 선택적으로 동작시키는 것
    을 유효하게 하고, 상기 제8 명령어는 SBRC 및 SBRS를 포함하는 것인 마이크로콘트롤러.
  17. 제16항에 있어서, 레지스터 및 상수값을 특정하는 머신 오피코드를 가지는 CPI 명령어를 더 포함하며, 상기 명령어 실행 유닛은 상기 CPI 명령어의 실행에 응답하여 CPI 제어 신호를 생성하고, 이 CPI 제어 신호는
    (i) 상기 레지스터의 내용을 상기 전용 ALU의 입력으로 제공하기 위해 상기 레지스터 파일을 동작시키는 것과,
    (ii) 상기 상수값을 상기 전용 ALU로의 제2 입력으로 제공하는 것과,
    (iii) 상기 제1 입력으로부터 상기 제2 입력을 감산하기 위해 상기 전용 ALU를 동작시키는 것
    을 유효하게 하는 것인 마이크로콘트롤러.
  18. 제17항에 있어서, 제1 및 제2 레지스터를 특정하는 머신 오피코드를 가지는 CPC 명령어를 더 포함하며, 상기 명령어 실행 유닛은 상기 CPC 명령어의 실행에 응답하여 CPC 제어 신호를 생성하고, 이 CPC 제어 신호는
    (i) 상기 제1 및 제2 레지스터의 내용을 상기 전용 ALU의 입력으로 제공하기 위해 상기 레지스터 파일을 동작시키는 것과,
    (ii) 상기 전용 ALU 다음의 식
    여기서, Rf는 제1 레지스터이고, Rs는 제2 레지스터이고, C는 캐리 비트임을 계산하도록 상기 전용 ALU를 동작시키는 것
    을 유효하게 하는 것인 마이크로콘트롤러.
  19. 제18항에 있어서, 제1 및 제2 레지스터를 특정하는 머신 오피코드를 가지는 CP 명령어를 더 포함하며, 상기 명령어 실행 유닛은 상기 CP 명령어의 실행에 응답하여 CP 제어 신호를 생성하고, 이 CP 제어 신호는
    (i) 상기 제1 및 제2 레지스터의 내용을 각각 상기 전용 ALU의 제1 및 제2 입력으로 제공하기 위해 상기 레지스터 파일을 동작시키는 것과,
    (ii) 상기 제1 입력으로부터 상기 제2 입력을 감산하기 위해 상기 전용 ALU를 동작시키는 것
    을 유효하게 하는 것인 마이크로콘트롤러.
  20. 제19항에 있어서, 제1 및 제2 레지스터를 특정하는 머신 오피코드를 가지는 CPSE 명령어를 더 포함하며, 상기 명령어 실행 유닛은 상기 CPSE 명령어의 실행에 응답하여 CPSE 제어 신호를 생성하고, 이 CPSE 제어 신호는
    (i) 상기 제1 및 제2 레지스터에 의해 확인된 레지스터의 내용을 상기 범용 ALU의 제1 및 제2 입력으로 제공하기 위해 상기 레지스터 파일을 동작시키는 것과,
    (ii) 상기 제1 및 제2 입력을 비교하기 위해 상기 범용 ALU를 동작시키는 것과,
    (iii) 상기 비교 결과를 기초로, 다음 명령어를 스킵하도록 상기 팻치 수단을 선택적으로 동작시키는 것
    을 유효하게 하는 것인 마이크로콘트롤러.
  21. 제20항에 있어서, 변위값을 특정하는 머신 오피코드를 각각 가지는 제9 복수 개의 명령어를 더 포함하며, 상기 명령어 실행 유닛은 상기 제9 명령어 중 하나의 실행에 응답하여 제9 제어 신호를 생성하고, 이 제9 제어 신호는 실행을 위해 로드될 그 다음 명령어가 현재 명령어의 위치로부터 변위값에 해당하는 크기만큼 떨어진 프로그램 메모리 내의 위치로부터 얻어지도록 상기 팻치 수단을 동작시키는 것을 유효하게 하는 것인 마이크로콘트롤러.
  22. 제21항에 있어서, IJMP 명령어를 더 포함하며, 상기 명령어 실행 유닛은 상기 IJMP 명령어의 실행에 응답하여 IJMP 제어 신호를 생성하고, 이 IJMP 제어 신호는
    (i) 2 개의 레지스터의 내용을 단일 변위값으로 제공하기 위해 상기 결합 수단을 동작시키는 것과,
    (ii) 실행을 위하여 로드될 다음 명령어가 현재 명령어의 위치로부터 상기 단일 변수값의 크기만큼 떨어진 프로그램 메모리 내의 위치로부터 얻어지도록 상기 팻치 수단을 동작시키는 것
    을 유효하게 하는 것인 마이크로콘트롤러.
  23. 제22항에 있어서, 변위값을 특정하는 머신 오피코드를 각각 가지는 제10 복수 개의 명령어를 포함하며, 상기 명령어 실행 유닛은 상기 제10 명령어 중 하나의 실행에 응답하여 제10 제어 신호를 생성하고, 이 제10 제어 신호는
    (i) 그 다음에 실행될 명령어의 프로그램 메모리 내의 위치를 스택(stack) 상에 푸쉬(push)하는 것과,
    (ii) 실행을 위해 로드될 다음 명령어가 현재 명령어의 위치로부터 상기 변위값의 크기만큼 떨어진 프로그램 메모리 내의 위치로부터 얻어지도록 상기 팻치 수단을 동작시키는 것
    을 유효하게 하고, 상기 제10 명령어는 RCALL 및 CALL을 포함하는 것인 마이크로콘트롤러.
  24. 제23항에 있어서, ICALL 명령어를 더 포함하며, 상기 명령어 실행 유닛은 상기 ICALL 명령어에 응답하여 ICALL 제어 신호를 생성하고, 이 ICALL 제어 신호는
    (i) 2 개의 레지스터의 내용을 단일 변수값으로 제공하기 위해 상기 레지스터 파일의 결합 수단을 동작시키는 것과,
    (ii) 그 다음에 실행될 명령어의 프로그램 메모리 내의 위치를 스택 상에 푸시하는 것과,
    (iii) 실행을 위해 로드될 다음 명령어가 현재 명령어의 위치로부터 단일 변위값에 해당하는 크기만큼 떨어진 프로그램 메모리 내의 위치로부터 얻어지도록 상기 팻치 수단을 동작시키는 것
    을 유효하게 하는 것인 마이크로콘트롤러.
  25. 제24항에 있어서, 변위값을 특정하는 머신 오피코드를 각각 가지는 제11 복수 개의 명령어를 더 포함하며, 상기 명령어 실행 유닛은 상기 제11 명령어의 실행에 응답하여 제11 제어 신호를 생성하고, 이 제11 제어 신호는
    (i) 상기 프로그램 메모리 내의 위치를 얻기 위해 상기 스택을 팝(pop)시키는 것과,
    (ii) 실행을 위해 로드될 다음 명령어가 상기 스택으로부터 얻어진 프로그램 메모리 내의 위치를 기초로하도록 상기 팻치 수단을 동작시키는 것
    을 유효하게 하고, 상기 제11 명령어는 RET 및 RETI를 포함하는 것인 마이크로콘트롤러.
  26. 제25항에 있어서, 상기 명령어 실행 유닛은 상기 RETI 명령어의 실행에 응답하여, 전역 인터럽트 플래그를 세트시키도록 상기 상태 레지스터를 동작시키는 제어 신호를 더 생성하는 것인 마이크로콘트롤러.
  27. 제26항에 있어서, 목적지 레지스터 및 데이타 소스를 특정하는 머신 오피코드를 각각 가지는 제12 복수 개의 명령어를 더 포함하고, 상기 명령어 실행 유닛은 상기 제12 명령어 중 하나의 실행에 응답하여 제12 제어 신호를 생성하고, 상기 제12 제어 신호는
    (i) 상기 데이타 소스가 레지스터이면 레지스터의 내용을 엑세스하도록 상기 레지스터 파일을 동작시키는 것과,
    (ii) 상기 목적지 레지스터 내에, 상기 데이타 소스가 레지스터이면 엑세스된 레지스터의 내용 또는 상기 데이타 소스가 상수값이면 그 데이타 소스 자체를 저장하기 위해 상기 레지스터 파일을 동작시키는 것
    을 유효하게 하고, 상기 제12 명령어는 MOV 및 LDI를 포함하는 것인 마이크로콘트롤러.
  28. 제27항에 있어서, 레지스터를 특정하는 PUSH 명령어를 더 포함하며, 상기 명령어 실행 유닛은 상기 PUSH 명령어의 실행에 응답하여 PUSH 제어 신호를 생성하고, 이 PUSH 제어 신호는
    (i) 스택 내의 다음 위치를 지정하도록 스택 포인터(pointer)를 갱신시키는 것과,
    (ii) 상기 레지스터의 내용을 수신하도록 상기 스택을 동작시키는 것
    을 유효하게 하는 것인 마이크로콘트롤러.
  29. 제28항에 있어서, 레지스터를 특정하는 POP 명령어를 더 포함하며, 상기 명령어 실행 유닛은 상기 POP 명령어의 실행에 응답하여 POP 제어 신호를 생성하고, 이 POP 제어 신호는
    (i) 스택의 내용을 상기 레지스터에 저장하기 위해 그 스택을 동작시키는 것과,
    (ii) 스택 내의 이전의 위치를 지정하기 위해 그 스택 포인터를 갱신시키는 것
    을 유효하게 하는 것인 마이크로콘트롤러.
  30. 제29항에 있어서, 포트 및 레지스터를 특정하는 머신 오피코드를 각각 가지는 IN 및 OUT 명령어를 더 포함하며, 상기 명령어 실행 유닛은 상기 IN 및 OUT 명령어 중 하나의 실행에 응답하여 포트 제어 신호를 생성하고, 이 포트 제어 신호는
    (i) 상기 레지스터를 엑세스하기 위해 상기 레지스터 파일을 동작시키는 것과,
    (ii) 상기 엑세스된 레지스터로부터의 내용을 상기 포트로 전송 또는 상기 포트의 내용을 상기 엑세스된 레지스터로 전송 중 어느 하나
    를 유효하게 하는 것인 마이크로콘트롤러.
  31. 제30항에 있어서, LPM 명령어를 더 포함하며, 상기 명령어 실행 유닛은 상기 LPM 명령어의 실행에 응답하여 LPM 제어 신호를 생성하고, 이 LPM 제어 신호는
    (i) 2 개의 레지스터의 내용을 프로그램 어드레스로 제공하기 위해 상기 레지스터 파일의 결합 수단을 동작시키는 것과,
    (ii) 상기 프로그램 어드레스에 의해 특정된 상기 프로그램 메모리의 메모리 위치 내의 데이타를 엑세스하는 것과,
    (iii) 상기 엑세스된 데이타를 레지스터 내에 저장하기 위해 상기 레지스터 파일을 동작시키는 것
    을 유효하게 하는 것인 마이크로콘트롤러.
  32. 제31항에 있어서, 제13 복수 개의 명령어를 더 포함하며, 상기 명령어 실행 유닛은 상기 제13 명령어 중 하나의 실행에 응답하여 제13 제어 신호를 생성하고, 이 제13 제어 신호는
    (i) 상기 상태 레지스터 내의 비트를 엑세스하기 위해 그 상태 레지스터를 동작시키는 것과,
    (ii) 상기 엑세스된 비트를 세트 또는 소거 중 어느 하나를 실행하는 것
    을 유효하게 하고, 상기 제13 명령어는 SEC, CLC, SEN, CLN, SEZ, CLZ, SEI, CLI, SES, CLS, SEV, CLV, SET, CLT, SEH, CLH, BSET 및 BCLR을 포함하는 것인 마이크로콘트롤러.
  33. 제32항에 있어서, 레지스터를 특정하는 LSL 명령어를 더 포함하며, 상기 명령어 실행 유닛은 상기 LSL 명령어의 실행에 응답하여 제1 쉬프트(shift) 제어 신호를 생성하고, 이 제1 쉬프트 제어 신호는
    (i) 레지스터를 엑세스하기 위해 상기 레지스터 파일을 동작시키는 것과,
    (ii) 상기 엑세스된 레지스터의 최상위 비트를 캐리 비트로 쉬프트시키는 것과,
    (iii) 그 비트들을 왼쪽으로 한 위치씩 쉬프트시키는 것과,
    (iv) 최하위 비트를 소거시키는 것
    을 유효하게 하는 것인 마이크로콘트롤러.
  34. 제33항에 있어서, 레지스터를 특정하는 LSR 명령어를 더 포함하며, 상기 명령어 실행 유닛은 상기 LSR 명령어의 실행에 응답하여 제2 쉬프트 제어 신호를 생성하고, 이 제2 쉬프트 제어 신호는
    (i) 레지스터를 엑세스하기 위해 상기 레지스터 파일을 동작시키는 것과,
    (ii) 상기 엑세스된 레지스터의 최하위 비트를 쉬프트시키는 것과,
    (iii) 그 비트들을 오른쪽으로 한 위치씩 쉬프트시키는 것과,
    (iv) 최상위 비트를 소거시키는 것
    을 유효하게 하는 것인 마이크로콘트롤러.
  35. 제34항에 있어서, 레지스터를 특정하는 ROL 명령어를 더 포함하며, 상기 명령어 실행 유닛은 상기 ROL 명령어의 실행에 응답하여 제3 쉬프트 제어 신호를 생성하고, 이 제3 쉬프트 제어 신호는
    (i) 레지스터를 엑세스하기 위해 상기 레지스터 파일을 동작시키는 것과,
    (ii) 그 비트들을 왼쪽으로 한 위치씩 쉬프트시키는 것과,
    (iii) 캐리 비트를 최하위 비트로 쉬프트시키는 것과,
    (iv) 최상위 비트를 캐리 비트로 쉬프트시키는 것
    을 유효하게 하는 것인 마이크로콘트롤러.
  36. 제35항에 있어서, 레지스터를 특정하는 ROR 명령어를 더 포함하며, 상기 명령어 실행 유닛은 상기 ROR 명령어의 실행에 응답하여 제4 쉬프트 제어 신호를 발생하고, 이 제4 쉬프트 제어 신호는
    (i) 레지스터를 엑세스하기 위해 상기 레지스터 파일을 엑세스하는 것과,
    (ii) 그 비트들을 오른쪽으로 한 위치씩 쉬프트시키는 것과,
    (iii) 캐리 비트를 최상위 비트로 쉬프트시키는 것과,
    (iv) 최하위 비트를 캐리 비트로 쉬프트시키는 것
    을 유효하게 하는 것인 마이크로콘트롤러.
  37. 제36항에 있어서, 레지스터를 특정하는 ASR 명령어를 더 포함하며, 상기 명령어 실행 유닛은 상기 ASR 명령어의 실행에 응답하여 제5 쉬프트 제어 신호를 생성하고, 이 제5 쉬프트 제어 신호는
    (i) 레지스터를 엑세스하기 위해 상기 레지스터 파일을 동작시키는 것과,
    (ii) 그 비트들을 오른쪽으로 한 위치씩 쉬프트시키는 것과,
    (iii) 최하위 비트를 캐리 비트로 쉬프트시키는 것
    을 유효하게 하는 것인 마이크로콘트롤러.
  38. 제37항에 있어서, 레지스터를 특정하는 SWAP 명령어를 더 포함하며, 상기 명령어 실행 유닛은 상기 SWAP 명령어의 실행에 응답하여 SWAP 제어 신호를 생성하고, 이 SWAP 제어 신호는
    (i) 레지스터를 엑세스하기 위해 상기 레지스터 파일을 동작시키는 것과,
    (ii) 상기 엑세스된 레지스터의 상위 및 하위 니블(nibble)을 맞바꾸는 것
    을 유효하게 하는 것인 마이크로콘트롤러.
  39. 제38항에 있어서, SLEEP 명령어를 더 포함하며, 상기 명령어 실행 유닛은 상기 SLEEP 명령어의 실행에 응답하여 SLEEP 제어 신호를 생성하고, 이 SLEEP 제어 신호는 상기 마이크로콘트롤러를 정지 모드로 전환시키는 것인 마이크로콘트롤러.
  40. 제39항에 있어서, 왓치독(watchdog) 리셋 라인, MCU 리셋 라인 및 한 시간 주기 동안의 지연 후에 MCU 리셋 라인 상에 신호를 활성화시키는 지연 수단을 갖는 왓치독 타이머를 더 포함하며, 상기 MCU 리셋 라인은 상기 지연 수단에 의해 신호가 활성화되면 마이크로콘트롤러를 리셋시키도록 접속되고, WDR 명령어를 더 포함하며, 상기 명령어 실행 유닛은 상기 WDR 명령어의 실행에 응답하여 왓치독 리셋 라인 상에 신호를 활성화시켜 지연 주기를 초기화시키는 것인 마이크로콘트롤러.
KR10-1999-7008411A 1997-03-27 1998-03-13 Risc 구조를 갖는 8 비트 마이크로콘트롤러 KR100462951B1 (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US08/824,932 1997-03-27
US8/824,932 1997-03-27
US08/824,932 US5809327A (en) 1997-03-27 1997-03-27 Eight-bit microcontroller having a risc architecture

Publications (2)

Publication Number Publication Date
KR20000076310A true KR20000076310A (ko) 2000-12-26
KR100462951B1 KR100462951B1 (ko) 2004-12-23

Family

ID=25242688

Family Applications (1)

Application Number Title Priority Date Filing Date
KR10-1999-7008411A KR100462951B1 (ko) 1997-03-27 1998-03-13 Risc 구조를 갖는 8 비트 마이크로콘트롤러

Country Status (12)

Country Link
US (1) US5809327A (ko)
EP (1) EP1012735B1 (ko)
JP (2) JP4386467B2 (ko)
KR (1) KR100462951B1 (ko)
CN (1) CN1121014C (ko)
CA (1) CA2275172C (ko)
DE (1) DE69839487D1 (ko)
HK (1) HK1024546A1 (ko)
MY (1) MY115901A (ko)
NO (1) NO324825B1 (ko)
TW (1) TW367439B (ko)
WO (1) WO1998044427A1 (ko)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20010079326A (ko) * 2001-07-06 2001-08-22 한제섭 리스크 코아의 집적회로
KR102132933B1 (ko) * 2019-09-09 2020-07-10 국방과학연구소 소프트웨어의 제어 흐름 보호장치 및 그 방법

Families Citing this family (22)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6055211A (en) * 1997-07-03 2000-04-25 Microchip Technology Incorporated Force page zero paging scheme for microcontrollers using data random access memory
US6243798B1 (en) * 1997-10-28 2001-06-05 Microchip Technology Incorporated Computer system for allowing a two word jump instruction to be executed in the same number of cycles as a single word jump instruction
US6754809B1 (en) * 1999-12-30 2004-06-22 Texas Instruments Incorporated Data processing apparatus with indirect register file access
KR100602374B1 (ko) * 2000-08-31 2006-07-14 어보브반도체 주식회사 스택 구조를 사용하여 코드 집적도를 높인 리스크 프로세서
KR100399068B1 (ko) * 2001-04-25 2003-09-26 주식회사 하이닉스반도체 마이크로 컨트롤러 유닛의 효율적인 테스트 방법
US7506133B2 (en) * 2003-08-20 2009-03-17 Seiko Epson Corporation Method and apparatus for high speed addressing of a memory space from a relatively small address space
EP1643358A1 (en) * 2004-10-01 2006-04-05 Nokia Corporation Pre-loading data
CN100430890C (zh) * 2005-08-31 2008-11-05 上海海尔集成电路有限公司 一种8位risc微控制器
US8533439B2 (en) 2005-11-07 2013-09-10 Atmel Corporation Elastic shared RAM array including contiguous instruction and data portions distinct from each other
DE102007049354A1 (de) * 2007-10-15 2009-04-16 Robert Bosch Gmbh Verfahren zum Testen eines Adressbusses in einem logischen Baustein
TWI425354B (zh) * 2007-10-16 2014-02-01 Mstar Semiconductor Inc 資料存取系統及方法
CN102033733B (zh) * 2011-01-14 2012-12-19 北方工业大学 新型mcu结构
US20130086366A1 (en) * 2011-09-30 2013-04-04 Qualcomm Incorporated Register File with Embedded Shift and Parallel Write Capability
CN103077137A (zh) * 2011-10-25 2013-05-01 北京大豪科技股份有限公司 中断控制方法及中断控制单元
US9201446B2 (en) * 2012-02-01 2015-12-01 Microchip Technology Incorporated Timebase peripheral
CN103166476A (zh) * 2012-12-26 2013-06-19 黄冠雄 一种交流电数控调压控流传输系统
US9448801B2 (en) * 2012-12-31 2016-09-20 Cadence Design Systems, Inc. Automatic register port selection in extensible processor architecture
US9477473B2 (en) 2012-12-31 2016-10-25 Cadence Design Systems, Inc. Bit-level register file updates in extensible processor architecture
CN104809079B (zh) * 2015-04-14 2018-01-16 昆腾微电子股份有限公司 分页寄存器的访问方法和装置
US11251900B2 (en) 2019-12-20 2022-02-15 Silicon Laboratories Inc. System, apparatus and method for automatically determining configuration parameters for wireless devices
CN112929673B (zh) * 2021-01-19 2022-04-01 Tcl华星光电技术有限公司 解码方法、解码设备及可读存储介质
CN113128172B (zh) * 2021-04-23 2023-10-27 中国科学院计算技术研究所 超导寄存器堆装置及其控制方法

Family Cites Families (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2545789B2 (ja) * 1986-04-14 1996-10-23 株式会社日立製作所 情報処理装置
JPS62281040A (ja) * 1986-05-30 1987-12-05 Fujitsu Ltd ペ−ジ管理方式
JPS6330946A (ja) * 1986-07-25 1988-02-09 Alps Electric Co Ltd マルチタスクにおけるペ−ジング方式
US5193206A (en) * 1989-12-27 1993-03-09 Motorola, Inc. Reduce instruction set microprocessor
US5333284A (en) * 1990-09-10 1994-07-26 Honeywell, Inc. Repeated ALU in pipelined processor design
US5301340A (en) * 1990-10-31 1994-04-05 International Business Machines Corporation IC chips including ALUs and identical register files whereby a number of ALUs directly and concurrently write results to every register file per cycle
JP3181307B2 (ja) * 1991-04-25 2001-07-03 株式会社東芝 命令処理装置
US5493687A (en) * 1991-07-08 1996-02-20 Seiko Epson Corporation RISC microprocessor architecture implementing multiple typed register sets
JPH06266557A (ja) * 1993-03-15 1994-09-22 Fujitsu Ltd データ処理装置及びデータ処理方法
US5692170A (en) * 1995-04-28 1997-11-25 Metaflow Technologies, Inc. Apparatus for detecting and executing traps in a superscalar processor
US5737548A (en) * 1995-11-07 1998-04-07 Yach; Randy L. RISC-based microcontroller with peripheral function added to a split data bus

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20010079326A (ko) * 2001-07-06 2001-08-22 한제섭 리스크 코아의 집적회로
KR102132933B1 (ko) * 2019-09-09 2020-07-10 국방과학연구소 소프트웨어의 제어 흐름 보호장치 및 그 방법

Also Published As

Publication number Publication date
EP1012735A4 (en) 2006-05-17
US5809327A (en) 1998-09-15
EP1012735B1 (en) 2008-05-14
JP2009223897A (ja) 2009-10-01
HK1024546A1 (en) 2000-10-13
KR100462951B1 (ko) 2004-12-23
JP2001517343A (ja) 2001-10-02
CA2275172C (en) 2003-03-18
NO994169L (no) 1999-11-29
CN1121014C (zh) 2003-09-10
TW367439B (en) 1999-08-21
NO324825B1 (no) 2007-12-10
CN1251185A (zh) 2000-04-19
DE69839487D1 (de) 2008-06-26
JP5199931B2 (ja) 2013-05-15
JP4386467B2 (ja) 2009-12-16
WO1998044427A1 (en) 1998-10-08
CA2275172A1 (en) 1998-10-08
EP1012735A1 (en) 2000-06-28
MY115901A (en) 2003-09-30
NO994169D0 (no) 1999-08-27

Similar Documents

Publication Publication Date Title
JP5199931B2 (ja) Riscアーキテクチャを有する8ビットマイクロコントローラ
TWI541658B (zh) 資料處理裝置及半導體積體電路裝置
EP0138419B1 (en) Central processing unit for a digital computer
JP2002512399A (ja) 外部コプロセッサによりアクセス可能なコンテキストスイッチレジスタセットを備えたriscプロセッサ
JP3694531B2 (ja) Riscアーキテクチャを有する8ビットマイクロコントローラ
KR100272937B1 (ko) 마이크로프로세서및멀티프로세서시스템
JPH0810428B2 (ja) データ処理装置
JP4004915B2 (ja) データ処理装置
JPS589454B2 (ja) プログラマブル制御ラツチ機構
US6012138A (en) Dynamically variable length CPU pipeline for efficiently executing two instruction sets
US7853773B1 (en) Program memory space expansion for particular processor instructions
JP4073721B2 (ja) データ処理装置
US4896264A (en) Microprocess with selective cache memory
JP4545777B2 (ja) データ処理装置
JP2696578B2 (ja) データ処理装置
JP4498338B2 (ja) データ処理装置
JP4382076B2 (ja) データ処理装置
CA1250666A (en) Central processing unit for a digital computer
JP2003131873A (ja) マイクロコンピュータ
JPH0456340B2 (ko)

Legal Events

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

Payment date: 20111128

Year of fee payment: 8

LAPS Lapse due to unpaid annual fee