Presentation is loading. Please wait.

Presentation is loading. Please wait.

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

Similar presentations


Presentation on theme: "CPU의 이해 CPU란 무엇인가? dolicom@naver.com http://blog.naver.com/dolicom."— Presentation transcript:

1 CPU의 이해 CPU란 무엇인가?

2 CPU란 무엇인가? 프로그램에 따라 실행되는 상태 제어기 이미 작성된 프로그램에 의해 작동 전자 장치 제어의 두뇌
전자의 디지털 기술을 이용 수학적 처리를 기반으로 작동(2진수) IT 및 정보처리의 핵심

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

4 CPU의 진화-숫자의 표현 4비트 – 4040 간단한 장치 제어(전화기,…) 8비트 – 8080, 8051
4비트 – 4040 간단한 장치 제어(전화기,…) 8비트 – 8080, 8051 16비트 – 8086, 80286(PC) 32비트 64비트 – 최근 64비트 DSP CPU – 고속 수학계산을 필요한 장치 TI사의 TMS32시리즈 Floating-Point (실수자료형 레지스터 & ALU)

5 CPU 발전 인텔 4004 4비트 모토롤라 8008 자일로그 모스텍 8080 6800 8비트 8085 Z80 6502 6809
8086 Z8000 6510 68000 16비트 80186 8088 80286 80386 Z80000 68020 32비트 80486 80860 RISC 68030 Pentium4 68040 88000 RISC Core2 –IA64 64비트

6 CPU의 진화 2 * 임베디드 RISC CISC intel Zilog motorola 4004 4040 (intel) 4비트
MOS technology intel Zilog motorola 4004 4040 (intel) 4비트 8051*(Intel) 6502 (MOS Technology) Apple-II 8008 8080 8085 Z80 (Zilog) 6800 (Motorola) 8비트 AVR* (Atmel) 8086 8088(IBM-PC/XT) 80286(IBM –PC/AT) (intel) 68000(16/32) (Motorola) 16비트 32비트 80386 80486 Pentium (intel,AMD) 68020 68030 68040 (Motorola) PowerPC(IBM) MPC860(Motorola)* (MAC) ARM* AVR32*

7 Intel Pentium4 2005년 1.69억TR 3.73GHz 90nm공정 2MB SRAM

8 PC (Personal Compter) IBM-PC(XT) 8088 Apple-II 6502 8비트 16비트
IBM-PC(AT) 80286 Mac 680x0계열 (Motorola) 16/32비트 IBM-PC 80486 IA-32 : 32비트 Mac PowerPC (IBM) IBM-PC PentiumPro,2,3,4 IA-32 : 32비트 MMX(멀티메디어,3D그래픽) 32비트 64비트 -AMD64 -Pentium4(EM64T) IA-64 Dual CPU -Pentium D(Pentium4x2) -Core2 -AMD64 X2 IBM-PC Pentium(D,EM64T) Mac (Intel) IBM-PC Core2

9 Apple-II / MAC Apple-II (1977/June 6) Apple-II Plus (1979)
MOS Technology 6502, 1MHz 4KB RAM 메모리 BASIC (인터프리터-ROM에 존재) Video-24라인/40컬럼 Monochrome, 대문자text NTSC 호환 1978- External 5¼” floppy disk Apple DOS – Diskette drive Apple-II Plus (1979) 48KB RAM, 12KB ROM, 4KB IO Language Card – UCSD Pascal, FORTAN 77

10 IBM-PC IBM-PC /XT (1983) IBM-PC / AT (1984) Intel 8088, 4.77MHz
128KB 메모리 360KB double-sided 5 ¼” floppy disk Socket 8087(FPU) coprocessor IBM-PC / AT (1984) Intel 80288, 8MHz 256KB ~ 16MB 1.2MB 5¼” floppy disk 20MB Hard Disk PC-DOS3.0 Enhanced Graphics Adapter – 640x350(16C/64p)

11 CISC와 RISC 최근 들어 2개의 경계가 불분명 해 짐 CISC RISC : 명령 축소
Complex Instruction Set Computer x86, 68000, VAX 반RISC의 의미가 애매해 짐 486 -> Pipelined CISC 더 작아지는 mirco-operations(명령을 실행을 위한 CPU내의 코드) RISC : 명령 축소 Reduced Instruction Set Computer 고속 실행을 목적으로 AVR,PIC, ARM, PowerPC, SPARC 최근 들어 2개의 경계가 불분명 해 짐

12 CPU의 동작 요소 CPU 메모리 (ROM,RAM) 특정 목적 지원 프로그램 IO 장치 (입출력 장치, 통신 장치)
KEYPAD LCD Ethernet (LAN) USB 기타

13 CPU 시스템 구조 8051 PC 장치 8051 core ROM/FLASH Timer UART 통신 Serial RAM
레지스터 ALU FLAG UART 통신 Serial RAM IO 모듈 CPU에서 동작하는 모든 프로그램은 반드시 메모리에 적제되어 있어야 한다. ROM이나 RAM 중 어느 한곳에 있어도 상관 없다. 키패드 LCD USB

14 메모리 종류 ROM Mask ROM : 생산 시 고정된 데이터로 칩이 만들어 진다. 따라서 롬라이터로 쓰기가 불가능 하다. 주로 대량생산에 사용. PROM (Programmable ROM): 생산 시 데이터로 없이 만들어 지고, 롬라이터로 쓰기하면 변경 불가능 하다. EPROM (Erasable PROM): 롬 라이터로 데이터(프로그램)을 쓰고 자외선으로 지워 재 프로그램 가능. EEPROM (Electrically EPROM): 동작 중 쓰기가 가능하여, 시스템의 특정 정보를 담는것이 주 목적이다. (RAM에 비해 쓰기 속도 저하, 쓰기 복잡) RAM SRAM(Static RAM): 쓰기와 읽기가 가능. 전기가 공급되면 데이터 유지 DRAM (Dynamic RAM): 쓰기와 읽기가 가능. 전기가 공급되어도 일정 시간이 지나면 데이터가 사라짐. 주기적 리프레쉬(refresh)가 필요. FLASH 읽기와 쓰기가 가능하고 전원이 없어도 데이터가 사라지지 않음. RAM에 비해 쓰기가 복잡. CPU에 의한 쓰기 프로그램이 필요. 최근 임베디드 시스템은 거의 이 메모리 사용. PC의 롬바이어스도 이 메모리 사용. (초기 PC PROM/EPROM) – 바이러스

15 EPROM 소켓을 이용 장착 데이터를 삭제할 때 데이터를 쓸 때는 별도의 장치를 이용한다. 자외선을 이용한다.
자외선이 통과하도록 창이 열려 있다. -데이터가 지워지면 모두 0xFF 됨 데이터를 쓸 때는 별도의 장치를 이용한다. 따라서 소켓을 쓰는 것이 일반적

16 DRAM 메모리 종류 DRAM의 분류 DRAM : 초기의 메모리. SDRAM
: SRAM보다 구조가 단순하고 고밀도, 가격 저렴. DRAM : 초기의 메모리. SDRAM SDRAM :DRAM보다 엑세스 속도 증가를 위해 클럭을 사용하여 읽고 쓰는 시간을 동기화 한다.두클럭에 데이터를 한번 억세스 한다. DDR SDRAM : SDRAM 보다 속도를 높이기 위해 한 클럭 동안 엑세스 한다. DDR2 SDRAM : 클럭의 속도를 2배 높여 억세스 한다. 진화

17 CPU 시스템 구성 요소 I-I Timer UART(RS-232C)
전자적 논리회로에 의해 하드웨어적으로 구현되며 정확한 클럭과 시간을 얻을 수 있다. CPU 프로그램과 연결되어 수백 us ~ 수백msec 처리 가능. 하드웨어적 고속 클럭 처리가 가능. 하드웨어적 처리에 의한 클럭. UART(RS-232C) 시리얼 통신을 위한 모듈로 컴퓨터간 통신을 위해 컴퓨터 초기부터 구현되어온 방식이다. 모뎀과 연결되어 전화선을 통한 원거리 통신 가능. CPU의 프로그램을 전송하거나 실행되는 상황을 PC로 전송-debug 툴로도 사용.

18 CPU 시스템 구성 요소 I-2 SPI USB 장치(칩) 사이의 통신을 위해 시리얼 통신 방식.
데이터 신호와 함께 전송을 시점을 알리는 클럭이 전송. UART 보다 고속 처리가 가능. 시스템내의 칩과 칩사이 , 모듈과 모듈사이의 통신에 사용 USB 시리얼 통신 중 가장 최근에 개발된 방식. 전송 속도가 높아 장치간의 많은 데이터 전송하는데 유리. 신호선과 함께 전원도 공급되어 간단한 장치 개발에 유리. CPU의 프로그램을 전송하거나 실행되는 상황을 PC로 전송-debug 툴로도 사용.

19 CPU 시스템 구성 요소 II LCD : 시스템의 상태를 표시하는 출력 장치 LAN(Ethernet)
Keypad : 장치의 제어를 위한 가장 일반적인 입력 장치. 핸드폰의 번호 키. 컴퓨터의 키보드 LCD : 시스템의 상태를 표시하는 출력 장치 STN : 흑백의 무 칼라 표시 장치 문자형 : 주어진 폰트의 내용을 출력한다. ASCII 코드 출력. 그래픽형: 픽셀 단위의 그래픽 처리가 가능한 표시장치 TFT-LCD : 칼라 표시를 지원하면 그래픽 처리가 가능 LAN(Ethernet) 근거리 통신망을 구성하여 컴퓨터간의 통신 가장 대표적 통신망

20 CPU와 임베디드 CPU와 보조 모듈의 물리적 구성 MCU (Micro Controller Unit) 임베디드
장치의 크기 및 이동성등을 고려하여 구성 장치의 특성에 맞는 구성 CPU을 찾아 개발. MCU (Micro Controller Unit) CPU와 기본적인 모듈을 한 칩에 구현 보통 장치 제어용 CPU을 말함. 임베디드 MCU와 비슷한 개념으로 CPU와 모듈을 모아 하나의 칩으로 구현 최근 이 말은 OS와 결합되어 구성되는 의미가 강함 Windows CE, linux 포팅

21 MCU와 임베디드 CPU의 형상과 칩의 구성 CPU의 실행 속도 향상 칩의 크기 및 파워 (휴대 장치, 장치 제어)

22 MCU와 임베디드 8051과 MCU 형상

23 8051의 구성 - Intel 외부 인터럽트 ROM 프로그램 Interrupt Control Timer 1 RAM
Timer/Counter ROM 프로그램 Interrupt Control Timer 1 RAM Timer 0 CPU Serial Port Bus Control 4 I/O 포트 OSC P0 P1 P2 P3 TxD RxD Address/Data

24 AT80C51 –

25 AT89C51 - ATMEL

26 MCU와 임베디드 ARM과 임베디드 형상

27 ARM9 – 인텔 PXA255

28 ARM7-삼성반도체 S3C44B0X

29 ARM9-삼성반도체 S3C2410

30 CPU란 무엇인가? CPU란 논리 연산을 하는 전자 기계 프로그램에 동작하는 상태 머신

31 CPU 코어 명령 해석 및 명령동작 제어부 메모리 사칙연산 논리연산 쉬프트 PC:Program Counter
SP:Stack Pointer CPU 코어 제어 신호 데이터 흐름 명령 해석 및 명령동작 제어부 메모리 PC 메모리 제어 SP DPTR A data bus B . . . R0,R1, … R7 FLAG 사칙연산 논리연산 쉬프트 ALU

32 CPU의 기본 구성 레지스터 : CPU가 데이터를 처리를 위한 저장 ALU : 수학적 계산을 하는 부분
사칙연산, 논리연산, 쉬프트 연산 FLAG : ALU 계산 결과 flag 부분이 저장 명령 해석 및 명령동작 제어부 – 기계어 코드를 읽고 명령을 해석하여 실행

33 명령어 실행-Machine Cycle 한 명령이 실행되기 까지의 전체 시간 Fetch -기계어 명령 읽기
Decode - 기계어 기능 해석 Execute - 실행 Store - 메모리에 저장 ADD A,R0

34 프로그램 작성 C 또는 어셈블리(기계어)로 작성 int cval; void Calc() Calc: { MOV A,00H
int val; val = 0; val += 2; cval = val; } 기계어 Calc: MOV A,00H ADD A,02H MOV 0A0,A . . . 74 00 25 02 F5 A0 컴파일러 어셈블러 ROM에 넣기 (시스템에 따라 ROM, FLASH, RAM)

35 CPU의 동작 – Step 1 프로그램 A B . . . . . . FLAG ALU 주소 기계어 어셈블러 ORG 0000H
주소 기계어 어셈블러 ORG H MOV A,00H ADD A,02H 0004 F5 A MOV 0A0,A JMP MAIN 00 74 01 00 02 25 03 02 A data bus B . . . . . . FLAG ALU

36 Step 2 – fetch 기계어 명령 읽기 처음 00번지 기계어를 읽는다. PC
주소 기계어 어셈블러 ORG H MOV A,00H ADD A,02H 0033 F5 A MOV 0A0,A 00 74 처음 00번지 기계어를 읽는다. 명령어 74는 다음 데이터를 A레지스터로 옮기라는 명령으로 규정 -> 해석 01 00 0000 PC 02 25 03 02 명령어 버퍼 74 명령어 해석 A data bus B . . . . . . FLAG ALU

37 Step 3 다음 데이터 읽기 PC 다음 1 번지의 데이터 00을 읽어 A레지스터에 넣는다. 명령 한 개가 종료 됨. A 00
주소 기계어 어셈블러 ORG H MOV A,00H ADD A,02H 0004 F5 A MOV 0A0,A Step 3 다음 데이터 읽기 00 74 01 00 0001 PC 02 25 다음 1 번지의 데이터 00을 읽어 A레지스터에 넣는다. 명령 한 개가 종료 됨. 03 02 명령어 버퍼 74 명령어 해석 A 00 data bus B . . . . . . FLAG ALU

38 Step 4 fetch 처음 02번지 기계어를 읽는다.
주소 기계어 어셈블러 ORG H MOV A,00H ADD A,02H 0033 F5 A MOV 0A0,A 처음 02번지 기계어를 읽는다. 명령어 25는 다음 데이터를 A레지스터와 더하라는 명령으로 규정 -> 해석 A+02H -> A 준비 00 74 0002 PC 01 00 명령어 버퍼 02 25 03 25 명령어 해석 02 A = 0 data bus B . . . . . . FLAG ALU

39 Step 5 ADD 실행 Operand 읽기 PC 처음 03번지 데이터를 읽어 opreand 버퍼에 저장. A B . . .
주소 기계어 어셈블러 ORG H MOV A,00H ADD A,02H 0033 F5 A MOV 0A0,A 00 74 0003 PC 01 00 처음 03번지 데이터를 읽어 opreand 버퍼에 저장. 명령어 버퍼 02 25 명령어 해석 03 25 02 02 Oprand 버퍼 A data bus B . . . . . . FLAG ALU

40 Step 6 ADD 계산 ADD 명령 처음 03번지 데이터를 읽어 opreand 버퍼에 저장. PC
주소 기계어 어셈블러 ORG H MOV A,00H ADD A,02H 0033 F5 A MOV 0A0,A 처음 03번지 데이터를 읽어 opreand 버퍼에 저장. A+02H -> A 실행 ADD 명령 종료 00 74 0000 PC 01 00 명령어 버퍼 02 25 명령어 해석 03 25 02 02 Oprand 버퍼 A = 02 data bus B . . . . . . FLAG 설정 S=0 Z=0 C=0 V=0 00 02 ALU ADD 명령 02

41 Step 7 fetch MOV PC 다음 명령 MOV을 읽는다 MOV 명령 해석 A = 02 B . . . . . .
주소 기계어 어셈블러 MOV A,00H ADD A,02H 0004 F5 A MOV 0A0,A 0004 PC 00 74 01 00 다음 명령 MOV을 읽는다 MOV 명령 해석 명령어 버퍼 02 25 F5 명령어 해석 03 02 04 F5 02 Oprand 버퍼 05 A0 A = 02 09 xx B 0A xx . . . . . . 0B xx FLAG 설정 data bus ALU

42 Step 8 MOV의 주소값읽기 PC MOV명령에서 메모리 주소값임을 해석하고 주소 값을 읽는다. A = 02 B . . .
주소 기계어 어셈블러 MOV A,00H ADD A,02H 0004 F5 A MOV 0A0,A PC 00 74 0005 01 00 MOV명령에서 메모리 주소값임을 해석하고 주소 값을 읽는다. 명령어 버퍼 02 25 F5 명령어 해석 03 02 04 F5 A0 Oprand 버퍼 05 A0 A = 02 09 xx B 0A xx . . . . . . 0B xx FLAG 설정 data bus ALU

43 Step 9 A 레지스터 쓰기 ROM PC MOV명령에서 메모리 주소값임을 해석하고 주소 값을 읽는다. A = 02 B
주소 기계어 어셈블러 MOV A,00H ADD A,02H 0004 F5 A MOV 0A0,A ROM 00 74 0006 PC 01 00 MOV명령에서 메모리 주소값임을 해석하고 주소 값을 읽는다. 명령어 버퍼 02 25 F5 명령어 해석 03 02 04 F5 A0 Oprand 버퍼 05 A0 A = 02 09 xx B 0A 02 . . . . . . 0B xx address bus FLAG 설정 RAM data bus ALU 02

44 CPU의 동작 순서표 74 00 25 02 F5 A0 02 실행 실행 실행 MOV A,00H ADD A,02H
MOV 0A0,A FETCH OPRAND FETCH OPRAND FETCH OPRAND 74 00 실행 25 02 실행 F5 A0 데이터 02 실행 write 엑세스 Read Read Read Read Read Read 04 05 A0 주소 00 01 02 03

45 CPU 동작 속도 높이기 74 00 실행 25 02 실행 F5 A0 74 00 실행 XX XX 25 00 실행 XX XX F5
MOV A,00H ADD A,02H MOV 0A0,A FETCH OPRAND FETCH OPRAND FETCH OPRAND 74 00 실행 25 02 실행 F5 A0 데이터 74 00 실행 XX XX 파이프1 prefetch 25 00 실행 XX 파이프2 XX F5 A0 실행 파이프3 XX 02 F5 실행 파이프4 (실제 8051은 이 개념이 적용 안된 가상의 개념 임, Intel 80486, ARM등에 적용)

46 ARM 프로그램 작성 C 또는 어셈블리(기계어)로 작성 int cval; Calc: void Calc() mov r0,#2 {
int val; val = 2; val += 3; cval = val; } 기계어 Calc: mov r0,#2 add r0,r0,#3 ldr r2, .L3 str r0, [r2, #0] . . . .L3: .word cval 0200A0E3 0310A0E3 14209FE5 000082E5 컴파일러 어셈블러 ROM에 넣기 (시스템에 따라 ROM, FLASH, RAM) ISP, JTAG, …

47 이 코드가 메모리에 전송되고 CPU가 읽어 실행하는 코드 compiler assembler int ival;
int main() {   ival = 3;   ival += 2; } ARM GAS pasm.s page 1 1 .file "func.c" 2 .text 3 .align 2 4 .global main 5 .type main, %function 6 main: DC0A0E1 mov ip, sp D82DE9 stmfd sp!, {fp, ip, lr, pc} B04CE2 sub fp, ip, # c 04D04DE2 sub sp, sp, # FEFFFFEB bl func A0E3 mov r0, # E2 add r0, r0, # c 14209FE5 ldr r2, .L E5 str r0, [r2, #0] A0E1 mov r3, r BE5 str r3, [fp, #-16] c 10301BE5 ldr r3, [fp, #-16] A0E1 mov r0, r A89DE8 ldmfd sp, {r3, fp, sp, pc} 23 .size main, .-main 24 .align global func 26 .type func, %function 27 .align L3: word ival 30 .size func, .-func 31 .comm ival,4,4 32 .ident "GCC: (GNU) 3.4.5“ compiler .file "func.c" .text .align 2 .global main .type main, %function main: mov ip, sp stmfd sp!, {fp, ip, lr, pc} sub fp, ip, #4 sub sp, sp, #4 bl func mov r0, #2 add r0, r0, #3 ldr r2, .L3 str r0, [r2, #0] mov r3, r0 str r3, [fp, #-16] ldr r3, [fp, #-16] mov r0, r3 ldmfd sp, {r3, fp, sp, pc} .size main, .-main .global func .type func, %function .L3: .word ival .size func, .-func .comm ival,4,4 .ident "GCC: (GNU) 3.4.5" 이 코드가 메모리에 전송되고 CPU가 읽어 실행하는 코드 assembler ARM GAS pasm.s page 2 DEFINED SYMBOLS *ABS*: func.c pasm.s: text: main pasm.s: text: $a pasm.s: text: $d *COM*: ival UNDEFINED SYMBOLS func

48 ARM 명령어의 특징 32비트로 한 개의 기계어 명령 구성 Operand가 32비트의 명령어와 결합
CISC는 명령어 다음에 operand 존재 32비트 operand 데이터를 취급하기 위해 한 개 또는 2개의 명령어가 필요 STACK 관련 명령어가 없고, 블록 명령으로 대신 BL : 리턴 주소값 레지스터에 대피 R14(LR) 이에 비해 CISC는 CALL실행 시 STACK 사용.

49 Step 0 – 프로그램 적체 R0 R1 . . . . . . FLAG ALU memory 주소 기계어 어셈블러 reset:
주소 기계어 어셈블러 reset: A0E mov r0,#2 A0E add r0,r0,#3 FE ldr r2, .L3 000C E str r0, [r2, #0] Bus MUX 00 0200A0E3 04 0310A0E3 08 14209FE5 0c 000082E5 R0 data bus R1 . . . . . . FLAG MUL Barrel Shifter ALU

50 Step 1 – fetch : 기계어 명령 읽기 처음 00000000번지 기계어를 읽는다.
주소 기계어 어셈블러 reset: A0E mov r0,#2 A0E add r0,r0,#3 FE ldr r2, .L3 000C E str r0, [r2, #0] 처음 번지 기계어를 읽는다. 명령어 E3A00002는 데이터를 R0레지스터로 옮기라는 명령으로 규정 -> 해석 .00 0200A0E3 .04 0310A0E3 PC(R15) .08 14209FE5 Addr.bus 명령어 버퍼 명령어 해석 .0C 000082E5 E3A00002 Bmux data bus R0 R1 . . . . . . FLAG MUL Barrel Shifter ALU

51 Step 2 – 실행: 데이터를 R0에 넣기 명령중 데이터만을 레지스터에 넣는다. 명령 한 개가 종료 됨.
주소 기계어 어셈블러 reset: A0E mov r0,#2 A0E add r0,r0,#3 FE ldr r2, .L3 000C E str r0, [r2, #0] 명령중 데이터만을 레지스터에 넣는다. 명령 한 개가 종료 됨. .00 0200A0E3 .04 0310A0E3 PC .08 14209FE5 Addr.bus 명령어 버퍼 명령어 해석 .0C 000082E5 E3A00002 Bmux data bus Amux R R1 . . . . . . FLAG MUL Barrel Shifter ALU

52 Step 3 – fetch : 기계어 명령 읽기 다음 00000004번지 기계어 읽기 명령어 E3A01003 해석
주소 기계어 어셈블러 reset: A0E mov r0,#2 A0E add r0,r0,#3 FE ldr r2, .L3 000C E str r0, [r2, #0] 다음 번지 기계어 읽기 명령어 E3A01003 해석 ALU을 통해 더하기 -> 해석 .00 0200A0E3 .04 0310A0E3 PC .08 14209FE5 Addr.bus 명령어 버퍼 명령어 해석 .0C 000082E5 E3A01003 Bmux data bus Amux R0 R1 . . . . . . FLAG MUL Barrel Shifter ALU

53 Step 4 – add 실행 00000005 다음 00000004번지 기계어 읽기 명령어 0210A0E3해석
주소 기계어 어셈블러 reset: A0E mov r0,#2 A0E add r0,r0,#3 FE ldr r2, .L3 000C E str r0, [r2, #0] 다음 번지 기계어 읽기 명령어 0210A0E3해석 ALU을 통해 더하기 -> 해석 .00 0200A0E3 .04 0310A0E3 PC .08 14209FE5 Addr.bus 명령어 버퍼 명령어 해석 .0C 000082E5 Bmux E3A01003 data bus Amux R R1 . . . . . . FLAG N=0 Z=0 C=0 V=0 MUL Barrel Shifter ALU

54 Step 4-1 add 실행 후 R0에 저장 00000005 클럭의 에지에 맞추어 R0에 저장
주소 기계어 어셈블러 reset: A0E mov r0,#2 A0E add r0,r0,#3 FE ldr r2, .L3 000C E str r0, [r2, #0] 클럭의 에지에 맞추어 R0에 저장 에지후, A-MUX disable 됨 ALU의 A 버스는 0xXXXXXXXX .00 0200A0E3 .04 0310A0E3 PC .08 14209FE5 Addr.bus 명령어 버퍼 명령어 해석 .0C 000082E5 Bmux E3A01003 data bus Amux R R1 . . . . . . FLAG 0xxxxxxx N=0 Z=0 C=0 V=0 MUL Barrel Shifter ALU

55 Step 5 – fetch : ldr 다음 00000008번지 기계어 읽기 명령어 E59F2014 해석
주소 기계어 어셈블러 reset: A0E mov r0,#2 A0E add r0,r0,#3 FE ldr r2, .L3 000C E str r0, [r2, #0] 다음 번지 기계어 읽기 명령어 E59F2014 해석 .L3( )을 R2에 저장 .00 0200A0E3 .04 0310A0E3 PC .08 14209FE5 Addr.bus 명령어 버퍼 명령어 해석 .0C 000082E5 E59F2014 Bmux data bus Amux R0 R1 R2 . . . . . . FLAG MUL Barrel Shifter ALU

56 Step 6 – ldr 실행 int ival; -> 0x00000054에 할당 int *pival;
pival = &ival; => 컴파일러에 의해 R2로 지정 Step 6 – ldr 실행 주소 기계어 어셈블러 reset: A0E mov r0,#2 A0E add r0,r0,#3 FE ldr r2, .L3 000C E str r0, [r2, #0] operand 값 .L3( )을 R2에 저장 .00 0200A0E3 .04 0310A0E3 PC .08 14209FE5 Addr.bus 명령어 버퍼 명령어 해석 .0C 000082E5 E59F2014 Bmux data bus Amux R0 R1 R . . . . . . FLAG MUL Barrel Shifter ALU

57 Step 7 – fetch : str Str fetch 명령어 E5820000 해석 R2의 주소에 R0의 값 저장
주소 기계어 어셈블러 reset: A0E mov r0,#2 A0E add r0,r0,#3 FE ldr r2, .L3 000C E str r0, [r2, #0] Str fetch 명령어 E 해석 R2의 주소에 R0의 값 저장 .00 0200A0E3 .04 0310A0E3 C PC .08 14209FE5 Addr.bus 명령어 버퍼 명령어 해석 .0C 000082E5 E Bmux data bus Amux R R1 R . . . . . . FLAG MUL Barrel Shifter ALU

58 Step 8 – str 실행 Str fetch 명령어 E5820000 해석 R2의 주소에 R0의 값 저장 R0 00000005
주소 기계어 어셈블러 reset: A0E mov r0,#2 A0E add r0,r0,#3 FE ldr r2, .L3 000C E str r0, [r2, #0] Str fetch 명령어 E 해석 R2의 주소에 R0의 값 저장 .00 0200A0E3 .04 0310A0E3 C PC .08 14209FE5 Addr.bus 명령어 버퍼 명령어 해석 .0C 000082E5 E Bmux data bus Amux R address bus .50 xxxxxxxx R1 .54 R .58 xxxxxxxx . . . .5C xxxxxxxx . . . FLAG MUL Barrel Shifter ALU

59 ARM 동작 속도 높이기 74 00 실행 25 02 실행 F5 A0 decode 실행 XX decode 실행 XX XX
주소 기계어 어셈블러 reset: A0E mov r0,#2 A0E add r0,r0,#3 FE ldr r2, .L3 000C E str r0, [r2, #0] ARM 동작 속도 높이기 MOV A,00H ADD A,02H MOV 0A0,A FETCH OPRAND FETCH OPRAND FETCH OPRAND 74 00 실행 25 02 데이터 실행 F5 A0 mov r0,#2 decode 실행 XX 파이프1 E3A00002 E3A00005 add r0,r0,#3 E3A01003 decode 실행 XX 파이프2 XX prefetch ldr r2,.L3 decode 파이프3 E59F2014 실행 XX str r0,[r2,#0] E decode 주소계산 전송 파이프4 * 8051없는 가상의 개념 (80486, ARM등에 존재)

60 CPU 장치 개발

61 장치 개발 과정 목적이 정해지면 목적에 맞는 칩을 선정 회로 설계 PCB 제작 CPU 개발 환경 구축 프로그램 작성
프로그램 실행과 디버깅 반복 생산 및 판매

62 printf(), strcpy(), sin(), …
CPU와 프로그램 목적이 맞는 프로그램은 시스템 특성에 따라 C와 어셈블러로 작성 개발툴 만드는 회사가 작성 printf(), strcpy(), sin(), … Compiler LIB (Library) C EXE, HEX code OBJ (Object) + 어셈블리 코드 Linker Assembler

63 프로그램과 메모리 사용 기계어 코드(ROM/RAM) 변수 데이터 (RAM) 고정 데이터 (ROM/RAM)
명령이 처리위한 기계어 코드 영역 변수 데이터 (RAM) 명령이 실행될 때 데이터가 저장되는 공간 고정 데이터 (ROM/RAM) 명령이 실행될 때 변하지 않는 변수 공간 int a; int main() { a = 10; a++; printf(“a=%d”,a) return 0; }

64 컴파일러와 개발 툴 컴파일러는 각 CPU에 따라 다르게 작성된다. 어셈블러는 주로 CPU 생산 업체에서 공급한다.
컴파일러는 구입하는 것이 일반적이다. 같은 CPU라도 컴파일러 판매회사는 다름 8051 : IAR, Keil 어셈블러는 주로 CPU 생산 업체에서 공급한다. C를 사용하지 않는다면 컴파일러 구입없이 간단히 개발할 수 있다.

65 메모리 프로그램 전송 방식 작성된 프로그램이 실행하기 위해 최종에는 메모리에 전송이 필요 (CPU의 동작 없이)
코드 영역이 EPROM일 경우 EPROM을 롬라이터를 사용하여 쓴다. 외부 FLASH을 사용 일 경우 CPU가 JTAG을 지원할 경우는 JTAG 라이터로 전송 내부 FLASH을 사용 할 경우 CPU에서 라이터(ISP또는 JTAG)을 사용하여 전송

66 코드 영역이 EPROM EPROM이 CPU 내부에 있는 경우도 마찬가지 PC 롬라이터 ROM EPROM Writer
program EPROM 소켓 8031 UART USB RAM

67 롬라이터와 EPROM 지우기 타이머 자외선 형광등 타이머에 의해 자동 꺼짐

68 내부 FLASH을 사용(AT89LP2052) EPROM이 CPU 내부에 있는 경우도 마찬가지 PC ISP Writer
program LPT 버퍼

69 AT89LP2052 PC ISP Writer LPT ISP

70 외부 FLASH을 사용 JTAG-임베디드 CPU의 경우가 대표적 ARM PC JTAG 케이블 ARM JTAG core
TDI JTAG Writer program ARM core 버퍼 LPT TDO TMS JTAG TCK TRST 74HC541 FLASH control FLASH

71 프로그램 디버깅 체계 1 에뮬레이터 장비 전자적으로 쓸 수 있는 FLASH의 사용으로 직접 프로그램을 전송
MCU 계열은 메모리가 한 칩에 있어 메모리 용량 때문에 코드를 RAM에서 실행 시킬 수 없다 CPU을 대신하여 프로그램을 대신할 수 있는 장비가 필요 장비의 커넥터를 PCB에 연결하여 CPU 대신 동작 시켜 회로와 프로그램을 확인 한다. 장비 값이 비싸나 디버깅이 쉬워 개발 기간 단축 전자적으로 쓸 수 있는 FLASH의 사용으로 직접 프로그램을 전송 특별할 장비가 필요 없어 에뮬레이터 장비 구입비 없음 간단한 전송 장치를 써고 디버깅이 불편하다. UART을 통해 실행 상황을 PC로 전송하여 디버깅할 수 있다.

72 프로그램 디버깅 체계 2 ISP로 내부 FLASH 사용할 경우 외부에 메모리를 추가하여 RAM에 프로그램을 넣을 수 있는 경우
RAM의 용량이 제한되어 있어 프로그램을 RAM에 넣을 수 없다. 매번 ISP로 프로그램을 전송 한다. 외부에 메모리를 추가하여 RAM에 프로그램을 넣을 수 있는 경우 프로그램을 매번 RAM 넣고 실행 후 최종적으로 ROM/FLASH로 옮겨 실행 한다. 이때 전송은 ROM 프로그램의 실행을 통해 PC와 통신하여 RAM으로 프로그램을 전송 한다. 통신은 UART(RS-232C), USB, ETHERNET 사용할 수 있다.

73 에뮬레이터 장비 사용

74 에뮬레이션 방식 PC PCB 목적 프로그램 작성 8052 커넥터 목적 프로그램 에뮬레이터에 전송 에뮬레이터 실행 후 오류 확인
error 오류? PC No error IDE 툴 실제 8052 부착하고 프로그램 전송

75 코드를 RAM 복사할 수 있는 프로그램 작성 후 굽는다
8031의 디버깅 체계(외부 메모리) EPROM에 PC와 통신하여 코드를 RAM 복사할 수 있는 프로그램 작성 후 굽는다 EPROM 8031 모니터 목적 프로그램 작성 목적 프로그램 RAM에 전송 Serial RAM 실행 후 오류 확인 PC error 오류? 코드 전송 용 프로그램 No error 최종 코드를 ROM에 전송 후 실행

76 AT89LP2052 ISP FLASH AT89LP2052 PC 8051 core 목적 프로그램 작성 FLASH
목적 프로그램 FLASH에 ISP로 전송 ISP 실행 후 오류 확인 ISP writer error 오류? PC No error 추가 전송 없이 사용

77 코드를 RAM 복사할 수 있는 프로그램 작성 후 JTAG로 전송
ARM의 디버깅 체계(외부 메모리) CPU 개입 없음 초기 FLASH에 쓰기 PC FLASH에 PC와 통신하여 코드를 RAM 복사할 수 있는 프로그램 작성 후 JTAG로 전송 FLASH JTAG 목적 프로그램 작성 bootloader ARM 목적 프로그램 RAM에 전송 Bootloader에 의해 RAM에 복사됨 Serial USB RAM 실행 후 오류 확인 CPU의 프로그램에 의해 통신 및 쓰기 error 오류? PC No error 코드 전송 용 프로그램 최종 코드를 FLASH에 전송 후 실행


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

Similar presentations


Ads by Google