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

Slides:



Advertisements
Similar presentations
Dept. Computer Engineering DBLAB 정보처리개론 담당 교수 : 김정석 2009 년도 1 학기.
Advertisements

Family 의 개요 의 외부 Pin 기능과 내부 기능 Memory 구조 Timing 2 장 8051 의 구조.
1/37 Chapter 4: 프로세서 성능과 휴대성을 위한 하드웨어 © The McGraw-Hill Companies, Inc., 세기의 가장 중요한 발명품 : 마이크로 프로세서 일상생활에 널리 사용됨 프로그램에 의한 적응성.
컴퓨터의 구조 2006년 2학기 컴퓨터의 개념 및 실습.
2.1 컴퓨터 시스템의 구성 2.2 컴퓨터 시스템의 정보 표현 2.3 중앙처리장치 2.4 저장장치 2.5 컴퓨터 주변기기
Understanding of Ubiquitous & Computers Plus
마이크로 컨트롤러 Microcontroller.
AVR.
2007년 1학기 전산학개론 성신여자대학교 컴퓨터정보학부
PC와 인터넷 정강수 컴퓨터 구조와 웹의 이해 PC와 인터넷 정강수
제8장. RISC 및 슈퍼스칼라 프로세서 8.1 RISC의 출현 동기 8.2 RISC의 발전 경위
제4장 명령어 처리.
One Step Closer - AVR ATMEGA128 -
컴퓨터 하드웨어 Computer Hardware
2장 마이크로프로세서 구성요소 Slide 1 (of 19).
Signal 자연계에 존재하는 모든 정보전달의 수단 신호의 공학적 표현 물소리, 바람소리, 새소리 짐승소리,불,연기,봉화…
하드웨어 3 : RAM.
마이크로프로세서(Microprocessor,µP)
CPU (central Processing Unit)
컴퓨터 과학 개론 √ 원리를 알면 IT가 맛있다 컴퓨터 과학도를 위한 첫 전공서 ehanbit.net.
제7장 버스와 입출력.
2 Part 전자계산기 구조 1. 논리 회로 2. 자료 표현 및 연산 3. 명령어 및 프로세서 4. 명령 수행 및 제어 5.
Ⅵ. 메모리와 프로그램 가능한 논리소자 1. 메모리의 개요 2. ROM 3. RAM 4. 프로그램 가능한 논리소자
제어기술 소개 목표 : 제어기의 종류, 제어 방식 등을 살펴본다. 주요내용 제어기의 종류 제어방식 : 시퀀스, 피드백, 등.
제 1 장 마이크로프로세서의 기본동작.
3장. 컴퓨터의 기억장치 학번 : 이름 : 김현화.
2 AVR ATmega128 소개 마이크로컨트롤러 AVR ATmega128.
임베디드 하드웨어 Lecture #6.
컴퓨터 구조학 정보보호학과.
컴퓨터 구조론 2001년 10월 22일 발표자 황영선.
DSP와 TMS320F28x의 이해.
6장. 기 억 장 치 Lecture #6.
Introduce to ATmega128 & Codevision
출처: IT CookBook, 컴퓨터 구조와 원리 2.0 제 12장
컴퓨터 구조.
컴퓨터 중앙처리장치, 기억장치, 입력장치 및 출력장치를 알아보자.
Chapter 02 시스템 구조(System Structure)
4장. 컴퓨터 시스템의 구성과 기능 다루는 내용 컴퓨터 분해를 통한 본체 살펴보기 컴퓨터 구성요소 컴퓨터의 기능
직업 형태 변화 과정 일자리의 변화 ERP (Enterprise Resource Planning) 구분 18~19 세기
임베디드 시스템 개론 3주차 Embedded System..
9장. 중앙처리 장치의 조직과 기능 다루는 내용 컴퓨터 본체에서 CPU의 위치 살펴보기 CPU의 성능, 기능, 조직
1 마이크로프로세서의 원리 마이크로컨트롤러 AVR ATmega128.
Chapter 7. Pentium Processor
DSP 소개 및 TMS320LF2407A 6th hyaoo.
정보(information) 데이터(data) 어떤 사물에 대한 소식이나 자료 가공된 데이터
6 중앙처리장치의 조직과 기능 IT CookBook, 컴퓨터 구조와 원리 2.0.
Chapter 06 명령어와 번지지정 방식.
3주 컴퓨터구조.
8086 프로세서의 구조 및 동작 방식 시스템 프로그래밍 - Lecture #2 신라대학교 컴퓨터공학과 시스템 프로그래밍.
제 2장 컴퓨터동작의 기본 개념.
전자의료시스템 및 실습 C-언어 구 환 경희대학교 전자정보대학 동서의료공학과.
아날로그 VS 디지탈 -. Analog Vs Digital -. 디지털 논리에 대하여 -. 메모리에 대하여
제 1장 시스템 소프트웨어의 개요.
임베디드 소프트웨어 설계.
2007년 1학기 전산학개론 성신여자대학교 컴퓨터정보학부
CHAPTER 03. 컴퓨터 구조 컴퓨터 시스템의 구성과 동작 원리_컴퓨터 시스템에 대한 근본적 이해
Programmable Logic Device
Chapter 4 The Von Neumann Model.
제1장 시스템 소프트웨어의 개요 컴퓨터시스템 및 하드웨어 구성 컴퓨터의 구성과 기능 시스템프로그램의 개요
홈 네트워크 시뮬레이션 정 찬 번 석 성 환.
컴퓨터 시스템 개관 시스템 프로그래밍 - Lecture #1 신라대학교 컴퓨터공학과 시스템 프로그래밍.
제4강 PC정비사 1급(필기) Lee Hoon Copyright(c) 2008 LeeHoon All rights reserved.
Computer System Architecture
Lecture #6 제5장 기억장치 (1).
9장. 중앙처리 장치의 조직과 기능 다루는 내용 컴퓨터 본체에서 CPU의 위치 살펴보기 CPU의 성능, 기능, 조직
제 5 장 82C55를 이용한 포트 출력.
임베디드 하드웨어 Lecture #6.
Lecture 7 7-Segment LED controller using u-controller
제 1 강 컴퓨터의 구조.
Presentation transcript:

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

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

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

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

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

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*

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

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

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

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)

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

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

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

메모리 종류 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) – 바이러스

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

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

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

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

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

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

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

MCU와 임베디드 8051과 MCU 형상

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

AT80C51 – www.atmel.com

AT89C51 - ATMEL

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

ARM9 – 인텔 PXA255

ARM7-삼성반도체 S3C44B0X

ARM9-삼성반도체 S3C2410

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

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

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

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

프로그램 작성 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)

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

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

Step 3 다음 데이터 읽기 PC 다음 1 번지의 데이터 00을 읽어 A레지스터에 넣는다. 명령 한 개가 종료 됨. A 00 주소 기계어 어셈블러 ORG 0000H 0000 74 00 MOV A,00H 0002 25 02 ADD A,02H 0004 F5 A0 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

Step 4 fetch 처음 02번지 기계어를 읽는다. 주소 기계어 어셈블러 ORG 0000H 0000 74 00 MOV A,00H 0030 25 02 ADD A,02H 0033 F5 A0 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

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

Step 6 ADD 계산 ADD 명령 처음 03번지 데이터를 읽어 opreand 버퍼에 저장. PC 주소 기계어 어셈블러 ORG 0000H 0000 74 00 MOV A,00H 0030 25 02 ADD A,02H 0033 F5 A0 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

Step 7 fetch MOV PC 다음 명령 MOV을 읽는다 MOV 명령 해석 A = 02 B . . . . . . 주소 기계어 어셈블러 0000 74 00 MOV A,00H 0002 25 02 ADD A,02H 0004 F5 A0 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

Step 8 MOV의 주소값읽기 PC MOV명령에서 메모리 주소값임을 해석하고 주소 값을 읽는다. A = 02 B . . . 주소 기계어 어셈블러 0000 74 00 MOV A,00H 0002 25 02 ADD A,02H 0004 F5 A0 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

Step 9 A 레지스터 쓰기 ROM PC MOV명령에서 메모리 주소값임을 해석하고 주소 값을 읽는다. A = 02 B 주소 기계어 어셈블러 0000 74 00 MOV A,00H 0002 25 02 ADD A,02H 0004 F5 A0 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

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

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

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

이 코드가 메모리에 전송되고 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: 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 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] 16 17 0024 0030A0E1 mov r3, r0 18 19 0028 10300BE5 str r3, [fp, #-16] 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 25 .global func 26 .type func, %function 27 .align 2 28 .L3: 29 0038 00000000 .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*:00000000 func.c pasm.s:6 .text:00000000 main pasm.s:7 .text:00000000 $a pasm.s:29 .text:00000038 $d *COM*:00000004 ival UNDEFINED SYMBOLS func

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

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

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

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

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

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

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

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

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

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

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

ARM 동작 속도 높이기 74 00 실행 25 02 실행 F5 A0 decode 실행 XX decode 실행 XX XX 주소 기계어 어셈블러 reset: 0000 0200A0E3 mov r0,#2 0004 0310A0E3 add r0,r0,#3 0008 14209FE5 ldr r2, .L3 000C 000082E5 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] E5820000 decode 주소계산 전송 파이프4 * 8051없는 가상의 개념 (80486, ARM등에 존재)

CPU 장치 개발

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

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

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

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

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

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

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

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

AT89LP2052 PC ISP Writer LPT ISP

외부 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

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

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

에뮬레이터 장비 사용

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

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

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

코드를 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에 전송 후 실행