cpucpu의의이해이해 - egloospds17.egloos.com/pds/200908/31/64/1.cpu_intro.pdfadd실행...
TRANSCRIPT
CPU란 무엇인가?CPU란 무엇인가?
프로그램에 따라 실행되는 상태 제어기
이미 작성된 프로그램에 의해 작동이미 작성된 프로그램에 의해 작동
전자 장치 제어의 두뇌전자 장치 제어의 두뇌
전자의 디지털 기술을 이용
수학적 처리를 기반으로 작동(2진수)
IT 및 정보처리의 핵심IT 및 정보처리의 핵심
인텔 CPU와 무어(Moore)의 법칙인텔 CPU와 무어(Moore)의 법칙
CPU의 진화-숫자의 표현CPU의 진화 숫자의 표현
4비트 – 4040 간단한 장치 제어(전화기,…)
8비트 – 8080, 8051
16비트 – 8086, 80286(PC)
32비트 - 8038632비트 - 80386
64비트 – 최근 64비트
DSP CPU – 고속 수학계산을 필요한 장치TI사의 TMS32시리즈
Floating-Point (실수자료형 레지스터 & ALU)
4004 4비트
CPU CPU 발전발전 인텔
8008
자일로그 모스텍
모토롤라
8080
8085 Z80 6502
6800
6809
자일로그 모스텍 8비트
8086 Z8000 6510 68000
16비트8088
80286
8018616비트
80386 Z80000 68020
80486 80860 68030
68040 88000Pentium4
RISC32비트
RISC
Core2 –IA64 64비트
CPU의 진화 2* 임베디드
RISCCPU의 진화 2 RISCCISC
intel motorolaZilogMOS
t h l
4비트40044040(intel)
intel motorolaZilogtechnology
80088080
8051*(Intel)Z80(Zilog)
6800(Motorola)
6502(MOS8비트
(intel)
80808085
(Zilog) (Motorola)(MOSTechnology)
Apple-II
8비트
8086
AVR* (Atmel)
80868088(IBM-PC/XT)80286(IBM –PC/AT)(intel)
68000(16/32)(Motorola)
16비트
(intel)
32비트 8038680486
PowerPC(IBM)MPC860(Motorola)*
6802068030 (MAC)
Pentium(intel,AMD) ARM*
68040(Motorola) AVR32*
Intel Pentium42005년
1.69억TR3.73GHz
90nm공정2MB SRAM2MB SRAM
PC (Personal Compter)PC (Personal Compter)
IBM-PC(XT)
Apple-II6502
IBM PC(XT)8088
IBM PC(AT)16비트
8비트
Mac680x0계열 IBM PC
IBM-PC(AT)80286
16/32비트 680x0계열(Motorola)
IBM-PC80486 IA-32 : 32비트
16/32비트
MacPowerPC
(IBM)
IBM-PCPentiumPro,2,3,4
IA-32 : 32비트MMX(멀티메디어,3D그래픽)32비트
Mac(I t l)
IBM-PCPentium(D,EM64T)
64비트-AMD64-Pentium4(EM64T) IA-64Dual CPU(Intel)
IBM-PCCore2
Dual CPU-Pentium D(Pentium4x2)-Core2-AMD64 X2
Apple-II / MACApple II / MAC
Apple-II (1977/June 6)Apple-II (1977/June 6)MOS Technology 6502, 1MHz
4KB RAM 메모리4KB RAM 메모리
BASIC (인터프리터-ROM에 존재)
Video-24라인/40컬럼 Monochrome 대문자textVideo 24라인/40컬럼 Monochrome, 대문자text
NTSC 호환
1978- External 5¼” floppy disk1978 External 5¼ floppy disk
Apple DOS – Diskette drive
Apple-II Plus (1979)48KB RAM, 12KB ROM, 4KB IO48KB RAM, 12KB ROM, 4KB IO
Language Card – UCSD Pascal, FORTAN 77
IBM-PCIBM PC
IBM-PC /XT (1983)IBM-PC /XT (1983)Intel 8088, 4.77MHz
128KB 메모리128KB 메모리
360KB double-sided 5 ¼” floppy disk
Socket 8087(FPU) coprocessorSocket 8087(FPU) coprocessor
IBM-PC / AT (1984)Intel 80288 8MHzIntel 80288, 8MHz
256KB ~ 16MB
1 2MB 5¼” floppy disk1.2MB 5¼ floppy disk
20MB Hard Disk
PC-DOS3 0PC DOS3.0
Enhanced Graphics Adapter – 640x350(16C/64p)
CISC와 RISCCISC와 RISC
CISCCISCComplex Instruction Set Computer
x86, 68000, VAX
반RISC의 의미가 애매해 짐486 > Pi li d CISC486 -> Pipelined CISC
더 작아지는 mirco-operations(명령을 실행을 위한CPU내의 코드)CPU내의 코드)
RISC : 명령 축소Reduced Instruction Set ComputerReduced Instruction Set Computer
고속 실행을 목적으로
AVR PIC ARM PowerPC SPARCAVR,PIC, ARM, PowerPC, SPARC
최근 들어 2개의 경계가 불분명 해 짐
CPU의 동작 요소CPU의 동작 요소
CPU
메모리 (ROM,RAM)메 리 ( , )
특정 목적 지원 프로그램
IO 장치 (입출력 장치 통신 장치)IO 장치 (입출력 장치, 통신 장치)KEYPAD
LCD
Ethernet (LAN)
USB
기타
CPU 시스템 구조CPU 시스템 구조
8051PC
TimerTimer
SerialSerial
8051 core8051 core
• 레지스터• ALU
FLAG
ROM/FLASHROM/FLASH
UART
PC장치
SerialSerial • FLAGRAMRAM통신
IO IO 모듈모듈
• 키패드
• CPU에서 동작하는 모든 프로그램은 반드시 메모리에 적제되어 있키패
• LCD• USB
어야 한다. ROM이나 RAM 중 어느한곳에 있어도 상관 없다.
메모리 종류메모리 종류
ROMROMMask ROM : 생산 시 고정된 데이터로 칩이 만들어 진다. 따라서 롬라이터로쓰기가 불가능 하다. 주로 대량생산에 사용.PROM (Programmable ROM): 생산 시 데이터로 없이 만들어 지고 롬라이PROM (Programmable ROM): 생산 시 데이터로 없이 만들어 지고, 롬라이터로 쓰기하면 변경 불가능 하다.EPROM (Erasable PROM): 롬 라이터로 데이터(프로그램)을 쓰고 자외선으로 지워 재 프로그램 가능.EEPROM (Electrically EPROM): 동작 중 쓰기가 가능하여, 시스템의 특정 정보를 담는것이 주 목적이다. (RAM에 비해 쓰기 속도 저하, 쓰기 복잡)
RAMRAMSRAM(Static RAM): 쓰기와 읽기가 가능. 전기가 공급되면 데이터 유지DRAM (Dynamic RAM): 쓰기와 읽기가 가능. 전기가 공급되어도 일정 시간이지나면 데이터가 사라짐. 주기적 리프레쉬(refresh)가 필요.
FLASH읽기와 쓰기가 가능하고 전원이 없어도 데이터가 사라지지 않음.RAM에 비해 쓰기가 복잡 CPU에 의한 쓰기 프로그램이 필요RAM에 비해 쓰기가 복잡. CPU에 의한 쓰기 프로그램이 필요.최근 임베디드 시스템은 거의 이 메모리 사용.PC의 롬바이어스도 이 메모리 사용. (초기 PC PROM/EPROM) – 바이러스
EPROMEPROM
소켓을 이용 장착
데이터를 삭제할 때자외선을 이용한다
데이터를 쓸 때는 별도의 장치를 이용한다자외선을 이용한다.
자외선이 통과하도록창이 열려 있다.
의 장치를 이용한다.따라서 소켓을 쓰는 것이 일반적
-데이터가 지워지면모두 0xFF 됨
DRAM 메모리 종류DRAM 메모리 종류
DRAM의 분류: SRAM보다 구조가 단순하고 고밀도, 가격 저렴.
DRAM : 초기의 메모리.
SDRAMSDRAMSDRAM :DRAM보다 엑세스 속도 증가를 위해 클럭을 사용하여 읽고 쓰는 시간을 동기화 한다.두클
진화
럭을 사용하여 읽 는 시간을 동기화 한다.두클럭에 데이터를 한번 억세스 한다.
DDR SDRAM : SDRAM 보다 속도를 높이기 위해한 클럭 동안 엑세스 한다.
DDR2 SDRAM : 클럭의 속도를 2배 높여 억세스한다한다.
CPU 시스템 구성 요소 I-ICPU 시스템 구성 요소 I I
Timer전자적 논리회로에 의해 하드웨어적으로 구현되며 정확한 클럭과 시간을 얻을 수 있다과 시간을 얻을 수 있다.
CPU 프로그램과 연결되어 수백 us ~ 수백msec 처리 가능.
하드웨어적 고속 클럭 처리가 가능. 하드웨어적 처리에 의한 클럭.
UART(RS-232C)시리얼 신 위한 컴 터간 신 위해 컴 터 기시리얼 통신을 위한 모듈로 컴퓨터간 통신을 위해 컴퓨터 초기부터 구현되어온 방식이다.
모뎀과 연결되어 전화선을 통한 원거리 통신 가능.모뎀과 연결되어 전화선을 통한 원거리 통신 가능.
CPU의 프로그램을 전송하거나 실행되는 상황을 PC로 전송-debug 툴로도 사용.
CPU 시스템 구성 요소 I-2CPU 시스템 구성 요소 I 2
SPI장치(칩) 사이의 통신을 위해 시리얼 통신 방식.
데이터 신호와 함께 전송을 시점을 알리는 클럭이 전송데이터 신호와 함께 전송을 시점을 알리는 클럭이 전송.
UART 보다 고속 처리가 가능.
시스템내의 칩과 칩사이 , 모듈과 모듈사이의 통신에 사용시 템내의 칩과 칩사이 , 듈과 듈사이의 통신에 사용
USB시리얼 통신 중 가장 최근에 개발된 방식.
전송 속도가 높아 장치간의 많은 데이터 전송하는데 유리.
신 선과 함께 전원 공급되어 간단한 장치 개발에 유리신호선과 함께 전원도 공급되어 간단한 장치 개발에 유리.
CPU의 프로그램을 전송하거나 실행되는 상황을 PC로 전송-debug 툴로도 사용.debug 툴 사용.
CPU 시스템 구성 요소 IICPU 시스템 구성 요소 II
KeypadKeypad : 장치의 제어를 위한 가장 일반적인 입력 장치.
핸드폰의 번호 키. 컴퓨터의 키보드
LCDLCD : 시스템의 상태를 표시하는 출력 장치STN : 흑백의 무 칼라 표시 장치
문자형 : 주어진 폰트의 내용을 출력한다. ASCII 코드 출력.
그래픽형: 픽셀 단위의 그래픽 처리가 가능한 표시장치
TFT LCD : 칼라 표시를 지원하면 그래픽 처리가 가능TFT-LCD : 칼라 표시를 지원하면 그래픽 처리가 가능
LANLAN(Ethernet)근거리 통신망을 구성하여 컴퓨터간의 통신근거리 통신망을 구성하여 컴퓨터간의 통신
가장 대표적 통신망
CPU와 임베디드CPU와 임베디드
CPU와 보조 모듈의 물리적 구성CPU와 보조 모듈의 물리적 구성CPU의 종류에 따라 많은 차이가 있다.
CPU와 각 모듈을 하나의 칩으로 만든다.장치의 크기 및 이동성등을 고려하여 구성
장치의 특성에 맞는 구성 CPU을 찾아 개발.
( )MCU (Micro Controller Unit)CPU와 기본적인 모듈을 한 칩에 구현
보통 장치 제어용 CPU을 말함보통 장치 제어용 CPU을 말함.
임베디드MCU와 비슷한 개념으로 CPU와 모듈을 모아 하나의MCU와 비슷한 개념으로 CPU와 모듈을 모아 하나의칩으로 구현
최근 이 말은 OS와 결합되어 구성되는 의미가 강함최근 이 말은 OS와 결합되어 구성되는 의미가 강함Windows CE, linux 포팅
MCU와 임베디드MCU와 임베디드
CPU의 형상과 칩의 구성CPU의 형상과 칩의 구성
CPU의 실행 속도 향상
칩의 크기 및 파워 (휴대 장치, 장치 제어)
MCU와 임베디드MCU와 임베디드
80518051과과 MCUMCU 형상형상80518051과과 MCU MCU 형상형상
8051의 구성 - Intel8051의 구성 Intel
ROM
외부 인터럽트
Timer/Counter
RAM
ROM
프로그램Timer 0
Interrupt Control
Timer 1
CPU
4 I/O 포트Serial PortOSC
Bus Control
TxD RxDP0 P1 P2 P3
Address/Data
AT80C51 – www atmel comAT80C51 www.atmel.com
AT89C51 - ATMELAT89C51 ATMEL
MCU와 임베디드MCU와 임베디드
ARMARM과과 임베디드임베디드 형상형상ARMARM과과 임베디드임베디드 형상형상
ARM9 – 인텔 PXA255ARM9 인텔 PXA255
ARM7-삼성반도체 S3C44B0X
ARM9-삼성반도체 S3C2410ARM9 삼성반도체 S3C2410
CPU란 무엇인가?CPU란 무엇인가?
CPU란 논리 연산을 하는 전자 기계
프로그램에 동작하는 상태 머신프로그램에 동작하는 상태 머신
CPU 코어 제어 신호
PC:Program CounterSP:Stack Pointer
CPU 코어 데이터 흐름
메모리
명령 해석 및 명령동작 제어부
메모리제어
PC
SP
DPTR
A
Bdata bus
R0,R1, … R7
FLAG
. . .
ALU
사칙연산논리연산쉬프트쉬프트
CPU의 기본 구성CPU의 기본 구성
레지스터 : CPU가 데이터를 처리를 위한 저장장
ALU : 수학적 계산을 하는 부분사칙연산 논리연산 쉬프트 연산사칙연산, 논리연산, 쉬프트 연산
FLAG : ALU 계산 결과 flag 부분이 저장
명령 해석 및 명령동작 제어부 – 기계어 코드를 읽고 명령을 해석하여 실행
명령어 실행-Machine Cycle명령어 실행 Machine Cycle
한 명령이 실행되기 까지의 전체 시간한 명령이 실행되기 까지의 전체 시간Fetch -기계어 명령 읽기
Decode - 기계어 기능 해석
Execute - 실행
Store - 메모리에 저장
ADD A,R0
프로그램 작성프로그램 작성
C 또는 어셈블리(기계어)로 작성
int cval;
C 또는 어셈블리(기계어)로 작성
int cval;
void Calc() 74 00
기계어Calc:
MOV A,00H{
int val;
74 00
25 02
F5 A0
컴파일러 ADD A,02H
MOV 0A0,A
어셈블러
val = 0;val += 2;
F5 A0. . .
valcval = val;
} ROM에 넣기(시스템에 따라 ROM FLASH RAM)(시스템에 따라 ROM, FLASH, RAM)
CPU의 동작 – Step 1 프로그램CPU의 동작 Step 1 프로그램
주소 기계어 어셈블러주소 기계어 어셈블러ORG 0000H
0000 74 00 MOV A,00H0002 25 02 ADD A,02H0004 F5 A0 MOV 0A0,A0006 02 00 57 JMP MAIN
74
25
00
00
01
020006 02 00 57 JMP MAIN 0009 02 . . . . . .0203
A
Bdata bus
. . .
FLAG
. . .
ALU
Step 2 – fetch주소 기계어 어셈블러
기계어 명령 읽기주소 기계어 어셈블러
ORG 0000H0000 74 00 MOV A,00H0030 25 02 ADD A,02H0033 F5 A0 MOV 0A0,A
•처음 00번지 기계어를 읽는다. 명령어 4는 다음 데이터를
25
00
00
01
02
74
0000 PC
74
명령어 버퍼
명령어 해석
•명령어 74는 다음 데이터를A레지스터로 옮기라는 명령으로 규정 -> 해석
0203
A
Bdata bus
. . .
FLAG
. . .
ALU
Step 3주소 기계어 어셈블러ORG 0000H
0000 74 00 MOV A 00H
다음 데이터 읽기0000 74 00 MOV A,00H0002 25 02 ADD A,02H0004 F5 A0 MOV 0A0,A
74
25 •다음 1 번지의 데이터 00을
00
00
01
02
0001 PC
74
명령어 버퍼
명령어 해석
02
다음 1 번지의 데이터 00을읽어 A레지스터에 넣는다. •명령 한 개가 종료 됨.
03
Bdata bus
A 00
. . .
FLAG
. . .
ALU
Step 4f t h
주소 기계어 어셈블러ORG 0000H
0000 74 00 MOV A 00H
fetch•처음 02번지 기계어를 읽는
0000 74 00 MOV A,00H0030 25 02 ADD A,02H0033 F5 A0 MOV 0A0,A
명령어 버퍼
다. •명령어 25는 다음 데이터를A레지스터와 더하라는 명령으로 규정 -> 해석
00
00
01
02
74
25
0002 PC
25 명령어 해석 으로 규정 > 해석• A+02H -> A 준비0203
A = 0
Bdata bus
. . .
FLAG
. . .
ALU
Step 5ADD 실행
주소 기계어 어셈블러ORG 0000H
0000 74 00 MOV A 00H ADD 실행Operand 읽기
0000 74 00 MOV A,00H0030 25 02 ADD A,02H0033 F5 A0 MOV 0A0,A
명령어 버퍼 •처음 03번지 데이터를 읽어opreand 버퍼에 저장
00
00
01
02
74
25
0003 PC
25 명령어 해석 opreand 버퍼에 저장. 03 02
02 Oprand 버퍼
A
Bdata bus
. . .
FLAG
. . .
ALU
Step 6계산
주소 기계어 어셈블러ORG 0000H
0000 74 00 MOV A 00H
ADD 계산0000 74 00 MOV A,00H0030 25 02 ADD A,02H0033 F5 A0 MOV 0A0,A
명령어 버퍼
•처음 03번지 데이터를 읽어opreand 버퍼에 저장.
• A+02H -> A 실행ADD 명령 종료
00
00
01
02
74
25
0000 PC
25 명령어 해석 •ADD 명령 종료03 02
02 Oprand 버퍼
Bdata bus
A = 02
. . .. . .
FLAG 설정
SS=0=0
ALU
00 02
ADD 명령
Z=0Z=0C=0C=0V=0V=0
02
Step 7주소 기계어 어셈블러0000 74 00 MOV A 00H
fetch MOV0000 74 00 MOV A,00H0002 25 02 ADD A,02H0004 F5 A0 MOV 0A0,A
명령어 버퍼•다음 명령 MOV을 읽는다•MOV 명령 해석
00
00
01
02
74
25
0004 PC
F5 명령어 해석03 02
02 Oprand 버퍼
A0
04
05
F5
B
A = 02
xx
09
0A
xx
. . .
data bus
. . .
FLAG 설정
0B xx
ALU
Step 8주소 기계어 어셈블러0000 74 00 MOV A 00H
MOV의 주소값읽기0000 74 00 MOV A,00H0002 25 02 ADD A,02H0004 F5 A0 MOV 0A0,A
명령어 버퍼•MOV명령에서 메모리 주소값임을해석하고
00
00
01
02
74
25
0005 PC
F5 명령어 해석 •주소 값을 읽는다.03 02
A0 Oprand 버퍼04
05
F5
A0
B
A = 02
xx
09
0A
xx
. . .
data bus
. . .
FLAG 설정
0B xx
ALU
Step 9주소 기계어 어셈블러0000 74 00 MOV A 00H
A 레지스터 쓰기0000 74 00 MOV A,00H0002 25 02 ADD A,02H0004 F5 A0 MOV 0A0,A
ROM
명령어 버퍼•MOV명령에서 메모리 주소값임을해석하고
00
00
01
02
74
25
ROM
0006 PC
F5 명령어 해석 •주소 값을 읽는다.03 02
A0 Oprand 버퍼04
05
F5
A0
B09
0A
xx
02
A = 02
. . .
data
. . .
FLAG 설정
0B xx address bus
RAM data bus
ALU
02
CPU의 동작 순서표CPU의 동작 순서표
MOV A,00H ADD A,02H MOV 0A0,A
FETCH OPRAND FETCH OPRAND FETCH OPRAND
74 00 25 02 F5 A0 02
Read Read Read Read Read Read write엑세스
데이터 실행 실행 실행
00 01 02 03 04 05 A0주소
CPU 동작 속도 높이기CPU 동작 속도 높이기
MOV A 00H ADD A 02H MOV 0A0 A
74 00
MOV A,00H ADD A,02H
25 02 F5
MOV 0A0,A
A0
FETCH OPRAND FETCH OPRAND FETCH OPRAND
데이터 실행 실행74 00 25 02 F5 A0데이터 실행 실행
74 00 실행 XX XX파이프1
25 00 실행 XX XX파이프2
prefetch
25 00 실행 XX XX
F5 A0 실행 XX
파이프2
파이프3
02 F5 실행파이프4
(실제 8051은 이 개념이 적용 안된 가상의 개념 임, Intel 80486, ARM등에 적용)
ARM 프로그램 작성ARM 프로그램 작성
C 또는 어셈블리(기계어)로 작성
int cval;
C 또는 어셈블리(기계어)로 작성
int cval;
void Calc() 0200A0E3 0310A0E3
기계어 Calc:mov r0,#2
dd 0 0 #3{int val;
0310A0E3 14209FE5000082E5
컴파일러 add r0,r0,#3
ldr r2, .L3
[ ]
어셈블러
val = 2;val += 3;
str r0, [r2, #0]
. . .val 3cval = val;
}ROM에 넣기
.L3:
.word cvalROM에 넣기(시스템에 따라 ROM, FLASH, RAM)ISP, JTAG, …
ARM GAS pasm.s page 1
1 file "func c"
int ival;
int main()
{
i l 3 il 1 .file func.c
2 .text
3 .align 2
4 .global main
5 .type main, %function
ival = 3;
ival += 2;
}
compiler
6 main:
7 0000 0DC0A0E1 mov ip, sp
8 0004 00D82DE9 stmfd sp!, {fp, ip, lr, pc}
9 0008 04B04CE2 sub fp, ip, #4
10 000c 04D04DE2 sub sp, sp, #4
.file "func.c"
.text
.align 2
.global maintype main %function
이 코드가 메모리에전송되고CPU가 읽어 실행하는코드
p, p,
11 0010 FEFFFFEB bl func
12 0014 0200A0E3 mov r0, #2
13 0018 030080E2 add r0, r0, #3
14 001c 14209FE5 ldr r2, .L3
15 0020 000082E5 str r0 [r2 #0]
.type main, %functionmain:
mov ip, spstmfd sp!, {fp, ip, lr, pc}sub fp, ip, #4sub sp, sp, #4
코드
15 0020 000082E5 str r0, [r2, #0]
16
17 0024 0030A0E1 mov r3, r0
18
19 0028 10300BE5 str r3, [fp, #-16]
[ ]
bl funcmov r0, #2add r0, r0, #3ldr r2, .L3str r0, [r2, #0]
assembler
20 002c 10301BE5 ldr r3, [fp, #-16]
21 0030 0300A0E1 mov r0, r3
22 0034 08A89DE8 ldmfd sp, {r3, fp, sp, pc}
23 .size main, .-main
24 .align 2
ARM GAS pasm.s page 2
mov r3, r0
str r3, [fp, #-16]ldr r3, [fp, #-16]mov r0, r3ldmfd sp {r3 fp sp pc}
25 .global func
26 .type func, %function
27 .align 2
28 .L3:
29 0038 00000000 word ival
DEFINED SYMBOLS*ABS*:00000000 func.c
pasm.s:6 .text:00000000 mainpasm.s:7 .text:00000000 $apasm.s:29 .text:00000038 $d
ldmfd sp, {r3, fp, sp, pc}.size main, .-main.align 2.global func.type func, %function.align 2
29 0038 00000000 .word ival
30 .size func, .-func
31 .comm ival,4,4
32 .ident "GCC: (GNU) 3.4.5“
pasm.s 29 .text 00000038 $d*COM*:00000004 ival
UNDEFINED SYMBOLSfunc
.L3:.word ival.size func, .-func.comm ival,4,4.ident "GCC: (GNU) 3.4.5"
ARM 명령어의 특징ARM 명령어의 특징
32비트로 한 개의 기계어 명령 구성
Operand가 32비트의 명령어와 결합Operand가 32비트의 명령어와 결합CISC는 명령어 다음에 operand 존재
32비트 d 데이터를 취급하기 위해 한 개32비트 operand 데이터를 취급하기 위해 한 개또는 2개의 명령어가 필요
STACK 관련 명령어가 없고, 블록 명령으명령어가 , 록 명령로 대신
BL : 리턴 주소값 레지스터에 대피 R14(LR)BL : 리턴 주소값 레지스터에 대피 R14(LR)
이에 비해 CISC는 CALL실행 시 STACK 사용.
Step 0 – 프로그램 적체Step 0 프로그램 적체
주소 기계어 어셈블러memorymemoryB MUX
주소 기계어 어셈블러reset:
0000 0200A0E3 mov r0,#20004 0310A0E3 add r0,r0,#30008 14209FE5 ldr r2, .L3000C 000082E5 str r0 [r2 #0]
0200A0E3
14209FE5
0310A0E3
00
04
08
Bus MUX
000C 000082E5 str r0, [r2, #0]0010 02 . . . . . .000082E50c
R0
R1data bus
. . .
FLAG
. . .
MUL
ALU
BarrelBarrelShifterShifter
ALU
Step 1 – fetch : 기계어 명령 읽기Step 1 fetch : 기계어 명령 읽기•처음 00000000번지 기계어를 읽는다.
주소 기계어 어셈블러reset:
0000 0200A0E3 mov r0,#20004 0310A0E3 dd 0 0 #3
•명령어 E3A00002는 데이터를 R0레지스터로 옮기라는명령으로 규정 -> 해석
0004 0310A0E3 add r0,r0,#30008 14209FE5 ldr r2, .L3000C 000082E5 str r0, [r2, #0]
PC(R15)PC(R15)Addr bus14209FE5
0310A0E3
0200A0E3.00
.04
.08 000000000
E3A00002
명령어 버퍼 명령어 해석Addr.bus
000000002
BmuxBmux
data bus
000082E5.0C
R0
R1
data bus
. . .
FLAG
MUL
. . .
ALU
BarrelBarrelShifterShifter
Step 2 – 실행: 데이터를 R0에 넣기
• 명령중 데이터만을 레지스
주소 기계어 어셈블러reset:
0000 0200A0E3 mov r0,#20004 0310A0E3 dd 0 0 #3
명령중 데이터만을 레지스터에 넣는다. •명령 한 개가 종료 됨.
0004 0310A0E3 add r0,r0,#30008 14209FE5 ldr r2, .L3000C 000082E5 str r0, [r2, #0]
000000000 PCPCAddr bus14209FE5
0310A0E3
0200A0E3.00
.04
.08
AmuxAmux
E3A00002
명령어 버퍼 명령어 해석Addr.bus
000000002
BmuxBmux
data bus
000082E5.0C
R1
R0 00000002AmuxAmuxdata bus
. . .
FLAG
. . .
MUL
ALU
BarrelBarrelShifterShifter
Step 3 – fetch : 기계어 명령 읽기Step 3 fetch : 기계어 명령 읽기
•다음 00000004번지 기계어 읽기
주소 기계어 어셈블러reset:
0000 0200A0E3 mov r0,#20004 0310A0E3 add r0 r0 #3
•명령어 E3A01003 해석ALU을 통해 더하기 -> 해석
14209FE5
0310A0E3
.00
.04
.08
0200A0E3
0004 0310A0E3 add r0,r0,#30008 14209FE5 ldr r2, .L3000C 000082E5 str r0, [r2, #0]
PCPCAddr bus
000000004
data bus
000082E5.0CE3A01003
명령어 버퍼 명령어 해석Addr.bus
000000003
BmuxBmux
AmuxAmux
R0
R1
data bus AmuxAmux
. . .
FLAG
MUL
. . .
ALU
BarrelBarrelShifterShifter
Step 4 – add 실행p dd 실행주소 기계어 어셈블러
reset:0000 0200A0E3 mov r0,#20004 0310A0E3 dd 0 0 #3
•다음 00000004번지 기계어 읽기0004 0310A0E3 add r0,r0,#30008 14209FE5 ldr r2, .L3000C 000082E5 str r0, [r2, #0]
•명령어 0210A0E3해석ALU을 통해 더하기 -> 해석
14209FE5
0310A0E3
.00
.04
.08
0200A0E3
000000004 PCPCAddr bus
data bus
E3A01003
명령어 버퍼 명령어 해석000082E5.0C
Addr.bus
000000003AmuxAmux
BmuxBmux
R1
data bus
R0 00000002AmuxAmux
. . .
FLAG
MUL
. . .
N=0N=0
ALU
BarrelBarrelShifterShifter
000000003
000000002
N 0N 0Z=0Z=0C=0C=0V=0V=0
00000005
Step 4-1 add 실행 후 R0에 저장Step 4 1 add 실행 후 R0에 저장주소 기계어 어셈블러
reset:0000 0200A0E3 mov r0,#20004 0310A0E3 dd 0 0 #3
• 클럭의 에지에 맞추어 R0에 저장0004 0310A0E3 add r0,r0,#30008 14209FE5 ldr r2, .L3000C 000082E5 str r0, [r2, #0]
• 에지후, A-MUX disable 됨• ALU의 A 버스는 0xXXXXXXXX
14209FE5
0310A0E3
.00
.04
.08
0200A0E3
000000004 PCPCAddr bus
data bus
E3A01003
명령어 버퍼 명령어 해석000082E5.0C
Addr.bus
000000003AmuxAmux
BmuxBmux
R1
data bus
R0 00000005AmuxAmux
. . .
MUL
. . .
FLAG 0xxxxxxx
N=0N=0
ALU
BarrelBarrelShifterShifter 000000003000000002
N 0N 0Z=0Z=0C=0C=0V=0V=0
00000005
Step 5 – fetch : ldrStep 5 fetch : ldr
•다음 00000008번지 기계어 읽기
주소 기계어 어셈블러reset:
0000 0200A0E3 mov r0,#20004 0310A0E3 add r0 r0 #3
•명령어 E59F2014 해석.L3(00000004)을 R2에 저장
0310A0E3
.00
.04
.08
0200A0E3
0004 0310A0E3 add r0,r0,#30008 14209FE5 ldr r2, .L3000C 000082E5 str r0, [r2, #0]
PCPCAddr bus
00000000814209FE5
data bus
000082E5.0CE59F2014
명령어 버퍼 명령어 해석Addr.bus
000000054
BmuxBmux
AmuxAmux
14 09F 5
R0
R1
data bus AmuxAmux
R2
FLAG MUL
. . .
R2
. . .
ALU
BarrelBarrelShifterShifter
Step 6 – ldr 실행
int ival; -> 0x00000054에 할당
int *pival;
i l &i lStep 6 ldr 실행
• operand 값 .L3(00000054)을
주소 기계어 어셈블러reset:
0000 0200A0E3 mov r0,#20004 0310A0E3 add r0 r0 #3
pival = &ival;=> 컴파일러에 의해 R2로 지정
R2에 저장
0310A0E3
.00
.04
.08
0200A0E3
0004 0310A0E3 add r0,r0,#30008 14209FE5 ldr r2, .L3000C 000082E5 str r0, [r2, #0]
PCPCAddr bus
00000000814209FE5
data bus
000082E5.0CE59F2014
명령어 버퍼 명령어 해석Addr.bus
000000054
BmuxBmux
AmuxAmux
14 09F 5
R0
R1
data bus AmuxAmux
R2 00000054
FLAG MUL
. . .. . .
R2 00000054
ALU
BarrelBarrelShifterShifter
Step 7 – fetch : strStep 7 fetch : str
•Str fetch
주소 기계어 어셈블러reset:
0000 0200A0E3 mov r0,#20004 0310A0E3 add r0 r0 #3
•명령어 E5820000 해석R2의 주소에 R0의 값 저장
0310A0E3
.00
.04
.08
0200A0E3
0004 0310A0E3 add r0,r0,#30008 14209FE5 ldr r2, .L3000C 000082E5 str r0, [r2, #0]
PCPCAddr bus14209FE5
00000000C
data bus
000082E5.0CE5820000
명령어 버퍼 명령어 해석Addr.bus
000000000
BmuxBmux
AmuxAmux
14 09F 5
R0 00000005
R1
data bus AmuxAmux
R2 00000054
FLAG MUL
. . .
R2 00000054
. . .
ALU
BarrelBarrelShifterShifter
Step 8 – str 실행Step 8 str 실행
•Str fetch
주소 기계어 어셈블러reset:
0000 0200A0E3 mov r0,#20004 0310A0E3 add r0 r0 #3
•명령어 E5820000 해석R2의 주소에 R0의 값 저장
0310A0E3
.00
.04
.08
0200A0E3
0004 0310A0E3 add r0,r0,#30008 14209FE5 ldr r2, .L3000C 000082E5 str r0, [r2, #0]
PCPCAddr bus14209FE5
00000000C
data bus
000082E5.0CE5820000
명령어 버퍼 명령어 해석Addr.bus
00000000
BmuxBmux
AmuxAmux
14 09F 5
R1
AmuxAmux
R2 00000054
R0 00000005
00000005
.50
.54
xxxxxxxx
address bus
FLAG MUL
. . .. . .
R2 0000005400000005.54
.58
.5C
xxxxxxxx
xxxxxxxx
ALU
BarrelBarrelShifterShifter
00000054
00000005
ARM 동작 속도 높이기
주소 기계어 어셈블러reset:
0000 0200A0E3 mov r0,#20004 0310A0E3 add r0,r0,#30008 14209FE5 ldr r2, .L3ARM 동작 속도 높이기
MOV A 00H ADD A 02H MOV 0A0 A
000C 000082E5 str r0, [r2, #0]
74 00
MOV A,00H ADD A,02H
25 02 F5
MOV 0A0,A
A0
FETCH OPRAND FETCH OPRAND FETCH OPRAND
데이터 실행 실행74 00 25 02 F5 A0데이터 실행 실행
mov r0,#2
E3A00002 decode XX파이프1
E3A01003 실행 XX XX파이프2
E3A00005
add r0,r0,#3
실행
d dE3A01003 실행 XX XX
E59F2014 실행 XX
파이프2
파이프3
prefetchldr r2,.L3
decode
decode
E5820000 주소계산파이프4
str r0,[r2,#0]
decode 전송
* 8051없는 가상의 개념 (80486, ARM등에 존재)
CPUCPU
장치장치 개발개발장치장치 개발개발
장치 개발 과정장치 개발 과정
목적이 정해지면 목적에 맞는 칩을 선정목적이 정해지면 목적에 맞는 칩을 선정
회로 설계회 계
PCB 제작
CPU 개발 환경 구축CPU 개발 환경 구축CPU에 맞는 환경이 다름
프로그램 작성
프로그램 실행과 디버깅 반복램 실행과 디버깅 반복
생산 및 판매
CPU와 프로그램CPU와 프로그램
목적이 맞는 프로그램은 시스템 특성에따라 C와 어셈블러로 작성따라 와 어 러 작성
LIBCompiler
개발툴 만드는 회사가 작성printf(), strcpy(), sin(), …
C
LIB(Library)
어셈블리 코드
OBJ(Object)
EXE, HEXcode+
어셈블리 코드
Linker
A blAssembler
프로그램과 메모리 사용프로그램과 메모리 사용
기계어 코드(ROM/RAM)명령이 처리위한 기계어 코드
int a;
명령이 처리위한 기계어영역
변수 데이터 (RAM)
int main()
{ 변수 데이터 (RAM)명령이 실행될 때 데이터가저장되는 공간
{
a = 10;
a++; 저장되는 공간
고정 데이터 (ROM/RAM)
a ;
printf(“a=%d”,a)
return 0;명령이 실행될 때 변하지 않는 변수 공간
return 0;
}
컴파일러와 개발 툴컴파일러와 개발 툴
컴파일러는 각 CPU에 따라 다르게 작성된다.CPU의 종류가 다르면 다른 컴파일러가 필요하다.
컴파일러는 구입하는 것이 일반적이다.
같은 CPU라도 컴파일러 판매회사는 다름
8051 : IAR, Keil
어셈블러는 주로 CPU 생산 업체에서 공급한다.C를 사용하지 않는다면 컴파일러 구입없이 간단히 개발할 수 있다.
메모리 프로그램 전송 방식메모리 프로그램 전송 방식
작성된 프로그램이 실행하기 위해 최종에는 메모리에 전송이 필요 (CPU의 동작 없이)
CPU와 메모리 존재의 형태에 따라 전송 방식을 다르다.
코드 영역이 OM일 경우코드 영역이 EPROM일 경우
EPROM을 롬라이터를 사용하여 쓴다.
외부 FLASH을 사용 일 경우외부 FLASH을 사용 일 경우
CPU가 JTAG을 지원할 경우는 JTAG 라이터로 전송
내부 FLASH을 사용 할 경우내부 FLASH을 사용 할 경우
CPU에서 라이터(ISP또는 JTAG)을 사용하여 전송
코드 영역이 EPROM코드 영역이 EPROM
EPROM이 CPU 내부에 있는 경우도 마찬가지가지
롬라이터PC
EPROM ROMWriter소켓
8031
RAM
UARTUSB
Writerprogram
소켓
RAM
롬라이터와 EPROM 지우기롬라이터와 EPROM 지우기
타이머
•자외선 형광등•타이머에 의해 자동 꺼짐
내부 FLASH을 사용(AT89LP2052)내부 FLASH을 사용(AT89LP2052)
EPROM이 CPU 내부에 있는 경우도 마찬가지가지
PC
LPT
버퍼
ISPWriter
programprogram
AT89LP2052AT89LP2052
PC
LPTISPISP
Writer
외부 FLASH을 사용외부 FLASH을 사용
JTAG 임베디드 CPU의 경우가 대표적JTAG-임베디드 CPU의 경우가 대표적
PC
ARM
JTAG 케이블
LPT버퍼JTAG
Writerprogram
JTAG
ARMcore
TDI
TDO
TMS
TCKprogram
FLASH
TCK
TRST
74HC541
FLASHcontrol
FLASH
프로그램 디버깅 체계 1프로그램 디버깅 체계 1
에뮬레이터 장비에뮬레이터 장비MCU 계열은 메모리가 한 칩에 있어 메모리 용량 때문에 코드를 RAM에서 실행 시킬 수 없다
CPU을 대신하여 프로그램을 대신할 수 있는 장비가 필요
장비의 커넥터를 PCB에 연결하여 CPU 대신 동작 시켜 회로와프로그램을 확인 한다프로그램을 확인 한다.
장비 값이 비싸나 디버깅이 쉬워 개발 기간 단축
전자적으로 쓸 수 있는 FLASH의 사용으로 직접 프로그램을 전송
특별할 장비가 필요 없어 에뮬레이터 장비 구입비 없음특별할 장비가 필요 없어 에뮬레이터 장비 구입비 없음
간단한 전송 장치를 써고 디버깅이 불편하다.
UART을 통해 실행 상황을 PC로 전송하여 디버깅할 수 있다.
프로그램 디버깅 체계 2프로그램 디버깅 체계 2
ISP로 내부 FLASH 사용할 경우ISP로 내부 FLASH 사용할 경우RAM의 용량이 제한되어 있어 프로그램을 RAM에 넣을 수 없다을 수 없다.
매번 ISP로 프로그램을 전송 한다.
외부에 메모리를 추가하여 RAM에 프로그램을외부에 메모리를 추가하여 RAM에 프로그램을넣을 수 있는 경우
프로그램을 매번 RAM 넣고 실행 후 최종적으로프로그램을 매번 RAM 넣고 실행 후 최종적으로ROM/FLASH로 옮겨 실행 한다.
이때 전송은 ROM 프로그램의 실행을 통해 PC와 통신하여 RAM으로 프로그램을 전송 한다하여 RAM으로 프로그램을 전송 한다.
통신은 UART(RS-232C), USB, ETHERNET 사용할 수있다.있다.
에뮬레이터 장비 사용에뮬레이터 장비 사용
에뮬레이션 방식에뮬레이션 방식
PCB
목적 프로그램 작성
목적 프로그램 에뮬레이터에 전송
8052커넥터
에뮬레이터
목적 프로그램 에뮬레이터에 전송
실행 후 오류 확인
PC
오류?error
PC
실제 8052 부착하고 프로그램 전송
IDE 툴
No error
8031의 디버깅 체계(외부 메모리)8031의 디버깅 체계(외부 메모리)
8031
EPROMEPROM에 PC와 통신하여
코드를 RAM 복사할 수 있는 프로그램 작성 후 굽는다
목적 프로그램 작성
모니터
RAMSerial목적 프로그램 RAM에 전송
PC
실행 후 오류 확인
오류?errorPC 오류?
코드 전송 용프로그램
error
No error
최종 코드를 ROM에 전송 후 실행
AT89LP2052 ISP FLASHAT89LP2052 ISP FLASH
AT89LP2052
8051목적 프로그램 작성
목적 프로그램 FLASH에 ISP로 전송FLASH
8051core
ISP
목적 프로그램 FLASH에 ISP로 전송
실행 후 오류 확인
오류?ISP writer error
PC
추가 전송 없이 사용
No error
ARM의 디버깅 체계(외부 메모리)ARM의 디버깅 체계(외부 메모리)
CPU 개입 없음초기 FLASH에 쓰기
FLASH
FLASH에 PC와 통신하여코드를 RAM 복사할 수 있는 프로그램 작성 후 JTAG로 전송
PC 초기 FLASH에 쓰기
ARM
목적 프로그램 작성bootloaderJTAG
ARM
RAMSerialUSB
목적 프로그램 RAM에 전송Bootloader에 의해RAM에 복사됨
실행 후 오류 확인
오류?errorCPU의 프로그램에
PC 오류?
코드 전송 용프로그램
error
No error
의해 통신 및 쓰기
최종 코드를 FLASH에 전송 후 실행