제6장 - Prof. Jung's Homepage

Download Report

Transcript 제6장 - Prof. Jung's Homepage

제6장
Microprocessor
kuic.kyonggi.ac.kr/~dssung
Microprocessor = CPU-on-a-chip
Register
Register
Control Unit
ALU
kuic.kyonggi.ac.kr/~dssung
6.1 History of Microprocessor
(1). 계산기에 이용 <- 최초의 마이크로 프로세서
Intel:
1968년 : Robert Noyce, Gordon Moore
=> Memory 회사
1969년 : 일본의 계산기 제작회사 Busicom
-> 새로운 계산기 설계를 위한 IC 의뢰
kuic.kyonggi.ac.kr/~dssung
4000 시리즈 설계 : Ted Hoff, Stan Mazor, Fredrico Faggin
4001 : 2K ROM (4bit I/O port)
4002 : 320bit RAM (4bit I/O port)
4003 : 10bit serial input / parallel output shift register
4004 : 4bit processor
=> 최초의 OnChip Processor = Microprocessor로 명명
=> 1971년 완성
kuic.kyonggi.ac.kr/~dssung
kuic.kyonggi.ac.kr/~dssung
kuic.kyonggi.ac.kr/~dssung
(2). (일반목적) Microcomputer에 이용
1974년 : Intel 8080
-> 1975년 최초의 (일반목적) Microcomputer
: MITS Altair 8800
-> data bus : 8bit
-> address bus : 16bit
Motorola MC6800
MOS Technology 6502
Zilog Z-80
kuic.kyonggi.ac.kr/~dssung
kuic.kyonggi.ac.kr/~dssung
(3). 고성능 Microcomputer에 이용
- 1970년 후반 16bit microprocessor 등장
(현재의 microprocessor의 기본을 이룸)
- 중형 및 대형 컴퓨터의 CPU가 가지고 있는 이론들을
Microprocessor에 접목 (ex: cache, virtual memory, …)
- 대표적인 Microprocessor
Intel 8086 family, Motorola 68000 family
- 32bit, 64bit, 128bit microprocessor의 개발
kuic.kyonggi.ac.kr/~dssung
6.2 History of Microcomputer
(1). 8bit Computer
- Intel 8080
1975년 MITS Altair 8800, Imsai, HAL Communications
E&L Instruments, Processor Technology
- Motorola 6800 : Southwest Technical Product SWTPC 6800
- Zilog Z-80 : North Star Computers, Cromenco
- MOS Technology 6502 : Apple
kuic.kyonggi.ac.kr/~dssung
kuic.kyonggi.ac.kr/~dssung
(2). 16bit/32bit/64bit Computer
Intel 8088 series
1982년 IBM PC
IBM 호환 기종
Motorola MC68000 series
APPLE, SPARC
kuic.kyonggi.ac.kr/~dssung
6.3 Summary of Intel 80X86 microprocessor
(1). 8086 (4.77M)
- 1978년 발표
- Data Bus (16bit), Address Bus (20bit)
- Data bus & Internal Register : 16bit
- Address Space : 1MByte
- 곱셈, 나눗셈 명령어 내장
- 외부 FPU(Floating Point Unit)를 지원 (8087)
- 4 clock당 1개의 명령어 수행 가능
kuic.kyonggi.ac.kr/~dssung
(2). 8088
- 1979년 발표
- Data Bus (8bit), Address Bus (20bit)
- Internal Register : 16bit
- 8bit Data bus를 제외하고 8086과 동일
-> 단일의 8bit Memory Bank 사용 가능
ex) 1 bank : 16Kbit * 8 <- 8088
2 bank : 16Kbit * 16 <- 8086
-> For 16bit data bus, two 8-bit memory banks are required
-> expensive at the time
- 1982년 IBM PC에서 CPU로 이용
CPU : 8088 4.77MHz, Memory : 64KByte, OS : MS-DOS
kuic.kyonggi.ac.kr/~dssung
(3). 80186, 80188
- IBM PC
CPU + 주변회로(Clock Generator, P Timer, PIC, ...)
하나의 Chip으로 구성
- 80186 : 8086 + 주변회로
- 80188 : 8088 + 주변회로
kuic.kyonggi.ac.kr/~dssung
(4). 80286 (6, 8Mhz)
- 1982년 발표
- 1984년 IBM AT(Advanced Technology)에서 사용
- Data Bus (16bit), Address Bus (24bit)
- 24bit Address Bus (16MByte)
- 2개의 Mode 지원
Real Mode : 20bit Address Bus 이용
Protected Mode :
MultiProgram 환경 제공
: 가상 메모리 기능과 멀티 태스킹 모드를 지원
kuic.kyonggi.ac.kr/~dssung
- 단점 :
Real Mode -> Protected Mode (O)
Protected Mode -> Real Mode (X)
MS-DOS 이용 : Real Mode,
MS-DOS로 복귀되지 않음
- IBM PC AT에서 Real Mode만을 이용
kuic.kyonggi.ac.kr/~dssung
(5). 80386 (DX) 16Mhz, 33MHz
- 1985년 발표
- Data Bus (32bit), Address Bus (32bit)
- 2 clock당 1개의 명령어 수행 가능
- Real Address Mode
: MS DOS가 사용하는 Mode
Protected Virtual Address Mode
: Windows, OS/2, Unix
Virtual 8086 Mode : Protected Mode에서 DOS program의 수행
kuic.kyonggi.ac.kr/~dssung
kuic.kyonggi.ac.kr/~dssung
(6). 80486 DX : 25, 33, 50 Mhz
- 1989년 발표
- Data Bus (32bit), Address Bus (32bit)
- 핵심부분은 RISC기법으로 재설계
-> 자주 사용하는 명령어 1 clock에 실행
- 1 clock당 하나의 명령어 수행
- On Chip Cache 8K, On Chip FPU
kuic.kyonggi.ac.kr/~dssung
(7). Pentium
- 1993년 발표
- Data Bus (64bit), Address Bus (32bit)
- 내부적으로는 32bit로 작동
- On Chip Cache (16K Byte)
Data Cache : 8K
- On Chip enhanced FPU
- 슈퍼 스칼라 (Super Scalar Architecture)
- 예측 분기 회로
- Dual Processor 동작 지원
=> 지원 OS (Windows NT, UNIX)
Code Cache : 8K
kuic.kyonggi.ac.kr/~dssung
파이프라인 처리(Pipelining)
Execution Step
(1). Instruction Fetch (IF)
- Memory로 부터 명령어를 가지고 온다
(2). Instruction Decoding (ID)
- 가지고 온 명령어를 해독한다
(3). Operand Fetch (OF)
- 필요한 경우 Memory 로 부터 Operand를 가지고 온다
(4). Instruction Execution (EX)
- 해독한 결과에 따라 명령어를 수행한다
kuic.kyonggi.ac.kr/~dssung
IF
IF
ID
OF
EX
ID
OF
EX
IF
ID
OF
EX
IF
ID
OF
EX
IF
ID
OF
EX
IF
ID
OF
EX
kuic.kyonggi.ac.kr/~dssung
슈퍼 스칼라 (Super Scalar)
: 컴퓨터 시스템에 여러 개의 파이프라인을 설치하여
동시에 두 개 이상의 명령어들이 파이프 라인을
통하여 병렬 처리될 수 있도록 하는 컴퓨터 구조
32bit
Cache
32bit
64 bit
kuic.kyonggi.ac.kr/~dssung
분기 예측
: 분기 예측이란 프로그램 실행 도중 분기 명령이 발생 했을 때
메모리 상의 분기할 곳을 미리 예측하는 기능이다.
이러한 분기 명령을 실행하면 파이프라인 처리시
명령어가 끊이지 않고 계속하여 처리할 수 있다는 장점이 있다.
[A]
go to C
[B]
[C]
code cache [B]
[A]
go to C
[B]
[C]
code cache [C]
pipeline stall
kuic.kyonggi.ac.kr/~dssung
for(i=1; i<10; i++){
…
if(a>3) then [A]
else [B]
…
}
code cache [A]
code cache [B]
kuic.kyonggi.ac.kr/~dssung
(8). Pentium Pro – 6세대 processor
- 1995년에 발표
- Data Bus (64bit), Address Bus (36bit)
- Address Bus : 36bit (64G address space)
- Processor 와 2단계 Cache의 두 chip으로 구성 (Dual Cavity Design)
On Chip 2 단계 Cache
16K Byte 1단계 Cache
256K Byte 2단계 Cache (150) or 512K Byte Cache (200)
kuic.kyonggi.ac.kr/~dssung
CPU
+ L1 Cache
Pentium
CPU
+ L1 Cache
L2 Cache
Pentium Pro
kuic.kyonggi.ac.kr/~dssung
(9). Pentium II
-
1997년 발표
Pentium Pro + MMX (MultiMedia eXtensions)
Data Bus (64bit), Address Bus (36bit)
L1 Cache: 32K Byte, L2 Cache: 512K Byte Cache
Processor Core Speed (450MHz - 233MHz)
System Bus (100MHz)
- Celeron = Pentium II - L2Cache - ..
Celeron A : L2Cache(128KByte) (1999년)
- Xeon = Pentium II + Graphic Accelerator + .. (Server용 CPU) (1998년)
Scalability :
can be scaled to 2, 4, 8 or more,
and used for high-end server and workstations
kuic.kyonggi.ac.kr/~dssung
CPU
Processor
Core
Cache
450 MHz
System Bus
(FSB : Front Side Bus)
100 MHz
kuic.kyonggi.ac.kr/~dssung
(10). Pentium III
-
1999년 발표
Data Bus (64bit), Address Bus (36bit)
Processor Core Speed (1.1GHz - 450MHz)
System Bus (133MHz)
Cache Speed Upgrade (Advanced Transfer Cache)
70 New Extended Instructions (SIMD)
70 new streaming SIMD extensions (SSE) :
50 to improve floating-point performance
12 to improve multimedia processing
8 to improve the efficiency of L1 cache
- Pentium III Xeon Processor (1999년)
kuic.kyonggi.ac.kr/~dssung
(11). Pentium IV
-
2000년 발표
Data Bus (64bit), Address Bus (36bit)
Processor Core Speed (2GHz - 3.2GHz)
System Bus (400MHz-800MHz)
- 800 MHz 시스템 버스: Pentium 4 C
3.20 GHz, 3 GHz, 2.80 GHz, 2.60 GHz, 2.40 GHz
- 533 MHz 시스템 버스: Pentium 4 B
3.06 GHz, 2.80 GHz, 2.66 GHz, 2.53 GHz, 2.40 GHz, 2.26 GHz
- 400 MHz 시스템 버스: Pentium 4 A
2.60 GHz, 2.50 GHz, 2.40 GHz, 2.20 GHz, 2 GHz
- 하이퍼-스레딩 기술 (hyper-threading technology)
하나의 인텔 펜티엄 4 프로세서 상에서 2개의 스레드를
동시에 실행 가능
kuic.kyonggi.ac.kr/~dssung
6.4 RISC(Reduced Instruction Set Computer)
<-> CISC(Complex Instruction Set Computer)
CISC 특성
- 명령어의 수가 많다 <-> 적다 (많이 사용하는 명령어로 구성)
- 가변길이 명령어 <-> 고정길이 명령어
- 다양한 주소지정 모드 <-> 적은 수의 주소지정모드
제어부가 복잡 (면적 50%) <-> 제어부가 간단 (면적 10%)
- 명령어수행당 클럭수가 많다 <-> 적다 (대부분 1clock에 실행)
kuic.kyonggi.ac.kr/~dssung
- 적은 레지스터의 수 <-> 많은 레지스터 수
자주 사용하는 변수를 프로세서 내에 내장하여
외부 메모리를 참조하는 횟수를 줄임
속도 향상에 많은 도움을 줌
- 명령어 대다수가 메모리를 참조 및 조작
<-> 읽기(load)와 쓰기(store)를 제외한 대부분의 명령어는
전부 레지스터 만을 대상으로 함
메모리를 참조하는 명령어는 읽기와 쓰기 둘 뿐이다.
kuic.kyonggi.ac.kr/~dssung
Source Code by High Level Language
Compiler in CISC
Executable
Program
프로그램 길이
= 짧다
명령어 수행 속도
= 느리다
프로그램 수행속도
= ???
Compiler in RISC
Executable
Program
프로그램 길이
= 길다
명령어 수행 속도
= 빠르다
프로그램 수행속도
= ???
kuic.kyonggi.ac.kr/~dssung
6.5 Motorola 68000 Microprocessor
IPL2#
A23 – A1
IPL1#
D15 – D0
IPL0#
AS#
R/W#
BR#
UDS#
BG#
LDS#
DTACK#
68000
CPU
BGACK#
FC2
FC1
FC0
Vcc
GND
CLK
E
VMA#
VPA#
BERR#
RESET#
HALT#
kuic.kyonggi.ac.kr/~dssung
A23 – A1
D15 – D0
AS#
R/W#
UDS#
LDS#
DTACK#
address
bus
IPL2#
interrupt
lines
data
bus
IPL1#
IPL0#
68000
CPU
data transfer
control lines
bus control
lines
BR#
BG#
BGACK#
kuic.kyonggi.ac.kr/~dssung
a. Address Bus
--> Identify the location accessed by the CPU
during a read or write operation
with memory devices or I/O devices
--> Location - Memory location, I/O Location
--> The set of different addresses specified over the address bus
- Address Space
ex) N address lines
=> address space -> 2N
=> lowest address -> 0 highest address ->2N-1
kuic.kyonggi.ac.kr/~dssung
Address Lines -> A1-A23 : 16Mbyte
Address Space
location
0xFFFFFF
…..
0x000003
0x000002
0x000001
location
0x000000
kuic.kyonggi.ac.kr/~dssung
I/O를 위한 Address Space
-> 공유 Address Space 와 독립 Address Space
Memory Mapped I/O (공유 Address Space)
-> 하나의 Address Space를 Memory와 I/O가 공유한다.
I/O Mapped I/O (독립 Address Space)
-> Memory Address Space와 I/O Address Space가
독립적으로 존재한다.
-> Address bus의 주소가 메모리 주소인가 I/O 주소인가를
구분해주어야 한다.
kuic.kyonggi.ac.kr/~dssung
b. Data Bus
-> Carry the data to be written or read
from the location identified through the address line
-> The number of data lines determines
the maximum amount of information
to transfer during a single write or read operation
- 8bit, 16bit, 32bit, 64bit
-> Data Lines in 68000 CPU
-> D0-D15 : 16Bit
kuic.kyonggi.ac.kr/~dssung
-> 16 Bit Microprocessor
- Pairing scheme
각 location은 1Byte로 구성되어 있다.
CPU의 Data bus폭이 8bit일 때는
하나의 location과 Data bus의 폭이 일치한다.
CPU의 Data bus폭이 16bit일 때는
두 개의 location과 Data bus의 폭이 일치한다.
이때, 어떤 location을 Data bus의 상위 Byte에 사상할 것인가 ?
kuic.kyonggi.ac.kr/~dssung
16 bit CPU
Little Endian (ex: Intel CPU)
-> (Low Order Byte First)
D15
…..
상위 Byte (D15-D8)
D8
D7
CPU
홀수 번지 (1, 3, 5, …)
0x12
짝수 번지 (0, 2, 4, …)
…..
하위 Byte (D7-D0)
0x34
D0
CPU에서 읽는 값 : 0x3412
kuic.kyonggi.ac.kr/~dssung
16 bit CPU
Big Endian (ex: Motorola CPU)
-> (High Order Byte First)
D15
…..
상위 Byte (D15-D8)
D8
D7
CPU
홀수 번지 (1, 3, 5, …)
0x12
짝수 번지 (0, 2, 4, …)
…..
하위 Byte (D7-D0)
0x34
D0
CPU에서 읽는 값 : 0x1234
kuic.kyonggi.ac.kr/~dssung
Address bus 와 Data bus 와의 관계
(1). 8bit CPU는 A0가 반드시 필요 한가 ?
A3 = ?
A2 = ?
A1 = ?
A0 = ?
0x07
0x06
8bit
CPU
0x05
data bus
0x04
0x03
0x02
0x01
0x00
kuic.kyonggi.ac.kr/~dssung
8bit CPU는 A0가 반드시 필요 하다.
A3 = 0
A2 = 0
A1 = 1
A0 = 1
0x07
0x06
8bit
CPU
0x05
data bus
0x04
0x03
8bit
0x02
0x01
0x00
kuic.kyonggi.ac.kr/~dssung
(2). 16bit CPU가 만일 16bit 단위로 만 정보를 전달할 수 있다면
A0는 필요 한가 ?
A3 = 0
A2 = 0
A1 = 0
A0 = ?
0x07
0x06
16bit
CPU
0x05
data bus
0x04
0x03
8bit
8bit
0x02
0x01
0x00
kuic.kyonggi.ac.kr/~dssung
16bit CPU가 만일 16bit 단위로 만 정보를 전달할 수 있다면
A0는 필요 없다.
A3 = 0
A2 = 0
A1 = 0
0x07
0x06
16bit
CPU
0x05
data bus
0x04
0x03
8bit
8bit
0x02
0x01
0x00
kuic.kyonggi.ac.kr/~dssung
Little Endian : Low Order Byte First
A3 = 0
A2 = 0
A1 = 0
0x07
0x06
16bit
CPU
0x05
data bus
0x04
0x03
8bit
8bit
0x02
0x01
0x00
kuic.kyonggi.ac.kr/~dssung
Big Endian : High Order Byte First
A3 = 0
A2 = 0
A1 = 0
0x07
0x06
16bit
CPU
0x05
data bus
0x04
0x03
8bit
8bit
0x02
0x01
0x00
kuic.kyonggi.ac.kr/~dssung
(3). 16bit CPU가 만일 16bit 및 8bit 단위로 정보를 전달하기
위해서는 A0가 필요한가 ?
16bit
CPU
16bit
CPU
data bus
16bit
CPU
data bus
data bus
8bit
8bit
8bit
8bit
8bit
8bit
kuic.kyonggi.ac.kr/~dssung
16bit CPU가 만일 16bit 및 8bit 단위로 정보를 전달하기
위해서는 A0가 필요한가 ?
필요 없다, 단, BE1* (Byte Enable), BE0*가 필요하다.
A3 = 0
A2 = 0
A1 = 0
0x07
BE1# = 0
BE0# = 0
16bit
CPU
data bus
0x06
0x05
0x04
0x03
8bit
8bit
0x02
0x01
0x00
kuic.kyonggi.ac.kr/~dssung
A3 = 0
A2 = 0
A1 = 0
0x07
BE1# = 1
BE0# = 0
16bit
CPU
data bus
0x06
0x05
0x04
0x03
8bit
8bit
0x02
0x01
0x00
kuic.kyonggi.ac.kr/~dssung
A3 = 0
A2 = 0
A1 = 0
0x07
BE1# = 0
BE0# = 1
16bit
CPU
data bus
0x06
0x05
0x04
0x03
8bit
8bit
0x02
0x01
0x00
kuic.kyonggi.ac.kr/~dssung
16bit CPU가 만일 16bit 및 8bit 단위로 정보를 전달하기
위해서는 A0가 필요한가 ?
필요 하다, 단, BHE# (Bus High Enable : 16/8bit 구분)가 필요하다.
A3 = 0
A2 = 0
A1 = 0
A0 = 0
0x07
0x06
BHE# = 0
16bit
CPU
data bus
0x05
0x04
0x03
8bit
8bit
0x02
0x01
0x00
kuic.kyonggi.ac.kr/~dssung
A3 = 0
A2 = 0
A1 = 0
A0 = 0
0x07
0x06
BHE# = 1
16bit
CPU
data bus
0x05
0x04
0x03
8bit
8bit
0x02
0x01
0x00
kuic.kyonggi.ac.kr/~dssung
A3 = 0
A2 = 0
A1 = 0
A0 = 1
0x07
0x06
BHE# = 0
16bit
CPU
data bus
0x05
0x04
0x03
8bit
8bit
0x02
0x01
0x00
kuic.kyonggi.ac.kr/~dssung
(4). 32bit CPU가 만일 32bit 단위로 만 정보를 전달할 수 있다면
A1, A0는 필요 한가 ?
A3 = 0
A2 = 0
A1 = ?
A0 = ?
0x07
0x06
32bit
CPU
data bus
8bit
0x05
0x04
0x03
8bit
0x02
0x01
8bit
8bit
0x00
kuic.kyonggi.ac.kr/~dssung
32bit CPU가 만일 32bit 단위로 만 정보를 전달할 수 있다면
A1, A0는 필요 없다.
A3 = 0
A2 = 0
0x07
0x06
32bit
CPU
data bus
8bit
0x05
0x04
0x03
8bit
0x02
0x01
8bit
8bit
0x00
kuic.kyonggi.ac.kr/~dssung
Little Endian : Low Order Byte First
A3 = 0
A2 = 0
0x07
0x06
32bit
CPU
data bus
8bit
0x05
0x04
0x03
8bit
0x02
0x01
8bit
8bit
0x00
kuic.kyonggi.ac.kr/~dssung
Big Endian : High Order Byte First
A3 = 0
A2 = 0
0x07
0x06
32bit
CPU
data bus
8bit
0x05
0x04
0x03
8bit
0x02
0x01
8bit
8bit
0x00
kuic.kyonggi.ac.kr/~dssung
(5). 32bit CPU가 만일 32bit, 16bit 및 8bit 단위로 정보를 전달하기
위해서 필요한 추가적인 제어선 들은 ?
BE3#, BE2#, BE1#, BE0#가 필요하다.
A3 = 0
A2 = 0
32bit
CPU
BE3# = 0
BE2# = 0
BE1# = 0
BE0# = 0
data bus
8bit
0x07
0x06
0x05
0x04
0x03
8bit
0x02
0x01
8bit
8bit
0x00
kuic.kyonggi.ac.kr/~dssung
A3 = 0
A2 = 0
32bit
CPU
BE3# = 1
BE2# = 1
BE1# = 0
BE0# = 0
data bus
8bit
0x07
0x06
0x05
0x04
0x03
8bit
0x02
0x01
8bit
8bit
0x00
kuic.kyonggi.ac.kr/~dssung
(6). 결론
8bit CPU는 A0가 반드시 필요 하다.
16bit CPU가 만일 16bit 및 8bit 단위로 정보를 전달하기
위해서 A0가 없을 경우 필요한 추가적인 제어선 들은 ?
BE1#, BE0#가 필요하다.
32bit CPU가 만일 32bit, 16bit 및 8bit 단위로 정보를 전달하기
위해서 필요한 추가적인 제어선 들은 ?
BE3#, BE2#, BE1#, BE0#가 필요하다.
64bit CPU가 만일 64bit, 32bit, 16bit 및 8bit 단위로 정보를 전달하기
위해서 필요한 추가적인 제어선 들은 ?
BE7#, BE6#, BE5#, BE4#, BE3#, BE2#, BE1#, BE0#가 필요하다.
kuic.kyonggi.ac.kr/~dssung
A3
A2
A3
A2
A1
A3
A2
A1
A0
8bit
CPU
BE1#
BE0#
16bit
CPU
data bus
8bit
data bus
8bit
8bit
32bit
CPU
BE3#
BE2#
BE1#
BE0#
data bus
8bit
8bit
8bit
8bit
kuic.kyonggi.ac.kr/~dssung
A3 = 0
A2 = 0
A1 = 0
BE1# = 0
BE0# = 0
16bit
CPU
data bus
8bit
8bit
0x07
0x06
0x05
0x04
0x03
0x02
0x01
0x00
kuic.kyonggi.ac.kr/~dssung
0x07
0x06
0x05
0x04
0x03
0x07
0x06
0x02
0x05
0x04
0x01
0x03
0x02
0x00
0x01
0x00
BE1#
BE0#
kuic.kyonggi.ac.kr/~dssung
A3 A2 A1
A3 = 0
A2 = 0
A1 = 0
BE1# = 0
BE0# = 0
16bit
CPU
data bus
8bit
8bit
0 1 1
0x07
0x06
0 1 0
0x05
0x04
0 0 1
0x03
0x02
0 0 0
0x01
0x00
BE1#
BE0#
kuic.kyonggi.ac.kr/~dssung
A4
A3
A2
32bit
CPU
BE3#
BE2#
BE1#
BE0#
data bus
8bit
8bit
8bit
8bit
A4 A3 A2
0 1 1
0x0F
0x0E
0x0D
0x0C
0 1 0
0x0B
0x0A
0x09
0x08
0 0 1
0x07
0x06
0x05
0x04
0 0 0
0x03
0x02
0x01
0x00
D23-D16
BE2#
D15-D8
BE1#
D7-D0
BE0#
D31-D24
BE3#
kuic.kyonggi.ac.kr/~dssung
c. Data Transfer Control Lines
AS# (Address Strobe)
- 현재 Address Bus에 있는 정보가 참 정보임을 의미
R/W# (Read / Write)
- CPU에서 Data bus의 방향은 양방향이며
Data bus의 방향을 구분하기 위하여 필요하다.
If High, the direction of a data transfer = CPU <-- Memory, I/O
Low, the direction of a data transfer = CPU --> Memory, I/O
kuic.kyonggi.ac.kr/~dssung
UDS# (Upper Data Strobe) -> Even Address (BE1#에 해당)
LDS# (Lower Data Strobe) -> Odd Address (BE0#에 해당)
Write operation
-> indicate to place a data over the data bus
-> 현재 Data Bus에 있는 정보가 참 정보임을 의미
Read operation
-> indicate to memory (or I/O)
when to place information on the data bus
-> Data Bus를 통하여 정보를 받을 준비가 되었음을 의미
kuic.kyonggi.ac.kr/~dssung
DTACK# (Data Transfer Acknowledge)
Write operation
-> CPU가 제공한 데이터를 받았음을 의미
Read operation
-> 현재 Data Bus에 있는 정보가 참 정보임을 의미
kuic.kyonggi.ac.kr/~dssung
Write Operation
DS#
Data
DTACK#
Read Operation
DS#
Data
DTACK#
kuic.kyonggi.ac.kr/~dssung
d. Interrupt Lines
-> IPL0 - IPL2 (Interrupt Priority Level Lines)
IPL2 IPL1 IPL0
1 1 1 <- highest priority
0
0
1 <- lowest priority
Maskable Interrupt : 명령어를 이용하여 인터럽트를 막을 수 있다.
:1–6
외부 회로의 도움 없이 interrupt의 우선 순위를 알 수 있다.
interrupt service routine수행 중에
새롭게 요청한 interrupt가 수행중인
interrupt보다 더 중요한 요청인지를 알 수 있다.
Non Maskable Interrupt : 막을 수 없는 인터럽트
:7
kuic.kyonggi.ac.kr/~dssung
e. Bus Control Lines
-> BR#
(Bus Request)
BG#
(Bus Grant)
BGACK# (Bus Grant Acknowledge)
BR#
BG#
BGACK#
kuic.kyonggi.ac.kr/~dssung
BG#
CPU
BGACK#
bus master
BR#
bus master
BR1#
BR2#
bus grant in
bus grant out
bus master
bus grant ack
bus request
bus master
kuic.kyonggi.ac.kr/~dssung
외부회로의 도움 없이 임의의 bus master에 의하여 bus가 이용되는 도중에
다른 bus master의 버스 요청의 유무를 알 수 있다.
BR1#
BR2#
BR#
BG#
BGACK#
kuic.kyonggi.ac.kr/~dssung
BG#
Arbiter
bus master
BR*
bus master
BR1#
bus grant in
BR2#
bus grant out
bus master
bus request
bus master
kuic.kyonggi.ac.kr/~dssung
BR1#
BR2#
BR#
BG#
kuic.kyonggi.ac.kr/~dssung
f. Other Lines
-> RESET#, FC0-FC2, BERR#
FC0 FC1 FC2
1
1
1
Interrupt Acknowledge
-> BERR# (Bus Error)
Watch Dog Timer는 일정기간 동안
DTACK# 신호가 없으면 Bus Error를 신호하도록 설계
kuic.kyonggi.ac.kr/~dssung
Write Operation
DS#
Data
DTACK#
Read Operation
DS#
Data
DTACK#
kuic.kyonggi.ac.kr/~dssung
Write Operation
DS#
Data
DTACK#
Read Operation
DS#
Data
DTACK#
kuic.kyonggi.ac.kr/~dssung
Word Read Timing Diagram
CLK
Address
AS#
UDS#
LDS#
R/W#
DTACK#
D15-D8
D7-D0
kuic.kyonggi.ac.kr/~dssung
Byte Read Timing Diagram
CLK
Address
AS#
UDS#
LDS#
R/W#
DTACK#
D15-D8
D7-D0
kuic.kyonggi.ac.kr/~dssung
Word Write Timing Diagram
CLK
Address
AS#
UDS#
LDS#
R/W#
DTACK#
D15-D8
D7-D0
kuic.kyonggi.ac.kr/~dssung
6.6 Intel 8086 based microprocessor
6.6.1 8088
-> 8/16 Bit Microprocessor
( External Bus Width -> 8 Bit )
( Internal Bus Width -> 16 Bit )
kuic.kyonggi.ac.kr/~dssung
INTR
A19 – A8
INTA#
AD7– AD0
NMI
ALE
IO/M#
HOLD
RD#
HLDA
WR#
8088
CPU
READY
Vcc
DT/R#
GND
DEN#
CLK
RESET
kuic.kyonggi.ac.kr/~dssung
A19 – A8
AD7– AD0
ALE
IO/M#
RD#
WR#
READY
address
bus
interrupt
lines
address/data
bus
INTR
INTA#
NMI
8088
CPU
data transfer
control lines
bus control
lines
HOLD
HLDA
kuic.kyonggi.ac.kr/~dssung
a. Address Bus
--> Identify the location accessed by the CPU
during a read or write operation
with memory devices or I/O devices
--> Location - Memory location, I/O Location
--> The set of different addresses specified over the address bus
- Address Space
ex) N address lines
=> address space -> 2N
=> lowest address -> 0 highest address ->2N-1
--> A19 - A0 : Memory (1M Byte)
A15 - A0 : I/O (64K Byte)
kuic.kyonggi.ac.kr/~dssung
I/O를 위한 Address Space
-> 공유 Address Space 와 독립 Address Space
Memory Mapped I/O (공유 Address Space)
-> 하나의 Address Space를 Memory와 I/O가 공유한다.
I/O Mapped I/O (독립 Address Space)
-> Memory Address Space와 I/O Address Space가
독립적으로 존재한다.
-> Address bus의 주소가 메모리 주소인가 I/O 주소인가를
구분해주어야 한다.
kuic.kyonggi.ac.kr/~dssung
독립 Address Space
- Memory Address Space : 20개의 address bus가 사용
- I/O Address Space : 20개 address bus중 하위 16개만 사용
Memory Address Space
location
0xFFFFF
…..
I/O Address Space
location
0xFFFF
…..
0x00001
location
0x00000
0x0001
location
0x0000
kuic.kyonggi.ac.kr/~dssung
CPU는 Memory Map을 통하여 Memory 소자들과 통신한다.
Memory Map
- (Memory) Address Space상에 Memory 소자들의 사상관계
Memory Map
location
0xFFFFF
…..
0x00001
location
0x00000
kuic.kyonggi.ac.kr/~dssung
CPU는 I/O Map을 통하여 I/O 소자들과 통신한다.
I/O Map
- (I/O) Address Space상에 I/O 소자들의 사상관계
I/O Map
location
0xFFFF
…..
0x0001
location
0x0000
kuic.kyonggi.ac.kr/~dssung
b. Data Bus
-> Carry the data to be written or read
from the location identified through the address line
-> The number of data lines determines
the maximum amount of information
to transfer during a single write or read operation
- 8bit, 16bit, 32bit, 64bit
-> D7 - D0 : 8 Bit
kuic.kyonggi.ac.kr/~dssung
c. Data Transfer Control Lines
IO/M# (IO / Memory)
I/O Mapped I/O를 이용하는 CPU에서
현재의 address bus의 내용이 Memory Address Space를 위한
주소인가 I/O Address Space를 위한 주소인가를
구분하기 위하여 필요하다.
If High, Address lines --> I/O Address Space를 위한 주소
Low, Address lines --> Memory Address Space를 위한 주소
kuic.kyonggi.ac.kr/~dssung
ALE (Address Latch Enable)
T2
T1
T3
T4
CLK
A19-A8
AD7-AD0
ALE
A
D
kuic.kyonggi.ac.kr/~dssung
RD# (Read Strobe)
->Active, the direction of a data transfer = CPU <-- Memory, I/O
-> Data Bus를 통하여 정보를 받을 준비가 되었음을 의미
WR# (Write Strobe)
-> Active, the direction of a data transfer = CPU -->Memory, I/O
-> 현재 Data Bus에 있는 정보가 참 정보임을 의미
kuic.kyonggi.ac.kr/~dssung
READY ( CPU <-- Memory, I/O )
- High상태 : Ready
Memory 또는 I/O Interface가 machine cycle이
연장될 필요가 없이 정보전달이 가능함을 의미
- Low상태 : Not Ready
Memory 또는 I/O Interface가 정보전달을 위하여
machine cycle이 연장되어야 함을 의미
Memory 소자 또는 I/O 소자가 CPU가 원하는 시간에
정보를 제공할 수 없을 때 Ready를 이용하여
machine cycle을 연장해야 한다.
kuic.kyonggi.ac.kr/~dssung
d. Interrupt Lines
Maskable Interrupt : 명령어를 이용하여 인터럽트를 막을 수 있다.
INTR (Interrupt Request) :
-> Maskable Interrupt
-> Interrupt Source에 의하여 CPU에게 Interrupt를 요청
INTA# (Interrupt Acknowledge)
-> CPU로부터 인터럽트 요청에 대한 허락
Non Maskable Interrupt : 막을 수 없는 인터럽트
NMI (Non Maskable Interrupt)
kuic.kyonggi.ac.kr/~dssung
Maskable Interrupt의 경우,
INTACK를 받은 후 Interrupt Source는
Data Bus를 이용하여 8bit의 Address Code를 제공
CPU는 Address Code에 의하여
Interrupt Service Routine의 시작 주소를 찾는다.
Non Maskable Interrupt의 경우, Interrupt 허락이 필요 없다.
(Mask할 수 없으므로 반드시 서비스해야 하며,
Interrupt Source는 Address code를 제공하지 않는다.
NMINT에 대한 default address code (Intel CPU:0x02) 가
있으며 이를 토대로 Interrupt Service Routine이 수행된다.
kuic.kyonggi.ac.kr/~dssung
1) 문자가 입력되었을 때 이를 I/O Interface에 알리고
I/O Interface는 CPU에게 interrupt를 요청한다.
Interrupt 요청
CPU
I/O
Interface
data
I/O
Device
kuic.kyonggi.ac.kr/~dssung
2) CPU는 interrupt에 대한 허락을 한다.
Interrupt 요청
CPU
Interrupt 허락
I/O
Interface
data
I/O
Device
kuic.kyonggi.ac.kr/~dssung
3) I/O Interface는 Keyboard에 해당되는 Address code를 제공한다.
(예를 들어 30이라 가정)
Interrupt 요청
CPU
I/O
Interface
Interrupt 허락
Address code (ex: 30)
data
I/O
Device
kuic.kyonggi.ac.kr/~dssung
4) CPU는 Interrupt Vector Table중 index 30에 해당되는
Interrupt Vector를 PC (Program Counter)에 복사한다.
Interrupt 요청
CPU
I/O
Interface
data
I/O
Device
Interrupt 허락
Address code (ex: 30)
255
Interrupt vector
…
30
Interrupt vector
Interrupt vector = Interrupt Service Routine의 시작주소
ex) Interrupt vector for address code 30 is 5000
…
1
0
Interrupt Vector Table
5000
Interrupt Service Routine
For address code 30
kuic.kyonggi.ac.kr/~dssung
5) 해당되는 Interrupt Service Routine이 수행된다.
Interrupt 요청
CPU
I/O
Interface
data
I/O
Device
Interrupt 허락
Address code (ex: 30)
255
Interrupt vector
…
30
Interrupt vector
Interrupt vector = Interrupt Service Routine의 시작주소
ex) Interrupt vector for address code 30 is 5000
…
1
0
Interrupt Vector Table
5000
Interrupt Service Routine
For address code 30
kuic.kyonggi.ac.kr/~dssung
e. Bus Control Lines
CPU와 Memory, I/O의 정보 교환은
Bus를 통하여 이루어진다.
CPU
Memory
I/O
Bus Master : Bus를 통하여 정보의 송수신을 주도
Bus Slave : Bus Master의 요청에 따라
해당 정보를 전송 또는 수신
kuic.kyonggi.ac.kr/~dssung
1) CPU (Bus Master) <--> Memory (Bus Slaver)
2) CPU (Bus Master) <--> I/O (Bus Slaver)
: Direct I/O, Polled I/O, Interrupt driven I/O
3) I/O (DMA Controller : Bus Master) <--> Memory (Bus Slaver)
: DMA
Bus를 사용하는 Bus Master는 하나 이며, 따라서
세 번째 경우 I/O Interface내에 있는 DMA Controller는
CPU에게 Bus의 사용을 요청하고
Bus의 사용을 허락 받은 후 버스를 이용해야 한다.
Bus의 사용이 끝난 후 DMA Controller는
Bus를 CPU에게 반납해야 한다.
kuic.kyonggi.ac.kr/~dssung
HOLD (Hold)
HOLD가 Active -> Bus 요청자
(일반적으로 DMA Controller)로부터 Bus의 사용 요청
HOLD가 Inactive -> Bus 요청자로 부터의 Bus의 반납
HOLDA (Hold Acknowledge)
HOLDA가 Active -> CPU로부터 Bus의 사용 허가
Bus의 사용 권한이 Bus 요청자에게 있음을 암시
HOLDA가 Inactive
Bus의 사용 권한이 CPU에게 있음을 암시
kuic.kyonggi.ac.kr/~dssung
HOLD
CPU
Memory
I/O
kuic.kyonggi.ac.kr/~dssung
HOLDA
CPU
Memory
I/O
kuic.kyonggi.ac.kr/~dssung
CPU
Memory
I/O
kuic.kyonggi.ac.kr/~dssung
Memory Read Timing Diagram
T2
T1
T3
T4
CLK
A19-A8
AD7-AD0
IO/M#
ALE
RD#
READY
A
D
kuic.kyonggi.ac.kr/~dssung
Memory Write Timing Diagram
T2
T1
T3
CLK
A19-A8
AD7-AD0
IO/M#
ALE
WR#
READY
A
D
T4
kuic.kyonggi.ac.kr/~dssung
Each bus cycle is divided into 4 clock cycles : T1 ~ T4
- T1 : 20-bit address is output
- T2 : identifies the cycle type
read, write
- T3 : wait
- T4 : the data is latched and control signals are removed
kuic.kyonggi.ac.kr/~dssung
6.6.2 8086
INTR
A19 – A16
INTA#
AD15– AD0
NMI
BHE#
HOLD
ALE
M/IO#
RD#
8086
CPU
HLDA
WR#
READY
DT/R#
DEN#
Vcc
GND
CLK
RESET
kuic.kyonggi.ac.kr/~dssung
A19 – A16
AD15– AD0
BHE#
ALE
M/IO#
RD#
WR#
READY
address
bus
interrupt
lines
address/data
bus
INTR
INTA#
NMI
8086
CPU
data transfer
control lines
bus control
lines
HOLD
HLDA
kuic.kyonggi.ac.kr/~dssung
Differences from the 8088
-> BHE* (Bus High Enable)
A3 = 0
A2 = 0
A1 = 0
A0 = 0
0x07
0x06
BHE# = 0
16bit
CPU
data bus
0x05
0x04
0x03
8bit
8bit
0x02
0x01
0x00
kuic.kyonggi.ac.kr/~dssung
A3 = 0
A2 = 0
A1 = 0
A0 = 0
0x07
0x06
BHE# = 1
16bit
CPU
data bus
0x05
0x04
0x03
8bit
8bit
0x02
0x01
0x00
kuic.kyonggi.ac.kr/~dssung
A3 = 0
A2 = 0
A1 = 0
A0 = 1
0x07
0x06
BHE# = 0
16bit
CPU
data bus
0x05
0x04
0x03
8bit
8bit
0x02
0x01
0x00
kuic.kyonggi.ac.kr/~dssung
A3 = 0
A2 = 0
A1 = 0
0x07
A0 = 0
<- BE0#
BHE# = 0 <- BE1#
16bit
CPU
data bus
0x06
0x05
0x04
0x03
8bit
8bit
0x02
0x01
0x00
kuic.kyonggi.ac.kr/~dssung
A3 = 0
A2 = 0
A1 = 0
0x07
A0 = 0
<- BE0#
BHE# = 1 <- BE1#
16bit
CPU
data bus
0x06
0x05
0x04
0x03
8bit
8bit
0x02
0x01
0x00
kuic.kyonggi.ac.kr/~dssung
A3 = 0
A2 = 0
A1 = 0
0x07
A0 = 1
<- BE0#
BHE# = 0 <- BE1#
16bit
CPU
data bus
0x06
0x05
0x04
0x03
8bit
8bit
0x02
0x01
0x00
kuic.kyonggi.ac.kr/~dssung
-> 16, 32 Bit Micro processor
- Pairing scheme
각 location은 1Byte로 구성되어 있다.
CPU의 Data bus폭이 8bit일 때는
하나의 location과 Data bus의 폭이 일치한다.
CPU의 Data bus폭이 16bit일 때는
두 개의 location과 Data bus의 폭이 일치한다.
이때, 어떤 location을 Data bus의 상위 Byte에 사상할 것인가 ?
kuic.kyonggi.ac.kr/~dssung
16 bit CPU
Little Endian (ex: Intel CPU)
-> (Low Order Byte First)
D15
…..
상위 Byte (D15-D8)
D8
D7
CPU
홀수 번지 (1, 3, 5, …)
0x12
짝수 번지 (0, 2, 4, …)
…..
하위 Byte (D7-D0)
0x34
D0
CPU에서 읽는 값 : 0x3412
kuic.kyonggi.ac.kr/~dssung
16 bit CPU
Big Endian (ex: Motorola CPU)
-> (High Order Byte First)
D15
…..
상위 Byte (D15-D8)
D8
D7
CPU
홀수 번지 (1, 3, 5, …)
0x12
짝수 번지 (0, 2, 4, …)
…..
하위 Byte (D7-D0)
0x34
D0
CPU에서 읽는 값 : 0x1234
kuic.kyonggi.ac.kr/~dssung
6.6.3 80286
- Data Bus (16bit), Address Bus (24bit)
Memory Address Space
location
0xFFFFFF
…..
I/O Address Space
location
0xFFFF
…..
0x000001
location
0x000000
0x0001
location
0x0000
kuic.kyonggi.ac.kr/~dssung
6.6.4 80386
INTR
A31 - A2
NMI
D31 - D0
HOLD
BE3# - BE0#
HLDA
ADS# (Address Status)
M/IO#
W/R#
READY#
80386
CPU
Vcc
GND
CLK
RESET
PEREQ
NA#
BS16#
BUSY#
ERROR#
kuic.kyonggi.ac.kr/~dssung
Memory Address Space
location
0xFFFFFFFF
…..
I/O Address Space
location
0xFFFF
…..
0x00000001
location
0x00000000
0x0001
location
0x0000
kuic.kyonggi.ac.kr/~dssung
32 bit CPU
Little Endian (ex: Intel CPU)
-> (Low Order Byte First)
D31
..
D24
D23
..
CPU
D16
D15
..
D8
D7
0x78
11 번지 (3, 7, 11, …)
0x56
10 번지 (2, 6, 10, …)
0x34
01 번지 (1, 5, 9, …)
0x12
00 번지 (0, 4, 8, …)
..
D0
CPU에서 읽는 값 : 0x78563412
kuic.kyonggi.ac.kr/~dssung
32 bit CPU
Big Endian (ex: Motorola CPU)
-> (High Order Byte First)
D31
..
D24
D23
..
CPU
D16
D15
..
D8
D7
0x78
11 번지 (3, 7, 11, …)
0x56
10 번지 (2, 6, 10, …)
0x34
01 번지 (1, 5, 9, …)
0x12
00 번지 (0, 4, 8, …)
..
D0
CPU에서 읽는 값 : 0x12345678
kuic.kyonggi.ac.kr/~dssung
Read Timing Diagram
T1
CLK
A31-A2
D31-D0
ADS#
W/R#
READY#
T2
T1
T2
kuic.kyonggi.ac.kr/~dssung
Write Timing Diagram
T1
CLK
A31-A2
D31-D0
ADS#
W/R#
READY#
T2
T1
T2
kuic.kyonggi.ac.kr/~dssung
6.6.5 80486
- 핵심부분은 RISC기법으로 재설계
-> 자주 사용하는 명령어 1 clock에 실행
- Burst Cycle을 이용하여 최대 1 clock당 32bit 정보 이동
- A31 - A2, BE3#, BE2#, BE1#, BE0#
- D32 - D0
32bit Execution Unit
Cache
32bit
BIU
kuic.kyonggi.ac.kr/~dssung
Memory Address Space
location
0xFFFFFFFF
…..
I/O Address Space
location
0xFFFF
…..
0x00000001
location
0x00000000
0x0001
location
0x0000
kuic.kyonggi.ac.kr/~dssung
Read Timing Diagram
T1
CLK
A31-A2
D31-D0
ADS#
W/R#
BREADY#
CACHE#
KEN#
T2
T1
T2
kuic.kyonggi.ac.kr/~dssung
Write Timing Diagram
T1
CLK
A31-A2
D31-D0
ADS#
W/R#
BREADY#
CACHE#
KEN#
T2
T1
T2
kuic.kyonggi.ac.kr/~dssung
Normal Read
32bit Execution Unit
Cache
32bit
BIU
Normal Write
32bit Execution Unit
Cache
32bit
BIU
kuic.kyonggi.ac.kr/~dssung
Burst Cycles
- Beginning with 486, a new burst mode is implemented
- Begin with a two-T-state bus cycle as before,
but subsequent cycles transfer one quantity
(4 bytes for 486, 8 bytes for Pentium) per clock pulse
 data transfer rate is doubled
- Primary purpose : to allow the internal processor cache
to be filled as quickly as possible.
32bit Execution Unit
Cache
32bit
BIU
kuic.kyonggi.ac.kr/~dssung
Burst Read Timing Diagram
T1
CLK
A31-A2
D31-D0
ADS#
W/R#
BREADY#
CACHE#
KEN#
T2
T2
T2
T2
kuic.kyonggi.ac.kr/~dssung
6.6.6 80586
- 슈퍼 스칼라 (Super Scalar Architecture)
두 개의 다른 명령어를 동시 실행
한 clock당 두 개의 명령어 실행 가능
- A31 - A3, BE7#, BE6#, BE5#, BE4#, BE3#, BE2#, BE1#, BE0#
- D63 - D0
32bit Execution Unit
Cache
32bit Execution Unit
64bit
BIU
kuic.kyonggi.ac.kr/~dssung
Read Timing Diagram
T1
CLK
A31-A3
D63-D0
ADS#
W/R#
BREADY#
CACHE#
KEN#
T2
T1
T2
kuic.kyonggi.ac.kr/~dssung
Write Timing Diagram
T1
CLK
A31-A3
D63-D0
ADS#
W/R#
BREADY#
CACHE#
KEN#
T2
T1
T2
kuic.kyonggi.ac.kr/~dssung
Burst Read Timing Diagram
T1
CLK
A31-A3
D63-D0
ADS#
W/R#
BREADY#
CACHE#
KEN#
T2
T2
T2
T2
kuic.kyonggi.ac.kr/~dssung
Burst Write Timing Diagram
T1
CLK
A31-A3
D63-D0
ADS#
W/R#
BREADY#
CACHE#
KEN#
T2
T2
T2
T2
kuic.kyonggi.ac.kr/~dssung
32bit Execution Unit
Cache
32bit Execution Unit
64bit
BIU