임베디드 시스템 구조

Similar documents
Microsoft PowerPoint - 05-ARM-Instruction-Set.ppt

Microsoft Word - 1. ARM Assembly 실습_xp2.doc

Microsoft PowerPoint - LN_1_ARM_CPU_0.ppt [호환 모드]

Here is a "PLDWorld.com"... // EXCALIBUR... // Additional Resources // µc/os-ii... Page 1 of 23 Additional Resources: µc/os-ii Author: Source: HiTEL D

ARM 아키텍쳐 - ARM 아키텍쳐 - Programming 모델 - ARM 프로세서명령어 - 예외처리와시스템리셋 - ARM9TDMI 프로세서 한국기술교육대학교 전기전자통신공학부 장영조 한국기술교육대학교임베디드 SOC 설계및실습

q ARM (Advanced RISC Machines) v 1990년설립 v UK-based joint venture Ø Apple Computer, Acorn Computer Group, and VLSI Technology q 32-bit RISC Intellectu

ARM Reverse Engineering

슬라이드 1

<4D F736F F F696E74202D20BBB7BBB7C7D15F FBEDFB0A3B1B3C0B05FC1A638C0CFC2F72E BC8A3C8AF20B8F0B5E55D>

Microsoft PowerPoint - o8.pptx

ARM01

hwp

1부. 임베디드시스템

hlogin2

Chapter ...

<4D F736F F F696E74202D20B8B6C0CCC5A9B7CEC7C1B7CEBCBCBCAD202839C1D6C2F7207E203135C1D6C2F >

ARM 프로세서 입문

SRC PLUS 제어기 MANUAL

Microsoft PowerPoint - M07_RTL.ppt [호환 모드]

Microsoft Word - FunctionCall

Microsoft PowerPoint - ARM System-on-chip architecture_Chap 4_23p.ppt

Microsoft PowerPoint - hy2-12.pptx

한국기술교육대학교장영조 한국기술교육대학교전기전자통신공학부 1

마이크로프로세서 개요

Deok9_Exploit Technique

Microsoft PowerPoint - 30.ppt [호환 모드]

학습목차 r 컴퓨터본체에서 CPU 의위치살펴보기 r CPU 의성능 r CPU 의기능 r CPU 의조직 r 레지스터의조직 r 명령어사이클 r 명령어파이프라이닝 컴퓨터구조 2 9. CPU 조직과기능

Computer Architecture

프로그램카운터 (Program Counter) 명령레지스터 (Instruction Register) 누산기 (AC: Accumulator) 상태레지스터 (Status Register) PSWR(Program Status Word Register) 메모리주소레지스터 (M

DE1-SoC Board

Microsoft PowerPoint - hw8.ppt [호환 모드]

Microsoft PowerPoint - polling.pptx

. 고성능마이크로프로세서 LU 와레지스터 파일의구조 (2.). 직접디지털주파수합성기 (FS) 의구조 3. 고성능마이크로프로세서부동소수점연산기 (Floating-Point Unit) 구조 (2) (2.) (2.) 2. 암호화를위한 VLSI 구조와설계의개요 (2.) 다음참

라는 점이다. ARM7TDMI 같은 ARM7에서는 페치(fetch), 디코드 (decode) 그리고 실행(execute)의 3단계로 구성된 파이프라인을 적 V4 PF1 ARMv I-캐시 액세 + 다이내믹

T100MD+

온라인 IT 교육최강 ( 강의정보처리필기강사조대호 차시명 [CA-06 강 ] 프로세서와명령어차시 6 차시 학습내용 프로세서와명령어 학습목표 컴퓨터의구조와프로세서에대해이해할수있다 컴퓨터의명령어에대해이해할수있다 학습내용 1. 컴퓨터의구성 - 1

<4D F736F F F696E74202D20BBB7BBB7C7D15F FBEDFB0A3B1B3C0B05FC1A634C0CFC2F72E BC8A3C8AF20B8F0B5E55D>

<4D F736F F F696E74202D20BBB7BBB7C7D15F FBEDFB0A3B1B3C0B05FC1A636C0CFC2F72E BC8A3C8AF20B8F0B5E55D>

PowerPoint 프레젠테이션

(1) 주소지정방식 Address Mode 메모리접근 분기주소 명령어 직접번지 Reg. 지정 Reg. 간접 Base Index 간접 Immediate 상대번지 절대번지 Long 주소 Reg. 간접 Byte Access Bit Access 내부 Data M

인터럽트 (Interrupt) 범용입출력포트에서입출력의내용을처리하기위해매번입출력을요구하는플래그를검사하는일 (Pollong) 에대하여마이크로컨트롤러에게는상당한시간을소비하게만든다. 인터럽트란 CPU가현재처리하고있는일보다급하게처리해야할사건이발생했을때, 현재수행중인일을중단하고

untitled

학습목차 r 개념으로살펴보는 CPU 속의제어장치 r 마이크로연산 r 제어장치의동작 r 마이크로프로그램을이용한제어 컴퓨터구조 제어장치

6주차.key

INTRO Basic architecture of modern computers Basic and most used assembly instructions on x86 Installing an assembly compiler and RE tools Practice co

Microsoft PowerPoint os2.ppt [호환 모드]

Mango220 Android How to compile and Transfer image to Target

PowerPoint 프레젠테이션

API 매뉴얼

Microsoft PowerPoint - hy2-12.pptx

목차 제 1 장 inexio Touch Driver소개 소개 및 주요 기능 제품사양... 4 제 2 장 설치 및 실행 설치 시 주의사항 설치 권고 사양 프로그램 설치 하드웨

Remote UI Guide

9

Microsoft Word - ExecutionStack

Computer Architecture

Microsoft PowerPoint - 15-SMT_cho.ppt

untitled

슬라이드 1

강의10

KEY 디바이스 드라이버

Embedded System

ºÎ·ÏB

1

JVM 메모리구조

APOGEE Insight_KR_Base_3P11

CANTUS Evaluation Board Ap. Note

PRO1_09E [읽기 전용]

1217 WebTrafMon II

[8051] 강의자료.PDF

MAX+plus II Getting Started - 무작정따라하기

Chapter #01 Subject

정보보안 개론과 실습:네트워크

C# Programming Guide - Types

Microsoft PowerPoint - Master-ChiWeon_Yoon.ppt

<4D F736F F F696E74202D2037C0E52DC4B3BDC3BFCDB8DEB8F0B8AE>

Poison null byte Excuse the ads! We need some help to keep our site up. List 1 Conditions 2 Exploit plan 2.1 chunksize(p)!= prev_size (next_chunk(p) 3

2. GCC Assembler와 AVR Assembler의차이 A. GCC Assembler 를사용하는경우 i. Assembly Language Program은.S Extension 을갖는다. ii. C Language Program은.c Extension 을갖는다.

휠세미나3 ver0.4

임베디드시스템설계강의자료 6 system call 2/2 (2014 년도 1 학기 ) 김영진 아주대학교전자공학과

bn2019_2

<C0CCBCBCBFB52DC1A4B4EBBFF82DBCAEBBE7B3EDB9AE2D D382E687770>

< E20C6DFBFFEBEEE20C0DBBCBAC0BB20C0A7C7D12043BEF0BEEE20492E707074>

PowerPoint 프레젠테이션

Microsoft PowerPoint - a6.ppt [호환 모드]

리뉴얼 xtremI 최종 softcopy

Microsoft Word doc

PowerPoint 프레젠테이션

R50_51_kor_ch1

[ 마이크로프로세서 1] 1 주차 1 차시. 마이크로프로세서개요 1 주차 1 차시마이크로프로세서개요 학습목표 1. 마이크로프로세서 (Microprocessor) 를설명할수있다. 2. 마이크로컨트롤러를성능에따라분류할수있다. 학습내용 1 : 마이크로프로세서 (Micropr

목차 1. 제품 소개 특징 개요 Function table 기능 소개 Copy Compare Copy & Compare Erase

-. Data Field 의, 개수, data 등으로구성되며, 각 에따라구성이달라집니다. -. Data 모든 의 data는 2byte로구성됩니다. Data Type는 Integer, Float형에따라다르게처리됩니다. ( 부호가없는 data 0~65535 까지부호가있는

PowerPoint 프레젠테이션

PCServerMgmt7

PWR PWR HDD HDD USB USB Quick Network Setup Guide xdsl/cable Modem PC DVR 1~3 1.. DVR DVR IP xdsl Cable xdsl Cable PC PC DDNS (

4. 다음주소지정방식중속도가가장빠른주소방식은? 가. immediate addressing mode 나. direct addressing mode 다. indirect addressing mode 라. index register. 5. 간접주소 (indirect addr

PowerPoint 프레젠테이션

Microsoft PowerPoint - e2.ppt [호환 모드]

No Slide Title

PowerPoint 프레젠테이션

Microsoft Word ARM_ver2_0a.docx

Transcription:

ARM 프로세서요약 www.dignsys.com

Contents 1. 임베디드시스템의구조 2. 임베디드시스템의개발 3. ARM 아키텍처 4. ARM 프로세서의구조 5. ARM 프로세서명령어 6. Cached ARM 7. 임베디드소프트웨어개발 8. S3C2410 및실습용보드의이해 9. 디바이스제어 1

프로세서의구조 레지스터 (Register) 산술논리연산장치 (ALU : Arithmetic Logic Unit) 제어장치 (CU : Control Unit) 버스 (BUS) 레지스터 내부프로세서버스 제어신호 제어장치 보수기쉬프터 산술및논리연산기상태 FLAG ALU 2

레지스터 (Register) 프로세서내부에서데이터를일시적으로보관하는기억장치 Flip-flop 와 Latch 로구성되어있다 범용레지스터 프로그램또는데이터처리에필요한작업을수행하기위해서사용 제어용레지스터 프로그램이나프로세서를제어 프로그램카운터 (PC : Program Counter) 등 상태레지스터 프로세서의상태를나타낸다. 3

버스 (BUS) 버스 (BUS) 란? 컴퓨팅시스템의각모듈에서발생한신호를공유해서사용할수있도록만든신호의집합 구동주체 (CPU 등 ) 에의해서해당소자에데이터를읽거나쓸수있도록구성된다. 어드레스버스 (address bus), 제어버스 (control bus), 그리고데이터버스 (data bus) 로 구성된다. 프로세서 레지스터 주소 제어신호 명령또는데이터 메모리 명령 / 데이터 4

폰노이만아키텍쳐 폰노이만 (Von-Neumann) 아키텍쳐 명령어와데이터를위한메모리인터페이스가하나이다. 명령어를읽을때데이터를읽거나쓸수없다. IBM 계열 PC( 개인용 PC), ARM7 등 프로세서 명령어 레지스터 어드레스버스데이터버스 데이터 메모리 5

하버드아키텍쳐 하버드 (Havard) 아키텍쳐 명령어를위한메모리인터페이스와데이터를위한메모리인터페이스가분리되어있다. 명령어를읽을때데이터를읽거나쓸수있어성능이우수하다. 버스시스템이복잡하여설계가복잡하다 ARM9, ARM10, XScale 등 프로세서 레지스터 명령어 데이터 어드레스버스데이터버스 메모리 6

Cache 메모리시스템 CPU 400MHz Main Memory 10MHz CPU Cache Main Memory 10MHz Bus 66MHz Bus 66MHz 고속의 CPU 가버스및메모리속도에의존적이며늦다 CPU 주변에고속의메모리를두고자주사용되는명령과데이터를저장하여시스템성능을개선 7

Cache 의읽기동작 Cache의성능 CPU가읽고자하는명령이나데이터가 Cache 내에존재 (Cache Hit) 하여야할회수가많아야 Cache의성능이우수하다. CPU가데이터나명령을읽고자하는데 Cache 내에원하는명령이나데이터가없으면 (Cache Miss), Cache 제어기는시스템메모리장치에서 line 크기만큼명령이나데이터를읽어 Cache 메모리에저장 (Line Fill) 한다. 8

Cache 의쓰기동작 Write Through CPU가특정주소에명령이나데이터를 write하는경우, 해당하는명령이나데이터가 Cache 메모리에있을때, Cache 메모리와외부메모리에모두쓰기동작을한다. Write Back CPU가특정주소에명령이나데이터를 write하는경우, 해당하는명령이나데이터가 Cache 메모리에있을때, Cache 메모리에만쓰기동작을하고, 외부의메모리에는나중에기록된다. 9

Microprocessor Cache Cache Improve Overall System Performance Reducing read and write cycle time by using fast memory Improving memory bus utilization 10

Cache Configurations Unified vs. Separated 11

Cache Configurations Look through vs. Look aside 12

MMU (Memory Management Units) 어드레스변환 (translation) 기능 CPU 에서사용되는 logical 한 Virtual 어드레스를 physical 어드레스로변환 메모리보호 (protection) 기능 CPU Virtual 어드레스 Memory Management Unit Physical 어드레스 Main Memory 13

Memory Mapped I/O 와 I/O-mapped I/O 구분 Memory mapped I/O I/O-mapped I/O 대표적인 CPU I/O 장치의영역 명령어 ARM, PowerPC, M68K 메모리의일부를 I/O 장치로사용 메모리와 I/O 장치모두메모리동작명령으로억세스하며, 각영역의구분은어드레스로한다. x86 계열 메모리영역과는별도의 I/O 번지영역이존재 메모리억세스명령과 I/O 억세스명령 (in/out) 이구분 하드웨어 어드레스를해석하는디코더회로에따라메모리혹은 I/O 장치가선택 메모리번지와 I/O 번지를구분하는신호가존재. 기타 - I/O 영역은 Non-cacheable 로설정해야한다 - I/O 영역변수는 volatile type 으로선언해야한다. 14

인터럽트인터페이스 인터럽트제어기 입출력장치에서발생되는인터럽트의요청을제어한다. 하드웨어에따라인터럽트응답을위한신호도제공된다. CPU 인터럽트요청 irq 인터럽트응답 irqack 인터럽트제어기 Mask, Pending 레지스터 인터럽트요청 irq 인터럽트응답 irqack I/O 장치 시리얼, 네트워크등 15

인터럽트의발생 인터럽트요청 (Interrupt Request) 외부장치에서입출력동작에대한처리를프로세서에요청 인터럽트의발생은하드웨어적으로이루어진다. 따라서인터럽트가발생하면프로세서가스스로프로그램의개입없이일련의동작을수행해야한다. 인터럽트 Vector 인터럽트서비스루틴을처리하기위한명령또는위치가저장된메모리공간 인터럽트의요청에따라프로세서는정해진절차에의하여발생된인터럽트의처리여부를결정하고인터럽트를서비스하는절차 (ISR : Interrupt Service Routine) 를수행한다. 인터럽트발생의예 시리얼로데이터입력완료 시리얼데이터전송준비완료, 또는전송에러발생 이더넷데이터수신완료, 이더넷전송에러등 16

인터럽트발생에의한프로세서흐름제어 MAIN 프로그램루틴 INT 발생 ISR (Interrupt Service Routine) INT 발생 ISR (Interrupt Service Routine) 17

인터럽트처리절차 입출력장치에서인터럽트발생 프로세서에서인터럽트인식 프로세서의현재상태를저장 하드웨어적으로처리된다. 인터럽트처리를위한프로세서상태변경 인터럽트처리후되돌아갈주소 (PC) 저장 인터럽트 Vector 로 PC 위치변경 인터럽트처리 ( 인터럽트 ISR) 18

인터럽트서비스루틴 (ISR) 인터럽트처리 ( 인터럽트 ISR) 스택에프로세서의레지스터정보저장 모두소프트웨어적으로처리된다. 입출력동작을처리 프로세서의상태및되돌아갈주소복원 기존에수행중이던프로그램수행 19

Contents 1. 임베디드시스템의구조 2. 임베디드시스템의개발 3. ARM 아키텍처 4. ARM 프로세서의구조 5. ARM 프로세서명령어 6. Cached ARM 7. 임베디드소프트웨어개발 8. S3C2410 및실습용보드의이해 9. 디바이스제어 20

임베디드시스템설계절차 시스템용도분석 하드웨어사양결정 CPU, 메모리및주변장치선정 소프트웨어사양결정 OS 사용여부및 OS 선정 개발환경선정 회로도및 PCB 설계 하드웨어조립및시험 소프트웨어설계 디바이스드라이버설계 어플리케이션설계 시스템통합시험 21

디바이스드라이버포팅 디바이스 (Device ) 네트워크어댑터, LCD 디스플레이, PCMCIA, Audio, 터미널, 키보드, 하드디스크, 플로피디스크, 프린터등과같은주변장치들을말함 디바이스의구동에필요한프로그램, 즉디바이스드라이버가필수적으로요구됨 Device Driver 실제장치부분을추상화시켜사용자프로그램이정형화된인터페이스를통해디바이스를접근할수있도록해주는프로그램 디바이스관리에필요한정형화된인터페이스구현에요구되는함수와자료구조의집합체 응용프로그램이 H/W를제어할수있도록인터페이스제공 하드웨어와독립적인프로그램작성을가능하게함 22

디바이스드라이버구조 Application area Application System Call Interface VFS Kernel area Buffer Cache Network Subsystem Char Device Driver Block D/D Network D/D Device Interface Hardware Hardware 23

Contents 1. 임베디드시스템의구조 2. 임베디드시스템의개발 3. ARM 아키텍처 4. ARM 프로세서의구조 5. ARM 프로세서명령어 6. Cached ARM 7. 임베디드소프트웨어개발 8. S3C2410 및실습용보드의이해 9. 디바이스제어 24

Hard Macrocell 과 Synthesizable Core Hard Macrocell Layout level로제공 사용자는 core를변경불가 ARM710T, ARM920T 등이대표적인예이다. Synthesizable Core RTL(Register Transfer Level) 로제공 사용자는 license 조건에의해 core의내부변경가능 내부메모리크기등 기능은변경불가 ARM7TDMI-S, ARM926EJ-S, ARM1136J-S 등 25

ARM 아키텍처명명법 ARM {x}{y}{z} {T}{D}{M}{I}{E}{J}{F}{-S} x : 제품군 y: MMU/MPU Z: 캐시 T: Thumb 16bit Decoder D: JTAG Debug M: Hardware Multiplier( 고속곱셈기 ) I: Embedded ICE macrocell E: DSP Enhanced 확장명령어 J: Jazelle ( Java extension 8x performance for Java) F: VFP 장치 -S: synthesizible 버전 26

ARM Architecture 의시장변화 ARM1136EJ 27

ARM 7 Family ARM7TDMI Core 32/16bit RISC Architecture 3 stage pipelining(fetch/decode/execution) Hard macrocell 32-bit ARM/16-bit Thumb Instructions Unified bus architecture 32-bit ALU & High-performance multiplier low-power, small die size Coprocessor interface Embedded ICE-RT suport, JTAG Interface Embedded Trace Macro cell ARM720T ARM7TDMI + MMU + Cache(8kb Unified) + WB + AMBA 28

ARM Core 비교 29

Aligned 과 Un-aligned 억세스 프로세서는메모리억세스 Byte, halfword(2 바이트 ) 또는 word(4 바이트 ) 단위로만가능 Aligned Access Un-aligned Access 31 24 23 16 15 8 7 0 11 22 33 44 0x0C 31 24 23 16 15 8 7 0 11 22 33 44 0x0C 11 22 33 44 0x08 11 22 33 44 0x08 11 22 33 44 0x04 11 22 33 44 0x04 11 22 33 44 0x00 11 22 33 44 0x00 Word 단위 Access : 0x00, 0x04, 0x08, Half-Word Access : 0x00, 0x02, 0x04, 0x06, 0x08, Word 단위 Access : 0x01, 0x06, 0x07, Half-Word Access : 0x01, 0x03, 0x05 Abort Abort 30

Little-Endian 과 Big-Endian Big-Endian Little-Endian 메모리의하위어드레스 (Byte 어드레스 메모리의하위어드레스 (Byte 어드레스 0 ) 에 MSB(Most Significant Byte) 가 0 ) 에 LSB(Least Significant Byte) 가 위치하고있는메모리구조 위치하고있는메모리구조 MSB 는메모리데이터의가장상위 LSB 는메모리데이터의가장하위비트 비트 24 에서 31 까지 0 에서 7 까지 31 24 23 16 15 8 7 0 8 9 10 11 4 5 6 7 0x08 0x04 0 1 2 3 0x00 데이터비트 상위어드레스 31 24 23 16 15 8 7 0 11 10 9 8 7 6 5 4 0x08 0x04 3 2 1 0 0x00 Byte 어드레스 Word 어드레스 0,4,8 은 word 어드레스, 0,2,4,6,8,10 은 halfword 어드레스, 0,1,2,3,4, 은 byte 어드레스를니타낸다. word 로메모리를억세스하는데 1,2 또는 3 번지를억세스하면 un-aligned 억세스가된다. 31

Operating 모드의변환과레지스터 User SVC r0 r1 r2 r3 r4 r5 r6 r7 r8 Context 정보 5. copy 외부메모리 stack User mode r0-r12, r15, and cpsr r9 r10 r11 r12 (1) 복원 스택의위치를나타낸다. 4. PC = Vector r13 (sp) r14 (lr) r15 (pc) cpsr 3. copy (2) CPSR, PC 를동시에복원 1. copy r13 (sp) r14 (lr) spsr 2. CPSR 변경 -Mode -I/F 비트 -T Bit 32

프로세서의 Reset 과 Start-up 코드 프로세서에리셋신호가입력되면실행중이던명령을멈추고 1 SPSR_svc에 CPSR 값을복사 2 CPSR의값을변경 Mode bit M[4:0] 를 Supervisor 모드인 10011 b로변경 I 비트와 F 비트를 1로세트하여인터럽트를 disable T 비트를 0으로클리어하여 ARM state로변경 3 PC 값을 LR_svc 레지스터에복사 4 PC 값을 Reset Vector 어드레스인 0x00000000으로변경 5 Reset 핸들러로분기하여시스템의초기화수행 33

Reset Handler Reset Vector 에서분기된어셈블리어로작성된처리루틴 주요동작 시스템초기화작업수행 시스템의클록 메모리컨트롤러 입출력포트의구성 MMU 등 인터럽트와스택초기화 리셋핸들러의마지막에서는 main() 함수와같은 C 로구성된함수를호출 이부분을 startup 코드라고부른다. 34

Startup 코드 Startup 코드를작성하기위해서는 Programmer s model, 특히명령어 시스템하드웨어구조및기능에대한전반적인사항등을모두알아야한다. Startup 코드의필수사항 Exception Vector Table의설정 Reset 핸들러의구성 35

Contents 1. 임베디드시스템의구조 2. 임베디드시스템의개발 3. ARM 아키텍처 4. ARM 프로세서의구조 5. ARM 프로세서명령어 6. Cached ARM 7. 임베디드소프트웨어개발 8. S3C2410 및실습용보드의이해 9. 디바이스제어 36

ARM7TDM 코어의내부구조 A[31:0] 어드레스레지스터 PC +1 Register bank PC update 제어신호 제어장치 ALU-bus A-bus Multiplier B-bus Barrel Shifter Immediate 상수 명령어해석기 ( Instruction Decoder ) Data in 레지스터 Data out 레지스터 ALU D[31:0] 37

Data Processing 명령과내부버스 ADD Rd, Rs, OP2 OP 코드 Operand 2 : B 버스와 Barrel shifter 를통해 ALU 에입력 Operand 1 : A 버스를통해 ALU 에입력, Source 레지스터 Destination 레지스터 : ALU 버스를통해레지스터뱅크에 write 38

Data Transfer 명령과내부버스 LDR Rd, [ Rb, Offset ] OP 코드 Offset : B 버스와 Barrel shifter 를통해 ALU 에입력 Base 레지스터 : A 버스를통해 ALU 에입력 Destination 레지스터 : 데이터버스를통해읽혀진데이터가 write 되는레지스터 39

ARM7TDMI 코어 ARM7TDM core 제어신호 어드레스버스 (A[31:0]) 데이터버스 (D[31:0]) BREAK EmbeddedICE-RT TAP ARM7TDMI 는 ARM7TDM 코어에 EmbeddedICE 로직이추가된프로세서이다 JTAG 인터페이스신호 40

이상적인 pipeline 동작 명령 ADD SUB AND MVN XOR MOV SBC XOR 사이클 1 2 3 4 5 6 7 8 9 10 F D E F D E F D E F D E F D E F D E F D E F D E F : Fetch D : Decode E : Execute 매사이클마다명령을하나씩실행하는경우 모든명령이메모리의참조없이레지스터내의값을가지고데이터를처리 CPI 는 1 41

LDR 명령과 pipeline 동작 명령 ADD SUB AND 사이클 1 2 3 4 5 6 7 8 9 10 F D E F D E F D E LDR F D E M W XOR MOV F D S S E F S S D E SBC F D F : Fetch D : Decode E : Execute M : Memory W : Write S : Stall LDR 명령이사용되는경우 메모리에서데이터를읽는메모리 (M) stage 와레지스터에 write 하는 Write(W) stage 추가 레지스터에 write 동작이끝날때까지다른명령은 stall 된다. 6 clock 사이클동안에 4 개의명령실행 : CPI 는 1.5 42

Branch 명령과 pipeline 동작 명령 ADD 사이클 1 2 3 4 5 6 7 8 9 10 F D E BL 0x100 F D E L A AND MVN F D F 버려진다 MOV (0x100) F D E SBC F D E F : Fetch D : Decode E : Execute L : Link Return A : Adjust Branch 명령이사용되면 Fetch 한명령을모두버리고지정된분기하여새로운명령을읽는다 Pipeline 이깨진다 (break) 43

Cache 를가진 ARM7TDMI 프로세서 ARM7TDMI core CP15 Address Data MMU Data write Write Buffer Bus Interface Cache Data read 44

ARM9TDM 코어의내부구조 IA[31:0] ID[31:0] 어드레스레지스터 PC +1 Register bank PC update 명령어해석기 ( Instruction Decoder ) 제어장치 제어신호 Data in 레지스터 ALU-bus A-bus Multiplier B-bus Barrel Shifter C-bus DA[31:0] 어드레스레지스터 Data out 레지스터 DD[31:0] ALU +1 45

ARM9TDMI pipeline Instruction Fetch ARM/Thumb decode Reg Select Reg Read Shift ALU Memory Access Register Write FETCH DECODE EXECUTE MEMORY WRITE ARM : Thumb : PC PC PC-4 PC-2 PC-8 PC-4 ARM9 의경우 ARM7 과달리 32 비트 ARM 명령어와 16 비트 Thumb 명령어 decoder 를별도로가지고있다. Memory stage 가추가되어 LDR 명령이사용되더라도매사이클마다하나의 명령이실행된다. 46

이상적인 pipeline 동작 명령 사이클 1 2 3 4 5 6 7 8 9 10 ADD R0, R1, R2 F D E M W SUB R1, R2, R4 F D E M W AND R2, R1, R0 F D E M W LDR R4, [ R5 ] F D E M W XOR R0, R1, R2 F D E M W ADD R1, R2, R4 F D E M W SBC R1, R2, R3 F D E M F : Fetch D : Decode E : Execute M : Memory W : Write I : Interlock LDR 명령이사용되더라도매사이클마다하나의명령어실행 CPI = 1 단 LDR 명령의 Destination 레지스터가다음명령에서사용되면않된다. 47

LDR 명령과 Interlock 사이클 명령 사이클 1 2 3 4 5 6 7 8 9 10 ADD R0, R1, R2 F D E M W SUB R1, R2, R4 F D E M W AND R2, R1, R0 F D E M W LDR R4, [ R5 ] F D E M W XOR R0, R4, R2 F D I E M W ADD R1, R2, R3 F I D E M SBC R1, R2, R3 F D E F : Fetch D : Decode E : Execute M : Memory W : Write I : Interlock LDR 명령과 Interlock 사이클 LDR 명령의 Destination 레지스터가다음명령에서사용되는경우발생 CPI = 1.2 48

Cache 를가진 ARM9TDMI 프로세서 ARM9TDMI core CP15 Address Data Address Data MMU Data write Write Buffer Bus Interface Data read Instruction Cache Data Cache 49

Contents 1. 임베디드시스템의구조 2. 임베디드시스템의개발 3. ARM 아키텍처 4. ARM 프로세서의구조 5. ARM 프로세서명령어 6. Cached ARM 7. 임베디드소프트웨어개발 8. S3C2410 및실습용보드의이해 9. 디바이스제어 50

명령어구조 Encoded in a 32-bit word OP code + two or three registers Byte(8bits) or Word(32bits) memory access Memory access only through LOAD and STORE instructions Conditional Execution of instructions All instructions are conditionally executed 51

32-bit v4t Instructions 52

Ex) 명령어예제 a = ( b==c)? d : e; CMPS MOVEQ MOVNE r2, r3 r1, r4 r1, r5 53

Memory Addressing Mode (1) Memory Access Indexed Addressing Mode Effective Address = base register (Rn)+ a signed offset (Rm) a signed offset = immediate or register (Rm) Examples LDR Rd, [Rn, #offset] ;Rd [[Rn] + offset] LDR Rd, [Rn, Rm] ;Rd [[Rn] + [Rm]] LDR Rd, [Rn] ;Rd [[Rn]] STR Rd, [Rn] ;Rd [Rn] Byte access: LDRB, STRB 54

Memory Addressing Mode (2) Variations of indexed addressing modes Pre-indexed mode EA = base register(r1) + a signed offset LDR R0, [R1, R2] ;R0 [R1] + [R2] Pre-indexed with writeback mode(update) EA = base register(r1) + a signed offset R1 = EA LDR R0, [R1, R2]! ; R0 [R1] + [R2] R1 [R1] + [R2] Post-indexed mode EA = R1 R1 = base register(r1) + a signed offset LDR R0, [R1], R2 ; R0 [R1] R1 [R1]+[R2] 55

Memory Addressing Mode (3) Shifted offset The offset magnitude in Rm could be shifted by the accompanying shift operation. Pre-indexed mode LDR R0, [R1, R2, LSL #4] Pre-indexed mode writeback mode(update) LDR R0, [R1, R2, LSL #4]! Post-indexed mode LDR R0, [R1], R2, LSL #4 Related mode 56

Pre-indexed addressing mode 57

Pre-indexed addressing mode with writebacke 58

Post-indexed addressing 59

Relative address 60

조건플래그 (Condition Flags) 31 28 27 24 23 16 15 8 7 6 5 4 0 N Z C V Q J I F T Mode f s x c Condition Code flag Reserved Control bits Flag 논리연산산술연산 Negative (N=1) 사용되지않는다 Signed 연산에서비트 31 이세트되어 Negative 결과발생 Zero (Z=1) 연산결과가모두 0 연산결과가 0 Carry (C=1) Shift 동작결과 carry 발생연산결과가 32 비트를넘으면세트 overflow (O=1) 사용되지않는다연산결과가 31 비트를넘어 sign bit 상실 61

Condition Field 62

Operand2 와 Barrel Shifter Operand 1 Operand 2 Barrel Shifter 레지스터 Shift 동작과같이사용가능 Shift value 5 bit unsigned integer 하위 5비트에 shift value를가진다른 register ALU Result Immediate 상수 8 bit number 짝수 (even number) 만큼 rotate right 하여표현이가능한 32비트상수 32 비트상수가사용되면어셈블러가 rotate 값으로계산 63

32 비트상수사용법 32비트상수를레지스터로옮길수있는방법제공 MOV 또는 MVN 명령으로는 32비트상수를레지스터로 move 불가 Assembler에서 32비트상수를읽을수있는방법제공 Data Transfer 명령을이용한 32비트상수 loading LDR rd, =constant 어셈블러에서는사용된값 (constant) 에따라유효한명령어사용 8 비트와 ROR*2로표현가능하면 MOV 또는 MVN으로변환 LDR r0, =0xFF MOV r0, #0xFF 32 비트로만표현이가능하면코드영역내에상수값 (Literal pool) 을저장하고 PC-relative 한 LDR 명령으로변환 LDR r0, =0x5555AAAA LDR r0, [ PC, #offset ] DCD 0x5555AAAA 64

Relative 어드레스지정방식 LABEL 지정에의한어드레스지정 어셈블리어에서 LABEL 을지정하면어셈블러가 [PC+LABEL] 형태의 주소로변환하여참조 LDR r0, label_1. label_1 DCD 0x12345678 LDR r0, [ PC, #offset ] DCD 0x12345678 literal pool을사용한 32 비트데이터의 Load 어셈블러가코드영역내에데이터저장후 [PC+LABEL] 형태의주소로변환하여참조 LDR r0, [ PC, #offset ] LDR r0, =0x5555AAAA DCD 0x5555AAAA 65

Pre-indexed 어드레스지정방식 Base 레지스터 (Rn) 과 <offset> 으로주소계산후데이터전송 데이터전송이후에도 Rn 의값은별도지정이없으면변하지않는다 LDR r0, [ r1, #4 ] 상수 : 0x00000004 memory (byte addressable) 1 Word = 4 bytes + 0x3bf8 Address 0x00001238 R1: R0: 0x00001234 0x512a Address 0x00001234??????????? 0x00003bf8 66

Pre-indexed 방식과 Auto update Pre-indexed 방식을사용하여참조후 Base 레지스터 Rn 갱신 LDR r0, [ r1, #4 ]! 0x00000004 memory (byte addressable) 1 Word = 4 bytes contents of r1 updated 0x1238 R1: + 0x3bf8 Address 0x00001238 R0: 0x00001234 0x00001238 0x512a Address 0x00001234 0x00003bf8 67

Post-indexed 어드레스지정방식 Base 레지스터 (Rn) 가지정하는주소에데이터의전송후 Rn 값과 <Offset> 의연산결과로 Rn 갱신 LDR r0, [ r1 ], #4 contents of r1 updated 0x00000004 + memory (byte addressable) R1: 0x3bf8 0x00001234 0x00001238 Address 0x00001238 R0: 0x0000512a 0x512a Address 0x00001234 68

LDM/STM 의레지스터 LIST <register_list> 에서사용가능한레지스터 R0에서 R15(PC) 까지최재 16개 연속된레지스터표현 {r0-r5} 와같이 - 로표현가능 <register_list> 의순서지정 항상 low order의 register에서 high order 순으로지정 LDM r10, {r2,r3,r1} 실제동작 LDM r10, {r1,r2,r3} 69

LDM/STM 의어드레스지정방식 Addressing Mode 키워드 ( 표현방식 ) 데이타 스택 유효어드레스계산 Pre-increment Load LDMIB LDMED Increment before load Post-increment Load LDMIA LDMFD Increment after load Pre-decrement Load LDMDB LDMEA Decrement before load Post-decrement Load LDMDA LDMFA Decrement after load Pre-increment Store STMIB STMFA Increment before store Post-increment Store STMIA STMEA Increment after store Pre-decrement Store STMDB STMFD Decrement before store Post-decrement Store STMDA STMED Decrement after store 70

Pre-Increment 어드레스지정 STMIB r9!, {r0,r1,r2} Base 레지스터 (r9) = 0x100C 데이터저장전어드레스증가 (Increment Before) R0: R1: R2: R9: 0x01 0x02 0x03 0x100C 0x1018 0x03 0x02 0x01 0x1020 0x101C 0x1018 0x1014 0x1010 0x100C 0x1008 0x1004 0x1000 0x0FFC 0x0FF8 0x0FF4 1 r9 -> 0x1010 증가후 r0 저장 2 r9 -> 0x1014 증가후 r1 저장 3 r9 -> 0x1018 증가후 r2 저장 4 {!}, auto-update 옵션이있으면 r9 값을 0x1018로변경 71

Post-Increment 어드레스지정 STMIA r9!, {r0,r1,r2} Base 레지스터 (r9) = 0x100C 데이터저장후어드레스증가 (Increment After) R0: R1: R2: R9: 0x01 0x02 0x03 0x100C 0x1018 0x03 0x02 0x01 0x1020 0x101C 0x1018 0x1014 0x1010 0x100C 0x1008 0x1004 0x1000 0x0FFC 0x0FF8 0x0FF4 1 2 3 4 0x100c에 r0 저장후 r9 -> 0x1010 증가 0x1010에 r1 저장후 r9 -> 0x1014 증가 0x1014에 r2 저장후 r9 -> 0x1018 증가 {!}, auto-update 옵션이있으면 r9 값을 0x1018로변경 72

Pre-Decrement 어드레스지정 STMDB r9!, {r0,r1,r2} Base 레지스터 (r9) = 0x100C 어드레스를 <register_list> 개수만큼 감소해놓고, 어드레스를증가하면서 R0: R1: R2: R9: 0x01 0x02 0x03 0x100C 0x1000 0x03 0x02 0x01 0x1020 0x101C 0x1018 0x1014 0x1010 0x100C 0x1008 0x1004 0x1000 0x0FFC 0x0FF8 0x0FF4 데이터저장 (Decrement Before) 1 어드레스를 0x1000로감소 2 0x1000에 r0 저장후어드레스증가 3 0x1004에 r1 저장후어드레스증가 4 0x1008에 r2 저장후어드레스증가 5 {!}, auto-update 옵션이있으면 r9 값을 0x1000로변경 73

Post-Decrement 어드레스지정 STMDA r9!, {r0,r1,r2} Base 레지스터 (r9) = 0x100C 어드레스를 <register_list> 개수만큼 감소해놓고, 어드레스를증가하면서 R0: R1: R2: R9: 0x01 0x02 0x03 0x100C 0x1000 0x03 0x02 0x01 0x1020 0x101C 0x1018 0x1014 0x1010 0x100C 0x1008 0x1004 0x1000 0x0FFC 0x0FF8 0x0FF4 데이터저장 (Decrement After) 1 어드레스를 0x1000로감소 2 어드레스증가후 0x1004에 r0 저장 3 어드레스증가후 0x1008에 r1 저장 4 어드레스증가후 0x100C에 r2 저장 5 {!}, auto-update 옵션이있으면 r9 값을 0x1000로변경 74

LDM/STM 의스택 (Stacks) 동작 스택동작 새로운데이터를 PUSH 를통해 top 위치에삽입하고, POP 을통해가장최근에삽입된데이터를꺼내는자료구조형태. 스택의위치지정 Base pointer : Stack 의 bottom 위치를지정 Stack pointer : Stack 의 top 위치를지정 PUSH {4, 8, 6} POP SP 6 8 SP 8 Result of pop = 6 SP BASE BASE 4 BASE 4 75

스택 type 에따른포인트변화 Top of memory Old SP SP r5 r4 r3 r1 r0 Old SP SP r5 r4 r3 r1 r0 SP Old SP r5 r4 r3 r1 r0 SP Old SP r5 r4 r3 r1 r0 STMFD sp!, {r0, r1, r3-r5} STMED sp!, {r0, r1, r3-r5} STMFA sp!, {r0, r1, r3-r5} STMEA sp!, {r0, r1, r3-r5} 76

Stack 의 Push 동작 STMFD sp!, {r0-r1,lr} Base 레지스터 (sp) = 0x100C Stack 에 context 정보저장 1 어드레스를 0x1000 로감소 R0: R1: sp: lr: pc: 0x01 0x02 0x100C 0x1000 0x1234 0x4321 0x1234 0x02 0x01 0x1020 0x101C 0x1018 0x1014 0x1010 0x100C 0x1008 0x1004 0x1000 0x0FFC 0x0FF8 0x0FF4 2 3 4 레지스터값저장후어드레스증가링크레지스터저장후어드레스증가 Stack의위치를 0x1000로변경 77

Stack 의 Pop 동작 LDMFD sp!, {r0-r1,pc} Base 레지스터 (sp) = 0x1000 Stack 에서 context 정보를읽는다 1 레지스터값을읽은후어드레스증가 R0: R1: sp: lr: pc: 0x01 0x?? 0x02 0x?? 0x100C 0x1000 0x1234 0x4321 0x1234 0x1234 0x02 0x01 0x1020 0x101C 0x1018 0x1014 0x1010 0x100C 0x1008 0x1004 0x1000 0x0FFC 0x0FF8 0x0FF4 2 3 링크레지스터 (lr) 값을읽어프로그램 카운터 (pc) 에저장 Stack 의위치를 0x100C 로변경 78

스택과서브루틴 스택의용도중하나는서브루틴을위한일시적인레지스터저장소를제공하는것. 서브루틴에서사용되는데이터를스택에 push하고, caller 함수로 return 하기전에 pop 을통해원래의정보로환원시키는데사용 : STMFD sp!,{r0-r12, lr} ; stack all registers... ; and the return address... LDMFD sp!,{r0-r12, pc} ; load all the registers ; and return automatically privilege 모드에서 LDM 을사용하여 Pop 을할때 S bit set 옵션인 ^ 가레지스터리스트에있으면 SPSR 이 CPSR 로복사된다. 79

Contents 1. 임베디드시스템의구조 2. 임베디드시스템의개발 3. ARM 아키텍처 4. ARM 프로세서의구조 5. ARM 프로세서명령어 6. Cached ARM 7. 임베디드소프트웨어개발 8. S3C2410 및실습용보드의이해 9. 디바이스제어 80

ARM 의메모리시스템 ARM 프로세서 MMU On-chip Caches ARM core Memory Memory Controller Buffers Physical Addresses Virtual Addresses 81

Cached ARM 프로세서의제어 CP15 인터페이스를통해서제어 Cache, MPU or MMU, endian 제어등 Coprocessor Register Transfer 명령 MRC : Move to Register from Coprocessor Coprocessor 레지스터내용을 ARM 레지스터로전송 MCR : Move to Coprocessor from Register ARM 레지스터의내용을 Coprocessor 레지스터로전송 MCR/MRC{cond} p15, opcode_1, rd, cn, cm, opcode_2 p15 - coprocessor 15를나타낸다 opcode_1 - always zero rd ARM의 source 또는 destination 레지스터 cn - primary CP15 register cm - additional register name opcode_2 - additional information 표시 82

CP15 레지스터 (ARM920T) Register 용도비고 0 ID code register Opcode_2=0 Cache type register Opcode_2=1 1 Control Register Cache, MMU enable, Endian Clock, 제어등 2 Translation table base register 3 Domain access control register 5 Fault status register 6 Fault address register 7 Cache operation register Cache control 8 TLB operation register 9 Cache lockdown register 10 TLB lockdown register 13 FSCE PID register Fast Context Switching Extension 14 Debug support register DCC enabled 4, 11, 12 Reserved 83

CP15 레지스터 (XScale) Register 용도비고 0 ID code register Opcode_2=0 Cache type register Opcode_2=1 1 Control Register Cache, MMU enable, Endian Clock, 제어등 2 Translation table base register 3 Domain access control register 5 Fault status register 6 Fault address register 7 Cache operation register Cache control 8 TLB operation register 9 Read buffer operation 10 TLB lockdown register 13 FSCE PID register Fast Context Switching Extension 14 Debug support register 15 Test & Clock control 11, 11, 12 Reserved 84

MMU 의구성 Translation Lookaside Buffer (TLB) 최근에사용된 Virtual address 를 physical address 로변화하는정보와 access permission 에대한정보를저장하고있는일종의 Cache Translation Table Walking Logic TLB 를 update 하고관리하는기능을가진 logic Access Control Logic 85

Translation Table Physical 메모리에있는 translation 정보를가지고있는 Table Level 1 Translation Table 4096 개의 32 비트 translation table entry 4GB 메모리를 virtual address 1MB 단위로나누어관리 Virtual address 비트 [31:20] 로정렬 Physical memory 에대한 1MB section 단위의 address translation 정보와 access control 정보를가지거나, 레벨 2 table 에대한주소정보를가진다. Level 2 Translation Table 64KB(large page), 4KB(small page), 1KB(tiny page) 단위의 translation table 을정보를가지고있다. 각 translation table 에는 address translation 정보와 access control 정보를가진다. 86

Translation Lookaside Buffer (TLB) 최근에사용된 Virtual address 를 physical address 로변화하는정보와 access permission 에대한정보를저장하고있는일종의 Cache TLB 가 Virtual 어드레스에대한 translation table entry 를가지고있으면 access control logic 이 access 가능을판단 접근이허용되면 virtual address 를 physical address 로변환후 access 접근의허용이않되면 CPU 에 Abort 구동 TLB 에 virtual 어드레스에대한정보가없으면 translation table walking logic 에서 table 정보를 physical 메모리에서읽어 TLB update 87

MMU 와메모리구성 Physical Addresses Space Virtual Addresses Space System Memory Instructions Data 32 B MMU ITLB C A PA VA DTLB C A PA VA I-CACHE D-CACHE ARM 프로세서 ARM core Translation Table TLB 관리 Translation Table Base Register 88

MMU 의어드레스변환 Physical Addresses 1 MB Sections Level 1 Translation Table 4096 Entries Virtual Addresses 1 MB Sections 0xFFF 00000 0xFFC 00000 0xFFF 1 1 0 AP Domain Selector C B 0xFFF AP Domain Selector 1 C B 1 0 0xFFF 00000 0xFFC 00000 0x004 00000 0x003 00000 0x002 00000 0x001 00000 0x000 00000 0x002 AP Domain Selector 1 C B 1 0 Domain Selector Domain Selector Fine Table Base 1 1 1 Coarse Table Base 1 0 1 0 0 0x000 AP Domain Selector 1 C B 1 0 0x004 00000 0x003 00000 0x002 00000 0x001 00000 0x000 00000 Fault Coarse Level 2 Translation Table Fine Level 2 Translation Table 89

Level 1 Descriptor Level 1 Descriptor의종류 Fault Section descriptor Coarse or fine page descriptor Coarse page 는 256 entry의 Level 2 table을가진다 Fine page는 1024 entry의 Level 2 table을가진다 Descriptor Type 31 20 19 12 11 10 9 8 7 6 5 4 3 2 1 0 Course Level 2 Descriptor Base Address Domain Selector 1 Section Base Address AP Domain Selector 1 Fine Level 2 Descriptor Base Address Domain Selector 1 0 0 0 1 C B 1 0 1 1 Fault Coarse page table Section Fine page table 90

Level 2 Descriptor Level 2 Descriptor의종류 Fault Large page : 64KB 단위관리 Small page : 4KB 단위관리 Tiny page : 1KB 단위관리 Descriptor Type 31 16 15 12 11 10 9 8 7 6 5 4 3 2 1 0 Large Page Base Address AP3 AP2 AP1 AP0 C B 0 1 Small Page Base Address AP3 AP2 AP1 AP0 C B 1 0 Tiny Page Base Address AP C B 1 1 0 0 Fault Large page Small Page Tiny Page 91

Cache 와 Write Buffer 제어 Section 또는 page 별로 Cache와 Write Buffer의사용여부결정 Cacheable Page 내의데이터가 Cache될수있음을나타낸다 Bufferable Page 내의데이터가 write buffer에 write될수있음을나타낸다. Memory mapped I/O 장치의경우에는반드시 disable 되어있어야한다. Cacheable 과 Bufferable 에의한메모리시스템특징 C B 의미 Cache의 Write 동작 0 0 Cache 불가, 쓰기버퍼불가 0 1 Cache 불가, 쓰기버퍼동작 1 0 Cache 동작, 쓰기버퍼불가 Write-through Cache 1 1 Cache 동작, 쓰기버퍼동작 Write-back Cache 92

Access Permission Section 또는 page 별로메모리의 access permission 제한 Access 권한은각 descriptor 의 AP 정보와 S(System) 비트와 R(Rom) 비트에의해서제어 S, R 비트는 control 레지스터의비트 8 과 9 이다 Access 가불가하면 permission fault 가발생 AP S R Supervisor Access Permission User 00 0 0 No access No access 00 1 0 Read only No access 00 0 1 Read only Read only 00 1 1 Reserved 01 X X Read / Write No Access 10 X X Read / Write Read only 11 X X Read / Write Read / Write XX 1 1 Reserved 93

Domain Control MMU의 Access는기본적으로 DOMAIN 의의해서제어된다. 개별적인 Access permission을갖도록제어하는데사용 16개까지의 domain 지정가능 DACR(Domain Access Control Register) 는각 domain 별로 2 비트씩할당 Domain 과 Access Permission Domain 의미설명 00 No Access 모든 access 에대하여 domain fault 발생 01 Client Page Table 의 Section descriptor 나 page descriptor 의 AP(Access Permission) 비트정보를따른다. 10 Reserved Reserved (No Access) 11 Manager Page Table 의 Section descriptor 나 page descriptor 의 AP(Access Permission) 비트정보를무시하고무조건 access 를허용한다. 94

MMU 설정 MMU를설정하는과정은다음과같다. 1. Build Translation Table Physical 메모리에설정 Virtual to physical translation 정보 Cacheable / Bufferable 정보 Access Permission 2. Translation Table Base 설정 CP15의 c2 사용 3. Initialize Control Register Enable Cache, MMU Clocking 모드설정 Endian 모드설정 Vector location 설정 Start Build Translation Table Translation Table Base 설정 (C2) Initialize Control Register (C1) MOV r0, =TTBase ; Translation table base MCR p15, 0, r0, c2, c0, 0 ; set TT base MRC p15, 0, r0, c1, c0, 0 ; read control register ORR r0, r0, #0x1 MCR p15, 0, r0, c1, c0, 0 ; enable MMU 95

Contents 1. 임베디드시스템의구조 2. 임베디드시스템의개발 3. ARM 아키텍처 4. ARM 프로세서의구조 5. ARM 프로세서명령어 6. Cached ARM 7. 임베디드소프트웨어개발 8. S3C2410 및실습용보드의이해 9. 디바이스제어 96

APCS 레지스터 APCS 역 할 r0 a1 argumect 1 / interger result / scratch register r1 a2 argumect 2 / scratch register r2 a3 argumect 3 / scratch register r3 a4 argumect 4 /scratch register r4 v1 register variable 1 r5 v2 register variable 2 r6 v3 register variable 3 r7 v4 register variable 4 r8 v5 register variable 5 r9 sb/v6 Static base / register variable 6 r10 sl/v7 stack limit / register variable 7 r11 fp frame pointer r12 ip scratch reg. / new sb in inter-link-unit calls r13 sp Lower end of current stack frame r14 lr link address / scratch register r15 pc program counter 97

Exception Exception 외부의요청이나오류에의해서정상적으로진행되는프로그램의동작을잠시멈추고프로세서의동작모드를변환하고미리정해진프로그램을이용하여외부의요청이나오류에대한처리를하도록하는것 Exception의예 I/O 장치에서인터럽트를발생시키면 IRQ Exception 이발생하고, 프로세서는발생된 IRQ Exception 을처리하기위해 IRQ 모드로전환되어요청된인터럽트에맞는처리동작수행 ARM의 Exception Reset Undefined Instruction Software Interrupt Prefetch Abort Data Abort IRQ(Interrupt Request) FIQ(Fast Interrupt Request) 98

Exception Vector 와우선순위 Exception Vector Exception 이발생하면미리정해진어드레스의프로그램을수행 미리정해진프로그램의위치를 Exception Vector 라한다. Exception Vector Table 발생가능한각각의 Exception 에대하여 Vector 를정의해놓은테이블 각 Exception 별로 1 word 크기의명령어저장공간을가진다. Vector Table에는 Branch 또는이와유사한명령으로실제 Exception을처리하기위한루틴으로분기할수있는명령으로구성되어있다. FIQ의경우는 Vector Table의맨상위에위치하여분기명령없이처리루틴을프로그램할수있다. ARM은기본적으로 0x00000000에 Vector Table을둔다. (MMU 제어프로그램에의해위치변경가능 ) Exception 우선순위 동시에 Exception 이발생하는경우처리를위해우선순위지정 99

Exception Vector Table Vector Address Exception 우선순위 동작모드전환 0x0000 0000 Reset 1 (High) Supervisor(SVC) 0x0000 0004 Undefined Instruction 6 (Low) Undefined 0x0000 0008 Software Interrupt(SWI) 6 Supervisor(SVC) 0x0000 000C Prefetch Abort 5 Abort 0x0000 0010 Data Abort 2 Abort 0x0000 0014 Reserved 0x0000 0018 IRQ 4 IRQ 0x0000 001C FIQ 3 FIQ 100

Exception Vector Table 의명령어 Exception 마다 1 word 크기의명령어저장공간할당 Exception vector 테이블에서는 1 개의 ARM 명령만을사용할수있다. 실제 Exception Handler 가있는분기명령으로만들어진다. FIQ의 Vector Table은맨상위에있으므로핸들러를직접작성할수있다. Exception Vector Table에서사용할수있는명령어 Branch 명령 (B) 가장일반적으로사용된다. Branch 명령은 PC 값을기준으로 +/- 32MB 내에있어야한다. Handler가 32MB 영역을벗어나면다른명령을사용하여야한다. Move 명령 (MOV) Destination 레지스터를 PC로하면Branch 명령과같이사용가능 한사이클내에처리된다. Handler 어드레스가 8비트상수와 ROR로표시가능해야사용가능하다. Load 명령 (LDR) 과 Literal Pool 메모리영역내의어떤위치라도이동이가능하다. 메모리에서주소를읽기위한 1 사이클이더필요하다. 101

프로그램실행Exception Handling Exception 발생 CPSR 을 SPSR_<mode> 에복사 Return CPSR 값복원 PC 값복원 CPSR 의비트를수정 ARM state 로변경 Mode 비트수정 필요시인터럽트 disable Exception Handler 되돌아갈어드레스를 LR_<mode> 에저장 Exception Vector PC 값을 Vector 어드레스로변경 ARM 이하드웨어적으로처리 102

Return From Exception Handler Exception 처리가완료되면다음의절차를수행하여복귀 1. LR_<mode> 값을 PC 에복사한다. 2. SPSR_<mode> 를 CPSR 에복사한다. 주의사항 : 2 가지동작이하나의명령으로처리되어야한다. Exception 복귀명령 Data processing 명령에 S 접미사를사용하고 PC 를 destination 레지스터로사용하는방법 Privilege 모드에서 S 접미사를사용하면 CPSR 복원 SUBS PC, LR, #4 LDM 명령을사용하고 register list 뒤에 ^ 옵션사용 Stack 에되돌아갈주소값이계산되어들어가있어야한다. LDM SP!, {PC}^ 103

Exception 과 Pipeline Exception 과 Pipeline Exception 종류별로 CPU 에서발생한 Exception 을인식하는시점의 pipeline stage 가모두다르다. 따라서복원되는 PC 값의조정이필요하다. Exception 복귀명령 Exception Pipeline Stage Return 명령 Undefined Instruction Decode stage MOVS PC, LR Software Interrupt(SWI) Decode stage MOVS PC, LR Prefetch Abort Execute stage SUBS PC, LR, #4 Data Abort Memory stage SUBS PC, LR, #8 IRQ Execute stage SUBS PC, LR, #4 FIQ Execute stage SUBS PC, LR, #4 104

Reset Exception 발생조건 ARM로 Reset 신호가입력되면 Reset Exception 발생 Exception 발생에따른 ARM의동작 순서 동 작 동작설명 1 SPSR_svc = CPSR 2 CPSR 값변경 CPSR[5] = 0 CPSR[6] = 1 CPSR[7] = 1 CPSR[4:0] = 10011 b ARM state로전환 FIQ disable IRQ disable SVC 모드로전환 3 LR_svc = unpredictable value 4 PC = 0x00 105

Undefined Instruction Exception 발생조건 ARM에정의되지않은명령을실행하고자하면발생 Coprocessor에서응답이없으면발생 Exception 발생에따른 ARM의동작 순서동작동작설명 1 SPSR_undef = CPSR 2 CPSR 값변경 CPSR[5] = 0 CPSR[6] = no change CPSR[7] = 1 CPSR[4:0] = 11011 b ARM state 로전환 IRQ disable Undefined 모드로전환 3 LR_undef = address of undefined inst + 4 4 PC = 0x04 Return 명령 MOVS PC, LR 106

Software Interrupt (SWI) 발생조건 SWI 명령이실행되면Exception 발생 Exception 발생에따른 ARM의동작 순서동작동작설명 1 SPSR_svc = CPSR 2 CPSR 값변경 CPSR[5] = 0 CPSR[6] = no change CPSR[7] = 1 CPSR[4:0] = 10011 b ARM state 로전환 IRQ disable SVC 모드로전환 3 LR_svc = address of SWI + 4 4 PC = 0x08 Return 명령 MOVS PC, LR 107

SWI Handler SWI 처리순서 SWI 명령이있는위치를찾는다. SWI 명령에있는 SWI 번호를알아낸다. 31 28 27 24 23 0 cond 1 1 1 1 24-bit (interpreted) immediate SWI 번호에해당하는동작을수행한다. SWI 의 Argument 는 R0, R1, R2, R3 을통해전달된다. 108

Prefetch Abort 발생조건 잘못된어드레스공간에서명령을읽으려고하면 Exception 발생 MMU나메모리 controller서발생한 Abort 신호입력에의해서발생 Exception 발생에따른 ARM의동작 순서동작동작설명 1 SPSR_abt = CPSR 2 CPSR 값변경 CPSR[5] = 0 CPSR[6] = no change CPSR[7] = 1 CPSR[4:0] = 10111 b ARM state 로전환 IRQ disable Abort 모드로전환 3 LR_abt = address of abort + 4 4 PC = 0x0C Return 명령 SUBS PC, LR, #4 109

Data Abort 발생조건 잘못된어드레스공간에서데이터를읽거나쓰려고하면 Exception 발생 MMU나메모리 controller서발생한 Abort 신호입력에의해서발생 Exception 발생에따른 ARM의동작 순서동작동작설명 1 SPSR_abt = CPSR 2 CPSR 값변경 CPSR[5] = 0 CPSR[6] = no change CPSR[7] = 1 CPSR[4:0] = 10111 b ARM state 로전환 IRQ disable Abort 모드로전환 3 LR_abt = address of abort + 8 4 PC = 0x10 Return 명령 SUBS PC, LR, #8 110

IRQ 발생조건 외부장치에서발생된인터럽트 (IRQ) 신호가 ARM에입력되면 Exception 발생 Exception 발생에따른 ARM의동작 순서동작동작설명 1 SPSR_irq = CPSR 2 CPSR 값변경 CPSR[5] = 0 CPSR[6] = no change CPSR[7] = 1 CPSR[4:0] = 10010 b ARM state 로전환 IRQ disable IRQ 모드로전환 3 LR_irq = address of next inst + 4 4 PC = 0x18 Return 명령 SUBS PC, LR, #4 111

FIQ 발생조건 외부장치에서발생된인터럽트 (FIQ) 신호가 ARM에입력되면 Exception 발생 Exception 발생에따른 ARM의동작 순서동작동작설명 1 SPSR_fiq = CPSR 2 CPSR 값변경 CPSR[5] = 0 CPSR[6] = 1 CPSR[7] = 1 CPSR[4:0] = 10001 b ARM state로전환 FIQ disable IRQ disable FIQ 모드로전환 3 LR_fiq = address of next inst + 4 4 PC = 0x1C Return 명령 SUBS PC, LR, #4 112

물리적인메모리구조 0xFFFF_FFFF Not Used 0x60000_0000 0x48000_0000 Special Register 0x40000_0000 0x38000_0000 0x30000_0000 0x28000_0000 0x20000_0000 0x18000_0000 0x10000_0000 0x08000_0000 0x00000_0000 Boot SRAM Not Used (ngcs7) SDRAM (ngcs6) Extension (ngcs5) Extension (ngcs4) LAN (ngcs3) Extension (ngcs2) Extension (ngcs1) Flash (ngcs0) 4KB 2MB/4MB/~128MB 2MB/4MB/~128MB 128MB 128MB 128MB 128MB 128MB 128MB 1GB Accessible Region 113

소프트웨어동작을위한메모리구조 Stack 영역 Heap 영역 BSS(ZI) 영역 RO data Alphabetical order Z DATA(RW) 영역 TEXT(RO) 영역 RO code C B A 114

Startup 코드 Startup 코드를작성하기위해서는 Programmer s model, 특히명령어 시스템하드웨어구조및기능에대한전반적인사항등을모두알아야한다. Startup 코드의필수사항 Exception Vector Table의설정 Reset 핸들러의구성 시스템초기화 115

시스템초기화 일반적으로시스템의초기화동작은다음을포함한다. Entry point를정의 Exception vector를설정 메모리시스템을초기화 스택포인터레지스터초기화 Critical I/O 초기화 필요시프로세서의모드및 state 변환 인터럽트제어기초기화 C 프로그램에서사용되는변수영역및메모리초기화 C 코드로분기 116

Entry Point 선언 모든프로그램은시작되는부분을정의해야한다. 어셈블러로구성되며모든프로그램에는반드시필요 일반적으로 crt0.s(c-runtime 0 의약자 ), init.s, startup.s 등의이름사용 Entry Point 선언 SDT, ADS, RVDS or CodeWarrior ENTRY 어셈블러디렉티브를사용한다. AREA Init,CODE,READONLY ENTRY ResetHandler CodeWarrior 2.x or GNU.text.globl _start.org 0 _start: /* entry point */ 117

Exception Vector Table 설정 0x0 의 ROM 에 vector table 이정의되어있는경우 ROM 에 vector table 이고정되어있고시스템동작중에별도의 vector table 의 설정이필요없는경우 Re-mapping 이지원되지않는경우에는항상 vector table 이고정되어있다. 0x0 에 vector table 없이초기화코드만있는경우 0x0 번지에최소한의 reset handler가동작하도록되어있고, 이 reset handler에서 re-mapping 및 vector table 초기화 Re-mapping이지원되는경우대부분시스템동작중에 vector table의초기화과정이있다. Linux 등의대부분임베디드 OS는 OS 초기화과정에서자신의 exception vector table을초기화한다. 118

시스템초기화절차 1 System Reset & goto PC=0x0 Power-on 또는 reset switch 에의해서시스템 reset 2 Goto Reset Handler Reset handler 로이동 3 Disable Watch-dog Watch-dog 타이머를초기화한다. 4 Disable all interrupt 외부의모든인터럽트를받아들이지않도록한다. 5 Setup system clock Clock 주파수, PLL 등을초기화한다. 6 Setup memory controller 메모리제어기를초기화 7 Initialize each stack SVC,USR,ABT,IRQ,FIQ,Undef 등의 stack 을초기화 8 Clear BSS BSS 영역을초기화한다. 9 Goto C_Entry C 함수로분기하여메인프로그램을시작 119

Exception Vector Table 120

Initialization for Reset (1/2) 121

Initialization for Reset (2/2) 122

Memory Bank Initialization 123

Stack Initialization 124

Setup Handler 125

RW/ZI Initialization 126

Contents 1. 임베디드시스템의구조 2. 임베디드시스템의개발 3. ARM 아키텍처 4. ARM 프로세서의구조 5. ARM 프로세서명령어 6. Cached ARM 7. 임베디드소프트웨어개발 8. S3C2410 및실습용보드의이해 9. 디바이스제어 127

Contents 1. 임베디드시스템의구조 2. 임베디드시스템의개발 3. ARM 아키텍처 4. ARM 프로세서의구조 5. ARM 프로세서명령어 6. Cached ARM 7. 임베디드소프트웨어개발 8. S3C2410 및실습용보드의이해 9. 디바이스제어 128