KR100272622B1 - 데이타 처리장치 - Google Patents
데이타 처리장치 Download PDFInfo
- Publication number
- KR100272622B1 KR100272622B1 KR1019920007701A KR920007701A KR100272622B1 KR 100272622 B1 KR100272622 B1 KR 100272622B1 KR 1019920007701 A KR1019920007701 A KR 1019920007701A KR 920007701 A KR920007701 A KR 920007701A KR 100272622 B1 KR100272622 B1 KR 100272622B1
- Authority
- KR
- South Korea
- Prior art keywords
- register
- data
- address
- bit
- arithmetic logic
- Prior art date
Links
- 238000012545 processing Methods 0.000 title claims abstract description 98
- 238000000034 method Methods 0.000 claims description 33
- 238000012546 transfer Methods 0.000 claims description 32
- 230000008859 change Effects 0.000 claims description 13
- 230000008569 process Effects 0.000 claims description 10
- 230000004044 response Effects 0.000 claims description 8
- 239000002253 acid Substances 0.000 claims 1
- 230000009467 reduction Effects 0.000 abstract description 9
- 239000000872 buffer Substances 0.000 description 300
- 238000010586 diagram Methods 0.000 description 98
- 230000006870 function Effects 0.000 description 47
- 238000006073 displacement reaction Methods 0.000 description 44
- 238000004364 calculation method Methods 0.000 description 21
- 230000002093 peripheral effect Effects 0.000 description 21
- 101100350216 Arabidopsis thaliana PDH2 gene Proteins 0.000 description 18
- 101100344898 Arabidopsis thaliana MED13 gene Proteins 0.000 description 16
- 101100437991 Oryza sativa subsp. japonica BURP17 gene Proteins 0.000 description 16
- 239000013598 vector Substances 0.000 description 11
- 238000004519 manufacturing process Methods 0.000 description 9
- 230000005540 biological transmission Effects 0.000 description 7
- 230000004048 modification Effects 0.000 description 7
- 238000012986 modification Methods 0.000 description 7
- 102100026191 Class E basic helix-loop-helix protein 40 Human genes 0.000 description 6
- 101710130550 Class E basic helix-loop-helix protein 40 Proteins 0.000 description 6
- 230000000694 effects Effects 0.000 description 6
- 239000004065 semiconductor Substances 0.000 description 5
- 239000000758 substrate Substances 0.000 description 5
- 230000009286 beneficial effect Effects 0.000 description 4
- 238000013461 design Methods 0.000 description 4
- 230000001360 synchronised effect Effects 0.000 description 4
- 102100026190 Class E basic helix-loop-helix protein 41 Human genes 0.000 description 3
- 101000765033 Homo sapiens Class E basic helix-loop-helix protein 41 Proteins 0.000 description 3
- 230000006872 improvement Effects 0.000 description 3
- 238000003860 storage Methods 0.000 description 3
- 239000002699 waste material Substances 0.000 description 3
- RSPISYXLHRIGJD-UHFFFAOYSA-N OOOO Chemical compound OOOO RSPISYXLHRIGJD-UHFFFAOYSA-N 0.000 description 2
- XUIMIQQOPSSXEZ-UHFFFAOYSA-N Silicon Chemical compound [Si] XUIMIQQOPSSXEZ-UHFFFAOYSA-N 0.000 description 2
- 238000004891 communication Methods 0.000 description 2
- 239000013078 crystal Substances 0.000 description 2
- 238000012423 maintenance Methods 0.000 description 2
- 230000000644 propagated effect Effects 0.000 description 2
- 229910052710 silicon Inorganic materials 0.000 description 2
- 239000010703 silicon Substances 0.000 description 2
- 230000015556 catabolic process Effects 0.000 description 1
- 238000013523 data management Methods 0.000 description 1
- 230000003247 decreasing effect Effects 0.000 description 1
- 238000006731 degradation reaction Methods 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 230000007274 generation of a signal involved in cell-cell signaling Effects 0.000 description 1
- 230000014759 maintenance of location Effects 0.000 description 1
- 238000013507 mapping Methods 0.000 description 1
- 230000009291 secondary effect Effects 0.000 description 1
- 238000004904 shortening Methods 0.000 description 1
- 238000003079 width control Methods 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30007—Arrangements for executing specific machine instructions to perform operations on data operands
- G06F9/3001—Arithmetic instructions
- G06F9/30014—Arithmetic instructions with variable precision
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/06—Addressing a physical block of locations, e.g. base addressing, module addressing, memory dedication
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/06—Addressing a physical block of locations, e.g. base addressing, module addressing, memory dedication
- G06F12/0615—Address space extension
- G06F12/0623—Address space extension for memory modules
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F15/00—Digital computers in general; Data processing equipment in general
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30007—Arrangements for executing specific machine instructions to perform operations on data operands
- G06F9/30036—Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30098—Register arrangements
- G06F9/30105—Register structure
- G06F9/30112—Register structure comprising data of variable length
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30098—Register arrangements
- G06F9/3012—Organisation of register space, e.g. banked or distributed register file
- G06F9/3013—Organisation of register space, e.g. banked or distributed register file according to data content, e.g. floating-point registers, address registers
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30098—Register arrangements
- G06F9/3012—Organisation of register space, e.g. banked or distributed register file
- G06F9/30138—Extension of register space, e.g. register cache
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30145—Instruction analysis, e.g. decoding, instruction word fields
- G06F9/3016—Decoding the operand specifier, e.g. specifier format
- G06F9/30167—Decoding the operand specifier, e.g. specifier format of immediate specifier, e.g. constants
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30181—Instruction operation extension or modification
- G06F9/30192—Instruction operation extension or modification according to data descriptor, e.g. dynamic data typing
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/32—Address formation of the next instruction, e.g. by incrementing the instruction counter
- G06F9/321—Program or instruction counter, e.g. incrementing
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/32—Address formation of the next instruction, e.g. by incrementing the instruction counter
- G06F9/322—Address formation of the next instruction, e.g. by incrementing the instruction counter for non-sequential address
- G06F9/324—Address formation of the next instruction, e.g. by incrementing the instruction counter for non-sequential address using program counter relative addressing
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/34—Addressing or accessing the instruction operand or the result ; Formation of operand address; Addressing modes
- G06F9/342—Extension of operand address space
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/34—Addressing or accessing the instruction operand or the result ; Formation of operand address; Addressing modes
- G06F9/35—Indirect addressing
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- Mathematical Physics (AREA)
- Computational Mathematics (AREA)
- Mathematical Analysis (AREA)
- Mathematical Optimization (AREA)
- Pure & Applied Mathematics (AREA)
- Computer Hardware Design (AREA)
- Executing Machine-Instructions (AREA)
- Multi Processors (AREA)
Abstract
데이터처리장치에 관한 것으로써, 물리적, 논리적규모의 증가를 최소한으로 하면서, 연속적으로 사용가능한 어드레스공간을 상대적으로 확장할 수 있게하기 위해, 8비트CPU(1) 내장의 기존의 16비트범용레지스터R0∼R7에 확장레지스터E0∼E7을 추가하고, 추가된 확장레지스터를 포함한 전체를 어드레스데이터 레지스터로써 일괄파악해서 메모리등을 액세스가능하게 한다. 어드레스연산은 확장레지스터 및 이것에 대응하는 범용레지스터의 쌍방을 1단위로 해서 실행한다. 확장레지스터도 포함한 전체로써 1단위의 어드레스데이터로써 파악해서 어드레스연산에서 발생하는 캐리나 빌림수를 처리한다.
확장레지스터는 어드레스생성에 용도를 한정하고 있으므로, 실행가능한 명령의 종별 또는 조합수는 데이터처리능력의 극단적인 저하를 초래하는 일없이 감소하고, CPU의 논리적 및 물리학적인 규모의 증대를 억제한다. 8비트CPU의 16비트범용레지스터RiH, RiL에 16비트의 확장레지스터Ei를 추가해서 전체로써 32비트로 구성되는 레지스터를 채용한다. 이 레지스터는 전부 또는 2분할하거나 2분할한 한쪽을 또 2분할해서 사용가능하다. 이것에 의해서, 소프트웨어상 및 하드웨어상에서의 레지스터의 사용상의 편리함이 양호하게 되고, 더나아가서는 CPU의 논리적 및 물리적인 규모의 축소를 달성한다. 또, 레지스터의 전체 또는 일부분을 사용한 어드레스데이터의 유지라는 점에 대해서는 리니어하게 이용가능한 어드레스공간의 확장이 용이하게 된다.
Description
제1도는 본 발명에 관한 데이터처리장치의 1실시예인 싱글칩 마이크로컴퓨터의 블럭도.
제2도는 CPU(1)의 내장레지스터의 제1구성예를 도시한 설명도.
제3도는 범용레지스터ROL, ROH∼R7L, R7H와 확장레지스터 E0∼E7의 데이터구성예를 도시한 설명도.
제4도는 메모리의 데이터구성예를 도시한 설명도.
제5도는 CPU(1)의 어드레싱모드와 실효어드레스의 계산방법의 1예를 도시한 설명도.
제6도는 CPU(1)의 어드레싱모드와 실효어드레스의 계산방법의 또 다른 예를 도시한 설명도.
제7도는 CPU(1) 내부의 1예의 블럭도.
제8도는 CPU(1)에 의한 리세트예외처리의 1예의 흐름도.
제9도는 즉각자료를 레지스터로 전송하는 명령의 1예의 흐름도.
제10도는 디스플레이스먼트를 갖는 레지스터 간접어드레싱모드에서 메모리의 내용을 레지스터로 전송하는 명령의 1예의 흐름도.
제11도는 포스트인클리먼트레지스터 간접어드레싱모드에서 메모리의 내용을 레지스터로 전송하는 명령의 1예의 흐름도.
제12도는 CPU(1)의 레지스터구성의 제2예를 도시한 설명도.
제13도는 CPU(1)의 레지스터구성의 제3예를 도시한 설명도.
제14도는 제13도의 예에 있어서의 범용레지스터를 어드레스 레지스터로써 지정하는 경우에 있어서의 어드레스의 확장가능한 범위를 도시한 설명도.
제15도는 CPU(1)의 레지스터구성의 제4예를 도시한 설명도.
제16도는 본 실시예의 마이크로컴퓨터(100)에 있어서의 1예의 어드레스맵을 도시한 도면.
제17도는 싱글칩 마이크로컴퓨터(100)에 포함되는 기능블럭선택회로의 1예의 논리도.
제18도는 외부어드레스단자를 20개로 하고, 실제로 이용할 수 있는 어드레스공간을 1M바이트로 하는 마이크로컴퓨터의 1예의 어드레스맵을 도시한 도면.
제19도는 제18도의 어드레스맵을 실현하는 기능블럭 선택회로의 논리도.
제20도는 제18(b)도에 도시되는 어드레스맵을 실현하는 기능블럭 선택회로의 논리도.
제21도는 상기 각종 범용레지스터, 확장레지스터, 프로그램카운터, 일시 레지스터의 구체적인 논리회로도.
제22도는 제10도에 도시되는 {MOV. B @(1234, RO), R1H}명령실행시의 범용레지스터 및 확장레지스터의 1예의 동작타이밍도.
제23도는 제11도에 도시되는 {MOV. L @R7 +, R2}명령실행시의 범용레지스터의 1예의 동작타이밍도.
제24도는 제7도에 도시되는 리드데이터버퍼RDB의 구체적인 1예의 논리회로도.
제25도는 제10도에 도시되는 {MOV. B @(1234, RO), R1H}명령실행시의 리드데이터버퍼의 1예의 동작타이밍도.
제26도는 제11도에 도시되는 {MOV. L @R7 +, R2}명령실행시에 있어서의 제24도의 리드데이터버퍼의 1예의 동작타이밍도.
제27도는 어드레스버퍼AB의 구체적인 1예의 논리회로도.
제28도는 제10도에 도시되는 {MOV. B @(1234, RO), R1H}명령실행시에 있어서의 제27도의 어드레스버퍼의 1예의 동작타이밍도.
제29도는 어드레스버퍼AB의 변형예를 도시한 논리도.
제30도는 제10도에 도시되는 {MOV. B @(1234, RO), R1H}명령실행시에 있어서의 제29도의 어드레스버퍼의 1예의 동작타이밍도.
제31도는 상기 CPU(1)의 실행가능한 산술연산명령의 설명도.
제32도는 본 발명의 1실시예에 관한 싱글칩 마이크로컴퓨터의 블럭도.
제33도는 본 발명자에 의해서 미리 검토된 레지스터구성의 1예의 설명도.
제34도는 제33도의 레지스터구성에 있어서의 데이터구성도.
제35도는 제33도의 레지스터구성을 채용하는 경우에 있서의 메모리상의 데이터 구성도.
제36도는 본 발명에 관한 데이터 처리장치의 1실시예인 CPU의 레지스터구성을 설명하는 도면.
제37도는 CPU의 레지스터상의 데이터구성도.
제38도는 CPU가 관리하는 메모리상의 데이터구성의 1예의 설명도.
제39도는 CPU에 관한 실효어드레스 계산방법의 1예의 설명도.
제40도는 CPU에 의한 실효어드레스 계산방법의 다른 예의 설명도.
제41도는 CPU에 의한 실효어드레스 계산방법의 다른 예의 설명도.
제42도는 CPU의 명령포맷의 1예의 설명도.
제43도는 CPU의 다른 명령포맷의 설명도.
제44도는 CPU의 그외의 명령포맷의 설명도.
제45도는 CPU의 다른 명령포맷의 설명도.
제46도는 CPU의 또 다른 명령포맷의 설명도.
제47도는 CPU의 또 다른 명령포맷의 설명도.
제48도는 CPU의 또 그외의 명령포맷의 설명도.
제49도는 CPU의 나머지의 일부의 명령포맷의 설명도.
제50도는 CPU의 1실시예의 블럭도.
제51도는 CPU의 내부동작 흐름도의 1예의 설명도.
제52도는 CPU의 다른 내부동작의 흐름도.
제53도는 CPU의 그외의 내부동작의 흐름도.
제54도는 CPU의 다른 내부동작의 흐름도.
제55도는 CPU의 또 다른 내부동작의 흐름도.
제56도는 CPU의 산술연산명령의 설명도.
제57도는 CPU의 명령과 어드레싱모드의 조합을 도시한 설명도.
제58도는 CPU의 레지스터의 구체적인 회로구성도.
제59도는 CPU의 레지스터의 1예의 동작 타이밍도.
제60도는 CPU의 레지스터의 다른 동작 타이밍도의 설명도.
제61도는 CPU의 포함되는 레지스터선택부의 회로설명도.
제62도는 레지스터의 지정형태에 관한 설명도.
제63도는 레지스터선택부의 1예의 동작 타이밍도.
제64도는 레지스터선택부의 1예의 구성설명도.
제65도는 CPU에 포함되는 내부버스의 셀렉터의 1예의 회로구성도.
제66도는 리드데이터버퍼의 1예의 회로구성도.
제67도는 리드데이터버퍼의 동작타이밍도.
제68도는 리드데이터버퍼의 1예의 회로구성도.
제69도는 리드데이터버퍼의 동작타이밍도.
제70도는 어드레스버퍼의 1예의 회로구성도.
제71도는 어드레스버퍼의 동작타이밍도.
제72도는 어드레스버퍼의 다른 예를 도시한 구성을 도시한 설명도.
제73도는 제72도의 어드레스버퍼의 동작타이밍도.
제74도는 CPU의 1예의 어드레스맵을 도시한 도면.
제75도는 모드별 메모리상의 데이터의 구성을 도시한 설명도.
제76도는 최소모드시에 있어서의 CPU내부의 1예의 동작흐름도.
제77도는 최소모드시에 있어서의 실효어드레스 계산방법의 1예의 설명도.
제78도는 모드별의 CPU의 동작설명도.
제79도는 싱글칩 마이크로컴퓨터의 동작모드 설명도.
제80도는 싱글칩 마이크로컴퓨터의 단자기능 설명도.
제81도는 본 발명의 2실시예에 관한, 싱글칩 마이크로컴퓨터의 블럭도.
제82도는 제81도의 싱글칩 마이크로컴퓨터에 있어서의 CPU의 어드레스맵을 도시한 도면.
제83도는 제81도의 싱글칩 마이크로컴퓨터에 포함되는 버스컨트롤러의 블럭도.
제84도는 제81도의 CPU에 적용되는 리드데이터버퍼의 1예의 설명도.
제85도는 제81도의 CPU에 적용되는 라이트데이터버퍼의 1예의 설명도.
제86도는 버스컨트롤러 및 CPU에 관한 1예의 동작타이밍도.
제87도는 버스컨트롤러 및 CPU에 관한 다른 동작타이밍도.
제88도는 버스컨트롤러의 1예의 동작설명도.
제89도는 버스컨트롤러의 다른 동작설명도.
제90도는 버스컨트롤러의 그외의 동작설명도.
제91도는 버스컨트롤러의 다른 동작설명도.
제92도는 CPU의 다른 실시예의 블럭도.
본 발명은 데이터처리장치, 더나아가서는 마이크로컴퓨터에 관한 것으로써, 예를들면 싱글칩 마이크로컴퓨터 및 그 중앙처리장치(CPU)에 이용해서 유효한 기술에 관한 것이다.
싱글칩 마이크로컴퓨터에는 그들 중앙처리장치가 주로 취급하는 데이터길이에 의해서 4비트, 8비트, 16비트 마이크로컴퓨터 등이 있다. 현재, 이들중에서는 8비트 싱글칩 마이크로컴퓨터가 가장 많이 사용되어 기기조립제어용으로써 사용되고 있다. 이와 같은 8비트 싱글칩 마이크로컴퓨터로써는 (주)히다찌제작소 평성원년6월 발행 「H8/330 HD6473308 HD643308 하드웨어매뉴얼」 등이 있다.
상기 8비트 싱글칩 마이크로컴퓨터(H8/300)중 중앙처리장치(이하, 8비트 CPU)는 주로 취급하는 데이터길이가 8비트이다.
이 때문에 8비트 CPU는 8비트길이의 레지스터 또는 누산기와 또한 8비트레지스터의 2배 길이인 16비트레지스터를 갖는다.
이들 8비트CPU는 특히 제한되지 않지만 데이터처리에는 주로 8비트레지스터 또는 16비트레지스터를 사용하고, 메모리를 참조하기 위한 어드레스레지스터로써는 16비트레지스터만을 사용한다. 이와 같은 어드레스레지스터로써의 16비트레지스터는 인덱스레지스터, 스택포인터, 프로그램카운터 등으로 불리우는 경우가 있다.
상기 8비트CPU에서는 명령의 최소단위가 16비트(2바이트)로 되어 있다. 또, 명령 또는 16비트데이터를 메모리에 배치하는 경우에는 우수에서 시작되는 연속한 2바이트의 영역에 배치하도록 한정되어 있다. 또, 상기 8비트CPU의 연산명령은 CPU내부의 레지스터사이에서만 가능하게 되고 메모리에 배치한 데이터의 조작은 이러한 데이터를 일단 CPU내부의 레지스터로 전송한후에 연산명령에 의한 조작을 실행해야만한다. 이와 같은 제한을 갖는 대신에 CPU의 내부구성, 특히 CPU의 실행상태를 제어하는 제어부의 구성을 단순화하여 논리적 및 물리적규모의 축소를 실현하고 있다. 논리적 및 물리적규모의 축소의 효과로써 제조비용을 삭감할 수 있다. 또, 부차적인 효과로써 동작속도의 향상을 도모할 수 있다. 즉, 상대적으로 적은 제조비용으로 상대적으로 큰 처리성능을 실현할 수 있다.
그러나, 상기 8비트CPU에서는 어드레스레지스터가 16비트길이이므로, CPU가 참조할 수 있는 메모리는 65536바이트 (=216이하 64k바이트)이다. 이것에 대해서 8비트 싱글칩 마이크로컴퓨터가 사용되는 기기조립제어의 응용에서는 기기의 고성능화에 의해서 대용량의 프로그램 또는 데이터를 취급하는 것이 요구되고 있다.
이와 같은 요구에 대해서 상기 CPU의 상기 논리적, 물리적규모의 축소, 또는 상대적으로 적은 제조비용으로 상대적으로 큰 처리성능을 실현의 장점을 유지하면서 64k바이트이상의 메모리를 참조할 수 있는 CPU로써 다음의 것이 있다.
즉, 8비트CPU에 8비트의 페이지레지스터를 부가하고, 16비트레지스터와 조합해서 어드레스를 생성하는 것에 의해 참조할 수 있는 메모리를 16777216바이트 (=224, 이하 16M바이트)로 한 싱글칩 마이크로컴퓨터의 예로써 (주)히다찌제작소 소화 63년12월 발행 「H8/532 HD6475328 HD6435328 하드웨어매뉴얼」등이 있다. 이와 같은 메모리참조방법은 페이지레지스터와 어드레스레지스터가 완전히 독립하고 있으므로, 하드웨어의 실현방법이 간단화되는 반면 페이지레지스터와 어드레스레지스터 사이에 캐리 또는 빌림수의 전파가 실행되지 않고, 프로그램 또는 컴파일러를 작성하는 경우에는 1군의 프로그램 또는 데이터가 페이지경계를 넘지않도록 항상 주의해야만한다. 즉, 상기의 예에서 명령을 O번지에서 실행하면 당초 프로그램카운터는 H'OOOO (H'는 16진수를 나타낸다), 이것에 대응하는 페이지레지스터(이하, 코드페이지 레지스터)는 H'OO이다. 분기명령을 사용하지 않고 연산명령등을 계속 실행하여65535 (H' FFFF)번지에 도달한후 다음의 명령을 실행하고자한 경우 프로그램카운터는 H'FFFF→H'OOOO으로 되어 초과한다. 이때의 캐리는 코드페이지레지스터로 전파되지 않으므로 다음의 명령은 0번지로 되돌아간다. 이 때문에 프로그램은 64k바이트를 넘지않도록 분할해서 작성하고, 분할한 프로그램을 각각 다른 페이지에 할당해서 어느 페이지에 있는 프로그램에서 다른 페이지에 있는 프로그램으로 실행을 이행하는 경우는 페이지간 분기명령을 사용할 필요가 있다. 즉, 프로그램중에서 분기명령을 사용하는 경우는 분기행선지가 동일 페이지내에 있는가 다른 페이지에 있는가를 의식해서 페이지내 분기명령과 페이지간 분기명령을 적절하게 사용할 필요가 있다. 데이터도 마찬가지로 64k바이트를 넘지않도록 분할해서 관리할 필요가 있다. 즉, 소위 포스트인클리먼트레지스터간접모드 등과 같이 메모리를 액세스할때마다 어드레스레지스터의 내용을 갱신해가는 경우 상기와 마찬가지로 어드레스레지스터가 초과해도 대응하는 페이지레지스터(이하, 데이터페이지레지스터)에 캐리가 전파되지않는다. 또, 디스플레이스먼트를 갖는 레지스터 간접에서 16비트의 디스플레이스먼트를 사용하는 경우 16비트의 어드레스레지스터에 16비트의 디스플레이스먼트를 가산하여 캐리 또는 빌림수가 발생해도 페이지레지스터에는 전파되지않고 16비트의 가산결과와 페이지레지스터가 조합되어 어드레스가 생성된다. 즉, 페이지레지스터가 H'OO, 어드레스레지스터가 H'FFFF디스플레이스먼트가 H'4000의 경우, 결과로써 얻어지는 어드레스는 H'003FFF로 된다. 따라서, 페이지레지스터를 이용한 어드레스확장기술에 있어서는 실질적으로 이용가능한 어드레싱모드도 제한된다.
이와 같은 프로그램 또는 데이터가 페어지경계를 넘지않도록 항상 주의해서 페이지레지스터의 관리를 실행하는 것은 소위 고급언어를 사용하여 프로그램한 내용을 CPU의 소위 기계어에 의한 프로그램(목적프로그램)으로 자동적으로 변환하는 컴파일러의 작성상의 큰 제약으로 되고, 컴파일러의 설계효율을 저하시키며, 또 작성되는 목적프로그램의 규모를 현저하게 크게하고, 또 그 결과로써 프로그램의 실행시간도 저하한다.
또, 64k바이트이하의 메모리공간에서 충분한 응용에 대해서 상기 페이지레지스터는 데이터레지스터로써 사용할 수 없으므로 논리적 및 물리적으로 쓸모없게 되어 상기 상대적으로 적은 제조비용으로 상대적으로 큰 처리성능을 실현하는 목적에 위배된다.
이것에 대해서 주식회사 히다찌제작소 소화62년9월발행 「히다찌 16비트 마이크로프로세서 HD641016」등에 기재되어 있는 16비트CPU에서는 16M바이트의 연속한 어드레스공간을 사용할 수 있지만 주로 데이터처리를 위해 32비트레지스터를 갖는 등 CPU전체의 기능이 8비트CPU에 대해서 현저하게 높고, 이것에 비례해서 논리적인 규모나 칩점유면적이라는 물리적인 규모가 8비트CPU에 비해서 상당히 크게 되고, 이 때문에 기기제어응용에서 시스템구성에 필요한 타이머 등의 주변기능을 해당 16비트CPU와 함께 1칩에 내장할 수 없거나 충분한 기억용량의 메모리를 내장할 수 없어 기기제어응용을 위한 필요한 시스템을 온칩화해서 소위 싱글칩 마이크로컴퓨터화를 실현하는 것이 어렵게 되는 문제가 본 발명자에 의해서 발견되었다.
본 발명의 목적은 논리적 및 물리적규모의 증가를 최소한으로 하면서 연속적으로 사용가능한 어드레스공간을 상대적으로 확장할 수 있는 데이터처리장치, 예를들면 8비트CPU를 사용해서 64k바이트 이상의 어드레스공간을 연속적으로 사용할 수 있는 데이터처리장치를 제공하는 것이다.
본 발명의 다른 목적은 명령의 종류를 상대적으로 극단적으로 증가시키지 않고 연속하는 상대적으로 넓은 어드레스공간을 이용할 수 있으며, 또 해당 어드레스공간의 넓이에 맞도록 상대적으로 풍부한 어드레싱모드를 서포트할 수 있는 데이터처리장치를 제공하는 것이다.
본 발명의 또 다른 목적은 상기 목적에 부가해서 고급언어에 의해 작성된 프로그램을 효율있게 실행할 수 있는 데이터처리장치를 제공하는 것이다.
본 발명의 상기 및 그외의 목적과 새로운 특징은 본 명세서의 기술 및 첨부도면에서 명확하게 될 것이다.
본원에 있어서 개시되는 발명중 대표적인 것의 개요를 간단히 설명하면 다음과 같다.
즉, 어드레스데이터의 유지에는 전체가 사용되고, 데이터의 유지에는 그 일부분이 사용되는 소정비트수의 데이터유지수단을 중앙처리장치(CPU)에 마련하는 것으로써, 예를들면 8비트CPU에 내장된 기존의 16비트레지스터에 어드레스전용의 확장레지스터를 추가하고, 추가된 확장레지스터를 포함한 전체를 어드레스데이터로써 일괄 파악해서 메모리등을 액세스가능하게 하는 것이다. 이때, 어드레스연산은 확장레지스터와 대응레지스터의 쌍방을 하나의 단위로 해서 실행되고, 어드레스데이터를 유지할 때 이러한 레지스터의 갱신은 상기 확장레지스터도 한꺼번에 실행된다. 즉, 확장레지스터를 포함한 전체로 하나의 단위의 데이터로써 파악해서 어드레스연산에서 발생하는 캐리나 빌림수가 처리된다.
상기 데이터유지수단의 전체를 이용했을때와 상기 일부분을 이용했을때의 기능의 상위를 감안하면 데이터처리장치의 내부, 외부에 있어서, 데이터유지수단의 전체를 일괄하는 데이터전송제어와 상기 데이터유지수단의 상기 일부분을 일괄하는 데이터전송제어의 쌍방을 가능하게 한다. 연산수단에 대해서도 상기 연산수단의 상기 전체를 이용하는 어드레스데이터에 대한 산술적 연산(시프트연산을 포함해도 좋다)과 상기 데이터유지수단의 일부분을 이용하는 데이터에 대한 산술적 및 논리적인 연산을 실행하면 좋다. 이때의 어드레스연산의 효율화를 위해서 연산수단은 상기 데이터유지수단의 전체에 대한 산술적인 연산을 단위마진사이클에서 실행가능한 연산비트수를 가지면 좋고, 일괄파악되는 어드레스데이터의 연산에서 발생하는 캐리나 빌림수의 처리를 다른 사이클에서 실행하지 않아도 좋다.
다음에 기술하는 바와 같이 상기 데이터유지수단의 채용에 의해서 리니어한 어드레스공간이 확장되지만, 이것과 함께 어드레싱모드를 다양화할 때, 그 다양화에 따라서 어드레싱모드와 명령의 조합도 필연적으로 증대하지만 이때 그 증대에 의해서 제어수단의 논리적 및 물리적규모의 증대를 극력 억제하며, 또한 그것이 데이터처리능력을 현저하게 저하시키지 않도록 하기 위해서는 상기 데이터유지수단의 상기 일부분에 대한 산술적 및 논리적연산제어를 상기 데이터유지수단과 데이터처리장치외부 사이에서는 1개의 명령으로 직접적으로는 불가능하게 하는 것이 득책이다. 이때, 주변회로의 컨트롤레지스터등에 대한 비트조각에 대해서는 하나의 명령으로 직접 실행하는 것이 좋다.
상기한 수단에 의하면, 데이터유지수단의 전체에 대한 이용은 어드레스데이터에 한정되고, 어드레스데이터의 비트수는 그외의 데이터의 유지에 이용되는 상기 데이터유지수단의 일부분의 비트수에 비해서 확장되고, 이것은 리니어하게 이용가능한 어드레스공간을 확장하도록 작용한다. 어드레스공간이 리니어하게 확장되는 것은 페이지레지스터에 의한 종래의 어드레스공간 확장기술에 비해서 여러 가지의 어드레스수식을 가능하게해서 어드레스공간의 넓이에 맞도록 상대적으로 풍부한 어드레싱모드를 서포트한다. 또, 이때 상기 데이터유지수단의 전체의 이용은 어드레스생성에 용도를 한정하고 있고, 이것은 CPU의 논리적 및 물리적인 규모의 증대를 억제하여 시스템구성에 필요한 주변기능이나 메모리 등의 온칩화에 의한 싱글칩 마이크로컴퓨터화를 용이하게 실현가능하게 작용한다.
CPU의 레지스터등으로써 데이터의 유지에는 전부 또는 2분할하거나 또는 2분할한 한쪽을 또 2분할해서 사용되고, 어드레스데이터의 유지에는 전체 또는 일부분이 사용되는 소정비트수의 병렬정보를 유지하는 데이터유지수단을 채용한다. 예를들면, 8비트CPU의 16비트, 범용레지스터에 16비트의 확장레지스터를 추가하고, 전체로써 32비트의 레지스터를 일괄하거나 또는 그 일부분을 어드레스레지스터로써 사용함과 동시에 2분할해서 16비트데이터레지스터로 하고, 또 16비트데이터레지스터의 한쪽을 8비트레지스터로 해서 사용가능하게 한다.
n비트데이터의 연산명령과 2n 비트데이터의 연산명령을 고려할 때 명령길이를 단축해서 프로그램효율을 향상시키기 위해서는 전체를 2등분할해서 사용되는 부분과 2등분할된 한쪽을 또 2등분할해서 사용되는 부분을 갖도록 각각의 데이터유지수단을 구성함과 동시에 2등분할에서 이용되는 부분의 전체의 수가 또 2등분할에서 이용되는 부분의 전체의 수와 같게 되도록 여러단위의 상기 데이터유지수단을 마련하면 좋다. 예를들면, 8비트레지스터로써 이용가능한 부분의 수와 16비트레지스터로써 이용가능한 부분의 수가 같은 수로 되도록 전체로써 32비트의 레지스터를 여러개 마련한다.
명령의 단위는 데이터의 단위의 2배 길이로 할 수 있다.
예를들면 CPU의 레지스터를 32비트로 확장했을 때 장래에 있어서의 4G바이트의 어드레스공간의 사용을 고려할 때에는 명령길이를 2바이트단위로써 24비트절대 어드레스 디스플레이스먼트를 예약영역을 포함해서 4바이트로 한다. 또, 실행수단 및 제어수단의 구성을 단순화하여 논리적 및 물리적인 규모의 축소에 기여하기 위해서는 명령코드중의 실효어드레스지정부의 최하위비트를 명령코드중의 워드의 최하위비트로 하는 것이 바람직하다.
레지스터와 같은 상기 데이터유지수단을 위한 선택회로의 논리적 및 물리적인 규모를 축소하기 위해서는 데이터유지수단을 지정하는 부분이 명령의 단위중의 일부분에 고정된 명령포맷을 채용하는 것이 득책이다. 또, 그 경우에 상기 지정하는 부분은 여러단위중에서 필요한 데이터유지수단을 지정하는 영역과 1개의 데이터유지수단내의 어떤 부분인가를 지정하는 영역으로 구성하면 좋다. 이때, 제어수단은 명령중에서 지정되는 데이터크기에 따라서 상기 데이터유지수단내의 어떤 부분인가를 지정하는 영역이 2중분할된 어떤 부분을 지정하던가 또 2등분할된 어떤부분을 지정하는가를 결정할 수 있다.
데이터유지수단 등에서의 라이트버퍼수단의 구성을 단순화하며, 또한 데이터처리장치의 논리적 및 물리적인 규모를 축소하기 위해서는 상기 라이트버퍼수단에는 상기 데이터유지수단의 비트수에 일치하는 비트수의 제1의 부분과 상기 데이터유지수단의 2등분할된 영역의 비트수와 일치하는 비트수의 제2의 부분을 마련하고, 데이터라이트의 지시에 따라서 데이터유지수단의 내용을 일괄해서 상기 제1의 부분에 저장하고, 제1의 부분에 저장한 데이터를 2회에 나누어서 제2의 부분으로 전송해서 출력하도록 하면 좋다. 예를들면 데이터 유지수단이 32비트일 때 라이트버퍼수단은 제1의 부분을 32비트로 하고, 제2의 부분을 16비트로 한다.
데이터유지수단등으로의 리드버퍼수단의 구성을 단순화하며, 또한 데이터처리장치의 논리적 및 물리적인 규모를 축소하기 위해서 리드버퍼수단은 상기 데이터유지수단의 비트수와 일치하는 비트수를 전체로써 구비하고, 또한 상위측과 하위측으로 2등분할되고, 데이터리드의 지시에 따라서 하위측은 리드시에 항상 리드데이터가 저장되고, 상위측은 저장하던가 하지않던가가 지정되도록 하면 좋다. 예를들면, 리드버퍼수단을 32비트의 마스터단과 32비트의 슬레이브단으로 구성하고, 하위측16비트는 리드시는 항상 입력하고, 상위측은 긴워드데이터의 하위워드리드시에는 입력을 금지하는 구성으로 한다.
이것에 의해, 명령코드중의 24비트의 실효어드레스지정부와 긴워드데이터를 마찬가지로 취급할 수 있게 된다.
버스액세스를 위한 구성이라는 점에 있어서 마이크로컴퓨터를 전체의 논리적 및 물리적인 규모를 축소하기 위해서는 어드레스공간중에 버스폭 등의 다른 상태에서 액세스를 실행하는 영역을 가지며, 또한 CPU외에 리드라이트를 실행하는 데이터전송장치가 있을 때 리드라이트의 제어는 공통의 버스제어장치로 실행하고, 버스제어장치가 CPU 또는 다른 데이터전송장치의 리드버퍼수단, 라이트버퍼수단의 제어를 실행하며, 또 필요에 따라서 CPU 또는 다른 데이터전송장치를 대기상태로 하도록 구성한다.
상기한 수단에 의하면, 8비트CPU의 16비트 범용레지스터에 16비트의 확장레지스터를 추가해서 전체로써 32비트로 구성되는 데이터유지수단은 데이터의 유지에는 전부 또는 2등분할하거나 또는 2분할한 한쪽을 또 2분할해서 사용가능하고, 이것이 소프트웨어상 및 하드웨어상에서의 데이터유지수단의 사용상의 편의를 양호하게 하고, 더나아가서는 데이터처리장치의 논리적 및 물리적인 규모의 축소를 달성한다. 또, 데이터유지수단의 전체 또는 일부분을 사용한 어드레스데이터의 유지라는 점에 관해서는 리니어하게 이용가능한 어드레스공간의 확장을 용이화하며, 또 페이지레지스터에 의한 어드레스공간 확장기술에 비해서 프로그램의 작성 및 컴파일을 용이화한다.
이하, 제1도∼제31도를 사용해서 본 발명의 싱글칩 마이크로컴퓨터의 1실시예가 설명된다.
제1도에는 본 발명에 관한 마이크로컴퓨터의 1실시예인 싱글칩 마이크로컴퓨터가 도시된다.
상기 싱글칩 마이크로컴퓨터(100)은 전체의 제어를 담당하는 CPU(중앙처리장치)(1), CPU(1)의 동작프로그램 등을 보유하는 ROM(리드온리메모리) (2), CPU(1)의 작업영역 및 데이터의 일시기억영역등으로써 이용되는 RAM(랜덤액세스메모리)(3), 타이머(4), 직렬통신인터페이스(SCI)(5), 클럭펄스 발생기(68) 및 입출력포트(IOP)(61)∼(67)등의 기능블럭으로 구성되고, 이들은 내부버스(69)로 서로 접속되어 이루어진다.
내부버스는 특히 제한되지 않지만 어드레스버스, 데이터버스, 컨트롤버스를 포함한다. 이러한 싱글칩 마이크로컴퓨터(100)은 공지의 반도체집적회로 제조기술에 의해서 실리콘기판과 같은 1개의 반도체기판상에 형성되어 있다.
싱글칩 마이크로컴퓨터(100)은 클럭펄스 발생기CPG의 단자XTAL, EXTAL에 접속되는 수정발진자 또는 외부에서 입력되는 외부클럭에 따라서 생성되는 기준클럭에 동기해서 동작을 실행한다.
이 기준클럭의 최소단위를 상태라 부른다. 또, 도면에 있어서, Vss, Vcc는 전원단자이다.
상기 CPU(1)에 리세트신호RES가 부가되면, 싱글칩 마이크로컴퓨터(100)은 리세트상태로 된다. 이 리세트상태를 해제하면 CPU(1)은 개시어드레스를 리드해서 이 개시어드레스에서 명령의 리드를 개시하는 리세트 예외처리를 실행한다. 상기 개시어드레스는 특히 제한되지 않지만 0번지에 저장되어 있는 것으로 한다. 그후, CPU(1)은 특히 제한되지 않지만, 순차로 ROM(2)에서 명령을 리드해서 해독하고, 그 해독결과에 따라서 데이터의 처리 또는 RAM(3), 타이머(4), SCI(5), 입출력포트(61)∼(67)등과 데이터의 전송을 실행한다. 즉, CPU(1)은 입출력포트(61)∼(67)등에서 입력되는 데이터 또는 SCI(5)등에서 입력되는 지시를 참조하면서 ROM(2)에 기억되어 있는 명령에 따라서 처리를 실행하고, 그 결과에 따라서 입출력포트 (61)∼(67), 타이머(4) 등을 사용해서 외부로 신호를 출력하고, 각종 기기의 제어를 실행하는 것이다. 특히 제한되지 않지만 상기 ROM(2), RAM(3), 타이머(4) 등의 리드/라이트는 바이트(예를들면 8비트)/워드(예를들면 16비트)의 어느것도 2상태에서 실행하는 것으로 한다.
제2도에는 CPU(1)의 내장레지스터의 제1구성예가 도시된다.
CPU(1)은 각각 16비트길이의 8개의 범용레지스터ROL, ROH∼R7L, R7H와 각각 8비트길이의 8개의 확장레지스터E0∼E7, 24비트길이의 프로그램카운터PC 및 8비트길이의 조건코드레지스터CCR을 갖고 있다. 범용레지스터ROL, ROH∼R7L, R7H는 특히 제한되지 않지만 상위 8비트와 하위 8비트를 독립시켜서 8비트길이의 데이터를 저장하는 것도 상위 및 하위를 연결해서 16비트길이의 데이터를 저장할 수도 있다.
범용레지스터ROL, ROH∼R7L, R7H를 어드레스레지스터로써 사용하는 경우는 범용레지스터가 보유하는 16비트를 어드레스의 하위16비트로 하고, 대응하는 확장레지스터가 보유하는 8비트를 어드레스의 상위 8비트로 해서 합계24비트의 어드레스를 생성하는 것이다. 즉, CPU(1)은 최대한 24비트의 어드레스로 규정되는 연속적인 어드레스공간을 이용할 수 있다. 또, 이 24비트의 어드레스를 여러 모드로 수식할 수 있게 되어 있다.
예를들면 상기 24비트어드레스에 디스플레이스먼트를 가산하는 정수배를 하거나 또는 다른 레지스터의 내용을 가산한다는 것을 실행할 수 있다. 이 수식을 실행하는 경우 하위16비트의 계산으로 캐리 또는 빌림수가 발생한 경우에는 상위8비트에 자릿수올림 또는 자릿수내림을 실행한다. 이 결과를 어드레스레지스터에 보유시킨 경우에는 동시에 상위 8비트의 결과도 대응하는 확장레지스터에 보유시킨다.
확장레지스터E0∼E7은 어드레스레지스터로써의 이용에 전용화되고, 데이터레지스터로써는 사용할 수 없게 되어 있다. 확장레지스터E0∼E7의 조작은 특히 제한되지 않지만 어드레스데이터를 전송하기 위해 확장레지스터를 범용레지스터와 조합해서 로드/저장하는 경우와 확장레지스터와 범용레지스터사이에서 데이터를 전송하는 경우에 한정되고, 범용레지스터와는 관계없이 확장레지스터에 대해서 연산을 실행하는 것은 할 수 없게 되어 있다. 이러한 제한은 CPU(1)이 실행해야할 명령을 해독해서 제어신호를 생성하는 제어부에 의해서 실현된다.
프로그램카운터PC는 24비트의 카운터이며, CPU(1)이 다음에 실행하는 명령의 어드레스를 나타내고 있다. 조건코드레지스터CCR은 인터럽션마스크비트(I)와 캐리플래그(C), 제로플래그(Z), 네가티브플래그(N), 초과플래그(V)를 포함하고 있다. 인터럽션마스크비트는 1일 때 CPU(1)을 인터럽션금지상태로 하고, 0일 때 인터럽션허가상태로 한다. 그외의 플래그는 연산의 결과등을 반영한다.
제3도에는 범용레지스터ROL, ROH∼R7L, R7H와 확장레지스터E0∼E7의 데이터구성예가 도시된다. CPU(1)이 취급하는 바이트데이터는 범용레지스터의 상위RiH(i=1, 2, ... 7) 또는 하위RiL 저장된다. 범용레지스터의 상위RiH를 사용하는 경우 비트15가 데이터의 최상위비트(MSB)에, 비트 8이 최하위비트(LSB)에 각각 대응한다. 마찬가지로 범용레지스터의 하위RiL을 사용하는 경우 비트7이 최상위비트에, 비트0이 최하위비트에 대응한다. 워드데이터는 범용레지스터RiL 및 RiH에 저장된다. 비트15가 데이터의 최상위비트에, 비트0이 최하위비트에 각각 대응한다. 어드레스데이터는 확장레지스터Ei와 범용레지스터RiL, RiH에 저장된다. 확장레지스터Ei의 비트7이 어드레스데이터의 최상위비트에, 범용레지스터RiL의 비트0이 최하위비트에 각각 대응한다.
CPU(1)은 이들외에 1비트데이터 또는 2진화 10진수데이터 등을 취급하지만, 이들은 본 발명에 직접적으로는 관계없으므로 상세한 설명은 생략한다.
제4도에는 RAM(3), ROM(2) 등의 메모리의 데이터구성예가 도시된다. 특히 제한되지 않지만 메모리는 바이트단위로 어드레스가 할당되어 있다. CPU(1)이 취급하는 바이트데이터는 메모리의 각 어드레스(1)에 저장된다. 워드데이터는 메모리의 우수어드레스(2m)과 기수어드레스(2m+1)를 연결해서 저장된다. 우수어드레스의 비트7이 데이터의 최상위비트에, 기수어드레스의 비트0이 최하위비트에 각각 대응한다. 어드레스데이터는 우수어드레스(4m)에서 시작되는 4바이트의 어드레스(4m, 4m+1, 4m+2, 4m+3)에 저장된다. 선두의 우수어드레스의 1바이트는 장래확장용으로 시스템상 예약되며, 예를들면 이용이 제한되어 있다. 다음의 기수어드레스의 비트7이 어드레스데이터의 최상위비트에, 4바이트째의 기수어드레스의 비트0이 최하위비트에 각각 대응한다.
제5도 및 제6도에는 CPU1의 어드레싱모드와 실효어드레스의 계산방법의 1예가 도시된다.
레지스터 간접모드에서는 명령코드중에 레지스터를 지정하는 부분을 포함하고, 이 명령코드로 지정된 범용레지스터와 이것에 대응하는 확장레지스터가 보유하는 24비트를 어드레스로써 메모리상의 어드레스를 지정한다.
디스플레이스먼트를 갖는 레지스터 간접모드는 상기 레지스터 간접모드와 마찬가지로 얻어진 24비트의 어드레스에 명령코드중에 포함되는 디스플레이스먼트를 가산한 결과를 어드레스로써 메모리상의 어드레스를 지정한다. 가산결과는 어드레스의 지정에만 사용되고, 확장레지스터Ei 및 범용레지스터RiL, RiH의 내용에는 반영되지 않는다. 특히 제한되지않지만 디스플레이스먼트는 24비트 또는 16비트이고, 16비트 디스플레이스먼트의 경우는 가산시에 상위 8비트가 부호확장된다. 즉, 전체24비트의 디스플레이스먼트의 상위 8비트는 16비트 디스플레이스먼트의 비트15와 같은 값인 것으로써 가산이 실행된다.
포스트인클리먼트레지스터 간접모드는 상기 레지스터간접과 마찬가지로 얻어진 24비트의 어드레스에서 메모리상의 어드레스를 지정한다.
그후, 이 어드레스에 1또는 2또는 4를 가산하고, 그 가산결과가 확장레지스터Ei 및 범용레지스터RiH, RiL에 저장된다. 메모리상의 바이트데이터를 지정하는 경우는 1이, 워드데이터를 지정하는 경우는 2가, 어드레스데이터를 지정하는 경우는 4가 각각 가산된다.
프리디클리먼트레지스터 간접모드는 상기 레지스터간접과 마찬가지로 얻어진 24비트의 어드레스에서 1또는 2또는 4를 감산해서 얻어지는 24비트의 어드레스에서 메모리상의 어드레스를 지정한다.
그후, 그 감산결과가 확장레지스터Ei 및 범용레지스터RiH, RiL에 저장된다. 메모리상의 바이트데이터를 지정하는 경우는 1이, 워드데이터를 지정하는 경우는 2가, 어드레스데이터를 지정하는 경우는 4가 각각 감산된다.
프로그램카운터 상대모드는 프로그램카운터PC가 보유하는 24비트의 어드레스에 명령코드중에 포함되는 디스플레이스먼트를 가산한 결과를 어드레스로써 메모리상의 어드레스를 지정한다. 가산결과는 프로그램카운터PC에 저장된다. 특히 제한되지않지만 디스플레이스먼트는 16비트 또는 8비트이고, 가산되는 디스플레이스먼트는 그 상위8비트 또는 16비트가 부호확장된다. 즉, 전체24비트의 디스플레이스먼트의 상위 8비트는 16비트 디스플레이스먼트의 비트15와 또는 상위 16비트는 8비트 디스플레이스먼트의 비트7과 같은 값으로 간주해서 가산이 실행된다. 프로그램카운터 상대는 분기명령에서만 사용된다.
CPU(1)은 상기외에 이미디어트, 레지스터직접, 절대어드레스 등의 어드레싱모드를 실행하지만 이들은 본 발명에 직접적으로는 관계가 없으므로 상세한 설명은 생략한다.
제7도에는 CPU(1)의 내부블럭의 1예가 도시된다. CPU(1)은 주로 마이크로ROM 또는 PLA(Plogrammable Logic Array)로 구성되는 제어부CONT, 상기 범용레지스터ROL, ROH∼R7L, R7H, 확장레지스터E0∼E7, 프로그램 카운터PC, 조건코드레지스터CCR을 포함하는 실행부EXE로 구성된다.
실행부EXE는 또 일시레지스터TRL, TRH, TRE, 산술논리연산기ALUL, ALUH, ALUE, 리드데이터버퍼RDBL, RDBH, RDBE, 라이트데이터버퍼WDBL, WDBH, WDBE 및 어드레스버퍼ABL, ABH, ABE를 포함하고 이들이 3개의 내부버스A, B, C를 거쳐서 접속되어 있다. 산술논리연산기ALUL, ALUH, ALUE는 명령에 의해서 지정되는 각종 연산, 프로그램카운터의 가산, 실효어드레스의 계산등에 사용된다. 리드데이터버퍼RDBL, RDBH, RDBE는 ROM(2), RAM(3) 또는 도시하지않은 외부메모리등에서 리드한 명령이나 데이터를 일시적으로 저장하고, 또 라이트데이터버퍼WDBL, WDBH, WDBE는 상기 ROM(2), RAM(3) 또는 외부메모리등으로 라이트해야할 데이터를 일시적으로 저장한다. 이것에 의해서 CPU(1)의 내부동작과 CPU(1)외부의 리드/라이트동작의 타이밍을 조정하고 있다. 어드레스버퍼ABL, ABH, ABE는 CPU(1)의 리드/라이트하는 어드레스를 일시적으로 저장한다.
특히 제한되지 않지만, 상기 실행부EXE내의 각 블록은 8비트를 단위로 하고 있다. 즉, 예를들면 프로그램카운터는 8비트단위로 3블럭으로 분할되어 있다. PCE가 비트23∼16, PCH가 비트15∼8, PCL이 비트7∼0에 대응한다. 범용레지스터는 ROH∼R7H가 비트15∼8, ROL∼R7L이 비트7∼0에 대응한다.
그리고, 그들 범용레지스터에 대한 비트23∼16이 확장레지스터E0∼E7로 된다. 내부버스A, B, C는 이들의 비트23∼16, 15∼8, 비트7∼0에 대응해서 3개가 병행해서 마련되어 있다.
그외에 상기 일시레지스터, ALU, 데이터버퍼 등도 마찬가지로 8비트를 단위로 구성되어 있다. 이들의 물리적인 배치는 특히 제한되지 않는다.
제8도∼제11도에는 제7도의 CPU(1)이 처리하는 대표적인 명령이나 예외처리의 흐름도의 1예가 도시된다.
리세트예외처리(제8도)에 있어서, CPU(1)은 0번지에서 시작되는 4바이트의 어드레스에 저장된 개시어드레스를 리드한다.
또, 이4바이트중 0번지의 1바이트는 상기와 같이 장래 확장용으로 예약된 것으로 무시된다. CPU(1)은 제1스텝Sa1에서 인터럽션마스크비트I를 1에 세트한다. 동시에 CPU(1) 내부에서 버스A상에 데이터0을 생성하고, 이것을 어드레스버퍼ABL, ABH, ABE(이하, AB라고도 한다)로 전송함과 동시에ALUL, ALUH, ALUE(이하, ALU라고도 한다)에서 2를 가산한다.
가산결과는 일시레지스터TRL, TRH, TRE(이하, TR이라고도 한다)에 저장한다. 제2스텝Sa2에서 상기 어드레스버퍼AB의 내용을 어드레스로 해서 워드데이터의 리드를 개시한다. 제3스텝2a3에서는 리드동작을 종료하고, 리드한 워드데이터를 데이터버퍼RDBL, RDBH, RDBE(이하, RDB라고도 한다)에 저장한다.
동시에 일시레지스터TR의 내용을 버스A로 출력하고 어드레스버퍼AB로 전송한다. 제4스텝Sa4에서 상기 어드레스버퍼AB의 내용을 어드레스로 해서 워드데이터의 리드를 개시한다. 제5스텝Sa5에서는 리드동작을 종료하고, 리드한 워드데이터를 데이터버퍼RDB에 저장한다. 이때, 특히 제한되지않지만 데이터버퍼RDB는 소위 선입선출로 되어 있다. 제6스텝Sa6에서는 제3스텝Sa3 및 제5스텝Sa5에서 데이터버퍼RDB에 저장한 데이터중 24비트를 개시어드레스로 해서 버스A로 출력하고, 어드레스버퍼AB로 전송함과 동시에 ALU에서 2를 가산한다. 가산결과는 프로그램카운터PC에 저장한다. 또, 제3스텝Sa3에서 데이터버퍼RDB에 저장된 데이터의 상위 8비트는 상기와 같이 무시된다.
제7스텝Sa7에서 상기 어드레스버퍼AB의 내용을 어드레스로 해서 프로그램의 선두명령의 리드를 워드로 개시한다. 제8스텝Sa8에서는 리드동작을 종료하고, 리드한 워드데이터를 데이터버퍼RDB에 저장한다. 동시에 프로그램카운터PC의 내용을 버스A로 출력하고, 어드레스버퍼AB로 전송하며, 또 ALU에서 2를 가산한다. 가산결과는 프로그램카운터PC에 저장한다. 제9스텝Sa9에서 상기 어드레스버퍼AB의 내용을 어드레스로 해서 프로그램의 3바이트째 및 4바이트째의 명령의 리드를 워드로 개시한다. 또, 제8스텝Sa8에서 데이터버퍼RDB에 저장한 명령을 제어부로 전송하여 해독을 개시한다. 다음의 스텝에서는 프로그램의 선두명령인 제9스텝Sa9에서 해독을 개시한 명령에 따른 동작을 개시한다. 제9스텝Sa9에서 리드를 개시한 워드데이터는 이 명령실행중에 데이터버퍼RDB에 저장한다.
즉각자료를 레지스터로 전송하는 명령의 처리흐름이 제9도에 도시되고 있으며, 예를들면 데이터34를 범용레지스터ROL로 전송하는 명령(MOV. B #34, ROL)은 특히 제한되지 않지만 명령코드중에 즉각자료34를 포함하여 2바이트의 명령길이인 것으로 한다.
본 명령은 제1스텝Sb1에서는 직전에 실행한 명령 또는 예외처리의 최후의 스텝에서 개시한 리드동작을 종료하고, 리드한 워드데이터의 데이터버퍼RDB에 저장한다. 동시에 프로그램카운터PC의 내용을 버스A로 출력하고, 어드레스버퍼AB로 전송하며, 또 ALU에서 2를 가산한다. 가산결과는 프로그램카운터PC에 저장한다.
제2스텝Sb2에서 어드레스버퍼AB에 저장된 내용에 따라서 본 명령에서 3바이트째 및 4바이트째의 명령의 리드를 워드로 개시한다. 동시에 이미 데이터버퍼RDB에 저장하고 있는 본 명령코드중에 포함되는 즉각자료34를 버스A로 출력하고, ALU를 통과하고, ALU에서 버스C로 출력해서 레지스터ROL로 전송한다. ALU를 통과했을 때에 데이터를 검사하고, 조건코드레지스터의 Z 및 N플래그에 반영한다. 또, 제1스텝Sb1에서 데이터버퍼RDB에 저장한 명령을 제어부CONT로 전송하고 해독을 개시한다. 다음의 스텝에서는 다음의 명령인 제2스텝Sb2에서 해독을 개시한 명령에 따른 동작을 개시한다. 제2스텝Sb2에서 리드를 개시한 워드데이터는 이 명령실행중에 데이터버퍼RDB에 저장한다.
디스플레이스먼트를 갖는 레지스터간접 어드레싱모드에서 메모리의 내용을 레지스터로 전송하는 명령의 처리흐름이 제10도에 도시되어 있고, 예를들면 레지스터RO(ROL, ROH)와 확장레지스터EO으로 표시되는 어드레스에 상대값1234를 부가한 어드레스에서 바이트데이터를 범용레지스터R1H로 전송하는 명령{MOV. B @ (1234, RO), R1H}는 특히 제한되지않지만 명령코드중에 디스플레이스먼트1234를 포함하여 4바이트의 명령길이인 것으로 한다. 본 명령은 제1스텝Sc1에서 직전에 실행한 명령 또는 예외처리의 최후의 스텝에서 개시한 리드동작을 종료하고, 리드한 워드데이터(본 명령의 제3 및 제4바이트)를 데이터버퍼RDB에 저장한다.
동시에 프로그램카운터PC의 내용을 버스A로 출력하고, 어드레스버퍼AB로 전송하고, 또 ALU에서 2를 가산한다. 가산결과는 프로그램카운터PC에 저장한다. 제2스텝Sc2에서 어드레스버퍼AB에 저장된 내용에 따라서 본 명령에서 3바이트째, 4바이트째의 명령인 다음의 명령의 리드를 워드로 개시한다. 동시에 이미 데이터버퍼RDB에 저장하고 있는 명령코드중에 포함되는 디스플레이먼트1234를 버스B로, 범용레지스터RO과 확장레지스터EO의 내용을 버스A로 출력하고, ALU에서 이들의 가산을 실행하고 ALU에서 버스C로 출력해서 일시레지스터TR로 전송한다. 가산시에 디스플레이스먼트는 001234로 확장된다. 제3스텝Sc3에서 리드동작을 종료하고, 리드한 워드데이터를 데이터버퍼RDB에 저장한다. 동시에 일시레지스터TR의 내용을 버스A로 출력하여 어드레스버퍼AB로 전송한다. 제4스텝Sc4에서 상기 어드레스버퍼AB의 내용을 어드레스로 해서 데이터의 리드를 바이트로 개시한다.
제5스텝Sc5에서 리드동작을 종료하고, 리드한 바이트데이터를 데이터버퍼RDB에 저장한다. 상기와 마찬가지로 프로그램카운터PC의 내용을 어드레스버퍼AB로 전송하고, 2를 가산한다. 제6스텝Sc6에서 상기 어드레스버퍼AB의 내용을 어드레스로 해서 데이터의 리드를 바이트로 개시한다. 제5스텝Sc5에서 데이터버퍼 RDB에 저장한 데이터를 버스A로 출력하고, ALU를 통과하고, ALU에서 버스C로 출력해서 레지스터R1H로 전송한다. ALU를 통과했을 때에 데이터를 감시하고, 조건코드레지스터CCR의 Z 및 N플래그에 반영한다. 제3스텝Sc3에서 데이터버퍼RDB에 저장한 명령을 제어부CONT로 전송하고, 해독을 개시한다. 다음의 스텝에서는 상기와 마찬가지로 다음의 명령의 동작을 개시한다.
포스트인클리먼트 레지스터간접 어드레싱모드에서 메모리의 내용을 레지스터로 전송하는 명령의 처리흐름이 제11도에 도시되어 있으며, 예를들면 범용레지스터R7(R7L, R7H)와 확장레지스터E7로 표시되는 어드레스에서 확장데이터를 범용레지스터R2(R2L, R2H)와 확장레지스터E2로 전송하는 명령에{MOV. L @R7 +, R2}는 특히 제한되지않지만 2바이트의 명령길이인 것으로 한다. 본 명령은 제1스텝Sd1에서 직전에 실행한 명령 또는 예외처리의 최후의 스텝에서 개시한 리드동작을 종료하고, 리드한 워드데이터를 데이터버퍼RDB에 저장한다. 제2스텝Sd2에서 레지스터R7과 확장레지스터E7의 내용을 버스A로 출력하고, 어드레스버퍼AB로 전송하고, 동시에 ALU에서 2를 가산하며, 결과를 범용레지스터R7과 확장레지스터E7에 저장한다. 제3스텝Sd3에서 상기 어드레스 버퍼AB의 내용을 어드레스로 해서 데이터의 리드를 워드로 개시한다. 제4스텝Sd4에서 리드동작을 종료하고, 리드한 워드데이터를 데이터버퍼RDB에 저장한다. 동시에 범용레지스터R7과 확장레지스터E7의 내용을 버스A로 출력하고, 어드레스버퍼AB로 전송하고, 동시에 ALU에서 2를 가산한다. 가산결과는 범용레지스터R7과 확장레지스터E7에 저장한다. 제5스텝Sd5에서 상기 어드레스버퍼AB의 내용을 어드레스로 해서 데이터의 리드를 워드로 개시한다. 제6스텝 Sd6에서 리드동작을 종료하고, 리드한 워드데이터를 데이터버퍼RDB에 저장한다. 상기와 마찬가지로 프로그램카운터PC의 내용을 어드레스버퍼AB로 전송하고, 2를 가산한다.
제7스텝Sd7에서 상기 어드레스버퍼AB의 내용을 어드레스로 해서 데이터의 리드를 워드로 개시한다. 데이터버퍼RDB에 저장한 데이터중 24비트를 버스A로 출력하고 ALU를 통과하고, ALU에서 버스C로 출력해서 범용레지스터R2와 확장레지스터E2로 전송한다. 또, 제4스텝Sd4에서 데이터버퍼RDB에 저장된 데이터의 상위 8비트는 무시된다. 특히 제한되지않지만 ALU를 통과했을 때에 데이터를 검사하지 않고 조건코드레지스터CCR의 플래그는 변화하지 않는다. 제1스텝Sd1에서 데이터버퍼RDB에 저장한 명령을 제어부CONT로 전송하고, 해독을 개시한다. 다음의 스텝에서는 상기와 마찬가지로 다음의 명령의 동작을 개시한다.
제31도에는 상기 CPU(1)의 실행가능한 산술연산명령의 일람표가 도시된다. 그 산술연산은 구체적으로 가산, 감산, 비교를 포함한다.
가산에는 기능별로 ADD, ADDC, ADDE명령이 있고, 또 ADD명령에서는 바이트크기, 워드크기가 있다. ADD명령에서는 지정된 원시자료(이미디어트 또는 레지스터의 내용)과 디스티네이션 데이터(레지스터의 내용)을 가산하고, 결과를 디스티네이션의 레지스터에 저장함과 동시에 결과를 C, V, Z, N의 각 플래그에 반영한다. 특히, 제한되지않지만 메모리의 내용과 레지스터의 내용의 직접적인 연산 또는 1명령에 의한 연산은 실행되지 않는다.
ADD명령에서는 데이터연산명령으로써의 성질상 바이트크기, 워드크기가 있다. ADDC명령도 ADD명령과 동일하지만 가산은 캐리플래그C를 포함해서 실행된다. ADDC명령은 데이터연산명령으로써의 성질상 바이트크기, 워드크기가 있는 것이 바람직하지만, 워드크기의 ADDC명령은 25비트이상의 데이터를 취급하지않는한 필요없다. 이것에 대해서 ADDC명령을 바이트크기만으로 하면 CPU(1)의 명령포맷, 내부제어방식의 단순화를 실행해서 논리적 및 물리적규모를 축소할 수 있다. 상기 필요성과 상기 축소규모를 고려해서 특히 제한되지않지만 ADDC명령을 바이트크기만으로 하고 있다. ADDE명령은 어드레스데이터 계산용으로 사용해야할 것으로써, 범용레지스터와 확장레지스터를 조합해서 가산을 실행한다.
ADDE명령은 어드레스데이터 연산명령으로써의 성질상 어드레스 워드크기만으로 되고 플래그의 변화는 금지되어 있다.
감산에 대해서도 마찬가지이다.
비교에는 캐리를 갖는 비교명령은 존재하지 않는다. SUBE명령은 캐리, 제로네가티브플래그만 변화하고, 초과플래그는 변화하지 않는다. 어드레스데이터에는 부호를 고려할 필요가 없기 때문이다.
또, #x : 8, #x : 16은 각각 8비트, 16비트 즉각자료, Rd8, Rd16은 8비트, 16비트 범용레지스터, Ed : Rd : 16은 확장레지스터와 범용레지스터의 내용 등을 나타낸다.
제12도에서는 CPU(1)과 레지스터구성의 제2의 실시예가 도시된다. CPU(1)은 8개의 16비트길이의 범용레지스터RO(ROL, RH)∼R7(R7L, R7H), 5개의 8비트길이의 확장레지스터EO1, E23, E45, E6, E7, 24비트길이의 프로그램카운터PC 및 8비트길이의 조건코드레지스터CCR을 갖고 있다.
범용레지스터를 어드레스레지스터로써 사용하는 경우는 범용레지스터의 내용 16비트를 어드레스의 하위 16비트로 하고, 대응하는 확장레지스터의 내용을 어드레스의 상위8비트로 해서 합계24비트의 어드레스를 생성하는 것이다. 어드레싱모드 또는 실효 어드레스의 계산방법은 제1실시예와 동일하다. 본 실시예에서는 범용레지스터RO과 R1, R2와 R3, R4와 R5에 대해서 각각 1개의 확장레지스터EO1, E23, E45가 대응하고, 제1실시예에 대해서 확장레지스터의 수를 감소시키고 있다. 예를들면 RO을 지정해서 포스트인클리먼트레지스터 간접을 사용하면 확장레지스터EO1과 RO의 내용이 리라이트된다. 다음에 R1을 지정해서 포스트인클리먼트레지스터간접을 사용하면 확장레지스터EO1과 R1의 내용이 리라이트된다. 이 때문에 사용자는 특히 제한되지않지만 범용레지스터RO을 데이터레지스터로써, R1을 어드레스레지스터로써 사용한다.
따라서, 이 경우에는 확장레지스터EO1은 항상 범용레지스터R1과 조합해서 사용하고, 범용레지스터RO과는 조합해서는 사용하지 않게 된다. 이와 같이, 사용자의 프로그램작성상의 제약이 발생하게 되지만, 모든 범용레지스터를 어드레스레지스터로써 사용하고, 데이터레지스터로써는 사용하지 않는 응용에는 존재하지않다고 생각되므로 상기 제약은 실질상의 문제로 되지않는다. 제13도에는 CPU(1)의 레지스터구성의 제3실시예가 도시된다. CPU(1)은 제2실시예와 마찬가지로 8개의 16비트길이의 범용레지스터RO(ROL, RH)∼R7(R7L, R7H), 5개의 각각 8비트길이의 확장레지스터E3∼E7 및 24비트길이의 프로그램카운터PC, 8비트길이의 조건코드레지스터CCR을 갖고 있다.
범용레지스터를 어드레스레지스터로써 사용하는 경우는 범용레지스터의 내용 16비트를 어드레스의 하위 16비트로 하고, 대응하는 확장레지스터의 내용을 어드레스의 상위8비트로써 합계24비트의 어드레스를 생성하는 것이다. 어드레싱모드 또는 실효어드레스의 계산방법은 제1실시예와 동일하다. 본 실시예에서는 범용레지스터 R0, R1, R2에 대해서 대응하는 확장레지스터가 존재하지 않는다.
이들 범용레지스터를 어드레스레지스터로써 지정하는 경우에는 상위8비트를 자동적으로 확장해서 24비트의 어드레스로 하도록 되어 있다. 특히 제한되지않지만 범용레지스터R0의 경우에는 상위8비트는 자동적으로 R0의 비트15의 내용과 동일하게 된다.
범용레지스터R1의 경우에 상위8비트는 자동적으로 전비트0으로 된다. 또, 범용레지스터R12의 경우에 상위8비트는 자동적으로 전비트1로 된다.
제14도에는 제13도의 실시예에 있어서의 범용레지스터R0, R1, R2를 어드레스레지스터로써 지정하는 경우에 있어서의 어드레스의 확장가능한 범위가 도시된다.
범용레지스터R0의 경우에 24비트어드레스로써의 상위8비트는 자동적으로 R0의 비트15의 내용과 동일하게 되고, 이것에 의해 H'000000∼H'007FFF와 H'FF8000∼H'FFFFFF의 범위가 지정된다. 범용레지스터R1의 경우에 상위8비트는 자동적으로 전비트0으로 되고, 이것에 의해 H'000000∼H'00FFFF의 범위가 지정된다. 또, 범용레지스터R2의 경우에 상위8비트는 자동적으로 전비트1로 되고, 이것에 의해 H'FF0000∼H'FFFFFF의 범위가 지정된다. 이들 H'000000∼H'00FFFF와 H'FF0000∼H'FFFFFF의 범위에 사용빈도가 높은 프로그램이나 데이터영역을 배치하면 그들은 리니어한 어드레스범위에서 액세스가능하게 된다.
제15도에는 CPU(1)의 레지스터구성의 제4실시예가 도시된다.
CPU(1)은 제2실시예와 마찬가지로 8개의 각각 16비트길이의 범용레지스터R0(ROL, RH)∼R7(R7L, R7H), 5개의 각각 8비트길이의 확장레지스터E01, E23, E45, E6, E7, 24비트길이의 프로그램카운티PC 및 8비트길이의 조건코드레지스터CCR을 갖고 있다. 본 실시예의 범용레지스터와 확장레지스터는 서로 독립으로 되어 어드레스계산시에 캐리 또는 빌림수의 전파가 금지되어 있다. 프로그램카운터PC는 상기와 마찬가지로 24비트의 레지스터로써 사용할 수 있다.
본 실시예에 의하면, 24비트의 프로그램카운터PC를 가지므로, 프로그램에 관해서는 페이지경계를 전혀 고려하지 않아도 좋다.
단, 데이터가 페이지경계를 넘지않도록 프로그램작성자가 관리해야만하지만, 데이터의 관리는 프로그램의 관리보다 용이하다고 생각된다.
범용레지스터와 확장레지스터를 독립으로 하는 것에 의해, 24비트 디스플레이스먼트나 24비트 절대적 데이터의 전송등 비교적 명령길이가 긴 명령을 실행하는 것은 할 수 없지만, 그 반면 제어부CONT의 논리적 및 물리적규모를 축소할 수 있다.
범용레지스터R7과 확장레지스터E7을 소위 스택포인터로써 사용하는 경우에는 이 동안의 캐리 또는 빌림수의 전파를 허가해도 좋다.
즉, 서브루틴콜명령이나 인터럽션처리시 등에 은연중에 스택포인티(범용레지스터R7과 확장레지스터E7)을 사용하는 경우에는 범용레지스터R7과 확장레지스터E7사이의 캐리 또는 빌림수의 전파를 허가하는 것이다.
상기 제1∼제4실시예의 레지스터구성에서 설명한 바와 같이, 범용레지스터 및 확장레지스터를 마련하고, 16M바이트의 어드레스공간을 사용가능하게한 경우, 중요한 연산은 레지스터사이에서 실행하고, 메모리와 레지스터사이의 연산은 직접 실행하지 않는, 즉 1명령에서는 실행하지않는 명령체계로 하는 것이 득책이다. 16M바이트의 어드레스공간을 유효하게 이용하기 위해서는 상기와 같은 복잡한 어드레싱모드가 필요하다. 연산명령의 대부분에 이와 같은 복잡한 어드레싱모드를 실행가능하게 하면 제어부CONT의 구성이 복잡하게 되어 논리적 및 물리적규모를 최소한으로 할 목적에 위반되기 때문이다. 메모리의 액세스에는 상기와 같이 여러 가지의 어드레싱모드를 갖는 전송명령으로 레지스터와의 데이터의 전송을 실행하고, 레지스터상에서 연산등의 데이터처리를 실행하는 것으로 하면 좋다.
레지스터가 8비트길이 16개분으로써 사용할 수 있고, 어느 처리에 필요한 데이터는 레지스터상에 배치할 수 있다. 적어도 사용빈도가 높은 데이터의 대부분은 레지스터상에 배치할 수 있다. 따라서, 처리프로그램의 증가나 실행속도의 저하라는 불합리가 발생하는 경우는 적다고 생각된다.
메모리에 대한 연산을 실행할 필요가 있는 명령으로써는 비트조작 명령이 있다. 이들은 바이트단위로 할당된 어드레스의 제n비트로써 지정되지만 바이트단위로 취급되는 데이터는 아니고, 각각의 비트가 독립된 기능을 갖고 있다. 예를들면, 타이머의 동작을 제어하는 레지스터와 같은 경우, 제0비트, 제1비트에서 타이머의 클럭을 선택하고, 제2비트에서는 타이머카운터와 비교레지스터의 내용이 일치했을 때 타이머카운터를 클리어하는가 하지않는가를 지정하고, 제3비트에서는 상기 일치했을 때 인터럽션을 발생하는가 하지않는가를 지정하는 것이다. 이들은 1비트단위로 1로세트하거나 0으로 클리어할 필요가 있다. 또는 입력포트의 소정의 1비트가 0인가 1인가에 의해서 CPU(1)의 처리프로그램이 다른 경우, 상기 1비트의 데이터를 판정할 필요가 있다. 이러한 1비트데이터는 상기 타이머제어용 레지스터에 대해서 직접 연산해야만한다. 바이트단위로 일단 레지스터로 전송한후에 비트조작을 실행하면 상기 전송과 비트조작사이에 인터럽션이 들어와 예를들면 상기 입력포트의 값이 변화하는 불합리가 발생하기 때문이다. 따라서, 본 실시예에 있어서의 CPU(1)은 범용레지스터와 같은 내부의 레지스터와 주변회로의 제어용레지스터와 같은 내부레지스터 사이에서의 직접적인 연산을 위한 비트조작명령을 서포트하고 있다. 또, 이와 같은 비트조작명령의 대상으로 되는 어드레스는 고정적으로 복잡한 어드레싱모드는 필요하지않다. 절대어드레스와 최저한 레지스터간접을 실행할 수 있으면 좋다. 또, 절대어드레스의 경우도 전체 어드레스공간을 사용할 필요는 없고, 상기 타이머 및 입출력포트 등이 존재하는 어드레스범위에만 사용할 수 있으면 충분하다고 생각된다.
이와 같은 어드레스범위의 지정에 사용할 수 있는 절대어드레스는 8비트로 충분하다. 16비트로 하면, 사용가능한 어드레스범위가 확장되지만, 명령길이가 길게 되어 제어가 복잡하게 된다. 적어도 24비트로써 16M바이트의 전체공간을 사용가능하게해야만 하는 경우는 매우 드물다고 생각된다. 따라서, 1비트 또는 수비트의 비트조작명령을 직접 외부주변회로 사이에서 실행해도 이것에 의해서 제어부의 규모나 명령의 종류가 극단적으로 증대할 염려는 없다.
제16도에는 본 실시예의 마이크로컴퓨터(100)에 있어서의 어드레스맵의 1예가 도시된다.
내장ROM(2)는 어드레스H'000000에서 배치되고, 내장주변기능(타이머(4), SCI(5)등)과 내장RAM(3)은 H 'FFF800이후에 배치되어 있고, 이들 사이는 외부공간으로 된다. 내장주변기능과 내장 RAM(3)을 어드레스공간의 중도, 예를들면 H'FFF800에서 H'FFFFF등에 배치할 수 있지만, 이 경우는 외부공간이 2곳으로 분리되며, 또 내장ROM(2)로 라이트한 프로그램과 외부공간에 존재하는 프로그램을 연속적으로 사용할 수 없어 본 발명의 목적에 위배된다. 따라서, 주로 프로그램영역으로 되어야할 내장ROM(2)와 주로 데이터영역으로 되어야할 내장주변기능 및 내장RAM(3)은 서로 어드레스공간의 반대에 배치하고, 이 사이는 연속한 공간으로 해야할 것이다. 이와 같이 하는 것에 의해, 마이크로컴퓨터(100)이 적용되는 시스템에 따라서 데이터영역이나 프로그램영역이 크게 되어도 각각을 용이하게 연속한 어드레스공간에 확보할 수 있게 되어 시스템상 데이터나 프로그램을 관리하거나 그들을 액세스하기 위한 순서가 간소화된다. 또, 내장개ROM(2)는 리세트처리시의 개시어드레스 또는 개시어드레스를 저장한 어드레스(개시벡터)를 포함한다.
이상의 실시예에서는 어드레스공간 16M바이트인 것으로 했지만, CPU(1)의 기능으로써는 16M바이트의 어드레스공간을 가지면서도 싱글칩 마이크로컴퓨터(100)전체로써는 각 기능블럭의 조합 등에 의해 16M바이트의 어드레스공간은 필요로 하지않으며, 또한 입출력포트의 단자수를 많이 필요로 하는 경우가 생각된다. 이와 같은 경우, 어드레스단자24개를 갖는 것은 득책은 아니고, 어드레스단자수를 감소시켜 입출력포트단자수를 증가시켜야만한다. 예를들면 어드레스단자를 20개로 하면 실제로 이용할 수 있는 어드레스공간은 1M바이트로 된다.
제17도에는 싱글칩 마이크로컴퓨터(100)에 포함되는 기능블럭 선택회로의 1예가 도시된다.
동일 도면에 도시되는 기능블럭선택회로는 특히 제한되지않지만, CPU(1)이 출력하는 24비트의 어드레스신호A0∼A23을 디코드해서 각 기능블럭의 선택신호를 생성하고, 게이트G1, G2, G3, G4, G6, G9 및 디코더DEC1에 의해서 구성된다. 싱글칩마이크로컴퓨터(100)에 포함되는 각 기능블럭에는 어드레스신호A0∼A23의 전체비트는 입력되지 않고 상기 기능블럭이 선택된 것을 나타내는 기능블럭 선택신호와 상기 기능블럭중 어느것인가의 어드레스가 선택되었는가를 나타내는 하위어드레스비트가 입력되는 것이다.
본 예에 의하면, ROM(2)의 용량이 32K바이트이라고 하면, ROM(2)에는 1개의 기능블럭선택신호와 어드레스신호A0∼A14의 하위15비트가 입력된다.
상기 기능블럭 선택회로에 의해 제16도의 어드레스맵을 실현하는 경우 어드레스의 하위16비트를 입력한 디코더DEC1에 있어서H'0000∼7FFF를 검출하면 BSEL1신호가 1레벨로 된다.
또, 게이트G6에 있어서 상위어드레스가 H'00을 검출하면 게이트G6, G1의 출력, 즉 내장 ROM (2)의 선택신호가 1레벨로 된다.
또, 게이트G6에 있어서 상위어드레스가 H'00을 검출하면 게이트G6, G1의 출력, 즉 내장ROM(2)의 선택신호가 1레벨로 되어 ROM(2)가 선택된다. RAM(3) 및 내장주변기능에 대해서도 마찬가지이다. 특히 제한되지않지만 이들중 어느것도 선택되지 않으면 외부공간이 선택된다.
제18도에는 외부어드레스단자를 20개로 하고, 실제로 이용할 수 있는 어드레스공간을 1M바이트로 하는 마이크로컴퓨터의 어드레스맵이 도시된다.
이러한 싱글칩 마이크로컴퓨터의 어드레스맵은 상기와 같이, 주로 프로그램영역으로 되어야할 내장ROM(2)와 주로 데이터영역으로 되어야할 내장주변기능 및 내장RAM(3)을 서로 어드레스공간의 반대에 배치하고, 이 사이를 연속한 공간으로 하기위해서는 제18(a),(b)도의 2종류의 맵핑이 생각된다. (a)의 경우에는 내장주변기능 및 내장RAM(3)을 16M바이트의 공간의 H'FFFFFF측에 배치하고 있다. (b)의 경우에는 내장주변기능 및 내장 RAM(3)을 1M바이트의 공간의 H'0FFFFF측에 배치하고 있다. 제18도에서는 명확한 바와 같이, (a)의 쪽이 이용가능한 외부어드레스공간은 크게 되지만, 그 반면 데이터영역은 외부어드레스공간과 내부어드레스공간으로 분리된다.
제19도에는 제18도의 어드레스맵을 실현하는 기능블럭 선택회로가 도시된다.
동일 도면에 도시되는 기능블럭 선택회로는 게이트G1∼G10, 디코더DEC1 및 레지스터REG에 의해서 구성되고, 특히 제한되지않지만, 레지스터REG의 내용에 의해서 제18(a),(b)도의 2종류의 어드레스맵을 선택한다. 레지스터REG의 내용을 1로 하면 게이트G7, G10의 출력이 어드레스의 상위4비트에 의존하지 않고 항상 1로 되어 제18(b)도에 도시되는 어드레스맵으로 된다. 레지스터REG의 내용을 0으로 하면 제18(a)도에 도시되는 어드레스맵으로 된다. 특히 제한되지않지만, 어드레스맵의 예약종료의 공간은 사용금지로 된다. 레지스터REG는 CPU(1)의 리드/라이트가능한 것 이외에 외부단자에 의해서 설정가능하게 해도 좋고, 내부에서 전원에 접속해서 고정적으로 설정하는 것으로 해도 좋다.
제20도에는 제18(b)도에 도시되는 어드레스맵을 실현하는 기능블럭 선택회로가 도시된다. 이 기능블럭 선택회로는 제19도에 있어서 레지스터REG를 1레벨로 하고, 게이트G7, G10을 삭제해서 이루어지는 구성과 등가이다. 내장RAM(3)과 연속한 외부공간을 사용할 수 있게된다. 어드레스버스4개 및 상기 게이트G5, G7, G8, G10 등을 삭제할 수 있어 논리규모 및 물리적규모를 축소할 수 있다.
제21도에는 상기 각종 범용레지스터, 확장레지스터, 프로그램카운터 및 일시레지스터의 구체적인 논리회로예가 도시된다.
제21도에는 대표적으로 3비트의 구성이 도시되어 있다. 레지스터는 플립플롭회로FF로 구성되고, 버스C에서 데이터의 입력이 가능하게 되고, 버스A, B로 출력이 가능하게 되어 있다. 데이터의 입출력은 제어부에서의 신호에 따라서 시스템클럭Φ (도면에 있어서의 기호*는 로우이네이블인 것을 의미한다)가 로우레벨의 기간에 실행된다. 범용레지스터RiH, RiL 및 확장레지스터Ei에는 각각 독립한 제어신호AH, BH, CH, AL, BL, CL, AE, BE, CE가 부여되고, 각각 독립한 입출력이 가능하게 되어 있다.
프로그램카운터PC는 24비트길이의 고정이므로, AE, AH와 AL, BE, BH와 BL, CE, CH와 CL은 각각 공통의 신호APC, BPC, CPC로써 부여되어 일괄된 입출력을 실행한다. 일시레지스터TR에 대해서는 그 사용방법에 의존하지만 범용레지스터 및 확장레지스터와 마찬가지로 한다.
특히 제한되지않지만 각각의 버스A, B, C는 부논리로 되어 있다.
또, 버스A 및 B는 시스템클럭Φ가 하이레벨의 기간에 P채널형MOS트랜지스터Qq에 의해 하이레벨(0레벨)에 고정된다. 시스템클럭Φ가 로우레벨의 기간에 어느것의 클럭도 데이터를 출력하지않으면 하이레벨이 유지된다.
제22도에는 제10도에서 설명한 상기 {MOV. B @ (1234, R0), R1H명령} 실행시의 범용레지스터 및 확장레지스터의 1예의 동작타이밍도가 도시된다.
시스템클럭Φ에 동기한 제1사이클, 즉 상기 제1스텝Sc1과 제5사이클로써의 제5스텝Sc5에서 제어신호APC가 1레벨로 되고, 프로그램카운터PC의 내용이 A버스로 출력된다. 동시에 제어신호 CPC가 1레벨로 되고, C버스의 내용이 프로그램카운터PC에 입력된다. 특히 제한되지않지만 프로그램카운터PC의 출력은 소위 마스터 슬레이브로 되어 있으므로, A버스에는 C버스의 내용이 아닌 직전의 프로그램카운터PC의 내용이 출력된다. 제2스텝Sc2에서 확장레지스터E0과 범용레지스터R0의 제어신호AEO, AHO, ALO이 1레벨로 되고, 확장레지스터EO과 범용레지스터RO의 내용이 A버스로 출력된다. 제6스텝Sc6에서 범용레지스터R1의 제어신호AH1이 1레벨로 되어 C버스의 내용이 범용레지스터R1H로 출력된다. 제어신호AE1, AL1은 0레벨이고, 확장레지스터E1과 범용레지스터R1L의 내용은 유지된다.
제23도에는 제11도에 도시되는 상기 {MOV. L @R7 + R2} 명령실행시의 범용레지스터의 1예의 동작타이밍도가 도시된다.
시스템클럭Φ에 동기한 제2사이클로써의 제2스텝Sd2에서 확장레지스터E7과 범용레지스터R7의 제어신호AE7, AH7, AL7이 1레벨로 되어 확장레지스터E7과 범용레지스터R7의 내용이 A버스로 출력된다. 동시에 제어신호CE7, CH7, CL7이 1레벨로 되어 C버스의 내용이 확장레지스터E7과 범용레지스터R7에 입력된다.
상기와 마찬가지로 범용레지스터의 출력은 소위 마스터 슬레이브로 되어 있으므로, A버스에는 C버스의 내용이 아닌 직전의 프로그램카운터PC의 내용이 출력된다. 제6스텝Sd6에서 제어신호APC가 1레벨로 되어 프로그램카운터PC의 내용이 A버스로 출력된다.
동시에 제어신호CPC가 1레벨로 되어 C버스의 내용이 프로그램카운터PC 에 입력된다. 제7스텝Sd7에서 확장레지스터E2와 범용레지스터R2의 제어신호CE2, CH2, CL2가 1레벨로 되어 C버스의 내용이 확장레지스터E2와 범용레지스터R2에 입력된다.
제24도에는 제7도에 도시되는 리드데이터버퍼RDB(RDBL, RDBH, RDBE)의 구체적인 1예의 논리회로도가 도시된다.
리드데이터버퍼는 버스A 및 B와 싱글칩 마이크로컴퓨터(100)이 포함되는 내부데이터버스L (DO∼D7), H(D8∼D15)에 결합되어서 이루어지는 제1의 리드버퍼부분RDB1(RDB1L, RDB1H), 버스A 및 B와 제1의 리드버퍼부분RDB1에 결합되어서 이루어지는 제2의 리드버퍼부분RDB2(RDB2L, RDB2H), 버스A 및 B와 제2의 리드버퍼부분RDB2에 결합되어서 이루어지는 확장리드버퍼부분RDBE, CPU1의 제어부CONT와 제2의 리드버퍼부분 RDB2에 결합되어서 이루어지는 명령리드버퍼부분RDB1(RDBIL, RDBIH)로 구성된다. 제1의 리드버퍼부분RDB1과 제2의 리드버퍼부분RDB2 및 명령리드버퍼부분RDBI는 모두 16비트이다. 확장리드버퍼부분RDBE는 8비트이다. 제1의 리드버퍼부분RDB1과 제2의 리드버퍼부분RDB2는 버스A 및 B의 비트15∼0에 접속되어 있다. 특히 제한되지않지만 확장리드버퍼부분RDBE는 버스A 및 B의 비트23∼16 및 비트7∼0에 접속되어 있다. 리드된 데이터는 우선 시스템클럭Φ가 로우레벨기간에 제1의 리드버퍼부분RDB1에 저장되고, 시스템클럭Φ가 하이레벨의 기간에 제2의 리드버퍼부분RDB2로 전송된다. 리드한 데이터가 후에 필요하게 되는 경우에는 다음의 데이터를 리드하기전에 상기 제2의 리드버퍼부분RDB2에서 확장리드버퍼부분RDBE 또는 명령리드버퍼부분RDBI로 전송되어 유지된다.
제25도에는 제10도에서 설명한 상기 {MOV. B @ (1234, R0), R1H}명령실행시의 리드데이터버퍼의 1예의 동작타이밍도가 도시되어 있다.
제1스텝ST1, 제3스텝ST3과 제5스텝ST5로 제어신호1이 1레벨로 되고, 데이터버스D0∼D15의 내용이 제1의 리드버퍼부분RDBI에 저장된다. 이들의 내용은 다음의 스텝에서 제2의 리드버퍼부분RDB2로 전송된다. 제2스텝ST2에서 제어신호2가 1레벨로 되고, 제2의 리드버퍼부분RDB2에 유지되어 있는 디스플레스먼트가 B버스로 출력된다. 제3스텝ST3에서 제어신호4가 1레벨로 되고, 제2의 리드버퍼부분RDB2에 유지되어 있는 다음의 명령의 하위8비트의 내용이 확장리드버퍼부분RDBE로 전송된다. 제5스텝ST5에서 제어신호7이 1레벨로 되고, 제2의 리드버퍼부분RDB2에 유지되어 있는 다음의 명령의 내용이 명령리드버퍼부분RDBI로 전송된다. 제어부CONT에서는 제6스텝ST6에서 이 내용을 사용하고, 다음의 명령의 해독을 개시한다.
제6스텝ST6에서 제어신호3이 1레벨로 되고, 제2의 리드버퍼부분RDB2에 유지되어 있는 리드데이터가 A버스로 출력된다.
제26도에는 제11도에서 설명한 상기 {MOV. L @R7+, R 2}명령실행시에 있어서의 제24도의 리드데이터버퍼의 1예의 동작타이밍도가 도시된다.
제1스텝ST1, 제4스텝ST4와 제6스텝ST6에서 제어신호1이 1레벨로 되고, 데이터버스D0∼D15의 내용이 제1의 리드버퍼부분RDB1에 저장된다. 이들의 내용은 다음의 스텝에서 제2의 리드버퍼부분RDB2로 전송된다. 제2스텝ST2에서 제어신호7이 1레벨로 되고, 제2의 리드버퍼부분RDB2에 유지되어 있는 다음의 명령의 내용이 명령리드버퍼부분RDBI로 전송된다. 제어부CONT에서는 제7스텝ST7에서 이 내용을 사용하고, 다음의 명령의 해독을 개시한다. 제6스텝ST6에서 제어신호4가 1레벨로 되고, 제2의 리드버퍼부분RDB2에 유지되어 있는 데이터가 확장리드버퍼부분RDBE로 전송된다. 제7스텝ST7에서 제어신호3, 5가 1레벨로 되고, 제2의 리드버퍼부분RDB2와 확장리드버퍼부분RDBE에 유지되어 있는 24비트의 리드데이터가 A버스로 출력된다.
제27도에는 어드레스버퍼AB(ABL, ABH, ABE)의 구체적인 1예의 논리회로가 도시된다. 동일 도면에 있어서, 어드레스버퍼 AB의 각 비트는 플립플롭회로MAB1, MAB2로 구성되고, 플립플롭회로MAB1은 버스A와 플립플롭회로MAB2에 접속되고, 플립플롭회로MAB2는 플립플롭회로MAB1과 어드레스버스에 접속되어 있다.
플립플롭회로MAB1의 A버스에서의 데이터의 입력은 제어신호가 1레벨일 때 시스템클럭Φ가 로우레벨의 기간에 실행된다. 플립플롭회로MAB1의 내용은 플립플롭회로MAB2에 시스템클럭Φ가 하이레벨의 기간에 전송되어 어드레스버스로 출력된다.
제28도에는 제10도에서 설명한 상기 {MOV. B @ (1234, R0), R1H}는 명령실행시에 있어서의 제27도의 어드레스버퍼의 1예의 동작타이밍도가 도시된다. 제1스텝, 제3스텝과 제5스텝에서 제어신호가 1레벨로 되고, A버스의 내용이 플립플롭회로MAB1에 저장된다. 이들의 내용은 다음의 스텝에서 플립플롭회로MAB2로 전송되어 어드레스버스로 출력된다.
제29도에는 어드레스버퍼AB의 변형예가 도시된다. 제27도의 어드레스버퍼에 대해서 플립플롭회로MAB1과 MAB2의 사이에 가산기 예를들면 인클리멘터INC가 부가되어 있어 정수값2를 가산할 수 있다. 24비트의 데이터를 액세스하기 위해서는 16비트 단위의 액세스를 2회에 나누어서 실행하므로, 1회째의 액세스후 어드레스에 2를 가산해야만하지만, 이 가산에 상기 인클리멘터INC를 사용한다. 범용의 ALU를 사용하는 경우에 비해서 하드웨어규모가 증대하지만, 범용의 연산기를 사용했을때에 일단 계산한 어드레스를 예를들면 일시레지스터등에 일시적으로 확보한후에 상기 일시레지스터의 내용을 리드해서 ALU에서 2를 가산하여 상기 가산결과를 어드레스버퍼로 전송하는 수고를 생략할 수 있어 제어부CONT의 규모를 축소할 수 있다. 이들 어드레스버퍼의 형식은 CPU의 전체적인 구성에 따라서 선택하면 좋고, 예를들면 실행부EXE의 규모에 비해서 제어부CONT의 규모가 너무 크게되어 칩배치상 등에 의해 바람직하지않다고 생각되는 경우에는 제29도의 어드레스버퍼를 채용하면 좋다.
제30도에는 제10도에서 설명한 상기 {MOV. B @ (1234, R0), R1H}명령실행시에 있어서의 제29도의 어드레스버퍼의 1예의 동작타이밍도가 도시된다. 제1스텝과 제5스텝에서 제어신호A1이 1레벨로 되고, A버스의 내용이 플립플롭회로MAB1에 저장된다. 이들의 내용은 다음의 스텝에서 플립플롭회로MAB2로 전송되어 어드레스버스로 출력된다. 제3스텝의 후반에서 제어신호A2가 1레벨로 되고, 플립플롭회로MAB1에 2를 부가한 내용이 제4스텝에서 플립플롭회로MAB2로 전송되어 어드레스버스로 출력된다.
상기 실시예에 의하면 다음의 효과를 얻는 것이다.
(1) 8비트CPU1에 내장의 기존의 16비트의 범용레지스터에 어드레스전용의 확장레지스터를 추가하고, 추가된 확장레지스터를 포함한 전체를 어드레스데이터로써 일괄파악해서 메모리등을 액세스가능하게하고, 이때 어드레스연산은 확장레지스터 및 이것에 대응하는 범용레지스터의 쌍방을 1단위로써 실행하고, 어드레스데이터를 유지하는 범용레지스터의 갱신은 대응하는 확장레지스터와 함께 실행하며, 또 확장레지스터도 포함한 전체로 1단위의 데이터로써 파악해서 어드레스연산에 의해 발생하는 캐리나 빌림수를 처리하므로, 16비트의 어드레스 레지스터를 사용하는 경우에 비해서 리니어하게 이용가능한 어드레스공간을 64K바이트에서 최대한 16M바이트까지 확장할 수 있다. 또, 페이지레지스터에 의한 종래의 어드레스공간기술에 비해서 프로그램이나 컴파일러의 작성이 용이하게 되며, 또 여러 가지의 어드레스수식도 가능하게 되어 어드레스공간의 확장에 맞도록 상대적으로 풍부한 어드레싱모드를 서포트할 수 있게 된다.
(2) 또, 상기 확장레지스터는 어드레스생성에 용도를 한정하고 있으므로, 실행가능한 명령의 종별 또는 조합수를 데이터처리능력의 극단적인 저하를 초래하는 일없이 감소시킬 수 있어 CPU의 논리적 및 물리적인 규모의 증대를 억제할 수 있다.
(3) 리니어한 어드레스공간의 확장과 함께 어드레싱모드를 다양화할 수 있고, 그 다양화에 따라서 어드레싱모드와 명령의 조합도 필연적으로 증대하지만, 이때 어드레스데이터이외의 데이터를 유지하는 범용레지스터와 CPU의 외부 사이에서는 비트조작처리등을 제외하고 1개의 명령으로 직접적인 연산을 불가능하게 하는 것에 의해, CPU의 처리능력의 극단적인 저하를 억제하면서 상기 조합의 증대에 의해서 CPU의 논리적 및 물리적인 규모가 증대하는 것을 극력 억제할 수 있다.
(4) 상기에 의해, 16비트CPU와 같게 어드레스공간을 확장하면서 기기제어응용에 의해 시스템구성에 필요한 타이머나 메모리등의 주변기능을 1칩에 내장할 수 있어 기기제어응용을 위한 필요한 시스템을 온칩화해서 소위 싱글칩 마이크로컴퓨터를 실현하는 것이 용이하게 된다.
(5) 상기 확장레지스터와 범용레지스터의 전체를 어드레스데이터를 위해 이용했을때와 범용레지스터를 그외의 데이터를 위해 이용했을때의 기능의 상위에 감안해서 CPU의 내부, 외부에 있어서 확장레지스터와 범용레지스터의 전체를 일괄하는 전체24비트의 데이터전송제어와 상기 범용레지스터를 일괄하는 전체16비트의 데이터전송제어의 쌍방이 가능하게 되어 있고, 이때 1조의 상기 확장레지스터 및 범용레지스터가 유지하는 어드레스데이터에 따라서 CPU외부의 어드레스를 지정하고, 다른 범용레지스터와 CPU외부 사이에서 데이터를 전송제어할 수 있다.
(6) 산술논리연산기는 확장레지스터 및 범용레지스터의 내용에 대해서 산술연산(본 실시예에 있어서는 시프트연산도 포함), 논리연산, 비교 등을 실행하지만, 상기 산술논리연산기는 상기 확장레지스터 및 범용레지스터의 전체에 대한 24비트의 어드레스데이터에 대한 산술적인 연산을 1머신 사이클에 의해 실행가능한 24비트의 연산비트수를 가지므로, 일괄파악되는 어드레스데이터의 연산에 의해 발생하는 캐리나 빌림수의 처리를 다른 머신 사이클을 사용해서 실행할 필요는 없이 어드레스연산을 효율적으로 실행할 수 있다.
이상 본 발명자에 의해서 이루어진 발명을 실시예에 따라서 구체적으로 설명했지만, 본 발명은 이것에 한정되는 것은 아니고, 그 요지를 이탈하지않는 범위에 있어서 여러 가지로 변경가능한 것은 물론이다.
예를들면, CPU(1)의 블록구성, 레지스터구성 및 구체적인 논리회로예 등에 대해서는 아무런 한정도 받지않는다. 레지스터의 비트수 또는 레지스터의 겟수 등은 임의로 선택할 수도 있다.
어드레싱모드와 실효어드레스의 계산방법에 대해서도 여러 가지의 변형예를 사용할 수 있다. ALU는 24비트구성으로 했지만, 16비트구성으로 하고, 24비트데이터는 하위16비트와 상위8비트의 2회로 나누어서 연산하는 구성으로 하면 물리적규모를 축소할 수 있다. 확장레지스터는 16비트 길이로 해도 좋다. 또, 상기 실시예에 있어서 확장레지스터와 범용레지스터 사이에서 서로 데이터 전송이 가능하게 할 수 있다.
이상의 설명에서는 주로 본 발명자에 의해서 이루어진 발명을 그 배경으로 된 이용분야인 싱글칩 마이크로컴퓨터에 적용한 경우에 대해서 설명했지만, 본 발명은 그것에 한정되는 것은 아니고, 그외의 데이터처리장치에 적용가능하고, 데이터의 처리능력에 비해서 처리가능한 데이터나 프로그램의 규모를 상대적으로 우선시키는 조건의 것, 또, CPU의 논리적 및 물리적인 규모의 증대를 억제하면서 어드레스공간을 확장해서 유효한 조건의 것에 널리 적용할 수 있다.
본원에서 개시되는 발명중 대표적인 것에 의해서 얻을 수 있는 효과를 간단히 설명하면 다음과 같다.
즉, 어드레스데이터의 유지에는 전체가 사용되고, 데이터의 유지에는 그 일부분이 사용되는 소정비트수의 데이터유지수단을 중앙처리장치(CPU)에 마련했으므로, 리니어하게 이용가능한 어드레스공간을 확장할 수 있음과 동시에 페이지레지스터에 의한 종래의 어드레스공간확장기술에 비해서 프로그램이나 컴파일러의 작성이 용이하게 된다.
또, 여러 가지의 어드레스수식도 가능하게 되어 어드레스공간의 넓이에 맞도록 상대적으로 풍부한 어드레싱모드를 서포트할 수 있게 된다.
또, 데이터유지수단의 전체의 이용은 어드레스생성에 용도를 한정하고 있으므로, 실행가능한 명령의 종별 또는 조합수를 데이터처리능력의 극단적인 저하를 초래하는 일없이 감소시킬 수 있어 CPU의 논리적 및 물리적인 규모의 증대를 억제할 수 있다.
어드레스데이터이외의 데이터를 유지하는 범용레지스터와 CPU의 외부사이에서는 비트조작처리 등을 제외하고 1개의 명령으로 직접적인 연산을 불가능하게 하는 것에 의해서도 CPU의 논리적 및 물리적인 규모가 증대하는 것을 극력 억제할 수 있다.
데이터처리능력에 비해서 처리가능한 데이터나 프로그램의 규모를 상대적으로 우선시키는 경우에 어드레스공간을 확장하면서 기기제어응용으로 시스템구성에 필요한 타이머나 메모리등의 주변기능을 1칩에 내장할 수 있어 기기제어 응용을 위해 필요한 시스템을 온칩화해서 소위 싱글칩 마이크로컴퓨터를 실현할 수 있다.
이상 제32도∼제92도를 사용해서 본 발명의 싱글칩 마이크로컴퓨터의 다른 실시예가 설명된다. 또, 제32도∼제93도에 있어서, 도면중의 참조번호 및 기호는 제1도∼제31도에 있어서 사용된 참조번호 및 기호와 중복하고 있는 것이지만, 다른 것으로 이해해주기바란다.
(1) 싱글칩 마이크로컴퓨터의 전체
제32도에는 본 발명에 관한 데이터처리장치의 제1실시예인 싱글칩마이크로컴퓨터가 도시된다. 동일 도면에 도시되는 싱글칩마이크로컴퓨터(100)은 전체의 제어를 담당하는 CPU(중앙처리장치)(1), CPU(1)의 동작프로그램 등을 보유하는 ROM(리드온리메모리) (2), CPU (1)의 작업영역 및 데이터의 일시기억영역등으로써 이용되는 RAM(랜덤액세스메모리) (3), 타이머(4), 직렬통신인터페이스(SCI) (5), 클럭펄스 발생기(68) 및 입출력포트(IOP) (61)∼ (67) 등의 기능블럭으로 구성되고, 이들은 내부버스(69)에 의해 서로 접속되어 이루어진다. 내부버스(69)는 특히 제한되지않지만 어드레스버스, 데이터버스, 컨트롤버스를 포함한다. 이러한 싱글칩 마이크로컴퓨터(100)은 공지의 반도체집적회로 제조기술에 의해서 실리콘기판과 같은 1개의 반도체기판상에 형성되어있다.
싱글칩 마이크로컴퓨터(100)은 클럭펄스발생기CPG의 단자XTAL, EXTAL에 접속되는 수정발진자 또는 외부에서 입력되는 외부클럭에 따라서 생성되는 기준클럭에 동기해서 동작을 실행한다.
이 기준클럭의 최소단위를 상태라 부른다. 또, 도면에 있어서, Vss, Vcc는 전원단자이다. MODE1∼MODE3은 CPU (1)에 대한 모드신호이다.
상기 CPU (1)에 리세트신호RES가 부가되면 싱글칩 마이크로컴퓨터(100)은 리세트상태로 된다. 이 리세트상태를 해제하면 CPU (1)은 개시어드레스를 리드해서 이 개시어드레스에서 명령의 리드를 개시하는 리세트예외처리를 실행한다. 상기 개시어드레스는 특히 제한되지않지만 0번지에 저장되어 있는 것으로 한다.
그후, CPU (1)은 특히 제한되지않지만, 순차로 ROM (2)에서 명령을 리드해서 해독하고, 그 해독결과에 따라서 데이터의 처리 또는 RAM (3), 타이머 (4), SCI (5), 입출력포트 (61)∼(67) 등과 데이터의 전송을 실행한다. 즉, CPU (1)은 입출력포트 (61)∼(67)등에서 입력되는 데이터 또는 SCI(5) 등에서 입력되는 지시를 참조하면서 ROM (2)에 기억되어 있는 명령에 따라서 처리를 실행하고, 그 결과에 따라서 입출력포트 (61)∼(67), 타이머(4) 등을 사용해서 외부로 신호를 출력하여 각종 기기의 제어를 실행하는 것이다. 특히 제한되지않지만 상기 ROM (2), RAM (3), 타이머 (4) 등의 리드/라이트는 바이트(예를들면 8비트)/워드(예를들면 16비트)의 어느것도 2상태에서 실행하는 것으로 한다.
이러한 CPU (1)의 명령의 최소단위는 2바이트로 되고, 또 명령 또는 16비트데이터를 메모리에 배치하는 경우에는 우수에서 시작되는 연속한 2바이트의 영역에 배치하는 것으로 되어 있다.
(2) 8비트확장레지스터+16비트범용레지스터구성예
제33도에는 상기 CPU (1)이 내장되는 레지스터의 제1의 구성예가 도시된다. CPU (1)은 각각 16비트길이의 8개의 범용레지스터ROL, ROH∼R7L, R7H, 각각 8비트길이의 8개의 확장레지스터E0∼E7, 24비트길이의 프로그램카운터PC 및 8비트길이의 조건코드레지스터CCR을 갖고 있다. 범용레지스터ROL, ROH∼R7L, R7H는 특히 제한되지않지만 상위8비트와 허위8비트를 독립시켜서 8비트길이의 데이터를 저장하는 것도 상위, 하위를 연결해서 16비트길이의 데이터를 저장할 수 있다.
범용레지스터ROL, ROH∼R7L, R7H를 어드레스레지스터로써 사용하는 경우는 범용레지스터가 보유하는 16비트를 어드레스의 하위16비트로 하고, 대응하는 확장레지스터가 보유하는 8비트를 어드레스의 상위8비트로 해서 합계24비트의 어드레스를 생성하는 것이다. 즉, CPU (1)은 최대한 24비트의 어드레스로 규정되는 연속적인 어드레스공간을 이용할 수 있다. 또, 이 24비트의 어드레스를 여러 가지의 모드로 수식할 수 있게 되어 있다. 예를들면 상기 24비트어드레스에 디스플레이스먼트를 가산하는 정수배를 하거나 또는 다른 레지스터의 내용을 가산한다는 것을 실행할 수 있다. 이 수식을 실행하는 경우, 하위16비트의 계산으로 캐리 또는 빌림수가 발생한 경우에는 상위8비트에 자릿수올림 또는 자릿수내림을 실행한다. 이 결과를 어드레스레지스터에 유지시키는 경우에는 동시에 상위8비트의 결과도 대응하는 확장레지스터에 유지시킨다.
확장레지스터E0∼E7은 범용레지스터와 마찬가지로 데이터레지스터로써도 사용할 수 있다. 즉, 확장레지스터끼리 및 확장레지스터와 범용레지스터사이에서 데이터의 연산을 실행할 수 있게 되어 있다.
프로그램카운터PC는 24비트의 카운터이고, CPU (1)이 다음에 실행하는 명령의 어드레스를 나타내고 있다. 조건코드레지스터CCR은 인터럽션마스크비트 (I), 캐리플래그 (C), 제로플래그 (Z), 네가티브플래그 (N) 및 초과플래그 (V)를 포함하고 있다. 인터럽션마스크비트I는 1일 때 CPU (1)을 인터럽션금지상태로 하고, 0일 때 인터럽션허가 상태로 한다. 그외의 플래그는 연산의 결과등을 반영한다.
제34도에는 범용레지스터ROL, ROH∼R7L, R7H와 확장레지스터E0∼E7의 데이터구성예가 도시된다. CPU (1)이 취급하는 바이트데이터는 범용레지스터의 상위RiH (i=0, 1, ...., 7) 또는 하위RiL 또는 확장레지스터Ei에 저장된다. 범용레지스터의 상위RiH를 사용하는 경우 비트15가 데이터의 최상위 비트(MSB)에 비트8이 최하위비트(LSB)에 각각 대응한다.
마찬가지로 범용레지스터의 하위RiL을 사용하는 경우, 비트7이 최상위비트에, 비트0이 최하위비트에 대응한다. 확장레지스터Ei를 바이트데이터에 이용하는 경우에는 비트23이 최상위비트에, 비트16이 최하위비트에 대응한다. 워드데이터는 범용레지스터Ri (RiL 및 RiH)에 저장된다. 이때 비트15가 데이터의 최상위비트에, 비트0이 최하위비트에 각각 대응한다. 어드레스디코더는 확장레지스터Ei와 범용레지스터RiL, RiH에 저장된다. 확장레지스터Ei의 비트7이 어드레스데이터의 최하위비트에, 범용레지스터RiL의 비트0이 최하위비트에 각각 대응된다. 또, CPU(1)은 이들외에 1비트데이터 또는 2진화 10진수데이터등을 취급하지만 이들은 본 발명에 직접은 관계가 없으므로 상세한 설명은 생략한다. 제35도에는 RAM(3), ROM(2) 등의 메모리의 데이터의 구성예가 도시된다. 특히 제한되지않지만, 메모리는 바이트 단위로 어드레스가할당되어 있다. CPU(1)이 취급하는 바이트데이터는 메모리의 각 어드레스(1)에 저장된다. 워드데이터는 메모리의 우수어드레스(2m)과 기수어드레스(2m+1)을 연결해서 저장된다. 우수어드레스의 비트7이 데이터의 최하위비트에, 기수어드레스의 비트0이 최하위비트에 각각 대응한다. 어드레스디코더는 우수어드레스에서 시작되는 4바이트의 어드레스(4n, 4n+1, 4n+2, 4n+3)에 저장된다. 선두의 우수어드레스의 1바이트는 장래의 확장용 시스템상 예약되어 있다. 다음의 기수어드레스의 비트7이 어드레스데이터의 최상위비트에, 4바이트째의 기수어드레스의 비트0이 최하위비트에 각각 대응한다.
(3) 8비트확장레지스터+16비트범용레지스터 구성예의 과제 상기 8비트CPU (1)의 16비트범용레지스터Ri에 확장레지스터Ei를 추가하고, 추가된 확장레지스터를 포함한 전체를 어드레스데이터로써 일괄파악해서 메모리등을 액세스가능하게 하고, 이때의 어드레스연산에서는 확장레지스터 및 이것에 대응하는 범용레지스터의 쌍방에서 1단위의 어드레스로써 파악해서 어드레스연산으로 발생하는 캐리나 빌림수를 처리하므로, 16비트의 어드레스레지스터를 사용하는 경우에 비해서 리니어하게 이용가능한 어드레스공간을 64k바이트에서 최대한 16M바이트까지 확장할 수 있다. 단, 그 경우에도 다음의 과제가 있는 것을 본 발명자에 의해서 명확하게 되어 있다.
첫 번째로, 상기 레지스터구성에 있어서, 그 전체에서는 8비트레지스터로써 24개, 16비트레지스터로써 8개 또는 24비트레지스터로써 8개를 사용할 수 있지만, 예를들면 8비트의 가산을 실행하는 경우, 가산수(소오스레지스터)와 피가산수(디스티네이션레지스터)의 지정에 각각 5비트를 필요로 한다. 명령길이를 2바이트단위로 했으므로, 8비트연산에 대해서는 오퍼레이션의 지정을 6비트로 하지않으면 최소명령길이로 되지않는다. 또, 16비트연산에 대해서는 레지스터의 지정은 3비트로 좋고, 이점에 있어서의 상기 8비트연산과 명령포맷을 공동화하는 것은 곤란하거나 또는 득책은 아니다.
또, 24개의 레지스터의 지정에 5비트를 사용하는 것은 낭비다.
즉, 5비트이면 본래 32개의 레지스터에서 바라는 레지스터를 지정할 수 있다.
두 번째로, 24비트길이의 데이터를 메모리에 배치한 경우, 제35도에서 설명한 바와 같은 예약영역이 필요하며 메모리의 이용효율이 좋지않다. 예약영역을 삭제하면 16비트데이터와 24비트데이터를 메모리상에 혼재시키는 것이 곤란하게 된다. 적어도, 16비트데이터를 메모리에 배치하는 경우에 우수에서 시작되는 연속한 2바이트의 영역에 배치하도록 한정하고, CPU의 내부구성을 단순화하고, 논리적 및 물리적규모를 축소하여 제조비용의 삭감, 그리고 동작속도의 향상의 실현을 도모할 목적을 잃고만다.
세 번째로, 24비트길이의 데이터는 어드레스로써 사용하는 이외에는 기수바이트길이이므로, 데이터로써는 취급이 곤란하다. 상기와 같이, 종래의 마이크로컴퓨터는 취급하는 데이터가 8비트 또는 16비트로써, 이들 종래의 마이크로컴퓨터와 함께 사용되고, 이들이 워드데이터를 저장할 수 있는 경우, 이들로부터 데이터를 전송할 때에 워드데이터2개를 CPU (1)의 레지스터1개에는 저장할 수 없으며, 또 이들로 워드데이터를 전송할 때는 CPU (1)의 레지스터1개의 내용은 16비트와 8비트로 분할시켜야만하기 때문이다. 상기의 컴파일러를 작성하는 경우에도 소위 호스트컴퓨터에 대해서도 상기와 마찬가지로 24비트데이터를 취급하는 것이 곤란하여 컴파일러의 설계효율 및 성능을 저하시키는 것이 생각된다.
(4) 16비트확장레지스터 + 16비트범용레지스터 구성예
상기 항목(3)에서 설명한 과제에 대처할 수 있는 레지스터구성예를 또 설명한다.
제36도에는 상기 CPU (1)이 내장하는 레지스터의 제2의 구성예가 도시된다. CPU (1)은 각각 16비트길이의 8개의 범용레지스터ROL, ROH∼R7L, R7H, 각각 16비트길이의 8개의 확장레지스터E0∼E7, 24비트길이의 프로그램카운터PC 및 8비트길이의 조건코드레지스터CCR을 갖고 있다. 범용레지스터ROL, ROH∼R7L, R7H는 특히 제한되지않지만 상위 8비트와 하위8비트를 독립시켜서 8비트길이의 데이터를 저장하는 것도 상위, 하위를 연결해서 16비트길이의 데이터를 저장할 수도 있다.
확장레지스터Ei는 8비트로 분할해서 각각 독립으로 사용할 수는 없다. 범용레지스터RiL, RiH를 어드레스레지스터로써 사용하는 경우는 범용레지스터RiH, RiL이 보유하는 16비트를 어드레스의 하위16비트로 하고, 대응하는 확장레지스터Ei의 내용을 어드레스의 상위 16비트로 해서 합계 32비트, 또는 확장레지스터Ei의 상위8비트를 무시해서 24비트의 어드레스를 생성하는 것이다. CPU (1)은 24비트 또는 32비트의 어드레스로 규정되는 연속적인 어드레스공간을 이용할 수 있다. 또, 이 32비트 또는 24비트의 어드레스를 여러 가지 수식할 수 있는 것은 상술한 바와 같고, 이 수식을 실행하는 경우 하위16비트의 계산으로 캐리 또는 빌림수가 발생한 경우에는 상위측의 확장레지스터Ei에 대해서 자릿수올림 또는 자릿수내림이 실행된다. 또, 다음의 설명에서 어드레스데이터는 24비트로 한다. 이것에 따라서 제36도에 있어서의 프로그램카운터PC의 비트길이는 24비트로 되어 있다. 프로그램카운터PC의 비트길이를 32비트로 해도 좋다.
확장레지스터E0∼E7은 데이터레지스터로써는 16비트레지스터로써 범용레지스터와 마찬가지로 사용할 수 있다. 즉, 확장레지스터끼리 및 확장레지스터와 범용레지스터사이에서 데이터의 연산을 실행할 수 있게 되어 있다. 또, 조건코드레지스터CCR은 상기와 마찬가지이므로, 그 상세한 설명은 생략한다.
제37도에는 범용레지스터ROL, ROH∼R7L, R7H와 확장레지스터E0∼E7의 데이터구성예가 도시된다. CPU (1)이 취급하는 바이트데이터는 범용레지스터의 상위RiH (i=0, 1, ..., 7) 또는 하위RiL에 저장된다. 워드데이터는 범용레지스터Ri(RiH, RiL) 또는 확장레지스터Ei에 저장된다. 이때, 비트15가 데이터의 최상위비트에, 비트0이 최하위비트에 각각 대응한다. 32비트의 긴워드데이터는 범용레지스터Ri 및 확장레지스터Ei에 저장된다. 24비트의 어드레스데이터는 긴워드데이터로써 확장레지스터Ei와 범용레지스터Ri에 저장된다. 이때, 확장레지스터Ei의 상위8비트는 예약영역으로 된다. 또, 예약된 8비트와 24비트의 어드레스데이터를 합쳐서 단지 긴워드어드레스데이터라고도 한다.
제38도에는 RAM(3), ROM(2) 등의 메모리의 데이터구성예가 도시된다. 상기와 마찬가지로 메모리는 바이트단위로 어드레스가 할당되어 있다. CPU(1)이 취급하는 바이트데이터는 메모리의 각 어드레스(1)에 저장된다. 워드데이터는 메모리의 우수어드레스(2m)과 기수어드레스(2m+1)을 연결해서 저장된다.
우수어드레스의 비트7이 데이터의 최상위비트에, 기수어드레스의 비트0이 최하위비트에 각각 대응한다. 긴워드데이터는 우수어드레스에서 시작되는 4바이트의 어드레스(2n, 2n+1, 2n+2, 2n+3)에 저장된다. 선두의 우수어드레스의 비트7이 데이터의 최상위비트에, 4바이트째의 기수어드레스의 비트0이 최하위비트에 각각 대응한다.
(5) 16비트확장레지스터+16비트범용레지스터구성예의 이점
첫 번째로, 상기 레지스터구성에 있어서, 그 전체에서는 8비트레지스터로써 16개, 16비트레지스터로써 16개, 24비트레지스터로써 8개를 사용할 수 있다. 8비트연산 및 16비트연산의 어느것에 대해서도 레지스터의 지정은 4비트로 되어 명령포맷을 공통화할 수 있다. 또, 16개의 레지스터에서 바라는 레지스터를 지정하기 위해서 4비트를 사용하므로, 그 지정을 위한 정보비트수에 낭비가 없다.
두 번째로, 긴워드데이터를 메모리에 배치한 경우, 예약영역이 필요하지 않게 되어 어드레스가 24비트길이로 좋은 경우는 상기와 마찬가지로 낭비가 발생하지만, 적어도 그외의 긴워드데이터를 저장하는 경우에는 낭비가 발생하지 않는다.
세 번째로, 긴워드데이터는 어드레스로써 사용하는 이외에도 데이터로써는 취급이 용이하다. 종래의 마이크로컴퓨터와 데이터의 전송을 실행하는 경우등도 용이하여 낭비가 발생하지않는다. 또, 컴파일러의 호스트컴퓨터에 대해서도 마찬가지로써 컴파일러의 설계효율 및 성능을 저하시키는 일이 없다.
네 번째로는 제36도의 레지스터구성은 제33도의 레지스터구성에 비해서 레지스터의 비트수가 약4/3배로 되어 CPU(1)의 논리적 및 물리적규모를 증가시킨다고 생각될지도 모른다. 이것에 대해서는 상술한 바와 같이, 메모리의 이용효율이 향상하는 것 또 컴파일러의 성능향상에 의해서 동일한 처리에 대해서도 프로그램의 규모를 작게할 수 있다. 이것에 의해서, ROM등의 메모리의 용량 및 물리적인 규모를 작게할 수 있어 싱글칩 마이크로컴퓨터 전체로써의 물리적인 규모의 축소는 방해되지않는다. 따라서, CPU의 내부구성을 단순화하고, 논리적 및 물리적인 규모를 축소하며, 또 제조비용의 삭감 및 동작속도의 향상이 실현된다. 또, 다음의 설명은 제36도의 레지스터구성을 채용한 경우의 설명으로 한다.
(6) 어드레싱모드와 실효어드레스계산
제39도∼제41도에는 CPU (1)의 어드레싱모드와 실효어드레스의 계산방법의 1예가 도시된다.
제39도의 (1)에 도시되는 레지스터간접에서는 명령코드중에 레지스터를 지정하는 부분을 포함하고, 이 명령코드로 지정된 레지스터와 이것에 대응하는 확장레지스터의 내용의 합계24비트를 어드레스로 해서 메모리상의 어드레스를 지정한다. 어드레스는 24비트로 좋으므로 상위8비트는 무시한다.
제39도의 (2), (3)에 도시되는 디스플레이스먼트를 갖는 레지스터간접은 상기 레지스터간접과 마찬가지로 얻어진 24비트의 어드레스에 명령코드중에 포함되는 디스플레이스먼트를 가산한 결과를 어드레스로 해서 메모리상의 어드레스를 지정한다. 가산결과는 어드레스의 지정에만 사용되고, 확장레지스터Ei 및 범용레지스터Ri의 내용에는 반영되지않는다. 특히, 제한되지않지만, 디스플레이스먼트는 24비트 또는 16비트이고, 16비트디스플레이스먼트는 가산하는 경우에는 상위16비트는 부호확장된다. 즉, 디스플레이스먼트의 상위16비트는 16비트디스플레이스먼트의 비트15와 같은 값으로써 가산이 실행된다. 이 경우, 24비트디스플레이스먼트의 상위8비트는 명령이 2바이트단위인 것 및 장래의 확장에 대비해서 예약영역을 합쳐서 32비트의 디스플레이스먼트 지정부를 명령코드에 포함하고 있다.
제40도의 (4)에 도시되는 포스트인클리먼트 레지스터간접은 상기 레지스터간접과 마찬가지로 얻어진 24비트의 어드레스에서 메모리상의 어드레스를 지정한다. 그후, 이 어드레스에 1또는 2또는 4를 가산하고, 그 가산결과가 확장레지스터, 범용레지스터에 저장된다. 메모리상의 바이트데이터를 지정하는 경우 1이, 워드데이터를 지정하는 경우 2가, 어드레스데이터를 지정하는 경우 4가 각각 가산된다. 가산결과의 상위8비트도 확장레지스터에 저장된다.
제41도에 도시되는 절대 어드레스는 명령코드중에 포함되는 8비트, 16비트 또는 24비트의 절대어드레스를 어드레스로 해서 메모리상의 어드레스를 지정한다. 8비트절대어드레스는 상위 16비트가 1확장된다. 즉, 어드레스의 비트23∼8은 전체비트1로된다. 따라서, 사용가능한 어드레스는 H'FFFF00∼H'FFFFFF의 256바이트이다. 또, 16비트절대어드레스는 상위8비트가 부호확장된다. 즉, 16비트절대어드레스의 비트15가 0이면 어드레스의 비트23∼16은 전체비트0으로 되고, 비트15가 1이면 어드레스의 비트23∼16은 전체비트1로 된다. 따라서, 사용 가능한 어드레스는 H'000000∼H'007FFF 및 H'FF8000∼H'FFFFFF의 64k바이트이다.
제40도의 (5)에 도시되는 프리디클리먼트레지스터간접은 상기 레지스터간접과 마찬가지로 얻어진 24비트의 어드레스에서 1또는 2또는 4를 감산한 결과의 24비트의 어드레스에서 메모리상의 어드레스를 지정한다. 그후, 그 감산결과가 확장레지스터, 범용레지스터에 저장된다. 메모리상의 바이트데이터를 지정하는 경우 1이, 워드데이터를 지정하는 경우 2가, 어드레스데이터를 지정하는 경우 4가 각각 감산된다. 상기와 마찬가지로 어드레스가 24비트로 좋은 경우에는 특히 제한되지않지만 감산결과의 상위8비트도 확장레지스터에 저장된다.
제40도의 (6)에 도시되는 프로그램카운터상대는 프로그램카운터의 내용의 24비트의 어드레스에 명령코드중에 포함되는 디스플레이스먼트를 가산한 결과를 어드레스로 해서 메모리상의 어드레스를 지정한다. 가산결과는 프로그램카운터에 저장된다. 특히, 제한되지않지만 디스플레이스먼트는 16비트 또는 8비트이고, 이들 디스플레이스먼트는 가산하는 경우에는 상위 8비트 또는 16비트는 부호확장된다. 즉, 디스플레이스먼트의 상위8비트는 16비트디스플레이스먼트의 비트15와 또는 상위 16비트는 8비트디스플레이스먼트의 비트7과 같은 값이라 간주해서 가산이 실행된다. 프로그램카운터상대는 분기명령만으로 사용된다.
CPU (1)은 상기외에 이미디어트, 레지스터직접 등의 어드레싱모드를 실행하지만 이들은 본 발명에 직접적으로 관계가 없으므로 상세한 설명은 생략한다.
(7) 주요어드레싱모드의 명령포맷
제42도∼제49도에는 주요한 어드레싱모드의 명령의 명령포맷이 도시된다. 각각의 명령의 포맷은 각 명령의 기능 및 어드레싱모드를 나타내기 위한 연산코드부op를 갖고, 이 연산코드부op의 연산코드에 따라서 사용하는 레지스터를 지정하기 위한 레지스터지정부(rs, rd, ers, erd), 절대어드레스(aa), 디스플레이스먼트(d), 또는 이미디어트(xx)를 포함하고 있다. 명령포맷은 2바이트단위로 되고, 레지스터지정부는 명령코드의 제1워드의 비트7∼비트4, 비트3∼비트0 또는 특수형으로써 비트11∼비트8에 포함된다. 상기 레지스터지정부rs는 바이트 또는 워드크기의 소오스레지스터를 지정하고, 상기 레지스터지정부rd는 바이트 또는 워드크기의 디스티네이션레지스터를 지정한다. 지정해야할 레지스터가 바이트크기인가 워드크기인가는 연산코드부의 연산코드에 의해서 결정된다. 즉, 16비트의 연산을 따르는 연산코드에 부수되는 경우, 레지스터지정부rs, rd의 하위측3비트는 8개의 레지스터R0∼R7중 어느것인가를 지정하고, 지정된 레지스터중 확장레지스터를 이용하는가 범용레지스터를 이용하는가는 상기 레지스터지정부의 나머지의 상위측1비트에 의해서 지정된다. 8비트의 연산을 따르는 연산코드에 부수되는 경우, 레지스터지정부rs, rd의 하위측3비트는 8개의 레지스터R0∼R7중 어느것인가를 지정하고, 지정된 레지스터중 범용레지스터의 상위측을 이용하는가 하위측을 이용하는가는 상기 레지스터지정부의 나머지의 상위측1비트에 의해서 결정된다.
레지스터지정부ers는 긴워드크기의 소오스레지스터를 지정하고, 상기 레지스터지정부erd는 긴워드크기의 디스터네이션레지스터를 지정한다. 4비트확보되어 있는 레지스터지정부ers, erd의 최하위 1비트는 명령디코드시 실질적으로 무시된다.
명령포맷중에 있어서의 절대어드레스aa, 디스플레이스먼터d, 이미디어트xx는 최하위비트가 우수번째의 비트0으로 되도록 명령코드에 포함된다. 즉, 16비트이상의 절대어드레스aa, 디스플레이스먼트d, 이미디어트xx는 2바이트를 단위로 해서 포함된다. 이 때문에 24비트의 절대어드레스aa, 디스플레이스먼트d는 그 선두(상위비트측) 1바이트의 영역중에 소정비트수의 예약부를 포함해서 4바이트로 된다. 8비트의 절대어드레스aa, 디스플레이스먼트d, 이미디어트xx는 제1워드의 비트7∼0에 포함된다.
상기 명령포맷에 의하면 다음의 효과를 얻는다.
(1) 명령포맷중에 있어서 레지스터를 지정하는 부분이 명령의 제1워드의 1부분에 고정되어 있으므로, 명령의 디코드 논리구성이 간단하게 된다.
(2) 레지스터 지정영역의 하위측3비트에 의해서 8개의 레지스터의 어느것을 지정하는가를 결정하고, 지정된 1개의 레지스터중의 어느 영역을 사용하는가를 상위측1비트로 결정함과 동시에 상기 1비트로 결정되는 영역의 크기는 명령중에서 지정되는 데이터크기에 의해서, 즉 연산코드부의 연산코드에 의해서 결정되므로 레지스터에 저장되는 데이터 및 어드레스데이터가 바이트, 워드, 긴워드의 여러중류에 이를때에도 레지스터지정부의 비트수를 최소한으로 억제할 수 있다.
(8) CPU의 내부블럭
제50도에는 CPU (1)의 내부블럭도가 도시된다. CPU (1)은 주로 마이크로ROM 또는 PLA(Plogrammable Logic Array)로 구성되는 제어부CONT, 상기 범용레지스터ROL, ROH∼R7L, R7H, 확장레지스터E0∼E7, 프로그램카운터PC(PCL, PCH, PCE), 조건코드레지스터CCR 등을 포함하는 실행부EXE 및 레지스터선택부REGSEL로 구성된다. 제어부CONT는 명령을 폐치하고, 이것을 해독해서 명령의 실행에 필요한 각종제어신호를 생성하거나 명령의 실행순서를 제어한다. 레지스터선택부REGSEL은 상기 명령의 해독결과에 따라서 레지스터의 선택신호를 생성한다.
실행부EXE는 또 일시레지스터TRL, TRH, TRE, 산술논리연산기ALUL, ALUH, ALUE, 리드데이터버퍼RDBL, RDBH, RDBE, 라이트데이터버퍼WDBL, WDBH, WDBE 및 어드레스버퍼ABL, ABH, ABE를 포함하고, 이들이 3개의 내부버스A(L, H, E), B(L, H, E), C(L, H, E) 및 셀렉터회로부SEL을 거쳐서 접속되어 있다. 리드데이터버퍼RDBL, RDBH, RDBE는 외부의 데이터버스D7∼D0, D15∼D8에 접속된다. 라이트데이터버퍼WDBL, WDBH, WEBE는 라이트데이터 출력버퍼WDBOL, WDBOH를 거쳐서 상기 데이터버스D7∼D0, D15∼D8에 접속된다. 산술논리연산기ALUL, ALUH, ALUE는 명령에 의해서 지정되는 각종연산, 프로그램카운터PC의 가산, 실효어드레스의 계산 등에 사용된다. 리드데이터버퍼RDBL, RDBH, RDBE는 ROM (2), RAM (3) 또는 도시하지 않은 외부메모리 등에서 리드한 명령이나 데이터를 일시적으로 저장하고, 또 라이트데이터버퍼WDBL, WDBH, WDBE는 상기 ROM (2), RAM (3) 또는 외부메모리 등으로 라이트해야할 데이터를 일시적으로 저장한다. 이것에 의해서 CPU (1)의 내부동작과 CPU (1)의 외부의 리드/라이트동작의 타이밍을 조정하고 있다. 어드레스버퍼ABL, ABH, ABE는 CPU (1)이 리드/라이트하는 어드레스를 일시적으로 저장한다.
특히 제한되지않지만, 기본적으로 상기 실행부EXE내의 각 회로블럭은 8비트의 2블럭 및 16비트의 1블럭으로 구성되어 있다.
범용레지스터는 8비트의 2블럭으로 구성되고, ROH∼R7H가 비트 15∼비트8, R0L∼R7L이 비트7∼비트0에 대응한다. 범용레지스터의 더욱 상위측의 비트, 즉 비트31∼비트16은 16비트의 1블럭의 확장레지스터E0∼E7이 대응한다. 내부버스는 이들의 비트31∼비트16, 비트15∼비트8, 비트7∼비트0에 대응해서 각각 A, B, C가 병행해서 마련되어 있다. 그외의 상기 일시레지스터TR, ALU, 리드데이터버퍼, 라이트데이터버퍼 등도 마찬가지이다.
이들 물리적인 배치는 특히 제한되지않는다.
(9) CPU에 의한 명령실행 및 예외처리의 1예
제51도∼제55도에 도시되는 흐름도에 따라서 CPU (1)의 대표적인 명령실행처리 및 예외처리를 설명한다.
제51도에 도시되는 리세트예외처리시는 CPU (1)은 0번지에서 시작되는 4바이트의 어드레스에 저장된 개시어드레스를 리드한다.
또, 이 4바이트중 0번지의 1바이트는 상기와 같이 장래확장용으로 예약된 것으로 무시된다. CPU (1)은 제1스텝에서 인터럽션마스크비트I를 1에 세트한다. 동시에 CPU (1) 내부에서 버스A상에 데이터0을 생성하고, 이것을 어드레스버퍼ABL, ABH, ABE (이하, AB라고도 한다)로 전송함과 동시에 ALUL, ALUH, ALUE (이하, ALU라고도 한다)에서 2를 가산한다. 가산결과는 C버스경유에 의해 일시레지스터TRL, TRH, TRE (이하, TR이라고도 한다)에 저장한다. 제2스텝Sa2에서 상기 어드레스버퍼AB의 내용을 어드레스로써 워드데이터의 리드를 개시한다.
제3스텝Sa3에서는 리드동작을 종료하고, 리드한 워드데이터를 리드데이터버퍼RDBE, RDBL, RDBH에 저장한다. 동시에 일시 레지스터TR의 내용을 버스A로 출력하고, 어드레스버퍼AB로 전송한다. 제4스텝Sa4에서는 상기 어드레스버퍼AB의 내용을 어드레스로 해서 워드데이터의 리드를 개시한다. 제5스텝Sa5에서는 리드동작을 종료하고, 리드한 워드데이터를 데이터버퍼RDBL, RDBH에 저장한다. 이때, 특히 제한되지않지만 리드데이터버퍼는 소위 선입선출형식으로 데이터를 유지하도록 되어 있다. 제6스텝Sa6에서는 제3스텝Sa3 및 제5스텝Sa5에서 리드데이터버퍼RDBE, RDBH, RDBL에 저장한 데이터32비트를 개시어드레스로 해서 버스A로 출력하고, 어드레스버퍼AB로 전송함과 동시에 ALU에서 2를 가산한다. 가산결과는 버스C를 거쳐서 프로그램카운티PC(PCL, PCH, PCE)에 저장한다. 또, 제3스텝Sa3에서 데이터버퍼RDBE에 저장된 데이터의 상위 8비트는 상기와 같이 무시된다. 제7스텝Sa7에서는 상기 어드레스버퍼AB의 내용을 어드레스 해서 프로그램의 선두명령의 리드를 워드단위로 개시한다. 제8스텝Sa8에서는 리드동작을 종료하고, 리드한 워드데이터를 데이터버퍼RDBL, RDBH에 저장한다. 실제로는 또 제66도에 도시되는 명령용의 리드데이터버퍼RDBI로 전송된다.
그것과 동시에 프로그램카운터PC의 내용을 버스A로 출력하고, 어드레스버퍼AB로 전송하며, 또 ALU에서 2를 가산한다. 가산결과는 프로그램카운터PC에 저장한다. 제9스텝Sa9에서는 상기 어드레스버퍼AB의 내용을 어드레스 해서 프로그램의 3바이트째, 4바이트째의 명령의 리드를 워드로 개시한다. 또, 제8스텝Sa8에서 데이터버퍼RDBL, RDBH에 저장한 명령(실제로는 명령용 리드데이터버퍼RDBI가 유지하는 명령)을 제어부CONT로 전송하여 해독을 개시한다. 다음의 스텝에서는 프로그램의 선두명령인 제9스텝Sa9에서 해독을 개시한 명령에 따른 동작을 개시한다.
제9스텝Sa9에서 리드를 개시한 워드데이터는 이 명령실행중에 소정의 리드데이터버퍼에 저장된다.
제52도에는 즉각자료를 레지스터로 전송하는 명령의 처리흐름이 도시되어 있다. 예를들면 데이터34를 범용레지스터ROL로 전송하는 명령(MOV. B #34, ROL)은 특히 제한되지않지만 상기와 같이 명령코드중에 즉각자료34를 포함하고, 2바이트의 명령길이인 것으로 한다. 본 명령은 제1스텝Sb1에서는 직전에 실행한 명령 또는 예외처리의 최후의 스텝에서 개시한 리드동작을 종료하고, 리드한 워드데이터를 리드데이터버퍼RDBH, RDBL(RDBI)에 저장한다. 동시에 프로그램카운터PC의 내용을 버스A로 출력하고, 어드레스버퍼AB로 전송하며, 또 ALU에서 2를 가산한다.
가산결과는 프로그램카운터PC에 저장한다. 제2스텝Sb2에서는 어드레스버퍼AB에 저장된 내용에 따라서 본 명령에서 3바이트째, 4바이트째의 명령의 리드를 워드로 개시한다. 동시에 이미 데이터버퍼RDBL, RDBH에 저장하고 있는 본 명령코드중에 포함되는 즉각자료34를 버스A로 출력하고, ALU를 통과하고, ALU에서 버스C로 출력해서 레지스터ROL로 전송한다. ALU를 통과했을 때에 데이터를 검사하고, 조건코드레지스터CCR의 Z, N플래그에 반영한다. 또, 제1스텝Sb1에서 리드데이터버퍼RDBI에 저장한 명령을 제어부CONT로 전송하여 해독을 개시한다. 다음의 스텝에서는 다음의 명령인 제2스텝Sb2에서 해독을 개시한 명령에 따른 동작을 개시한다. 제2스텝Sb2에서 리드를 개시한 워드데이터는 이 명령실행중에 소정의 리드데이터버퍼에 저장한다.
제53도에는 디스플레이스먼트를 갖는 레지스터간접 어드레싱모드에서 메모리의 내용을 레지스터로 전송하는 명령이 도시되어 있다.
예를들면 레지스터R0과 확장레지스터E0으로 표시되는 어드레스에 상대값1234를 부가한 어드레스에서 바이트데이터를 범용레지스터R1H로 전송하는 명령 {MOV. B @ (1234, ER0), R1H}는 특히 제한되지않지만, 상기와 같이 명령코드중에 디스플레이스먼트1234를 포함하여 4바이트의 명령길이인 것으로 한다. 본 명령은 제1스텝Sc1에서 직전에 실행한 명령 또는 예외처리의 최후의 스텝에서 개시한 리드동작을 종료하고, 리드한 워드데이터(본 명령의 제3, 제4바이트)를 리드데이터버퍼RDBE, RDBH, RDBL에 저장한다. 동시에 프로그램카운터PC의 내용을 버스A로 출력하고, 어드레스버퍼AB로 전송하며, 또 ALU에서 2를 가산한다.
가산결과는 프로그램카운터PC에 저장한다. 제2스텝Sc2에서 어드레스버퍼AB에 저장된 내용에 따라서 본 명령에서 3바이트째, 4바이트째의 명령인 다음의 명령의 리드를 워드로 개시한다.
동시에 이미 데이터버퍼RDBH, RDBL에 저장하고 있는 본명령코드중에 포함되는 디스플레이스먼트1234를 버스B로, 범용레지스터R0과 확장레지스터E0의 내용을 버스A로 출력하고, ALU에서 이들의 가산을 실행하고, ALU에서 버스C로 출력해서 일시레지스터로 전송한다. 가산시에 디스플레이스먼트는 00001234로 확장된다. 제3스텝Sc3에서 리드동작을 종료하고, 리드한 워드데이터를 리드데이터버퍼RDBH, RDBL, 그리고 명령용의 리드데이터버퍼RDBI에 저장한다. 동시에 일시레지스터TR의 내용을 버스A로 출력해서 어드레스버퍼AB로 전송한다. 제4스텝Sc4에서 상기 어드레스버퍼AB의 내용을 어드레스로 해서 데이터의 리드를 바이트로 개시한다. 제5스텝Sc5에서 리드동작을 종료하고, 리드한 바이트데이터를 리드데이터버퍼에 저장한다. 상기와 마찬가지로 프로그램카운터PC의 내용을 어드레스버퍼AB로 전송하고, 2를 가산한다. 제6스텝Sc6에서 상기 어드레스버퍼AB의 내용을 어드레스로 해서 데이터의 리드를 바이트로 개시한다. 제5스텝Sc5에서 데이터버퍼에 저장한 데이터를 버스A로 출력하고, ALU를 통과하고, ALU에서 버스C로 출력해서 레지스터R1H로 전송한다.
ALU를 통과했을때에 데이터를 검사하고, 조건코드레지스터CCR의 Z, N플래그에 반영한다. 제3스텝Sc3에서 리드데이터버퍼RDBI에 저장한 명령을 제어부CONT로 전송하여 해독을 개시한다.
다음의 스텝에서는 상기와 마찬가지로 다음의 명령의 동작을 개시한다. 제54도에는 포스트인클리먼트 레지스터간접 어드레싱모드에서 메모리의 내용을 레지스터로 전송하는 명령의 1예의 처리흐름이 도시된다. 예를들면, 범용레지스터R7과 확장레지스터E7로 표시되는 어드레스에서 확장데이터를 범용레지스터R2와 확장레지스터E2로 전송하는 명령(MOV. L @ER7 +, ER2)는 특히 제한되지않지만, 2바이트의 명령길이인 것으로 한다. 본 명령은 제1스텝Sd1에서 직전에 실행한 명령 또는 예외처리의 최후의 스텝에서 개시한 리드동작을 종료하고, 리드한 워드데이터를 데이터버퍼RDBH, RDBL, 그리고 명령용의 리드데이터버퍼RDBI에 저장한다. 제2스텝Sd2에서 레지스터R7과 확장레지스터E7의 내용을 버스A로 출력하고, 어드레스버퍼AB로 전송하고, 동시에ALU에서 2를 가산하여 결과를 범용레지스터R7과 확장레지스터E7에 저장한다.
제3스텝Sd3에서 상기 어드레스버퍼AB의 내용을 어드레스로 해서 데이터의 리드를 워드로 개시한다. 제4스텝Sd4에서 리드동작을 종료하고, 리드한 워드데이터를 리드데이터버퍼RDBH, RDBL에 저장한다. 동시에 범용레지스터R7과 확장레지스터E7의 내용을 버스A로 출력하고, 어드레스버퍼AB로 전송하고, 동시에 ALU에서 2를 가산한다. 가산결과는 범용레지스터R7과 확장레지스터E7를 가산한다. 가산결과는 범용레지스터R7과 확장레지스터E7에 저장한다. 제5스텝Sd5에서 상기 어드레스버퍼AB의 내용을 어드레스로 해서 데이터의 리드를 워드로 개시한다. 제6스 텝Sd6에서 리드동작을 종료하고, 리드한 워드데이터를 리드데이터버퍼RDBH, RDBL에 저장한다. 상기와 마찬가지로 프로그램카운터PC의 내용을 어드레스버퍼AB로 전송하고, 2를 가산한다.
제7스텝Sd7에서 상기 어드레스버퍼AB의 내용을 어드레스로 해서 데이터의 리드를 워드로 개시한다. 리드데이터버퍼RDBH, RDBL에 저장한 데이터를 버스A로 출력하고, ALU를 통과하고, ALU에서 버스C로 출력해서 범용레지스터R2와 확장레지스터E2로 전송한다. ALU를 통과했을 때에 데이터를 검사하고, 조건코드레지스터CCR의 Z, N플래그에 반영한다. 제1스텝Sd1에서 데이터버퍼RDBI에 저장한 명령을 제어부CONT로 전송하여 해독을 개시한다. 다음의 스텝에서는 상기와 마찬가지로 다음 명령의 동작을 개시한다.
제55도에는 프리디클리먼트 레지스터간접 어드레싱모드에서 레지스터의 내용을 메모리로 전송하는 명령의 1예의 처리흐름이 도시된다.
예를들면, 범용레지스터R7과 확장레지스터E7로 표시되는 어드레스에서 확장데이터를 범용레지스터R2와 확장레지스터E2로 전송하는 명령(MOV. L ER2, @-ER7)은 특히 제한되지않지만, 2바이트의 명령길이인 것으로 한다. 본 명명은 제1스텝Se1에서 직전에 실행한 명령 또는 예외처리의 최후의 스텝에서 개시한 리드동작을 종료하고, 리드한 워드데이터를 리드데이터버퍼RDBH, RDBL, 그리고 명령용 리드데이터버퍼RDBI에 저장한다. 제2스텝Se2에서는 레지스터R7과 확장레지스터E7의 내용을 버스A로 출력하고, ALU에서 4를 감산하여 결과를 범용레지스터R7과 확장레지스터E7에 저장한다. 제3스텝Se3에서 재차 레지스터R7과 확장레지스터E7의 내용을 버스A로 출력하고, 어드레스버퍼AB로 전송하고, 동시에 ALU에서 2를 가산하여 결과를 일시레지스터TR에 저장한다. 제4스텝Se4에서 범용레지스터R2와 확장레지스터E2의 내용을 버스B로 출력하고, 라이트데이터버퍼WDBE, WDBH, WDBL에 저장한다. 데이터의 라이트를 워드로 개시한다.
상위16비트는 동시에 라이트데이터출력버퍼WDBOH, WDBOL로 전송되고, 데이터버스D15∼D0으로 출력된다. 제5스텝Se5에서 라이트동작을 종료하고, 일시레지스터TR의 내용을 버스A로 출력하고, 어드레스버퍼AB로 전송한다. 제6스텝에서 데이터의 라이트를 워드로 개시한다. 라이트데이터버퍼WDBH, WDBL의 하위16비트는 라이트데이터 출력버퍼WDBOH, WDBOL로 전송되고, 데이터버스D15∼D0으로 출력된다. 제6스텝Se6에서 라이트동작을 종료하고, 리드한 워드데이터를 리드데이터버퍼RDBH, RDBL에 저장한다. 상기와 마찬가지로 프로그램카운터PC의 내용을 어드레스버퍼AB로 전송하고, 2를 가산한다. 제7스텝Se7에서 상기 어드레스버퍼AB의 내용을 어드레스로 해서 데이터의 리드를 워드로 개시한다. 범용레지스터R2와 확장레지스터E2의 내용을 버스A로 출력하고, ALU를 통과시킨다. ALU를 통과했을 때 데이터를 검사하고, 조건코드레지스터CCR의 Z, N플래그에 반영한다. 제1스텝Se2에서 데이터버퍼RDBI에 저장한 명령을 제어부CONT로 전송하여 해독을 개시한다. 다음의 스텝에서는 상기와 마찬가지로 다음 명령의 동작을 개시한다.
(10) CPU의 산술연산명령일람
제56도에는 CPU (1)의 산술연산명령의 일람표가 도시된다.
그 산술연산은 구체적으로는 가산, 감산, 비교를 포함한다.
가산명령으로써는 그 기능별로 ADD, ADDC의 명령이 있으며, 또 ADD명령에서는 바이트크기, 워드크기, 긴워드크기가 있다.
ADD명령에서는 지정된 원시자료(이미디어트 또는 레지스터의 내용)와 디스티네이션(레지스터의 내용)을 가산하여 결과를 디스티네이션의 레지스터에 저장함과 동시에 결과를 C, V, Z, N의 각 플래그에 반영한다. 특히 제한되지않지만 메모리의 내용과 레지스터의 내용의 연산은 실행되지 않는다.
ADD명령에서는 데이터연산명령으로써의 성질상 바이트크기, 워드크기, 긴워드크기가 있다. ADDC명령도 ADD명령과 마찬가지이지만, 가산은 캐리플래그C를 포함해서 실행된다. ADDC명령은 데이터연산명령으로써의 성질상 바이트크기, 워드크기, 긴워드크기가 있는 것이 바람직하지만, 워드크기, 긴워드크기의 ADDC명령은 33비트이상의 데이터를 취급하지않는한 필요없다. 이것에 대해서 ADDC명령을 바이트크기만으로 하면 CPU (1)의 명령포맷, 내부제어방식의 단순화를 실행해서 논리적 및 물리적규모를 축소가능하다.
상기 필요성과 상기 축소규모를 고려해서 특히 제한되지않지만 ADDC명령을 바이트크기만으로 하고 있다. 긴워드크기는 어드레스 데이터계산용으로 사용되며, 범용레지스터와 확장레지스터를 조합해서 가산을 실행한다.
비교명령으로써는 CMP명령이 있으며, 캐리를 갖는 비교명령은 존재하지 않는다. 감산명령으로써는 그 기능별로 SUB명령과 SUBC명령이 있으며, 그들의 내용은 감산이라는 기능에 있어서 상기 가산명령과 상위할뿐이다.
또, 제56도에 있어서, #x : 8#x: 16은 각각 8비트, 16비트 즉각자료를 의미하고, Rd8, Rd16은 8비트, 16비트 범용레지스터를 의미하며, Ed : Rd :16은 확장레지스터와 범용레지스터의 내용 등을 나타낸다.
상기와 같은 범용레지스터Ri, 확장레지스터Ei를 마련하고, 16M바이트의 어드레스공간을 사용가능하게한 경우, 중요한 연산은 레지스터사이에서 실행하고, 메모리와 레지스터의 연산은 직접 실행하지않는(즉, 1명령에서는 실행하지않음)명령체계로 하는 것이 득책이다.
16M바이트의 어드레스공간을 유효하게 이용하기 위해서는 상기와 같은 복잡한 어드레싱모드가 필요하다. 연산명령의 디부분에 이와 같은 복잡한 어드레싱모드를 실행가능하게 하면, 제어부CONT의 구성이 복잡하게 되어 논리적 및 물리적규모를 최소한으로 하는 목적에 위배되기 때문이다. 메모리의 액세스에는 상술한 여러 가지의 어드레싱모드를 갖는 전송명령으로 레지스터와의 데이터의 전송을 실행하고, 레지스터상에서 연산등의 데이터처리를 실행하는 것으로 하면 좋다. 범용레지스터Ri는 8비트길이로 최대 16개분으로써 사용할 수 있으며, 또 범용레지스터Ri 및 확장레지스터Ei는 16비트길이로 최대16개분으로써 사용할 수 있고, 어떤 처리에 필요한 데이터를 레지스터상에 배치할 수 있다. 또는, 적어도 사용빈도가 높은 데이터의 대부분을 레지스터상에 배치할 수 있다. 따라서, 처리프로그램의 증가나 실행속도의 저하라는 불합리가 발생하는 경우는 적다고 생각된다.
메모리에 대한 연산을 실행할 필요가 있는 명령으로서는 비트조작 명령이 있다. 이들은 바이트단위로 할당된 어드레스의 제n비트로써 지정되지만, 바이트단위로 취급되는 데이터가 아니고 각각의 비트가 독립된 기능을 갖고 있다. 예를들면, 타이머의 동작을 제어하는 레지스터와 같은 경우, 제0비트, 제1비트로 타이머의 클럭을 선택하고, 제2비트로는 타이머카운터와 비교레지스터의 내용이 일치했을 때 타이머카운터를 클리어하는가 하지않는가를 지정하고, 제3비트로는 상기 일치했을 때 인터럽션을 발생하는가 하지않는가를 지정하는 것이다. 이들은 1비트단위로 1로 세트하거나 0으로 클리어할 필요가 있다. 또는 입력포트의 소정의 1비트가 0인가 1인가에 의해서 CPU (1)의 처리프로그램이 다른 경우, 상기 1비트의 데이터를 판정할 필요가 있다. 이러한 1비트데이터는 메모리 또는 상기 타이머제어용의 레지스터에 대해서 직접 연산해야만한다.
바이트단위로 일단 레지스터로 전송한후에 비트조작을 실행하면, 상기 전송과 비트조작사이에 인터럽션이 들어가서, 예를들면 상기 입력포트의 값이 변화하는 불합리가 발생하기 때문이다. 따라서, 본 실시예에 있어서의 CPU (1)은 범용레지스터와 같은 내부의 레지스터와 주변회로의 제어용레지스터와 같은 외부레지스터 사이에서의 직접적인 연산을 위한 비트조작명령을 서포트하고 있다. 또, 이와같은 비트조작명령의 대상으로 되는 어드레스는 고정적으로 복잡한 어드레싱모드는 필요하지않다. 절대어드레스와 최저한 레지스터간접을 실행할 수 있으면 좋다. 또, 절대어드레스의 경우도 전체 어드레스공간을 사용할 필요는 없으며, 상기 타이머, 입출력포트등이 있는 어드레스범위에만 사용하면 충분하다고 생각된다. 이와같은 어드레스범위의 지정에 사용할 수 있는 절대어드레스는 8비트로 충분하다. 16비트로 하면 사용가능한 어드레스범위가 확대되지만, 명령길이가 길게 되어 제어가 복잡하게 된다. 적어도 24비트로써 16M바이트의 전체공간을 사용가능하게 해야만 하는 경우는 매우 드물다고 생각된다. 따라서, 1비트 또는 수비트의 비트조작명령을 직접 외부주변회로 사이에서 실행해도 이것에 의해서 제어부의 규모나 명령의 종류가 극단적으로 증대할 염려는 없다.
(11) 명령의 기능과 어드레싱모드의 조합일람
제57도에는 명령의 기능과 어드레싱모드의 조합의 관계의 1예가 도시된다. 동일 도면에 있어서, #는 이미디어트, R은 레지스터직접, @R은 레지스터간접, @(d16, R) 및 @(d24, R)은 디스플레이스먼트를 갖는 레지스터간접, @은 프리디클리먼트간접, @R+는 포스트인클리먼트레지스터간접, @a8, @a16, @a24는 절대어드레스, @(d8, PC), @(d16, PC)는 프로그램카운터 상대의 각 어드레싱모드를 의미한다. 또, 동일 도면에 있어서, B는 바이트, W는 워드, L은 긴워드를 의미한다. 프로그램카운터상대는 분기명령전용이다. 그외의 어드레싱모드는 전송명령으로 사용가능하다. 연산명령은 이미디어트와 레지스터간접을 사용할 수 있다. 단, 단항연산은 레지스터간접만이다. 산술연산명령은 상기와 같이 바이트, 워드, 긴워드를 사용할 수 있으며, 단 캐리를 갖는 가감산은 바이트크기만 사용가능하다. 인클리먼트, 디클리먼트는 레지스터를 카운터로 하는 경우이므로, ±1은 바이트, 워드, 긴워드를 사용가능하게 하지만, ±2, ±4는 어드레스계산용이므로, 긴워드만을 사용가능하게 하고 있다. 논리연산명령, 시프트, 회전은 특히 제한되지않지만, 바이트, 워드, 긴워드를 사용할 수 있다.
이것은 16M바이트의 어드레스공간을 사용하는 응용의 하나로써 프린터의 문자데이터를 취급하는 경우에 문자데이터의 흑백 반전이나 사체 등의 가공에 이들 명령이 많이 사용된다고 생각되기 때문이다.
(12) 레지스터의 회로구성예
제58도에는 범용레지스터, 확장레지스터, 프로그램카운터, 일시레지스터의 구체적인 논리회로예가 도시된다. 동일 도면에는 대표적으로 3비트의 구성이 도시되어 있다. 레지스터는 플립플롭회로FF로 구성되고, 버스C에서 데이터의 입력이 가능하게 되고 버스A, AB로 출력이 가능하게 되어 있다. 데이터의 입출력은 레지스터선택부REGSEL에서의 신호에 따라서 시스템클럭Φ(도면에 있어서의 기호*는 로우이네이블인 것을 의미한다)가 로우레벨의 기간에 실행된다. 범용레지스터RiH, RiL 및 확장레지스터Ei에는 각각 독립한 제어신호AH, BH, AL, BL, CL, AE, BE, CE가 부여되어 각각 독립된 입출력이 가능하게 되어 있다.
프로그램카운터PC는 24비트길이이므로, AE, AH와 AL, BE, BH와 BL, CE, CH와 CL은 각각 공통의 신호(다음에 기술하는 APC, BPC, CPC)로써 부여되어 일괄된 입출력을 실행한다.
일시레지스터TR에 대해서는 그 사용방법에 의존하지만 범용레지스터 및 확장레지스터와 마찬가지로 한다.
특히 제한되지않지만, 각각의 버스A, B, C는 부논리로 되어 있다. 또, 버스A 및 B는 시스템클럭Φ가 하이레벨의 기간에 P채널형 MOS트랜지스터Qp에 의해 하이레벨(0레벨)에 고정된다. 시스템클럭Φ가 로우레벨의 기간에 어떤 블럭도 데이터를 출력하지않으면 하이레벨이 유지된다.
(13) 범용레지스터 및 확장레지스터의 동작예
제59도에는 제53도에서 설명한 상기 {MOV. B @(1234, ERO), R1H}명령실행시의 범용레지스터 및 확장레지스터의 1예의 동작타이밍도가 도시된다.
시스템클럭Φ에 동기한 제1사이클(상기 제1스텝Sc1에 대응)과 제5사이클(제5스텝Sc5에 대응)에서 제어신호APC가 1레벨로 되어 프로그램카운터PC의 내용이 A버스로 출력된다. 동시에 제어신호CPC가 1레벨로 되어 C버스의 내용이 프로그램카운터PC에 입력된다. 특히 제한되지않지만, 프로그램카운터PC의 출력은 소위 마스터슬레이브로 되어 있으므로, A버스에는 C버스의 내용이 아닌 직전의 프로그램카운터PC의 내용이 출력된다. 제2사이클(제2스텝Sc2에 대응)에서 확장레지스터E0과 범용레지스터R0의 제어신호AE0, AH, ALO01 1레벨로 되고 확장레지스터E0과 범용레지스터R0의 내용이 A버스로 출력된다. 제6사이클(제6스텝Sc에6에 대응)에서 범용레지스터R1의 제어신호AH1이 1레벨로 되고 C버스의 내용이 범용레지스터R1H로 출력된다. 제어신호AE1, AL1은 0레벨이고, 확장레지스터E1과 범용레지스터R1L의 내용은 유지된다.
제60도에는 제54도에 도시되는 상기(MOV. L @ER7 +, ER2) 명령실행시의 범용레지스터의 1예의 동작타이밍도가 도시된다.
시스템클럭Φ에 동기한 제2사이클(제2스텝Sd2에 대응)에서 확장레지스터E7과 범용레지스터R7의 제어신호AE7, AH7, AL7이 1레벨로 되고, 확장레지스터E7과 범용레지스터R7의 내용이 A버스로 출력된다. 동시에 제어신호CE7, CH7, CL7이 1레벨로 되고, C버스의 내용이 확장레지스터E7과 범용레지스터R7에 입력된다. 상기와 마찬가지로 범용레지스터의 출력은 소위 마스터슬레이브로 되어 있으므로, A버스에는 C버스의 내용이 아닌 직전의 프로그램카운터PC의 내용이 출력된다. 제6사이클(제6스텝Sd6에 대응)에서 제어신호APC가 1레벨로 되고, 프로그램카운터PC의 내용이 A버스로 출력된다. 동시에 제어신호CPC가 1레벨로 되고, C버스의 내용이 프로그램카운터PC에 입력된다. 제7사이클(제7스텝Sd7에 대응)에서 확장레지스터E2와 범용레지스터R2의 제어신호CE2, CH2, CL2가 1레벨로 되고, C버스의 내용이 확장레지스터E2와 범용레지스터R2에 입력된다.
(14) 레지스터선택부의 구성예
제61도에는 상기 레지스터선택부REGSEL에 있어서의 범용레지스터 및 확장레지스터지정을 위한 1예의 블럭도가 도시된다.
레지스터지정부는 디코더DEC1, DEC2, 3개의 AND OR게이트G1, 4개의 AND게이트G2, 6개의 AND게이트G3 및 클럭인버터와 같은 9개의 출력제어게이트G4에 의해서 구성된다. 디코더DEC1은 제어신호SO∼S2를 디코드하고, 디코더DEC2는 제어신호D0∼D2를 디코드한다. AND OR게이트G1은 그들 디코더DEC1, DEC2의 소정의 제어신호와 제어신호DB, SB, DA, SA, CD, CS중의 소정의 제어신호를 입력한다. AND게이트G2는 제어신호D3, BY, WO중의 소정의 2종류의 신호를 입력해서 논리곱을 채용한다. 게이트G3은 상기 AND OR게이트 G1의 출력, 상기 AND게이트G2의 출력, 제어신호BY중의 소정의 신호를 3입력으로써 그 논리곱을 채용한다. 출력게이트G4는 대응하는 AND게이트G3의 출력 및 AND OR게이트G1의 출력을 클럭신호Φ에 동기해서 출력한다.
제어신호DB는 명령포맷중의 레지스터지정부rd에서 지정한 레지스터를 B버스로 출력하는 것을 지시하고, 제어신호CS는 C버스의 내용을 명령포맷중의 레지스터지정부rs에서 지정한 레지스터로 입력하는 것을 지시한다. 제어신호DA는 레지스터지정부rd에서 지정한 레지스터를 A버스를 출력하는 것을 지시한다. 제어신호SB는 레지스터지정부rs에서 지정한 레지스터를 B버스로 출력하는 것을 지시한다. 제어신호SA는 레지스터지정부rs에서 지정한 레지스터를 A버스로 출력하는 것을 지시한다. 제어신호CD는 C버스의 내용을 명령포맷중의 레지스터지정부rd에서 지정한 레지스터로 입력하는 것을 지시한다. 제어신호BY, WO는 각각 조작을 바이트크기, 워드크기로 실행하는 것을 지시한다. 선택해야할 레지스터에 대응하는 데이터가 제어신호S0∼S2 또는 제어신호D0∼D2에 부여되며, 또한 제어신호DB, SB, DA, SA, CD, CS 및 제어신호BY, WO, D3에 소정의 신호가 부여되는 것에 의해, 상기 제어신호AE, BE, CE, AH, BH, CH, AL, BL, CL중의 하나 또는 여러개가 활성화된다.
제62도에는 명령포맷중에 있어서의 레지스터지정부의 데이터와 그것에 의해서 지정되는 레지스터의 대응예가 도시된다.
레지스터지정부는 비트0∼2로 레지스터의 번호(0∼7)를 지정하고, 비트3은 바이트크기일 때 범용레지스터의 상위측인가 하위측인가(H/L)를, 워드크기일 때에는 범용레지스터인가 확장레지스터인가를 지정한다. 또, 긴워드크기데이터와 어드레스레지스터로써의 이용에 있어서는 상술한 바와 같이, 비트3은 무시되어 실질적으로 존재하지 않는다. 예를들면 제어신호D0∼D3이 B'0000, 제어신호DA와 제어신호BY가 각각 1레벨로 되었을 때 범용레지스터의 제어신호AH가 1레벨로 된다.
제63도에는 제55도에서 설명한 상기 (MOV. L R2, @-ER7)명령을 실행할 때의 레지스터지정부의 동작타이밍도가 도시된다.
제2스텝에서 확장레지스터E7과 범용레지스터R7의 제어신호AE7, AH7, AL7이 1레벨로 되고, 확장레지스터E7과 범용레지스터R7의 내용이 A버스로 출력된다. 동시에 제어신호CE7, CH7, CL7이 1레벨로 되고, C버스의 내용이 확장레지스터E7과 범용레지스터R7로 입력된다. 상기와 마찬가지로 범용레지스터의 출력은 소위 마스터슬레이브로 되어 있으므로, A버스로는 C버스의 내용이 아닌 직전의 확장레지스터E7과 범용레지스터R7의 내용이 출력된다. 제6스텝에서 제어신호APC가 1레벨로 되고, 프로그램카운터PC의 내용이 A버스로 출력된다. 동시에 제어신호CPC가 1레벨로 되고, C버스의 내용이 프로그램카운터PC로 입력된다.
제7스텝에서 확장레지스터E2와 범용레지스터R2의 제어신호AE, AH, AL이 1레벨로 되고, 확장레지스터E2와 범용레지스터R2의 내용이 C버스로 출력된다.
제64도에는 레지스터 선택제어신호로써의 상기 제어신호S0∼S2 및 DO∼D3을 생성하는 신호생성논리의 1예가 도시된다.
상기와 같이, 레지스터지정부rs는 명령코드의 비트7∼4이므로, 이들 비트7∼4의 내용이 직접제어신호S0∼S3으로 된다. 또, 레지스터지정부rd는 명령코드의 비트3∼O 또는 비트11∼8이므로, 이들 비트3∼0 또는 비트11∼8의 내용중 어느것인가가 선택되어 제어신호D0∼D3으로 된다. 그 선택을 위한 신호는 명령코드의 비트15∼12를 디코드해서 생성한다. 비트11∼8을 레지스터지정부rd로 하는 경우, 연산코드는 15∼12이므로, 비트 15∼12를 디코드하면 레지스터지정부rd가 비트11∼8인가 판정할 수 있다. 레지스터지정부rd가 비트11∼8이 아닌 경우에는 레지스터지정부가 존재하지 않는 경우도 포함해서 비트3∼0을 제어신호D0∼D3으로 한다.
(15) 셀렉터회로부
제65도에는 제50도에 도시되는 상기 셀렉터회로부SEL의 1예로써 B버스에 착안한 회로가 도시된다.
범용레지스터ROH와 R1L사이의 바이트크기가산을 실행하는 경우, 범용레지스터ROH는 A버스H, B버스H, C버스H (비트15∼8)에 접속되고, 범용레저스터R1L은 A버스L, B버스,L, C버스L (비트7∼0)에 접속되어 있어 ALU와 같은 비트에 직접 접속되어 있지 않다. 이때, 셀렉터회로부SEL은 B버스L로 출력한 범용레지스터R1L의 내용을 B버스H로 출력하고 있다. 바이트크기일 때 제어신호BY가 1레벨로 되고, 제어신호S3이 1레벨이면 레지스터지정부rs에서 지정된 범용레지스터에서 B버스L로 데이터가 출력되고 있고, 이것에 따라서 그 데이터가 셀렉터회로부SEL을 통해서 B버스H로 출력된다. 이것에 의해서 B버스H, B버스L에 동일한 데이터가 출력되고, 레지스터지정부rd에서 지정된 범용레지스터가 어느것이라도 ALU와 같은 비트로 블록이 다른 레지스터의 데이터를 입력해서 연산가능하다. 확장레지스터는 바이트크기의 레지스터로써 사용하지않으므로 B버스E로 출력하지 않는다.
마찬가지로, 제어신호BY가 1레벨로 되고, 제어신호S3이 0레벨이면 레지스터지정부rs에서 지정된 범용레지스터에서 B버스H로 데이터가 출력되고 있고, 이것을 B버스L로 출력할 수 있다.
또, 워드크기일 때 제어신호WO가 1레벨로 되고, 제어신호S3이 1레벨이면 레지스터지정부rs에서 지정된 확장레저스터에서 B버스E로 데이터가 출력되고 있고, 이것이 셀렉터회로부SEL을 통해서 B버스H, B버스L로 출력된다. 이것에 의해서 B버스E(비트31∼16)과 B버스H, B버스L(비트15∼0)로 동일한 데이터가 출력되고, 레지스터지정부rd에서 지정된 확장레지스터, 범용레지스터중 어느것이라도 ALU의 같은 비트로 그 데이터를 입력해서 연산가능하다. 마찬가지로 제어신호WO가 1레벨로 되고, 제어신호S3이 0레벨이면 레지스터지정부rs에서 지정된 범용레지스터에서 B버스H, B버스L로 데이터가 출력되고 있고, 이것을 B버스E로 출력할 수 있다.
(16) 리드데이터버퍼
제66도에는 리드데이터버퍼RDBE, RDBH, RDBL의 구체적인 회로예가 도시된다.
동일 도면에 있어서, 리드데이터버퍼RDBL, RDBH는 제1의 리드버퍼부분RDB1 및 제2의 리드버퍼부분RDB2로 구성된다.
리드데이터버퍼RDBE는 제1의 리드버퍼부분RDB3 및 제2의 리드버퍼부분 RDB4로 구성된다. 제1의 리드버퍼부분RDB1, RDB3은 싱글칩 마이크로컴퓨터(100)이 포함되는 내부데이터버스D0∼D15에 게이트회로를 거쳐서 결합되고, 그 출력은 게이트회로를 거쳐서 제2의 리드버퍼부분 RDB2, RDB4의 입력에 접속된다.
제2의 리드버퍼부분RDB2, RDB4의 출력은 게이트를 거쳐서 A 버스 및 B버스에 접속된다. 또, 제2의 리드버퍼부분RDB2의 출력은 게이트를 거쳐서 명령용의 리드데이터버퍼(이하, 명령리드버퍼 부분이라고도 한다) RDBI의 입력에도 접속된다. 명령리드버퍼부분 RDBI의 출력은 제어부CONT에 결합된다. 상기 제1의 리드버퍼부분 RDBI, RDB3과 제2의 리드버퍼부분RDB2, RDB4 및 명령리드버퍼부분 RDBI는 모두 16비트이다. 동일 도면에 도시되는 「B버스E」는 제50도의 「B(E)」에 대응되고, 「A버스E」는 제50도의 「A(E)」에 대응되고, 마찬가지로 「B버스H」는 제50도의 「B(H)」에 대응되고, 「A버스H」는 제50도의 「A(H)」에 대응되고, 「B버스L」은 제50도의 「B(L)」에 대응되고, 「A버스L」은 제50도의 「A(L)」에 대응된다.
제66도에 도시되는 제어신호R4가 0레벨, 제어신호R5가 1레벨, 그리고 시스템클럭Φ*(*는 반전 또는 로우이네이블을 의미한다)가 1레벨일 때, 상기 제1의 리드데이터버퍼부분RDB1, RDB3은 각각 데이터를 페치한다. 이때, 제어신호R4가 1레벨이라면 한쪽의 리드데이터버퍼부분RDB3은 데이터를 페치하지않는다.
제1의 리드데이터버퍼부분RDB1, RDB3과 제2의 리드데이터버퍼부분RDB2, RDB4는 마스터슬레이브동작되고, 시스템클럭Φ의 1레벨에 동기해서 제1의 리드데이터버퍼부분RDB1, RDB3에서 제2의 리드데이터버퍼부분RDB2, RDB4에 데이터가 인도된다. 제2의 리드데이터버퍼부분RDB2, RDB4가 유지하고 있는 데이터는 제어신호R3의 1레벨에 따라서 B버스에 부여되고, 제어신호R2의 1레벨에 따라서 A버스에 부여되며, 또 제어신호R1의 1레벨에 따라서 명령리드데이터버퍼부분RDBI에 부여된다.
제66도의 리드데이터버퍼는 내부버스에 접속된 32비트의 제2의 리드데이터버퍼부분RDB2, RDB4와 데이터버스DO∼D15에 접속된 32비트의 제1의 리드데이터버퍼부분RDB1, RDB31로 구성되고, 하위비트측의 제1의 리드데이터버퍼부분RDB1은 리드시에 항상 리드데이터가 저장되고, 상위측의 제1의 리드데이터버퍼부분RDB3은 데이터를 저장하는가 하지않는가를 제어신호R4로 지정된다.
이때, 하위측16비트는 리드시는 항상 입력이 허용되고, 상위측16비트는 긴워드데이터의 하위워드리드시(상위워드데이터의 리드가 먼저 실행된다)에는 입력이 금지된다. 이것에 의해, 명령코드중의 24비트의 실효어드레스지정부와 긴워드데이터를 마찬가지로 취급할 수 있고 리드데이터버퍼의 구성을 단순화하여 논리적 및 물리적규모를 축소할 수 있다.
제67도에는 상기 (MOV. L @ER7 +, ER2)명령의 실행시에 있어서의 제66도의 리드데이터버퍼의 동작타이밍도가 도시된다.
제1사이클과 제4사이클 및 제6사이클에서 제어신호R5가 1레벨로 되어 데이터버스D15∼D0의 내용이 제1의 리드버퍼부분RDB1, RDB3에 저장된다. 단, 제6사이클에서는 제어신호R4가 1레벨로 되어 제1의 리드데이터버퍼부분RDB3에는 데이터는 저장되지 않는다. 이들의 내용은 다음의 사이클에서 제2의 리드버퍼부분RDB2, RDB4로 전송된다. 제2사이클에서 제어신호R1이 1레벨로 되고, 제2의 리드버퍼부분RDB2에 유지되어 있는 다음의 명령이 명령리드버퍼부분RDBI로 전송된다. 제어부CONT에서는 제7사이클에서 이 내용을 사용하고, 다음 명령의 해독을 개시한다. 제7사이클에서 제어신호R3이 1레벨로 되고, 제2의 리드버퍼부분RDB2, RDB4에 유지되어 있는 32비트의 리드데이터가 B버스로 출력된다.
(17) 라이트데이터버퍼
제68도에는 라이트데이터버퍼의 구체적인 회로예가 도시된다.
라이트데이터버퍼WDBE는 16비트의 B버스E 또는 16비트의 A버스E에서 데이터를 받는다. 라이트데이터버퍼WDBH는 8비트의 B버스H 또는 8비트의 A버스H에서 데이터를 받는다. 라이트데이터버퍼WDBL은 8비트의 B버스L 또는 8비트의 A버스L에서 데이터를 받는다. 라이트데이터출력버퍼WDBL, WDBOH 는 라이트데이터버퍼WDBE 또는 라이트데이터버퍼WDBL, WDBOH의 출력을 받아서 이것을 데이터버스D0∼D15로 출력한다. 라이트되어야할 데이터는 우선 시스템클럭Φ가 로우레벨의 기간에 A버스 또는 B버스로 출력되고, 제어신호W1, W2, W3의 레벨에 따라서 라이트데이터버퍼WDBL, WDBH, WDBE에 저장된다. 라이트데이터버퍼에 저장된 데이터는 시스템클럭Φ가 로우레벨의 기간에 제어신호W4, W5, W6의 레벨에 따라서 라이트데이터출력버퍼WDBOL, WDBOH로 전송된다.
제69도에는 제55도에서 설명한 상기(MOV. L ER2, @-ER7)명령의 실행시에 있어서의 라이트데이터버퍼의 1예의 동작타이밍도가 도시된다. 제4사이클(제4스텝Se4에 해당)에서 제어신호W2가 1레벨로 되어 B버스로 출력된 레지스터E2 및 R2의 내용이 라이트데이터버퍼WDBE 및 WDBH, WDBL에 저장된다.
동시에 제어신호W6이 1레벨로 되고, 이들의 내용중 레지스터E2의 유지데이터에 해당하는 16비트의 내용이 라이트데이터버퍼WDBE에서 라이트데이터출력버퍼WDBOL, WDBOH로 전송되고, 또 제어신호W7이 1레벨로 되어 내부데이터버스DO∼D15로 출력된다.
제6사이클(제6스텝Se6에 해당)에서는 제어신호W4, W7이 1레벨로 되고, 라이트데이터버퍼WDBH, WDBL에 유지되어 있는 레지스터R2에 해당하는 16비트의 내용이 라이트데이터출력버퍼WDBOH, WDBOL로 전송되어 내부데이터버스D0∼D15로 출력된다.
다음 명령의 내용이 명령리드버퍼부분으로 전송된다.
(18) 어드레스버퍼
제70도에는 어드레스버퍼의 구체적인 논리회로로써 1비트분의 구성이 대표적으로 도시된다. 어드레스버퍼는 플립플롭회로MAB1, MAB2로 구성되고, 플립플롭회로MAB1은 버스A와 플립플롭회로MAB2에 접속되고, 플립플롭회로MAB2는 플립플롭회로MAB1과 어드레스버스에 접속되어 있다. 플립플롭회로MAB1의 A버스에서의 데이터의 입력은 제어신호가 1레벨일 때 시스템클럭Φ가 로우레벨의 기간에 실행된다. 플립플로롭회로MAB1의 내용은 플립플롭회로MAB2로 시스템클럭Φ가 하이레벨의 기간에 전송되어 어드레스버스로 출력된다.
제71도에는 제53도에서 설명한 상기 {MOV. B @ (1234, ERO), R1H}명령실행시에 있어서의 제70도의 어드레스버퍼의 동작타이밍도가 도시된다. 제1사이클(제1스텝Sc1에 대응), 제3사이클(제3스텝Sc3에 대응) 및 제5사이클(제5스텝Sc5에 대응)에서 제어신호가 1레벨로 되어 A버스의 내용이 플립플롭회로MAB1에 저장된다. 이들의 내용은 다음의 스텝에서 플립플롭회로MAB2로 전송되어 어드레스버스로 출력된다.
제72도에는 어드레스버퍼의 변형예가 도시된다. 제70도의 어드레스버퍼에 대해서 플립플롭회로MAB1과 MAB2의 사이에 가산기 예를들면 인클리먼트INC가 부가되어 있고, 정수값2를 가산할 수 있다. 24비트의 데이터를 액세스하기 위해서는 16비트단위의 액세스를 2회로 나누어서 실행하므로, 1회째의 액세스후 어드레스에 2를 가산해야만하지만, 이 가산에 상기 인클리먼트INC를 사용한다. 범용의 ALU를 사용하는 경우에 비해서 하드웨어는 증대하지만 범용 ALU를 사용할 때에 일단 계산한 어드레스를 예를들면 일시레지스티등에 일시적으로 확보하고, 그후에 상기 일시레지스터의 내용을 리드해서 ALU에서 2를 가산하고, 상기 가산결과를 어드레스버퍼로 전송하는 수고를 생략할 수 있어 제어부CONT의 규모를 축소할 수 있다. 이들 어드레스버퍼의 형식은 CPU의 전체적인 구성에 따라서 선택하면 좋다. 예를들면, 실행부EXE의 규모에 비해서 제어부CONT의 규모가 너무 크게되어 CPU등의 칩배치상 바람직하지않다고 생각되는 경우에는 제72도의 어드레스버퍼를 채용하면 좋다.
제73도에는 제54도에서 설명한 상기 (MOV. L @ER7+,ER2)명령실행시에 있어서의 제72도의 어드레스버퍼의 동작타이밍도가 도시된다. 제1사이클(제1스텝Sd1에 대응)과 제5사이클(제5스텝Sd5에 대응)에서 제어신호A1이 1레벨로 되어 A버스의 내용이 플립플롭회로MAB1에 저장된다. 이들의 내용은 다음의 스텝에서 플립플롭회로MAB2로 전송되어 어드레스버스로 출력된다. 제3사이클(제3스텝Sd3에 대응)의 후반에서 제어신호A2가 1레벨로 되고, 플립플롭회로MAB1에 2를 가한 내용이 제4스텝에서 플립플롭회로MAB2로 전송되어 어드레스버스로 출력된다. 이때, 제54도의 제2스탭의 연산은 +4로 하고, 제5스텝에서는 레지스터의 조작을 실행하지않는다.
(19) 마이크로컴퓨터의 어드레스맵
제74도에는 본 실시예에 관한 마이크로컴퓨터(100)의 어드레스맵의 1예가 도시된다.
내장ROM(2)는 어드레스H'000000에서 배치되고, 내장주변기능(타이머(4), SCI(5)등)과 내장RAM(3)은 H'FFF800이후에 배치되어 있고, 이들의 사이는 외부공간으로 된다.
내장주변기능과 내장RAM(3)을 어드레스공간의 중도, 예를들면 H'FFF800에서 H'FFFFFF등에 배치할 수 있지만 이 경우에는 외부공간이 2곳으로 분리되며, 또 내장ROM(2)로 라이트한 프로그램과 외부공간에 존재하는 프로그램을 연속적으로 사용할 수 없어 본 발명의 목적에 위배된다. 따라서, 주로 프로그램영역으로 되어야할 내장ROM(2)와 주로 데이터영역으로 되어야할 내장주변기능 및 내장RAM(3)은 서로 어드레스공간의 반대에 배치되고, 이 사이는 연속된 공간으로 해야할 것이다. 이와 같이 하는 것에 의해, 마이크로컴퓨터(100)이 적용되는 시스템에 따라서 데이터영역이나 프로그램영역이 크게되어도 각각을 용이하게 연속한 어드레스공간에 확보할 수 있게되어 시스템상 데이터나 프로그램을 관리하거나 그들을 액세스하기 위한 순서가 간소화된다. 또, 내장ROM (2)는 리세트처리시에 개시어드레스 또는 개시어드레스를 저장한 어드레스(개시벡터)를 포함한다.
이때, 상기와 같이 8비트절대어드레스는 H'FFFF00∼H'FFFFFF를 사용할 수 있으므로, 내장주변기능영역에 대해서 사용할 수 있다. 또, 비트조작명령을 이러한 영역에 사용할 수 있다.
16비트절대어드레스는 H'000000∼H'007FFF 및 H'FF8000∼H'FFFFFF를 사용할 수 있으므로, 내장 ROM, 내장 RAM, 내장주변기능에 대해서 사용할 수 있다. 이들 내장영역은 사용빈도가 높고, 비교적 명령길이가 짧은 명령을 사용가능하게 한 것에 의해 코드효율과 실효시간을 향상시킬 수 있다.
외부공간에 대해서는 고정적인 어드레스를 사용하는 경우는 적다고 생각된다. 외부공간에서 또한 고정적인 어드레스를 사용하는 경우에는 H'FF8000∼H'FFFFFF 또는 H'FFFF00∼H'FFFFFF의 영역에 배치하면 좋다.
(20) 최소모드, 최대모드 상기 설명에서는 어드레스공간이 16M바이트인 것으로 했지만, CPU (1)의 기능으로써는 16M바이트의 어드레스공간을 가지면서도 싱글칩마이크로컴퓨터(100)전체로써는 각 기능블럭의 조합 등에 의해 16M바이트의 어드레스공간은 필요로 하지않으며, 또한 입출력 포트의 외부단자수를 많이 필요로 하는 경우가 생각된다. 이와같은 경우, 어드레스단자24개를 갖는 것은 득책이 아니고, 어드레스단자수를 줄여서 입출력포트단자수를 증가시켜야만한다. 예를들면, 어드레스단자를 20개로 하면 실제로 이용할 수 있는 어드레스공간은 1M바이트로 된다. 또, CPU는 동일하게 하면서 어드레스공간은 종래와 마찬가지로 64k바이트로 충분한 응용도 있다.
예를들면, 외부공간을 사용하지않고, 싱글칩 마이크로커컴퓨터의 모든 단자를 입출력포트로 해서 사용하고, 응용시스템의 내장면적을 축소하고자하는 경우등은 내장영역의 합계가 64k바이트이하이면 어드레스공간은 종래와 마찬가지로 64k바이트로 문제없다.
이러한 응용에 있어서는 벡터의 리드 또는 프로그램카운터의 스택은 16비트, ,즉 2바이트단위로 실행하면 좋고, 상기와 같이 4바이트분의 액세스를 실행하는 것은 낭비이며, 실행시간의 저하 및 메모리의 이용효율저하로 된다.
제75도에서는 최소모드, 최대모드 각각에 있어서의 메모리상에서의 데이터배열형식의 1예가 도시된다. 특히 제한되지않지만 64k바이트의 어드레스공간에서 동작하는 모드를 최소모드, 상기와 같이 64k바이트이상의 어드레스공간에서 동작하는 모드를 최대모드로 한다.
최대모드에서 벡터는 4바이트단위로 4의 배수번지를 선두로 해서 배치된다. 선두 1바이트는 예약영역으로 나머지 3바이트가 개시어드레스로써 사용된다. 스택은 예외처리시 및 서브루틴콜시라도 4바이트단위로 우수번지를 선두로 해서 배치된다.
최소모드에서 벡터는 2바이트단위로 우수번지를 선두로 해서 배치된다. 이들이 개시어드레스(하위16비트, 상위8비트는 0으로 간주된다.)로써 사용된다. 스택은 예외처리시는 4바이트단위로 우수번지를 선두로 해서 조건코드레지스터CCR, 예약영역 및 프로그램카운터PC의 하위16비트가 저장된다. 서브루틴콜시는 2바이트단위로 우수번지를 선두로 해서 PC하위16비트가 저장된다.
제76도에는 최소모드에서의 리세트시퀀스의 흐름도가 도시된다.
제51도의 제3스텝Sa3 및 제4스텝Sa4가 생략된 것외는 기본적으로 동일하고, 제6스탭Sa6에서는 A버스의 하위16비트로 상기 벡터의 내용이 출력된다. 특히 제한되지않지만, 상위 비트는 부정값으로써, 어드레스버퍼AB에서 0에 고정된다. 이 경우에는 실효어드레스의 계산시에 확장레지스터Ei가 영향을 받지않도록 하는 것이 바람직하다. 확장레지스터Ei를 데이터레지스터로 해서 임의로 사용가능하게 하기 위해서이다.
제77도에는 최소모드에서의 실효어드레스의 계산방법의 1예가 도시된다. 포스트인클리먼트 레지스터간접과 프리디클리먼트레지스터 간접일때에는 전송후에 범용레지스터RiH, RiL에만 인클리먼트, 디클리먼트결과가 저장된다. 인클리먼트, 디클리먼트에 의해서 캐리, 빌림수가 발생해도 확장레지스너Ei는 영향받지 않는다. 그외의 어드레싱모드에 대해서는 어드레스계산에 사용되는 레지스터가 갱신되지않으므로, 최대모드와 동일하면 좋고, 상위비트를 어드레스버퍼AB에서 0에 고정하면 좋다.
제78도에는 최소모드와 최대모드에 있어서의 CPU (1)의 동작의 서로 다른점이 도시된다. 상기와 같이, 최대모드에서 어드레스의 최대갯수는 24비트이고, 벡터, 예외처리시의 스택, 서브루틴콜시의 스택은 모두 어드레스24비트를 포함하여 4바이트단위이다.
최소모드에서 어드레스의 최대갯수는 16비트이고, 벡터, 서브루틴콜시의 스택은 모두 어드레스16비트분의 2바이트로 축소된다.
또, 포스트인클리먼트 레지스터간접, 프리디클리먼트 레지스터간접시에는 어드레스계산에 사용한 확장어드레스의 갱신은 실행되지않는다.
(21) 싱글칩 마이크로컴퓨터의 동작모드
제79도에는 싱글칩 마이크로컴퓨터(100)의 동작모드가 도시된다. 이것에 도시되는 동작모드는 제32도에 도시되는 동작모드신호MODE1∼MODE3에 의해서 지정된다.
어드레스공간은 상술한 바와 같이, 16M, 1M, 64k바이트의 3종류가 있다. ROM무효확장모드에서는 넓은 어드레스공간을 사용해서 대량의 데이터를 취급하는 것을 생각하여 16M, 1M바이트의 어드레스공간을 사용가능하게 하고, 이것에 따라서 어드레스출력갯수(출력어드레스신호의 비트수)가 결정된다. 또, 리세트직후에 사용하는 버스폭을 모드에 의해서 선택가능하게 하고 있다. 이 때문에 ROM무효확장모드는 4종류의 모드가 있다. 또, 버스폭은 상기와 같이 버스폭제어 레지스터(BSWCR)의 설정에 의해서 소프트웨어로 재설정가능하다. 특히 제한되지않지만, 8비트버스에서는 이 데이터버스의 상위를 사용한다.
ROM무효확장모드에서 리세트직후에는 내장ROM(2)에 의해서 CPU가 동작하므로, 이 내장ROM(2)상의 소프트웨어에 의해서 어드레스갯수와 버스폭을 설정가능하게 하기 위해 모드는 1종류로 된다.
싱글칩모드는 내장영역의 합계가 64k바이트이하이면 1개의 모드로 좋지만, 상기와 같이 CPU (1)의 동작이 변경하게 되므로, 예를들면 ROM무효확장모드와 동일한 소프트웨어로 하고자하는 경우 및 장래 확장용으로 2종류의 모드가 있다.
제80도에는 싱글칩 마이크로컴퓨터(100)의 동작모드별의 단자기능의 1예가 도시된다.
특히 제한되지않지만, 제1포트IOP(61) (포트1)은 어드레스0∼7, 제2포트IOP(62) (포트2)는 어드레스8∼15, 제3포트IOP(63) (포트3)은 어드레스16∼23, 제4포트IOP(64)(포트4)는 어드레스8∼15, 제5포트IOP(65) (포트5)는 어드레스0∼7, 제6포트IOP(66) (포트6)은 버스제어신호, 제7포트IOP(67) (포트7)은 어드레스디코드신호와 겸용되어 있어 동작모드 및 레지스터(data direction register (PDDR) 또는 bus size control register(BSWCR))의 실정에 의해서 기능이 다르게 된다. 예를들면, ROM무효확장모드에서는 소정의 어드레스가 모두 출력으로 되지만, ROM유효확장모드에서 어드레스는 리세트직후는 출력으로 되지않고, 소프트웨어로 소정의 데이터다이렉션 레지스터(PDDR)로 1을 라이트해서 출력으로 하면 어드레스출력으로 된다.
어드레스디코드신호는 어드레스공간을 8분할, 즉 16M바이트의 어드레스공간에서는 2M바이트단위로, 1M바이트의 어드레스공간에서는 128k 바이트단위로 분할하고, 각각 1개씩 할당해서 어드레스가 이러한 영역을 리드 또는 라이트했을 때 활성상태로 된다. 이것은 확장모드시에 유효하고, 소프트웨어로 레지스터(PDDR)로 1을 라이트해서 출력으로 하면, 어드레스디코드 출력으로 된다. 단, ROM무효확장모드에서는 제1의 영역, 즉 벡터영역을 포함하는 영역에 해당하는 어드레스디코드신호는 리세트직후에서 출력된다. 이것에 의해서 리세트벡터나 소프트웨어의 선두를 이러한 영역으로 설정하면 리세트직후에서 어드레스디코드신호를 이용할 수 있어 외부의 어드레스의 디코드회로를 생략할 수 있다.
(22) DMA내장 싱글칩 마이크로컴퓨터
또, 본 발명자는 CPU (1)만이 데이터를 처리하는 것으로써는 처리시간이 필요이상으로 길게 되는 것에 감안해서 전용의 데이터전송장치를 내장하는 것을 검토하였다. 즉, 소위 데이터의 블럭전송을 CPU (1)이 전송명령에 의해서 실행하는 경우, 데이터의 리드/라이트외에 명령의 리드시간 등이 필요하다. 예를들면 포스트인클리먼트레지스터간접 긴워드의 전송명령을 사용하면 명령길이 2바이트, 실행시간7상태의 명령을 2회 사용하면 전송을 실행하는 시간은 8상태이라도 실행시간은 14상태로 되어 효율이 나쁘게 된다.
제81도에 본 발명자에 의해서 검토된 다른 실시예인 싱글칩 마이크로컴퓨터(200)의 블럭도를 도시한다. 동일 도면에 도시되는 싱글칩 마이크로컴퓨터(200)은 제32도의 싱글칩 마이크로컴퓨터(100)에 부가해서 다이렉트메모리액세스 컨트롤(DMAC) (201)을 포함하고, CPU (1)과 DMAC(201)은 버스컨트롤러(BSC)(202)를 거쳐서 내부버스(69)에 접속되어 있다.
DMAC(201)은 CPU(1)의 지정에 따라서 데이터의 리드/라이트를 실행하는 데이터전송장치로써 내부버스(69)는 버스컨트롤러(202)의 조정에 의해서 CPU (1) 또는 DMAC(201)의 어느것인가에 의해서 사용된다. 즉, 상기 컴퓨터(200)은 1개의 반도체기판상에 형성되어 있다.
제82도에는 싱글칩 마이크로컴퓨터(200)의 어드레스맵이 도시되어 있다. 상기와 같이, 어드레스맵은 2k바이트씩의 8영역으로 분할되고, 각각의 영역의 액세스방법은 버스컨트롤러(202)에 포함되는 4개의 레지스터BSWCR, ASTCR, WSCER, MPXCR에 의해서 지정된다. 우선, 버스폭 지정레지스터BSWCR은 8비트버스를 사용하던가 16비트버스를 사용하는가를 지정한다.
예를들면 영역0의 외부공간에 접속되는 도시하지않은 메모리를 16비트구성으로 하는 경우에는 BSWCO비트에 1을 세트하고, 영역7의 외부공간에 접속되는 도시하지않은 입출력회로를 8비트구성으로 하는 경우에는 BSWCR7비트를 0으로 클리어하면 좋다. 마찬가지로 액세스상태 지정레지스터ASTCR은 1회의 액세스를 2상태로 실행하던가 3상태 이상으로 실행하는가를 지정한다. 대기상태컨트롤 허가지정레지스터WSCER은 버스컨트롤러(202)에 포함되는 대기상태컨트롤러(WSC)에 의한 대기요구를 금지하는가 허가하는가를 지정한다. 어드레스멀티플렉스지정레지스터MPXCR은 어드레스를 멀티플렉스하지않던가 다이나믹랜덤액세스메모리를 접속하기 위해 어드레스를 멀티플렉스하는가를 지정한다. 단, 특히 제한되지않지만 액세스를 2상태로 한 경우에는 대기와 어드레스멀티플렉스는 금지된다. 따라서, 상기 레지스터에 의해서 지정되는 영역의 속성은 10가지이다. 이들의 속성에 대해서 CPU (1), DMAC (201)이 각각 판정해서 액세스방법을 결정하도록 해도 좋지만, 그렇게하면 그 처리는 번잡스럽게 되어 서로 동일한 논리 및 회로르 CPU (1)과 DMAC (201)이 이중으로 가지고 있어야만 해서 논리적 및 물리적규모의 증가를 최소한으로 하는 본 발명의 목적을 충분히 만족할 수 없게 된다. 그래서 그와 같은 제어를 버스컨트롤러(202)로 실행시키는 것이 득책이라 생각된다.
제83도에는 버스컨트롤러(202)의 1예의 블럭도가 도시된다.
이 버스컨트롤러(202)는 어드레스디코더ADRDEC, 논리곱회로ANDLOG, 제어레지스터CONTREG, 대기제어회로WSCONT 및 액세스제어회로ACSCONT에 의해서 구성된다. 어드레스디코더 ADRDEC는 CPU (1) 또는 DMAC (201)이 출력하는 어드레스신호를 입력하고, 내장기능 블록의 선택신호를 생성함과 동시에 어드레스신호를 출력한다. 제어레지스터CONTREG는 상기 버스폭지정 레지스터BSWCR, 액세스상태 지정레지스터ASTCR, 대기상태컨트롤 허가지정레지스터WSCER 및 어드레스멀티플렉스 지정레지스터MPXCR을 구비하고, CPU (1)의 제어로 그 내용이 임의로 설정되도록 되어 있다. 논리곱회로ANDLOG는 어드레스디코더ADRDEC를 통해서 공급되는 어드레스신호와 제어레지스터CONTREG에 포함되는 레지스터BSWCR, ASTCR, WSCER, MPXCR의값에 따라서 대기허가, 버스폭, 액세스상태 및 어드레스멀티플렉스에 관한 제어신호를 생성해서 액세스제어회로ACSCONT에 부여한다. 대기제어회로WSCONT는 내장기능 블록등에서 발생되는 대기신호를 받아서 필요한 상태수에 따르는 대기요구를 액세스제어회로ACSCONT에 부여한다. 액세스제어회로ACSCONT는 상기 논리곱회로ANDLOG 및 대기제어회로WSCONT등에서 부여되는 신호를 받아서 액세스제어를 위한 각종 스트로브신호AS, HRD, LRD, HWR, LWR 및 CPU (1)이나 DMAC (201)을 위한 버퍼제어신호 등을 생성한다.
DMAC(201)에 데이터전송기동요인이 발생하면, DMAC버스요구의 신호가 1레벨로 된다. 이 버스요구에 대해서 소정의 타이밍에서 버스컨트롤러(202)는 DMAC(201)에 버스사용을 허가해서 DMAC버스허가의 신호를 1레벨로 한다. 그 이외일 때는 CPU (1)이 버스를 사용할 수 있다. 버스의 기동신호나 어드레스입력은 CPU(1)의 출력과 DMAC(201)의 출력사이에서 멀티플렉스되어 있다. 즉, DMAC버스허가의 신호가 1레벨이면 DMAC(201)에서의 버스의 기동신호나 어드레스입력을 받고, 그 이외는 CPU(1)에서의 버스의 기동신호나 어드레스입력을 받는다. 버스컨트롤러(202)의 내부의 동작은 CPU(1)에 의한 액세스와 DMAC(201)에 의한 액세스의 어떤 경우도 동일하게 된다. 리드/라이트중에 CPU(1)/DMAC(201)에 부여되어야할 버퍼제어신호도 멀티플렉스된다.
제84도에는 버스컨트롤러(202)로 제어되는 리드데이터버퍼의 1예가 도시된다. 제66도와의 상위점은 데이터버스D15∼D0에서 제1의 데이터버퍼부분RDB1, RDB3에 데이터를 공급하기 위한 구성이다. 즉, 버스컨트롤러(202)가 출력하는 제어신호RHH, RLH, RLL, RHL에 의해서 데이터버스상위D15∼D8, 하위D7∼D0의 어느것인가에서 CPU(1)의 리드데이터버퍼에 데이터를 저장하는가가 바이트단위로 제어된다.
제85도에는 버스컨트롤러(202)로 제어되는 라이트데이터버퍼의 1예가 도시된다. 제68도와의 상위점은 라이트데이터출력버퍼WDBOL, WDBOH에서 데이터버스D15∼D0으로 데이터를 출력하기 위한 구성도이다. 즉, 제어신호WHH, WLH, WLL, WHL에 의해서 라이트데이터출력버퍼WDBOL, WDBOH의 내용을 데이터버스상위D15∼D8, 하위D7∼D0의 어느것인가로 출력하는가가 바이트단위로 제어된다.
제86도에는 제84도에 도시되는 리드데이터버퍼의 동작타이밍도의 1예가 도시된다. 8비트버스 3상태영역에 대해서 워드데이터의 리드를 실행한 경우이다. CPU(1)이 출력하는 리드신호RD, 워드신호WORD에 의해서 버스컨트롤러(202)가 기동된다.
이 예에 따르면 버스액세스는 1바이트씩 2회의 리드동작으로 되어 우수, 기수번지의 순으로 실행된다. 1회째의 리드시에는 데이터 버스상위 D15∼D8에서 리드데이터버퍼의 상위에 데이터가 저장된다.
2회째의 리드시에는 데이터버스상위D15∼D8에서 리드데이터버퍼의 하위에 데이터가 저장된다. 이 사이 대기요구가 1레벨로 되어 CPU(1)은 대기상태로 되고, 대기상태 해체시점에는 워드데이터가 리드데이터버퍼에 저장되어 있다. CPU(1)은 예를들면 그 데이터를 사용해서 제51도∼제55도에서 설명한 바와 같은 동작을 실행할 수 있다.
제87도에는 제85도에 도시되는 라이트데이터버퍼의 동작타이밍도의 1예가 도시된다. 8비트버스 3상태영역에 대해서 워드데이터의 라이트를 실행한 경우이다. CPU(1)이 출력하는 라이트신호WR, 워드신호WORD에 의해서 버스컨트롤리(202)는 기동된다. 이 예에 따르면 버스액세스는 1바이트씩 2회의 라이트동작으로 되어 우수, 기수번지의 순으로 실행된다. CPU(1)의 출력데이터는 최초의 상태에서 라이트데이터버퍼WDBH, WDBL, 또는 WDBE에 저장되어 있다. 1회째의 라이트시에는 상위의 라이트데이터 출력버퍼WDBOH에서 데이터버스D15∼D0으로 데이터를 출력한다. 2회째의 라이트시에는 하위의 라이트데이터출력버퍼WDBOL에서 데이터버스D15∼D0으로 데이터를 출력한다.
이 사이 대기요구가 1레벨로 되어 CPU(1)은 대기상태로 되어 있다.
제88도∼제91도에는 제어신호RHH, RHL, RLH, RLL 및 제어신호WHH, WHL, WLH, WLL의 출력규격의 1예가 도시된다.
동일 도면에 있어서, 크기B는 바이트이고, 크기W는 워드이다. 또, T1은 제1상태, T2는 제2상태, T3은 제3상태, Tw는 대기상태이다. 또, 도면에 있어서, 그것에 대응되는 상태가 존재하지 않는 것을 의미한다. 또, 동일 도면에 도시되는 규격은 DMAC(201)이 리드/라이트를 실행하는 경우도 마찬가지로 된다.
(23) CPU의 변형예
제92도에서는 CPU의 다른 실시예가 도시된다. 동일 도면에 도시되는 CPU는 제50도의 CPU(1)에 대해서 어드레스버퍼AB(ABL, ABH, ABE)를 32비트로 확장하고, 또 명령코드용의 리드데이터버퍼1DBR을 갖고 있다. 명령코드의 명령지정부(op) 및 레지스터지정부(rs, rd등)은 상기 명령코드용의 리드데이터버퍼1DBR에 저장되고, 실효어드레스부(d, aa, xx)는 상기와 마찬가지로 EXEC내부의 리드데이터버퍼RDBL, RDBH, RDBE에 저장된다. 어드레스버퍼AB를 32비트로 확장한 것에 따라 명령코드중의 디스플레이스먼트 및 절대어드레스의 선두의 예약영역(제45도 및 제47도 참조)등이 사용되고, 범용레지스터Ri와 확장레지스터Ei의 32비트전체를 어드레스레지스터로 해서 사용하는 것이 가능하게 된다. 이들에 관해서는 상술한 설명에서 용이하게 실현할 수 있으므로 상세한 설명은 생략한다.
특히 제한되지않지만, 제92도에서는 프로그램카운터PCL, PCH, PCE는 24비트로 되어 있다. 싱글칩 마이크로컴퓨터에서 16M바이트를 넘는 프로그램을 작성하는 것은 매우 적다고 생각되므로 문제는 없다. 특히, 프로그램카운터를 32비트로 확장하는 경우는 EXEC내부의 프로그램카운터PC를 32비트로 하는 외에 벡터영역, 서브루틴콜시의 스택을 4바이트로 하고, 예외처리시의 스택은 프로그램카운터PC에 4바이트, 조건코드레지스터CCR에 1바이트를 포함하는 6바이트로 하면 좋다.
(24) 실시예의 효과
(1) 전체로써 32비트의 레지스터Ri, Ei를 일괄해서 또는 일부를 어드레스레지스터로 해서 사용함과 동시에 2분할해서 16비트데이터레지스터로 하고, 또 16비트데이터레지스터의 한쪽을 8비트레지스터로 해서 사용가능하게 하는 것에 의해서 데이터처리를 효율있게 행하면서 16M바이트의 넓은 어드레스공간을 사용할 수 있다.
(2) 명령길이를 2바이트 단위로 해서 24비트 절대어드레스 디스플레이스먼트를 예약영역을 포함해서 4바이트로 하는 것에 의해, 장래 4G바이트의 어드레스공간을 사용할 수 있다.
(3) 8비트레지스터로써 이용가능한 레지스터의 수와 16비트레지스터로써 이용가능한 레지스터의 수를 같은 수로 하는 것에 의해, 명령길이를 단축해서 프로그램효율을 향상시킬 수 있다.
(4) 명령코드중의 레지스터지정부를 레지스터전체를 지정하는 3비트 및 레지스터의 부분을 지정하는 1비트로 구성하는 것에 의해, 레지스터 선택회로의 논리적 및 물리적규모를 축소할 수 있다.
(5) 명령코드중의 실효어드레스 지정부의 최하위비트를 명령코드중의 워드의 최하위비트로 하는 것에 의해, 실행부 및 제어부의 구성을 단순화하여 논리적 및 물리적규모를 축소할 수 있다.
(6) 라이트데이터버퍼를 내부버스에 접속된 32비트와 데이터버스에 접속된 16비트로 구성하는 것에 의해, 라이트데이터버퍼의 구성을 단순화하여 논리적 및 물리적규모를 축소할 수 있다.
(7) 리드데이터버퍼를 내부버스에 접속된 32비트와 데이터버스에 접속된 32비트로 구성하고, 하위측16비트는 리드시는 항상 입력하고, 상위측은 긴워드데이터의 하위워드리드시는 입력을 금치하는 구성으로 하는 것에 의해, 명령코드중의 24비트의 실효어드레스 지정부와 긴워드데이터를 마찬가지로 취급할 수 있고 리드데이터버퍼의 구성을 단순화하여 논리적 및 물리적규모를 축소할 수 있다.
(8) 어드레스공간중에 다른 액세스를 실행하는 영역을 가지며, 또한 CPU외에 리드라이트를 실행하는 데이터전송장치가 있는 경우, 리드라이트의 제어는 공통의 버스제어장치로 실행하고, 버스제어장치가 CPU 또는 다른 데이터전송장치의 리드데이터버퍼 및 라이트데이터버퍼의 제어를 실행하고, 또 필요에 따라서 CPU 또는 다른 데이터전송장치를 대기상태로 하도록 구성하는 것에 의해, 싱글칩 마이크로컴퓨터 전체의 논리적 및 물리적규모를 축소할 수 있다.
(9) 싱글칩 마이크로컴퓨터의 논리적 및 물리적규모를 최소한으로 해서 64k바이트 이상의 어드레스공간을 사용할 수 있다.
이상 본 발명자에 의해서 이루어진 발명은 상기 실시예에 한정되는 것은 아니며, 그 요지를 이탈하지않는 범위에서 여러 가지로 변경가능하다. 예를들면 CPU(1)의 블록구성, 레지스터구성, 구체적인 논리회로예 등에 대해서는 하등 한정되지 않는다. 레지스터의 비트수 또는 레지스터의 갯수 등은 임의로 선택할 수 있다.
어드레싱모드와 실효어드레스의 계산방법에 대해서도 여러 가지의 변형예를 사용할 수 있다.
이상의 설명에서는 주로 본 발명자에 의해서 이루어진 발명을 그 배경으로 된 이용분야인 싱글칩 아미크로컴퓨터에 적용한 대해서 설명했지만, 그것에 한정되는 것은 아니고, 그외의 데이터처리장치에 적용가능하며, 데이터의 처리성능보다도 데이터의 규모가 중요한 경우 등에 적용할 수 있다.
본원에 있어서 개시되는 발명중 대표적인 것에 의해서 얻을 수 있는 효과를 간단히 설명하면 다음과 같다.
즉, 8비트 CPU의 16비트범용레지스터에 16비트의 확장레지스터를 추가해서 전체로 32비트로 구성되는 데이터유지수단은 데이터의 유지에는 전부 또는 2분할하거나 또는 2분할한 한쪽을 또 2분할해서 사용가능하고, 이것에 의해서 소프트웨어상 및 하드웨어상에서의 데이터유지수단의 사용상 편리하게 되고, 더나아가서는 데이터처리장치의 논리적 및 물리적 규모의 축소를 달성할 수 있다.
또, 데이터유지수단의 전체 또는 일부분을 사용한 어드레스데이터의 유지라는점에 관해서는 리니어하게 이용가능한 어드레스공간의 확장이 용이하게 되며, 또 페이지레지스터에 의한 어드레스공간 확장기술에 비해서 프로그램의 작성 및 컴파일을 용이화할 수 있다. 따라서, 고급언어에 의해 작성된 프로그램을 효율있게 실행할 수 있다.
n비트데이터의 연산명령과 2n비트데이터의 연산명령을 고려했을 때 전체를 2등분할해서 사용되는 부분과 2등분할된 한쪽을 또 2등분할해서 사용되는 부분을 갖도록 각각의 데이터유지수단을 구성함과 동시에 2등분할에서 이용되는 부분의 전체의 수가 또 2등분할에서 이용되는 부분의 전체의 수가 같게 되도록 여러단위의 상기 데이터 유지수단을 마련하는 것에 의해, 명령길이를 단축해서 프로그램효율을 향상시킬 수 있다.
명령의 단위를 데이터의 단위의 2배길이로 하는 것에 의해, 장래에 있어서의 어드레스공간의 확장에 용이하게 대응할 수 있다.
또, 명령코드중의 실효어드레스지정부의 최하위비트를 명령코드중의 워드의 최하위비트로 하는 것에 의해, 실행수단 및 제어수단의 구성을 단순화하여 논리적 및 물리적인 규모의 축소에 기여한다.
데이터유지수단을 지정하는 부분이 명령의 단위중의 일부분에 고정된 명령포맷을 채용하는 것에 의해, 레지스터와 같은 상기 데이터유지수단을 위한 선택회로 또는 명령디코드회로의 논리적 및 물리적인 규모를 축소할 수 있다. 또, 그 경우에 상기 지정하는 부분을 여러단위 중에서 필요한 데이터유지수단을 지정하는 영역과 1개의 데이터유지수단 중의 어느 부분인가를 지정하는 영역으로 구성하고, 또 명령중에서 지정되는 데이터크기에 따라서 상기 데이터유지수단중의 어느부분인가를 지정하는 영역이 2등분할된 어느 부분을 지정하는가 또 2등분할된 어느부분을 지정하는가를 결정하도록 하는 것에 의해, 데이터유지수단에 저장되는 데이터 및 어드레스데이터가 바이트, 워드, 긴워드의 수종류에 이를 때에도 명령포맷중에 있어서의 레지스터지정부의 비트수를 최소한으로 억제할 수 있다.
데이터유지수단 등에서의 라이트버퍼수단에는 상기 데이터유지수단의 비트수에 일치하는 비트수의 제1의 부분과 상기 데이터유지수단의 2등분할된 영역의 비트수에 일치하는 비트수의 제2의 부분을 마련하고, 데이터라이트의 지시에 따라서 데이터유지수단의 내용을 일괄해서 상기 제1의 부분에 저장하고, 제1의 부분에 저장한 데이터를 2회로 나누어서 제2의 부분으로 전송해서 출력하도록 하는 것에 의해 라이트버퍼수단의 구성을 단순화할 수 있음과 동시에 데이터처리장치의 논리적 및 물리적인 규모의 축소에 기여한다.
데이터유지수단 등으로의 리드버퍼수단에 대해서는 상기 데이터유지수단의 비트수에 일치하는 비트수를 전체로써 구비하며, 또한 상위측과 하위측으로 2등분할되고, 데이터리드의 지시에 따라서 하위측은 리드시에 항상 리드데이터가 저장되고, 상위측은 저장하는가 하지않는가를 지정하도록 하는 것에 의해, 리드버퍼수단의 구성을 단순화할 수 있음과 동시에 데이터처리장치의 논리적 및 물리적인 규모의 축소에 기여한다.
어드레스공간중에 다른 상태에서 액세스를 실행하는 영역을 가지며, 또한 CPU와 같은 데이터처리장치외에 리드라이트를 실행하는 데이터전송장치가 있을 때, 리드라이트의 제어는 공통의 버스제어장치로 실행함과 동시에 이 버스제어장치가 CPU 또는 다른 데이터전송장치에 포함되는 리드버퍼수단이나 라이트버퍼수단에 제어를 실행하며, 또 필요에 따라서 CPU 또는 다른 데이터전송장치를 대기상태로 하도록 구성하는 것에 의해, 버스액세스를 위한 구성이라는 점에 있어서 마이크로컴퓨터 전체의 논리적 및 물리적인 규모를 축소한다.
Claims (23)
- 제1의 비트길이의 제1의 레지스터부와 제2의 비트길이의 제2의 레지스터부를 포함하는 레지스터, 상기 제1의 레지스터부에 연결되고 산술논리 연산을 실행하기 위한 제1의 산술논리 유닛과 상기 제2의 레지스터부에 연결되고 산술연산을 실행하기 위한 제2의 산술논리 유닛을 포함하고, 상기 레지스터에 연결된 산술논리 연산부 및 상기 산술논리 연산부의 연산에 따라서 그 내용이 변경되는 여러개의 비트를 갖는 조건 코드 레지스터를 포함하고, 상기 산술논리 연산부는 상기 제1 및 제2의 산술논리 유닛을 이용해서 상기 제1 및 제2의 레지스터부 내에 저장된 어드레스 데이터와 다른 장소에서 공급된 제1의 데이터 사이의 어드레스 연산을 실행하고, 상기 산술논리 연산부는 상기 제1의 산술논리 유닛을 이용해서 상기 제1의 레지스터부 내에 저장된 제2의 데이터와 제3의 데이터 사이의 데이터연산을 실행하는 것을 특징으로 하는 싱글칩 데이터 처리장치.
- 제1항에 있어서, 상기 산술논리 연산부는 명령을 해독하는 것에 의해서 제어되는 것을 특징으로 하는 싱글칩 데이터 처리장치.
- 제2항에 있어서, 상기 어드레스 연산에 의해서 얻어진 상기 어드레스 데이터는 메모리의 어드레싱에 이용되고, 상기 데이터 연산 기간에 상기 산술논리 연산부로 공급되는 상기 제1의 데이터는 상기 메모리에서 공급되는 것을 특징으로 하는 싱글칩 데이터 처리장치.
- 제1항에 있어서, 상기 조건 코드 레지스터내의 상기 여러개의 비트는 상기 제1의 산술논리 유닛에 의해서 실행된 상기 데이터 연산에 있어서 오버플로의 발생에 응답해서 그의 값이 변경되고, 또한 상기 제1 및 제2의 산술논리 유닛에 의해서 실행된 상기 어드레스 연산에 있어서 그의 값이 변경되지 않는 오버플로 비트를 포함하는 것을 특징으로 하는 싱글칩 데이터 처리장치.
- 제1항에 있어서, 상기 어드레스 연산에 있어서 상기 제1의 레지스터부와 상기 제1의 산술논리 유닛을 사용한 상기 산술연산에 있어서 발생된 캐리/빌림 데이터는 상기 제2의 레지스터부와 상기 제2의 산술논리 유닛으로 전달되는 것을 특징으로 하는 싱글칩 데이터 처리장치.
- 제1항에 있어서, 상기 레지스터의 비트길이는 상기 산술논리 연산부에 의해서 연산될 데이터의 비트길이와 동일한 것을 특징으로 하는 싱글칩 데이터 처리장치.
- 제6항에 있어서, 상기 어드레스 연산에 있어서 상기 제1의 레지스터부와 상기 제1의 산술논리 유닛에 의해서 실행된 상기 산술연산에 있어서 발생된 캐리/빌림 데이터는 상기 제2의 레지스터부와 상기 제2의 산술논리 유닛으로 전달되고, 상기 제2의 레지스터부와 상기 제2의 산술논리 유닛에 의해서 실행되는 상기 산술연산에 있어서 이용되는 것을 특징으로 하는 싱글칩 데이터 처리장치.
- 제7항에 있어서, 상기 조건 코드 레지스터내의 상기 여러개의 비트는 상기 제1의 산술논리 유닛에 의해서 실행된 상기 데이터 연산에 있어서 오버 플로의 발생에 응답해서 그의 값이 변경되고, 또한 상기 제1 및 제2의 산술논리 유닛에 의해서 실행된 상기 어드레스 연산에 있어서 그의 값이 변경되지 않는 오버 플로 비트를 포함하는 것을 특징으로 하는 싱글칩 데이터 처리장치.
- 제7항에 있어서, 여러개의 제1의 레지스터, 여러개의 제2의 레지스터 및 상기 레지스터로서 상기 여러개의 제1의 레지스터 중의 1개를 선택하는 선택회로를 더 포함하는 것을 특징으로 하는 싱글칩 데이터 처리장치.
- 제1의 비트길이의 제1의 레지스터부와 제2의 비트길이의 제2의 레지스터부를 포함하는 레지스터, 산술연산을 실행하는 제1의 산술논리 유닛과 산술연산을 실행하는 제2의 산술논리 유닛을 포함하고, 상기 제1 및 제2의 산술논리 유닛이 결합되어 1개의 단위로 되는 상기 제1 및 제2의 레지스터들로부터의 어드레스 데이터와 다른 곳에서 공급된 데이터를 연산하는 어드레스 연산 및 상기 제1의 산술논리 유닛이 상기 제2의 산술논리 유닛에서 분리된 상태에서 상기 제1의 레지스터내에 저장된 데이터와 다른곳에서 공급된 데이터를 연산하는 데이터 연산을 실행하는 상기 레지스터에 연결된 산술논리부 및 상기 산술논리부의 연산에 따라서 그의 내용이 변경되는 여러개의 비트를 갖는 조건 코드 레지스터를 포함하는 것을 특징으로 하는 싱글칩 데이터 처리장치.
- 제10항에 있어서, 상기 조건 코드 레지스터내의 상기 여러개의 비트는 상기 제1의 산술논리 유닛에 의해서 실행된 상기 데이터 연산에 있어서 오버 플로의 발생에 응답해서 그의 값이 변경되고, 또한 상기 제1 및 제2의 산술논리 유닛에 의해서 실행된 상기 어드레스 연산에 있어서 그의 값이 변경되지 않는 오버플로 비트를 포함하는 것을 특징으로 하는 싱글칩 데이터 처리장치.
- 제10항에 있어서, 상기 어드레스 연산에 있어서 상기 제1의 레지스터부와 상기 제1의 산술논리 유닛에서 상기 산술연산에 있어서 발생된 캐리/빌림 데이터는 상기 제2의 레지스터부와 상기 제2의 산술논리 유닛으로 전달되는 것을 특징으로 하는 싱글칩 데이터 처리장치.
- 제10항에 있어서, 상기 레지스터의 비트길이는 상기 산술논리부에 의해서 연산될 데이터의 비트길이와 동일한 것을 특징으로 하는 싱글칩 데이터 처리장치.
- 싱글칩 데이터 처리장치에 의해서 데이터와 어드레스를 처리하는 방법으로서, 상기 싱글칩 데이터 처리장치는 제1의 비트길이의 어드레스 또는 데이터를 저장하는 제1의 레지스터부와 제2의 비트길이의 어드레스 또는 데이터를 저장하는 제2의 레지스터부를 포함하고, 상기 제1 및 제2의 레지스터부는 세로로 연결하여 연산가능하게 되고, 상기 제1의 비트길이와 상기 제2의 비트길이의 합계와 동일한 제3의 비트길이의 어드레스 또는 데이터를 저장할 수 있는 레지스터, 산술논리 연산을 실행하는 제1의 산술논리 유닛과 산술연산을 실행하는 제2의 산술논리 유닛을 포함하는 산술논리부 및 상기 산술논리부의 연산에 따라서 그의 내용이 변경되는 여러개의 비트를 갖는 조건 코드 레지스터를 포함하고, a) 새로운 어드레스를 발생하기 위해 어드레스 연산을 실행하는 공정으로서, 상기 어드레스 연산은 (a-1) 상기 제1의 레지스터부에서 제1의 어드레스부를 추출하고, 또한 상기 제2의 레지스터부에서 제2의 어드레스부를 추출하는 공정과 (a-2) 상기 제1의 산술논리 유닛에 의해 상기 제1의 어드레스부와 다른 곳에서 공급된 데이터를 연산하고, 또한 상기 제2의 산술논리 유닛에 의해 상기 제2의 어드레스부와 다른 곳에서 공급된 데이터를 연산하는 것에 의해서 상기 새로운 어드레스를 발생하는 공정을 포함하고, b) 데이터 연산을 실행하는 공정으로서, 상기 데이터 연산은 (b-1) 상기 제1의 레지스터부에서 상기 제1의 비트길이의 데이터를 추출하는 공정과 (b-2) 상기 제1의 산술논리 연산 유닛만으로 산술논리 연산을 상기 제1의 비트길이 데이터에 실시하는 공정을 포함하고, c) 상기 어드레스 및 데이터 연산에 따라서 상기 조건 코드 레지스터의 내용을 갱신하는 공정을 포함하는 것을 특징으로 하는 데이터와 어드레스를 처리하는 방법.
- 제14항에 있어서, 상기 조건 코드 레지스터는 오버 플로 비트를 포함하고, 상기 데이터 연산에 있어서 오버플로의 발생에 응답해서 상기 오버 플로비트를 변경하는 공정과 상기 어드레스 연산에 있어서 상기 오버 플로 비트를 변경하지 않는 공정을 더 포함하는 것을 특징으로 하는 데이터와 어드레스를 처리하는 방법.
- 제14항에 있어서, 상기 어드레스 연산에 있어서 캐리/빌림 데이터를 발생시키는 공정, 상기 캐리/빌림 데이터를 상기 제2의 레지스터부에 저장하는 공정 및 상기 제2의 레지스터부에서 추출한 상기 캐리/빌림 데이터를 상기 제2의 산술논리 유닛에 의해 연산하는 공정을 더 포함하는 것을 특징으로 하는 데이터와 어드레스를 처리하는 방법.
- 제14항에 있어서, 상기 레지스터의 비트길이는 상기 산술논리부에 의해서 연산될 데이터의 비트길이와 동일한 것을 특징으로 하는 데이터와 어드레스를 처리하는 방법.
- 여러개의 범용 레지스터, 상기 여러개의 범용 레지스터에 연결된 산술논리 연산 유닛 및 상기 여러개의 범용 레지스터에 연결된 선택회로를 갖는 싱글칩 데이터 처리장치로서, 상기 여러개의 범용 레지스터의 각각은 제1의 비트길이이고, 상기 여러개의 범용 레지스터의 각각은 제2의 비트길이의 제1의 부분 및 제2의 비트길이의 제2의 부분을 포함하고, 상기 제2의 부분의 각각은 제3의 비트길이의 제3의 부분 및 제3의 비트길이의 제4의 부분을 포함하고, 상기 선택회로는 (i) 상기 제1의 비트길이의 연산을 지시하는 제1의 명령에 응답해서 상기 여러개의 범용 레지스터중의 적어도 1개를 선택하고, (ii) 상기 제2의 비트길이의 연산을 지시하는 제2의 명령에 응답해서 상기 제1의 부분 및 제2의 부분에서 2개의 부분을 선택하고, (iii) 상기 제3의 비트길이의 연산을 지시하는 제3의 명령에 응답해서 상기 제3의 부분 및 제4의 부분에서 2개의 부분을 선택하도록 구성되는 것을 특징으로 하는 싱글칩 데이터 처리장치.
- 제18항에 있어서, 상기 제1의 비트길이는 상기 제2의 비트길이의 2배로 되고, 상기 제2의 비트길이는 상기 제3의 비트길이의 2배로 되는 것을 포함하는 것을 특징으로 하는 싱글칩 데이터 처리장치.
- 제19항에 있어서, 상기 제1의 비트길이의 제1의 데이터가 상기 여러개의 범용 레지스터 중의 1개에 저장되는 경우, 상기 제1의 데이터의 하위 데이터는 상기 하나의 범용 레지스터내의 제2의 부분에 저장되고, 상기 제2의 비트길이의 제2의 데이터가 상기 제2의 부분의 1개에 저장되는 경우, 상기 제2의 데이터의 하위 데이터는 상기 1개의 제2의 부분 내의 제4의 부분에 저장되는 것을 포함하는 것을 특징으로 하는 싱글칩 데이터 처리장치.
- 제20항에 있어서, 상기 산술논리 연산회로는 상기 범용 레지스터의 제1의 부분에 연결되고 제2의 비트길이의 연산을 실행할 수 있는 제1의 유닛, 상기 범용 레지스터의 제3의 부분에 연결되고 제3의 비트길이의 연산을 실행할 수 있는 제2의 유닛 및 상기 범용 레지스터의 제4의 부분에 연결되고 제3의 비트길이의 연산을 실행할 수 있는 제2의 유닛을 포함하는 것을 특징으로 하는 싱글칩 데이터 처리장치.
- 제20항에 있어서, 상기 싱글칩 데이터 처리장치의 동작모드는 상기 제1의 명령의 실행이 가능한 제1의 모드와 상기 제1의 명령의 실행이 불가능한 제2의 모드를 포함하는 것을 특징으로 하는 싱글칩 데이터 처리장치.
- 제22항에 있어서, 상기 범용 레지스터, 상기 산술논리 연산 유닛 및 상기 선택회로를 내부에 포함하는 중앙처리장치, 상기 중앙처리장치에 연결되고 상기 중앙처리장치 내의 1개의 상기 범용 레지스터에서 어드레스 신호가 공급되는 내부 버스, 상기 내부 버스에 연결되고 상기 싱글칩 데이터 처리장치의 프로그램 데이터를 저장하는 제1의 메모리 및 상기 내부 버스에 연결되고 상기 중앙처리장치의 워크영역으로 되는 제2의 메모리를 더 포함하고, 상기 중앙처리장치의 어드레스 공간은 상기 제1의 메모리의 어드레스가 배치되는 제1의 영역, 상기 제2의 메모리의 어드레스가 배치되는 제2의 영역 및 상기 제1의 영역과 상기 제2의 영역 사이에 배치된 제3의 영역을 포함하고, 상기 제1의 모드에 있어서의 상기 제3의 영역의 어드레스 공간은 상기 제2의 모드에 있어서의 상기 제3의 영역의 어드레스 공간보다 큰 것을 특징으로 하는 싱글칩 데이터 처리장치.
Applications Claiming Priority (5)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP13204291A JP3486630B2 (ja) | 1991-05-08 | 1991-05-08 | データ処理装置 |
JP91-132042 | 1991-05-08 | ||
JP07615192A JP3154542B2 (ja) | 1992-02-27 | 1992-02-27 | データ処理装置 |
JP92-076151 | 1992-02-27 | ||
JP92-76151 | 1992-04-06 |
Publications (2)
Publication Number | Publication Date |
---|---|
KR920022090A KR920022090A (ko) | 1992-12-19 |
KR100272622B1 true KR100272622B1 (ko) | 2000-11-15 |
Family
ID=26417304
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR1019920007701A KR100272622B1 (ko) | 1991-05-08 | 1992-05-07 | 데이타 처리장치 |
Country Status (2)
Country | Link |
---|---|
US (2) | US5687344A (ko) |
KR (1) | KR100272622B1 (ko) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR101462157B1 (ko) * | 2009-12-18 | 2014-11-20 | 한국전자통신연구원 | Mac 연산을 포함하는 연산 장치, 이를 이용한 dsp 구조 및 필터링 방법 |
Families Citing this family (13)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5854939A (en) * | 1996-11-07 | 1998-12-29 | Atmel Corporation | Eight-bit microcontroller having a risc architecture |
US5913231A (en) * | 1997-03-31 | 1999-06-15 | International Business Machines Corporation | Method and system for high speed memory address forwarding mechanism |
US6314504B1 (en) * | 1999-03-09 | 2001-11-06 | Ericsson, Inc. | Multi-mode memory addressing using variable-length |
KR100496856B1 (ko) * | 1999-05-20 | 2005-06-22 | 삼성전자주식회사 | 어드레스 확장이 가능한 데이터 처리 시스템 |
EP1286268A1 (de) * | 2001-08-21 | 2003-02-26 | Alcatel | Integrierte Schaltung mit Zuordnung von Adressbereichen |
JP4073721B2 (ja) * | 2002-06-28 | 2008-04-09 | 株式会社ルネサステクノロジ | データ処理装置 |
JP4004915B2 (ja) * | 2002-06-28 | 2007-11-07 | 株式会社ルネサステクノロジ | データ処理装置 |
US7489362B2 (en) | 2003-03-04 | 2009-02-10 | Broadcom Corporation | Television functionality on a chip |
US20050036357A1 (en) * | 2003-08-15 | 2005-02-17 | Broadcom Corporation | Digital signal processor having a programmable address generator, and applications thereof |
CN100359491C (zh) * | 2005-07-28 | 2008-01-02 | 上海大学 | 基于mcs-51架构的16m字节数据存储器寻址空间扩充方法 |
CN100365592C (zh) * | 2005-07-28 | 2008-01-30 | 上海大学 | 基于mcs-51架构的16m字节程序存储器寻址空间扩充方法 |
US9582193B2 (en) * | 2014-09-02 | 2017-02-28 | Sandisk Technologies Llc | Triggering a process to reduce declared capacity of a storage device in a multi-storage-device storage system |
CN112486848A (zh) * | 2020-12-22 | 2021-03-12 | 上海金卓科技有限公司 | 一种测试数据的生成方法、装置、芯片及存储介质 |
Family Cites Families (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
DE2846054C2 (de) * | 1978-10-23 | 1985-08-14 | Siemens AG, 1000 Berlin und 8000 München | Schaltungsanordnung zur Erweiterung des Adressierungsvolumens einer Zentraleinheit, insbesondere eines Mikroprozessors |
US4758945A (en) * | 1979-08-09 | 1988-07-19 | Motorola, Inc. | Method for reducing power consumed by a static microprocessor |
EP0072373B1 (en) * | 1981-08-19 | 1986-03-19 | International Business Machines Corporation | Improved microprocessor |
JPS6015746A (ja) * | 1983-07-08 | 1985-01-26 | Hitachi Ltd | デ−タ処理装置 |
US4677584A (en) * | 1983-11-30 | 1987-06-30 | Texas Instruments Incorporated | Data processing system with an arithmetic logic unit having improved carry look ahead |
US4901225A (en) * | 1984-04-09 | 1990-02-13 | Kabushiki Kaisha Toshiba | Processing apparatus with hierarchical structure for implementing a machine instruction |
US5142621A (en) * | 1985-12-03 | 1992-08-25 | Texas Instruments Incorporated | Graphics processing apparatus having instruction which operates separately on X and Y coordinates of pixel location registers |
JPH0648461B2 (ja) * | 1987-07-09 | 1994-06-22 | 日本電気株式会社 | マイクロプログラムの転送レジスタ指定方式 |
US4926322A (en) * | 1987-08-03 | 1990-05-15 | Compag Computer Corporation | Software emulation of bank-switched memory using a virtual DOS monitor and paged memory management |
US5155820A (en) * | 1989-02-21 | 1992-10-13 | Gibson Glenn A | Instruction format with designations for operand lengths of byte, half word, word, or double word encoded in address bits |
US5109226A (en) * | 1989-11-22 | 1992-04-28 | International Business Machines Corporation | Parallel processors sequentially encoding/decoding compaction maintaining format compatibility |
US5299319A (en) * | 1990-04-04 | 1994-03-29 | International Business Machines Corporation | High performance interlock collapsing SCISM ALU apparatus |
-
1992
- 1992-05-07 KR KR1019920007701A patent/KR100272622B1/ko not_active IP Right Cessation
-
1996
- 1996-01-10 US US08/583,763 patent/US5687344A/en not_active Expired - Lifetime
- 1996-02-27 US US08/607,568 patent/US5771363A/en not_active Expired - Lifetime
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR101462157B1 (ko) * | 2009-12-18 | 2014-11-20 | 한국전자통신연구원 | Mac 연산을 포함하는 연산 장치, 이를 이용한 dsp 구조 및 필터링 방법 |
Also Published As
Publication number | Publication date |
---|---|
US5687344A (en) | 1997-11-11 |
US5771363A (en) | 1998-06-23 |
KR920022090A (ko) | 1992-12-19 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10514922B1 (en) | Transfer triggered microcontroller with orthogonal instruction set | |
KR100535852B1 (ko) | 데이타처리장치 | |
KR100439367B1 (ko) | 마이크로컴퓨터 | |
TWI541658B (zh) | 資料處理裝置及半導體積體電路裝置 | |
US4449184A (en) | Extended address, single and multiple bit microprocessor | |
JP2616182B2 (ja) | データ処理装置 | |
KR100272622B1 (ko) | 데이타 처리장치 | |
JPH1091443A (ja) | 情報処理回路、マイクロコンピュータ及び電子機器 | |
US5666510A (en) | Data processing device having an expandable address space | |
JP4004915B2 (ja) | データ処理装置 | |
KR100277805B1 (ko) | 데이타처리장치 | |
JP2556182B2 (ja) | デ−タ処理装置 | |
KR19980018071A (ko) | 멀티미디어 신호 프로세서의 단일 명령 다중 데이터 처리 | |
JP2504312B2 (ja) | プライオリティエンコ―ダ及びそれを備えたデ―タ処理装置 | |
JP3669984B2 (ja) | マイクロコンピュータ | |
JPH04104350A (ja) | マイクロプロセッサ | |
JP3154542B2 (ja) | データ処理装置 | |
JP3486630B2 (ja) | データ処理装置 | |
JP3027627B2 (ja) | プログラマブルコントローラの演算プロセッサ | |
JP4545777B2 (ja) | データ処理装置 | |
WO2001090888A1 (en) | A data processing system having an address generation unit with hardwired multidimensional memory indexing support | |
JP3539951B2 (ja) | データ処理装置 | |
JP3345050B2 (ja) | 二次元配列型メモリシステム | |
US20050216704A1 (en) | Device and method for managing a microprocessor instruction set | |
JPS592938B2 (ja) | メモリ ワ−クスペ−ス アンドレツシングホウホウオヨビソウチ |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A201 | Request for examination | ||
E701 | Decision to grant or registration of patent right | ||
GRNT | Written decision to grant | ||
G170 | Re-publication after modification of scope of protection [patent] | ||
G170 | Re-publication after modification of scope of protection [patent] | ||
FPAY | Annual fee payment |
Payment date: 20040809 Year of fee payment: 5 |
|
LAPS | Lapse due to unpaid annual fee |