cpucpu의의이해이해 - egloospds17.egloos.com/pds/200908/31/64/1.cpu_intro.pdfadd실행...

77
CPU CPU의 이해 이해 CPU란 무엇인가? dolicom@naver com dolicom@naver.com http://blog.naver.com/dolicom

Upload: others

Post on 28-Dec-2019

0 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: CPUCPU의의이해이해 - Egloospds17.egloos.com/pds/200908/31/64/1.CPU_Intro.pdfADD실행 주소기계어 어셈블러 ORG 0000H 00007400 MOV A00H Operand 읽기 0000 74 00 MOV A,00H

CPUCPU의의 이해이해

CPU란 무엇인가?

dolicom@naver [email protected]://blog.naver.com/dolicom

Page 2: CPUCPU의의이해이해 - Egloospds17.egloos.com/pds/200908/31/64/1.CPU_Intro.pdfADD실행 주소기계어 어셈블러 ORG 0000H 00007400 MOV A00H Operand 읽기 0000 74 00 MOV A,00H

CPU란 무엇인가?CPU란 무엇인가?

프로그램에 따라 실행되는 상태 제어기

이미 작성된 프로그램에 의해 작동이미 작성된 프로그램에 의해 작동

전자 장치 제어의 두뇌전자 장치 제어의 두뇌

전자의 디지털 기술을 이용

수학적 처리를 기반으로 작동(2진수)

IT 및 정보처리의 핵심IT 및 정보처리의 핵심

Page 3: CPUCPU의의이해이해 - Egloospds17.egloos.com/pds/200908/31/64/1.CPU_Intro.pdfADD실행 주소기계어 어셈블러 ORG 0000H 00007400 MOV A00H Operand 읽기 0000 74 00 MOV A,00H

인텔 CPU와 무어(Moore)의 법칙인텔 CPU와 무어(Moore)의 법칙

Page 4: CPUCPU의의이해이해 - Egloospds17.egloos.com/pds/200908/31/64/1.CPU_Intro.pdfADD실행 주소기계어 어셈블러 ORG 0000H 00007400 MOV A00H Operand 읽기 0000 74 00 MOV A,00H

CPU의 진화-숫자의 표현CPU의 진화 숫자의 표현

4비트 – 4040 간단한 장치 제어(전화기,…)

8비트 – 8080, 8051

16비트 – 8086, 80286(PC)

32비트 - 8038632비트 - 80386

64비트 – 최근 64비트

DSP CPU – 고속 수학계산을 필요한 장치TI사의 TMS32시리즈

Floating-Point (실수자료형 레지스터 & ALU)

Page 5: CPUCPU의의이해이해 - Egloospds17.egloos.com/pds/200908/31/64/1.CPU_Intro.pdfADD실행 주소기계어 어셈블러 ORG 0000H 00007400 MOV A00H Operand 읽기 0000 74 00 MOV A,00H

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비트

Page 6: CPUCPU의의이해이해 - Egloospds17.egloos.com/pds/200908/31/64/1.CPU_Intro.pdfADD실행 주소기계어 어셈블러 ORG 0000H 00007400 MOV A00H Operand 읽기 0000 74 00 MOV A,00H

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*

Page 7: CPUCPU의의이해이해 - Egloospds17.egloos.com/pds/200908/31/64/1.CPU_Intro.pdfADD실행 주소기계어 어셈블러 ORG 0000H 00007400 MOV A00H Operand 읽기 0000 74 00 MOV A,00H

Intel Pentium42005년

1.69억TR3.73GHz

90nm공정2MB SRAM2MB SRAM

Page 8: CPUCPU의의이해이해 - Egloospds17.egloos.com/pds/200908/31/64/1.CPU_Intro.pdfADD실행 주소기계어 어셈블러 ORG 0000H 00007400 MOV A00H Operand 읽기 0000 74 00 MOV A,00H

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

Page 9: CPUCPU의의이해이해 - Egloospds17.egloos.com/pds/200908/31/64/1.CPU_Intro.pdfADD실행 주소기계어 어셈블러 ORG 0000H 00007400 MOV A00H Operand 읽기 0000 74 00 MOV A,00H

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

Page 10: CPUCPU의의이해이해 - Egloospds17.egloos.com/pds/200908/31/64/1.CPU_Intro.pdfADD실행 주소기계어 어셈블러 ORG 0000H 00007400 MOV A00H Operand 읽기 0000 74 00 MOV A,00H

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)

Page 11: CPUCPU의의이해이해 - Egloospds17.egloos.com/pds/200908/31/64/1.CPU_Intro.pdfADD실행 주소기계어 어셈블러 ORG 0000H 00007400 MOV A00H Operand 읽기 0000 74 00 MOV A,00H

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개의 경계가 불분명 해 짐

Page 12: CPUCPU의의이해이해 - Egloospds17.egloos.com/pds/200908/31/64/1.CPU_Intro.pdfADD실행 주소기계어 어셈블러 ORG 0000H 00007400 MOV A00H Operand 읽기 0000 74 00 MOV A,00H

CPU의 동작 요소CPU의 동작 요소

CPU

메모리 (ROM,RAM)메 리 ( , )

특정 목적 지원 프로그램

IO 장치 (입출력 장치 통신 장치)IO 장치 (입출력 장치, 통신 장치)KEYPAD

LCD

Ethernet (LAN)

USB

기타

Page 13: CPUCPU의의이해이해 - Egloospds17.egloos.com/pds/200908/31/64/1.CPU_Intro.pdfADD실행 주소기계어 어셈블러 ORG 0000H 00007400 MOV A00H Operand 읽기 0000 74 00 MOV A,00H

CPU 시스템 구조CPU 시스템 구조

8051PC

TimerTimer

SerialSerial

8051 core8051 core

• 레지스터• ALU

FLAG

ROM/FLASHROM/FLASH

UART

PC장치

SerialSerial • FLAGRAMRAM통신

IO IO 모듈모듈

• 키패드

• CPU에서 동작하는 모든 프로그램은 반드시 메모리에 적제되어 있키패

• LCD• USB

어야 한다. ROM이나 RAM 중 어느한곳에 있어도 상관 없다.

Page 14: CPUCPU의의이해이해 - Egloospds17.egloos.com/pds/200908/31/64/1.CPU_Intro.pdfADD실행 주소기계어 어셈블러 ORG 0000H 00007400 MOV A00H Operand 읽기 0000 74 00 MOV A,00H

메모리 종류메모리 종류

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) – 바이러스

Page 15: CPUCPU의의이해이해 - Egloospds17.egloos.com/pds/200908/31/64/1.CPU_Intro.pdfADD실행 주소기계어 어셈블러 ORG 0000H 00007400 MOV A00H Operand 읽기 0000 74 00 MOV A,00H

EPROMEPROM

소켓을 이용 장착

데이터를 삭제할 때자외선을 이용한다

데이터를 쓸 때는 별도의 장치를 이용한다자외선을 이용한다.

자외선이 통과하도록창이 열려 있다.

의 장치를 이용한다.따라서 소켓을 쓰는 것이 일반적

-데이터가 지워지면모두 0xFF 됨

Page 16: CPUCPU의의이해이해 - Egloospds17.egloos.com/pds/200908/31/64/1.CPU_Intro.pdfADD실행 주소기계어 어셈블러 ORG 0000H 00007400 MOV A00H Operand 읽기 0000 74 00 MOV A,00H

DRAM 메모리 종류DRAM 메모리 종류

DRAM의 분류: SRAM보다 구조가 단순하고 고밀도, 가격 저렴.

DRAM : 초기의 메모리.

SDRAMSDRAMSDRAM :DRAM보다 엑세스 속도 증가를 위해 클럭을 사용하여 읽고 쓰는 시간을 동기화 한다.두클

진화

럭을 사용하여 읽 는 시간을 동기화 한다.두클럭에 데이터를 한번 억세스 한다.

DDR SDRAM : SDRAM 보다 속도를 높이기 위해한 클럭 동안 엑세스 한다.

DDR2 SDRAM : 클럭의 속도를 2배 높여 억세스한다한다.

Page 17: CPUCPU의의이해이해 - Egloospds17.egloos.com/pds/200908/31/64/1.CPU_Intro.pdfADD실행 주소기계어 어셈블러 ORG 0000H 00007400 MOV A00H Operand 읽기 0000 74 00 MOV A,00H

CPU 시스템 구성 요소 I-ICPU 시스템 구성 요소 I I

Timer전자적 논리회로에 의해 하드웨어적으로 구현되며 정확한 클럭과 시간을 얻을 수 있다과 시간을 얻을 수 있다.

CPU 프로그램과 연결되어 수백 us ~ 수백msec 처리 가능.

하드웨어적 고속 클럭 처리가 가능. 하드웨어적 처리에 의한 클럭.

UART(RS-232C)시리얼 신 위한 컴 터간 신 위해 컴 터 기시리얼 통신을 위한 모듈로 컴퓨터간 통신을 위해 컴퓨터 초기부터 구현되어온 방식이다.

모뎀과 연결되어 전화선을 통한 원거리 통신 가능.모뎀과 연결되어 전화선을 통한 원거리 통신 가능.

CPU의 프로그램을 전송하거나 실행되는 상황을 PC로 전송-debug 툴로도 사용.

Page 18: CPUCPU의의이해이해 - Egloospds17.egloos.com/pds/200908/31/64/1.CPU_Intro.pdfADD실행 주소기계어 어셈블러 ORG 0000H 00007400 MOV A00H Operand 읽기 0000 74 00 MOV A,00H

CPU 시스템 구성 요소 I-2CPU 시스템 구성 요소 I 2

SPI장치(칩) 사이의 통신을 위해 시리얼 통신 방식.

데이터 신호와 함께 전송을 시점을 알리는 클럭이 전송데이터 신호와 함께 전송을 시점을 알리는 클럭이 전송.

UART 보다 고속 처리가 가능.

시스템내의 칩과 칩사이 , 모듈과 모듈사이의 통신에 사용시 템내의 칩과 칩사이 , 듈과 듈사이의 통신에 사용

USB시리얼 통신 중 가장 최근에 개발된 방식.

전송 속도가 높아 장치간의 많은 데이터 전송하는데 유리.

신 선과 함께 전원 공급되어 간단한 장치 개발에 유리신호선과 함께 전원도 공급되어 간단한 장치 개발에 유리.

CPU의 프로그램을 전송하거나 실행되는 상황을 PC로 전송-debug 툴로도 사용.debug 툴 사용.

Page 19: CPUCPU의의이해이해 - Egloospds17.egloos.com/pds/200908/31/64/1.CPU_Intro.pdfADD실행 주소기계어 어셈블러 ORG 0000H 00007400 MOV A00H Operand 읽기 0000 74 00 MOV A,00H

CPU 시스템 구성 요소 IICPU 시스템 구성 요소 II

KeypadKeypad : 장치의 제어를 위한 가장 일반적인 입력 장치.

핸드폰의 번호 키. 컴퓨터의 키보드

LCDLCD : 시스템의 상태를 표시하는 출력 장치STN : 흑백의 무 칼라 표시 장치

문자형 : 주어진 폰트의 내용을 출력한다. ASCII 코드 출력.

그래픽형: 픽셀 단위의 그래픽 처리가 가능한 표시장치

TFT LCD : 칼라 표시를 지원하면 그래픽 처리가 가능TFT-LCD : 칼라 표시를 지원하면 그래픽 처리가 가능

LANLAN(Ethernet)근거리 통신망을 구성하여 컴퓨터간의 통신근거리 통신망을 구성하여 컴퓨터간의 통신

가장 대표적 통신망

Page 20: CPUCPU의의이해이해 - Egloospds17.egloos.com/pds/200908/31/64/1.CPU_Intro.pdfADD실행 주소기계어 어셈블러 ORG 0000H 00007400 MOV A00H Operand 읽기 0000 74 00 MOV A,00H

CPU와 임베디드CPU와 임베디드

CPU와 보조 모듈의 물리적 구성CPU와 보조 모듈의 물리적 구성CPU의 종류에 따라 많은 차이가 있다.

CPU와 각 모듈을 하나의 칩으로 만든다.장치의 크기 및 이동성등을 고려하여 구성

장치의 특성에 맞는 구성 CPU을 찾아 개발.

( )MCU (Micro Controller Unit)CPU와 기본적인 모듈을 한 칩에 구현

보통 장치 제어용 CPU을 말함보통 장치 제어용 CPU을 말함.

임베디드MCU와 비슷한 개념으로 CPU와 모듈을 모아 하나의MCU와 비슷한 개념으로 CPU와 모듈을 모아 하나의칩으로 구현

최근 이 말은 OS와 결합되어 구성되는 의미가 강함최근 이 말은 OS와 결합되어 구성되는 의미가 강함Windows CE, linux 포팅

Page 21: CPUCPU의의이해이해 - Egloospds17.egloos.com/pds/200908/31/64/1.CPU_Intro.pdfADD실행 주소기계어 어셈블러 ORG 0000H 00007400 MOV A00H Operand 읽기 0000 74 00 MOV A,00H

MCU와 임베디드MCU와 임베디드

CPU의 형상과 칩의 구성CPU의 형상과 칩의 구성

CPU의 실행 속도 향상

칩의 크기 및 파워 (휴대 장치, 장치 제어)

Page 22: CPUCPU의의이해이해 - Egloospds17.egloos.com/pds/200908/31/64/1.CPU_Intro.pdfADD실행 주소기계어 어셈블러 ORG 0000H 00007400 MOV A00H Operand 읽기 0000 74 00 MOV A,00H

MCU와 임베디드MCU와 임베디드

80518051과과 MCUMCU 형상형상80518051과과 MCU MCU 형상형상

Page 23: CPUCPU의의이해이해 - Egloospds17.egloos.com/pds/200908/31/64/1.CPU_Intro.pdfADD실행 주소기계어 어셈블러 ORG 0000H 00007400 MOV A00H Operand 읽기 0000 74 00 MOV A,00H

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

Page 24: CPUCPU의의이해이해 - Egloospds17.egloos.com/pds/200908/31/64/1.CPU_Intro.pdfADD실행 주소기계어 어셈블러 ORG 0000H 00007400 MOV A00H Operand 읽기 0000 74 00 MOV A,00H

AT80C51 – www atmel comAT80C51 www.atmel.com

Page 25: CPUCPU의의이해이해 - Egloospds17.egloos.com/pds/200908/31/64/1.CPU_Intro.pdfADD실행 주소기계어 어셈블러 ORG 0000H 00007400 MOV A00H Operand 읽기 0000 74 00 MOV A,00H

AT89C51 - ATMELAT89C51 ATMEL

Page 26: CPUCPU의의이해이해 - Egloospds17.egloos.com/pds/200908/31/64/1.CPU_Intro.pdfADD실행 주소기계어 어셈블러 ORG 0000H 00007400 MOV A00H Operand 읽기 0000 74 00 MOV A,00H

MCU와 임베디드MCU와 임베디드

ARMARM과과 임베디드임베디드 형상형상ARMARM과과 임베디드임베디드 형상형상

Page 27: CPUCPU의의이해이해 - Egloospds17.egloos.com/pds/200908/31/64/1.CPU_Intro.pdfADD실행 주소기계어 어셈블러 ORG 0000H 00007400 MOV A00H Operand 읽기 0000 74 00 MOV A,00H

ARM9 – 인텔 PXA255ARM9 인텔 PXA255

Page 28: CPUCPU의의이해이해 - Egloospds17.egloos.com/pds/200908/31/64/1.CPU_Intro.pdfADD실행 주소기계어 어셈블러 ORG 0000H 00007400 MOV A00H Operand 읽기 0000 74 00 MOV A,00H

ARM7-삼성반도체 S3C44B0X

Page 29: CPUCPU의의이해이해 - Egloospds17.egloos.com/pds/200908/31/64/1.CPU_Intro.pdfADD실행 주소기계어 어셈블러 ORG 0000H 00007400 MOV A00H Operand 읽기 0000 74 00 MOV A,00H

ARM9-삼성반도체 S3C2410ARM9 삼성반도체 S3C2410

Page 30: CPUCPU의의이해이해 - Egloospds17.egloos.com/pds/200908/31/64/1.CPU_Intro.pdfADD실행 주소기계어 어셈블러 ORG 0000H 00007400 MOV A00H Operand 읽기 0000 74 00 MOV A,00H

CPU란 무엇인가?CPU란 무엇인가?

CPU란 논리 연산을 하는 전자 기계

프로그램에 동작하는 상태 머신프로그램에 동작하는 상태 머신

Page 31: CPUCPU의의이해이해 - Egloospds17.egloos.com/pds/200908/31/64/1.CPU_Intro.pdfADD실행 주소기계어 어셈블러 ORG 0000H 00007400 MOV A00H Operand 읽기 0000 74 00 MOV A,00H

CPU 코어 제어 신호

PC:Program CounterSP:Stack Pointer

CPU 코어 데이터 흐름

메모리

명령 해석 및 명령동작 제어부

메모리제어

PC

SP

DPTR

A

Bdata bus

R0,R1, … R7

FLAG

. . .

ALU

사칙연산논리연산쉬프트쉬프트

Page 32: CPUCPU의의이해이해 - Egloospds17.egloos.com/pds/200908/31/64/1.CPU_Intro.pdfADD실행 주소기계어 어셈블러 ORG 0000H 00007400 MOV A00H Operand 읽기 0000 74 00 MOV A,00H

CPU의 기본 구성CPU의 기본 구성

레지스터 : CPU가 데이터를 처리를 위한 저장장

ALU : 수학적 계산을 하는 부분사칙연산 논리연산 쉬프트 연산사칙연산, 논리연산, 쉬프트 연산

FLAG : ALU 계산 결과 flag 부분이 저장

명령 해석 및 명령동작 제어부 – 기계어 코드를 읽고 명령을 해석하여 실행

Page 33: CPUCPU의의이해이해 - Egloospds17.egloos.com/pds/200908/31/64/1.CPU_Intro.pdfADD실행 주소기계어 어셈블러 ORG 0000H 00007400 MOV A00H Operand 읽기 0000 74 00 MOV A,00H

명령어 실행-Machine Cycle명령어 실행 Machine Cycle

한 명령이 실행되기 까지의 전체 시간한 명령이 실행되기 까지의 전체 시간Fetch -기계어 명령 읽기

Decode - 기계어 기능 해석

Execute - 실행

Store - 메모리에 저장

ADD A,R0

Page 34: CPUCPU의의이해이해 - Egloospds17.egloos.com/pds/200908/31/64/1.CPU_Intro.pdfADD실행 주소기계어 어셈블러 ORG 0000H 00007400 MOV A00H Operand 읽기 0000 74 00 MOV A,00H

프로그램 작성프로그램 작성

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)

Page 35: CPUCPU의의이해이해 - Egloospds17.egloos.com/pds/200908/31/64/1.CPU_Intro.pdfADD실행 주소기계어 어셈블러 ORG 0000H 00007400 MOV A00H Operand 읽기 0000 74 00 MOV A,00H

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

Page 36: CPUCPU의의이해이해 - Egloospds17.egloos.com/pds/200908/31/64/1.CPU_Intro.pdfADD실행 주소기계어 어셈블러 ORG 0000H 00007400 MOV A00H Operand 읽기 0000 74 00 MOV A,00H

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

Page 37: CPUCPU의의이해이해 - Egloospds17.egloos.com/pds/200908/31/64/1.CPU_Intro.pdfADD실행 주소기계어 어셈블러 ORG 0000H 00007400 MOV A00H Operand 읽기 0000 74 00 MOV A,00H

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

Page 38: CPUCPU의의이해이해 - Egloospds17.egloos.com/pds/200908/31/64/1.CPU_Intro.pdfADD실행 주소기계어 어셈블러 ORG 0000H 00007400 MOV A00H Operand 읽기 0000 74 00 MOV A,00H

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

Page 39: CPUCPU의의이해이해 - Egloospds17.egloos.com/pds/200908/31/64/1.CPU_Intro.pdfADD실행 주소기계어 어셈블러 ORG 0000H 00007400 MOV A00H Operand 읽기 0000 74 00 MOV A,00H

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

Page 40: CPUCPU의의이해이해 - Egloospds17.egloos.com/pds/200908/31/64/1.CPU_Intro.pdfADD실행 주소기계어 어셈블러 ORG 0000H 00007400 MOV A00H Operand 읽기 0000 74 00 MOV A,00H

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

Page 41: CPUCPU의의이해이해 - Egloospds17.egloos.com/pds/200908/31/64/1.CPU_Intro.pdfADD실행 주소기계어 어셈블러 ORG 0000H 00007400 MOV A00H Operand 읽기 0000 74 00 MOV A,00H

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

Page 42: CPUCPU의의이해이해 - Egloospds17.egloos.com/pds/200908/31/64/1.CPU_Intro.pdfADD실행 주소기계어 어셈블러 ORG 0000H 00007400 MOV A00H Operand 읽기 0000 74 00 MOV A,00H

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

Page 43: CPUCPU의의이해이해 - Egloospds17.egloos.com/pds/200908/31/64/1.CPU_Intro.pdfADD실행 주소기계어 어셈블러 ORG 0000H 00007400 MOV A00H Operand 읽기 0000 74 00 MOV A,00H

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

Page 44: CPUCPU의의이해이해 - Egloospds17.egloos.com/pds/200908/31/64/1.CPU_Intro.pdfADD실행 주소기계어 어셈블러 ORG 0000H 00007400 MOV A00H Operand 읽기 0000 74 00 MOV A,00H

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주소

Page 45: CPUCPU의의이해이해 - Egloospds17.egloos.com/pds/200908/31/64/1.CPU_Intro.pdfADD실행 주소기계어 어셈블러 ORG 0000H 00007400 MOV A00H Operand 읽기 0000 74 00 MOV A,00H

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등에 적용)

Page 46: CPUCPU의의이해이해 - Egloospds17.egloos.com/pds/200908/31/64/1.CPU_Intro.pdfADD실행 주소기계어 어셈블러 ORG 0000H 00007400 MOV A00H Operand 읽기 0000 74 00 MOV A,00H

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, …

Page 47: CPUCPU의의이해이해 - Egloospds17.egloos.com/pds/200908/31/64/1.CPU_Intro.pdfADD실행 주소기계어 어셈블러 ORG 0000H 00007400 MOV A00H Operand 읽기 0000 74 00 MOV A,00H

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"

Page 48: CPUCPU의의이해이해 - Egloospds17.egloos.com/pds/200908/31/64/1.CPU_Intro.pdfADD실행 주소기계어 어셈블러 ORG 0000H 00007400 MOV A00H Operand 읽기 0000 74 00 MOV A,00H

ARM 명령어의 특징ARM 명령어의 특징

32비트로 한 개의 기계어 명령 구성

Operand가 32비트의 명령어와 결합Operand가 32비트의 명령어와 결합CISC는 명령어 다음에 operand 존재

32비트 d 데이터를 취급하기 위해 한 개32비트 operand 데이터를 취급하기 위해 한 개또는 2개의 명령어가 필요

STACK 관련 명령어가 없고, 블록 명령으명령어가 , 록 명령로 대신

BL : 리턴 주소값 레지스터에 대피 R14(LR)BL : 리턴 주소값 레지스터에 대피 R14(LR)

이에 비해 CISC는 CALL실행 시 STACK 사용.

Page 49: CPUCPU의의이해이해 - Egloospds17.egloos.com/pds/200908/31/64/1.CPU_Intro.pdfADD실행 주소기계어 어셈블러 ORG 0000H 00007400 MOV A00H Operand 읽기 0000 74 00 MOV A,00H

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

Page 50: CPUCPU의의이해이해 - Egloospds17.egloos.com/pds/200908/31/64/1.CPU_Intro.pdfADD실행 주소기계어 어셈블러 ORG 0000H 00007400 MOV A00H Operand 읽기 0000 74 00 MOV A,00H

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

Page 51: CPUCPU의의이해이해 - Egloospds17.egloos.com/pds/200908/31/64/1.CPU_Intro.pdfADD실행 주소기계어 어셈블러 ORG 0000H 00007400 MOV A00H Operand 읽기 0000 74 00 MOV A,00H

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

Page 52: CPUCPU의의이해이해 - Egloospds17.egloos.com/pds/200908/31/64/1.CPU_Intro.pdfADD실행 주소기계어 어셈블러 ORG 0000H 00007400 MOV A00H Operand 읽기 0000 74 00 MOV A,00H

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

Page 53: CPUCPU의의이해이해 - Egloospds17.egloos.com/pds/200908/31/64/1.CPU_Intro.pdfADD실행 주소기계어 어셈블러 ORG 0000H 00007400 MOV A00H Operand 읽기 0000 74 00 MOV A,00H

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

Page 54: CPUCPU의의이해이해 - Egloospds17.egloos.com/pds/200908/31/64/1.CPU_Intro.pdfADD실행 주소기계어 어셈블러 ORG 0000H 00007400 MOV A00H Operand 읽기 0000 74 00 MOV A,00H

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

Page 55: CPUCPU의의이해이해 - Egloospds17.egloos.com/pds/200908/31/64/1.CPU_Intro.pdfADD실행 주소기계어 어셈블러 ORG 0000H 00007400 MOV A00H Operand 읽기 0000 74 00 MOV A,00H

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

Page 56: CPUCPU의의이해이해 - Egloospds17.egloos.com/pds/200908/31/64/1.CPU_Intro.pdfADD실행 주소기계어 어셈블러 ORG 0000H 00007400 MOV A00H Operand 읽기 0000 74 00 MOV A,00H

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

Page 57: CPUCPU의의이해이해 - Egloospds17.egloos.com/pds/200908/31/64/1.CPU_Intro.pdfADD실행 주소기계어 어셈블러 ORG 0000H 00007400 MOV A00H Operand 읽기 0000 74 00 MOV A,00H

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

Page 58: CPUCPU의의이해이해 - Egloospds17.egloos.com/pds/200908/31/64/1.CPU_Intro.pdfADD실행 주소기계어 어셈블러 ORG 0000H 00007400 MOV A00H Operand 읽기 0000 74 00 MOV A,00H

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

Page 59: CPUCPU의의이해이해 - Egloospds17.egloos.com/pds/200908/31/64/1.CPU_Intro.pdfADD실행 주소기계어 어셈블러 ORG 0000H 00007400 MOV A00H Operand 읽기 0000 74 00 MOV A,00H

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등에 존재)

Page 60: CPUCPU의의이해이해 - Egloospds17.egloos.com/pds/200908/31/64/1.CPU_Intro.pdfADD실행 주소기계어 어셈블러 ORG 0000H 00007400 MOV A00H Operand 읽기 0000 74 00 MOV A,00H

CPUCPU

장치장치 개발개발장치장치 개발개발

Page 61: CPUCPU의의이해이해 - Egloospds17.egloos.com/pds/200908/31/64/1.CPU_Intro.pdfADD실행 주소기계어 어셈블러 ORG 0000H 00007400 MOV A00H Operand 읽기 0000 74 00 MOV A,00H

장치 개발 과정장치 개발 과정

목적이 정해지면 목적에 맞는 칩을 선정목적이 정해지면 목적에 맞는 칩을 선정

회로 설계회 계

PCB 제작

CPU 개발 환경 구축CPU 개발 환경 구축CPU에 맞는 환경이 다름

프로그램 작성

프로그램 실행과 디버깅 반복램 실행과 디버깅 반복

생산 및 판매

Page 62: CPUCPU의의이해이해 - Egloospds17.egloos.com/pds/200908/31/64/1.CPU_Intro.pdfADD실행 주소기계어 어셈블러 ORG 0000H 00007400 MOV A00H Operand 읽기 0000 74 00 MOV A,00H

CPU와 프로그램CPU와 프로그램

목적이 맞는 프로그램은 시스템 특성에따라 C와 어셈블러로 작성따라 와 어 러 작성

LIBCompiler

개발툴 만드는 회사가 작성printf(), strcpy(), sin(), …

C

LIB(Library)

어셈블리 코드

OBJ(Object)

EXE, HEXcode+

어셈블리 코드

Linker

A blAssembler

Page 63: CPUCPU의의이해이해 - Egloospds17.egloos.com/pds/200908/31/64/1.CPU_Intro.pdfADD실행 주소기계어 어셈블러 ORG 0000H 00007400 MOV A00H Operand 읽기 0000 74 00 MOV A,00H

프로그램과 메모리 사용프로그램과 메모리 사용

기계어 코드(ROM/RAM)명령이 처리위한 기계어 코드

int a;

명령이 처리위한 기계어영역

변수 데이터 (RAM)

int main()

{ 변수 데이터 (RAM)명령이 실행될 때 데이터가저장되는 공간

{

a = 10;

a++; 저장되는 공간

고정 데이터 (ROM/RAM)

a ;

printf(“a=%d”,a)

return 0;명령이 실행될 때 변하지 않는 변수 공간

return 0;

}

Page 64: CPUCPU의의이해이해 - Egloospds17.egloos.com/pds/200908/31/64/1.CPU_Intro.pdfADD실행 주소기계어 어셈블러 ORG 0000H 00007400 MOV A00H Operand 읽기 0000 74 00 MOV A,00H

컴파일러와 개발 툴컴파일러와 개발 툴

컴파일러는 각 CPU에 따라 다르게 작성된다.CPU의 종류가 다르면 다른 컴파일러가 필요하다.

컴파일러는 구입하는 것이 일반적이다.

같은 CPU라도 컴파일러 판매회사는 다름

8051 : IAR, Keil

어셈블러는 주로 CPU 생산 업체에서 공급한다.C를 사용하지 않는다면 컴파일러 구입없이 간단히 개발할 수 있다.

Page 65: CPUCPU의의이해이해 - Egloospds17.egloos.com/pds/200908/31/64/1.CPU_Intro.pdfADD실행 주소기계어 어셈블러 ORG 0000H 00007400 MOV A00H Operand 읽기 0000 74 00 MOV A,00H

메모리 프로그램 전송 방식메모리 프로그램 전송 방식

작성된 프로그램이 실행하기 위해 최종에는 메모리에 전송이 필요 (CPU의 동작 없이)

CPU와 메모리 존재의 형태에 따라 전송 방식을 다르다.

코드 영역이 OM일 경우코드 영역이 EPROM일 경우

EPROM을 롬라이터를 사용하여 쓴다.

외부 FLASH을 사용 일 경우외부 FLASH을 사용 일 경우

CPU가 JTAG을 지원할 경우는 JTAG 라이터로 전송

내부 FLASH을 사용 할 경우내부 FLASH을 사용 할 경우

CPU에서 라이터(ISP또는 JTAG)을 사용하여 전송

Page 66: CPUCPU의의이해이해 - Egloospds17.egloos.com/pds/200908/31/64/1.CPU_Intro.pdfADD실행 주소기계어 어셈블러 ORG 0000H 00007400 MOV A00H Operand 읽기 0000 74 00 MOV A,00H

코드 영역이 EPROM코드 영역이 EPROM

EPROM이 CPU 내부에 있는 경우도 마찬가지가지

롬라이터PC

EPROM ROMWriter소켓

8031

RAM

UARTUSB

Writerprogram

소켓

RAM

Page 67: CPUCPU의의이해이해 - Egloospds17.egloos.com/pds/200908/31/64/1.CPU_Intro.pdfADD실행 주소기계어 어셈블러 ORG 0000H 00007400 MOV A00H Operand 읽기 0000 74 00 MOV A,00H

롬라이터와 EPROM 지우기롬라이터와 EPROM 지우기

타이머

•자외선 형광등•타이머에 의해 자동 꺼짐

Page 68: CPUCPU의의이해이해 - Egloospds17.egloos.com/pds/200908/31/64/1.CPU_Intro.pdfADD실행 주소기계어 어셈블러 ORG 0000H 00007400 MOV A00H Operand 읽기 0000 74 00 MOV A,00H

내부 FLASH을 사용(AT89LP2052)내부 FLASH을 사용(AT89LP2052)

EPROM이 CPU 내부에 있는 경우도 마찬가지가지

PC

LPT

버퍼

ISPWriter

programprogram

Page 69: CPUCPU의의이해이해 - Egloospds17.egloos.com/pds/200908/31/64/1.CPU_Intro.pdfADD실행 주소기계어 어셈블러 ORG 0000H 00007400 MOV A00H Operand 읽기 0000 74 00 MOV A,00H

AT89LP2052AT89LP2052

PC

LPTISPISP

Writer

Page 70: CPUCPU의의이해이해 - Egloospds17.egloos.com/pds/200908/31/64/1.CPU_Intro.pdfADD실행 주소기계어 어셈블러 ORG 0000H 00007400 MOV A00H Operand 읽기 0000 74 00 MOV A,00H

외부 FLASH을 사용외부 FLASH을 사용

JTAG 임베디드 CPU의 경우가 대표적JTAG-임베디드 CPU의 경우가 대표적

PC

ARM

JTAG 케이블

LPT버퍼JTAG

Writerprogram

JTAG

ARMcore

TDI

TDO

TMS

TCKprogram

FLASH

TCK

TRST

74HC541

FLASHcontrol

FLASH

Page 71: CPUCPU의의이해이해 - Egloospds17.egloos.com/pds/200908/31/64/1.CPU_Intro.pdfADD실행 주소기계어 어셈블러 ORG 0000H 00007400 MOV A00H Operand 읽기 0000 74 00 MOV A,00H

프로그램 디버깅 체계 1프로그램 디버깅 체계 1

에뮬레이터 장비에뮬레이터 장비MCU 계열은 메모리가 한 칩에 있어 메모리 용량 때문에 코드를 RAM에서 실행 시킬 수 없다

CPU을 대신하여 프로그램을 대신할 수 있는 장비가 필요

장비의 커넥터를 PCB에 연결하여 CPU 대신 동작 시켜 회로와프로그램을 확인 한다프로그램을 확인 한다.

장비 값이 비싸나 디버깅이 쉬워 개발 기간 단축

전자적으로 쓸 수 있는 FLASH의 사용으로 직접 프로그램을 전송

특별할 장비가 필요 없어 에뮬레이터 장비 구입비 없음특별할 장비가 필요 없어 에뮬레이터 장비 구입비 없음

간단한 전송 장치를 써고 디버깅이 불편하다.

UART을 통해 실행 상황을 PC로 전송하여 디버깅할 수 있다.

Page 72: CPUCPU의의이해이해 - Egloospds17.egloos.com/pds/200908/31/64/1.CPU_Intro.pdfADD실행 주소기계어 어셈블러 ORG 0000H 00007400 MOV A00H Operand 읽기 0000 74 00 MOV A,00H

프로그램 디버깅 체계 2프로그램 디버깅 체계 2

ISP로 내부 FLASH 사용할 경우ISP로 내부 FLASH 사용할 경우RAM의 용량이 제한되어 있어 프로그램을 RAM에 넣을 수 없다을 수 없다.

매번 ISP로 프로그램을 전송 한다.

외부에 메모리를 추가하여 RAM에 프로그램을외부에 메모리를 추가하여 RAM에 프로그램을넣을 수 있는 경우

프로그램을 매번 RAM 넣고 실행 후 최종적으로프로그램을 매번 RAM 넣고 실행 후 최종적으로ROM/FLASH로 옮겨 실행 한다.

이때 전송은 ROM 프로그램의 실행을 통해 PC와 통신하여 RAM으로 프로그램을 전송 한다하여 RAM으로 프로그램을 전송 한다.

통신은 UART(RS-232C), USB, ETHERNET 사용할 수있다.있다.

Page 73: CPUCPU의의이해이해 - Egloospds17.egloos.com/pds/200908/31/64/1.CPU_Intro.pdfADD실행 주소기계어 어셈블러 ORG 0000H 00007400 MOV A00H Operand 읽기 0000 74 00 MOV A,00H

에뮬레이터 장비 사용에뮬레이터 장비 사용

Page 74: CPUCPU의의이해이해 - Egloospds17.egloos.com/pds/200908/31/64/1.CPU_Intro.pdfADD실행 주소기계어 어셈블러 ORG 0000H 00007400 MOV A00H Operand 읽기 0000 74 00 MOV A,00H

에뮬레이션 방식에뮬레이션 방식

PCB

목적 프로그램 작성

목적 프로그램 에뮬레이터에 전송

8052커넥터

에뮬레이터

목적 프로그램 에뮬레이터에 전송

실행 후 오류 확인

PC

오류?error

PC

실제 8052 부착하고 프로그램 전송

IDE 툴

No error

Page 75: CPUCPU의의이해이해 - Egloospds17.egloos.com/pds/200908/31/64/1.CPU_Intro.pdfADD실행 주소기계어 어셈블러 ORG 0000H 00007400 MOV A00H Operand 읽기 0000 74 00 MOV A,00H

8031의 디버깅 체계(외부 메모리)8031의 디버깅 체계(외부 메모리)

8031

EPROMEPROM에 PC와 통신하여

코드를 RAM 복사할 수 있는 프로그램 작성 후 굽는다

목적 프로그램 작성

모니터

RAMSerial목적 프로그램 RAM에 전송

PC

실행 후 오류 확인

오류?errorPC 오류?

코드 전송 용프로그램

error

No error

최종 코드를 ROM에 전송 후 실행

Page 76: CPUCPU의의이해이해 - Egloospds17.egloos.com/pds/200908/31/64/1.CPU_Intro.pdfADD실행 주소기계어 어셈블러 ORG 0000H 00007400 MOV A00H Operand 읽기 0000 74 00 MOV A,00H

AT89LP2052 ISP FLASHAT89LP2052 ISP FLASH

AT89LP2052

8051목적 프로그램 작성

목적 프로그램 FLASH에 ISP로 전송FLASH

8051core

ISP

목적 프로그램 FLASH에 ISP로 전송

실행 후 오류 확인

오류?ISP writer error

PC

추가 전송 없이 사용

No error

Page 77: CPUCPU의의이해이해 - Egloospds17.egloos.com/pds/200908/31/64/1.CPU_Intro.pdfADD실행 주소기계어 어셈블러 ORG 0000H 00007400 MOV A00H Operand 읽기 0000 74 00 MOV A,00H

ARM의 디버깅 체계(외부 메모리)ARM의 디버깅 체계(외부 메모리)

CPU 개입 없음초기 FLASH에 쓰기

FLASH

FLASH에 PC와 통신하여코드를 RAM 복사할 수 있는 프로그램 작성 후 JTAG로 전송

PC 초기 FLASH에 쓰기

ARM

목적 프로그램 작성bootloaderJTAG

ARM

RAMSerialUSB

목적 프로그램 RAM에 전송Bootloader에 의해RAM에 복사됨

실행 후 오류 확인

오류?errorCPU의 프로그램에

PC 오류?

코드 전송 용프로그램

error

No error

의해 통신 및 쓰기

최종 코드를 FLASH에 전송 후 실행