임베디드 시스템 구조 · 2015-01-22 · 9 cache의쓰기동작 write through...

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

Upload: trannguyet

Post on 03-Aug-2019

219 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: 임베디드 시스템 구조 · 2015-01-22 · 9 Cache의쓰기동작 Write Through CPU가특정주소에명령이나데이터를write하는경우, 해당하는 명령이나데이터가Cache

ARM 프로세서 요약

www.dignsys.com

Page 2: 임베디드 시스템 구조 · 2015-01-22 · 9 Cache의쓰기동작 Write Through CPU가특정주소에명령이나데이터를write하는경우, 해당하는 명령이나데이터가Cache

1

Contents

1. 임베디드 시스템의 구조

2. 임베디드 시스템의 개발

3. ARM 아키텍처

4. ARM 프로세서의 구조

5. ARM 프로세서 명령어

6. Cached ARM7. 임베디드 소프트웨어 개발

8. S3C2410 및 실습용 보드의 이해

9. 디바이스 제어

Page 3: 임베디드 시스템 구조 · 2015-01-22 · 9 Cache의쓰기동작 Write Through CPU가특정주소에명령이나데이터를write하는경우, 해당하는 명령이나데이터가Cache

2

프로세서의 구조

레지스터(Register)산술 논리 연산 장치 (ALU : Arithmetic Logic Unit)제어 장치 (CU : Control Unit)버스(BUS)

레지스터 제어장치

산술 및 논리 연산기보수기

쉬프터 ALU

내부 프로세서 버스

상태 FLAG

제어신호

Page 4: 임베디드 시스템 구조 · 2015-01-22 · 9 Cache의쓰기동작 Write Through CPU가특정주소에명령이나데이터를write하는경우, 해당하는 명령이나데이터가Cache

3

레지스터 (Register)

프로세서 내부에서 데이터를 일시적으로 보관하는 기억 장치

Flip-flop와 Latch로 구성되어 있다

범용 레지스터

프로그램 또는 데이터 처리에 필요한 작업을 수행하기 위해서 사용

제어용 레지스터

프로그램이나 프로세서를 제어

프로그램 카운터(PC : Program Counter) 등

상태 레지스터

프로세서의 상태를 나타낸다.

Page 5: 임베디드 시스템 구조 · 2015-01-22 · 9 Cache의쓰기동작 Write Through CPU가특정주소에명령이나데이터를write하는경우, 해당하는 명령이나데이터가Cache

4

버스 (BUS)

버스(BUS)란 ?컴퓨팅 시스템의 각 모듈에서 발생한 신호를 공유해서 사용할 수 있도록 만든 신호의 집합

구동 주체(CPU 등)에 의해서 해당 소자에 데이터를 읽거나 쓸 수 있도록 구성된다.

어드레스 버스(address bus), 제어버스(control bus), 그리고 데이터 버스(data bus)로구성된다.

프로세서

레지스터

명령 또는 데이터

주소 메모리

명령/데이터

제어신호

Page 6: 임베디드 시스템 구조 · 2015-01-22 · 9 Cache의쓰기동작 Write Through CPU가특정주소에명령이나데이터를write하는경우, 해당하는 명령이나데이터가Cache

5

폰 노이만 아키텍쳐

폰 노이만(Von-Neumann) 아키텍쳐

명령어와 데이터를 위한 메모리 인터페이스가 하나이다.

명령어를 읽을 때 데이터를 읽거나 쓸 수 없다.

IBM 계열 PC(개인용 PC), ARM7 등

프로세서

레지스터

명령어

데이터

데이터 버스어드레스 버스

메모리

Page 7: 임베디드 시스템 구조 · 2015-01-22 · 9 Cache의쓰기동작 Write Through CPU가특정주소에명령이나데이터를write하는경우, 해당하는 명령이나데이터가Cache

6

하버드 아키텍쳐

하버드(Havard) 아키텍쳐

명령어를 위한 메모리 인터페이스와 데이터를 위한 메모리 인터페이스가

분리되어 있다.명령어를 읽을 때 데이터를 읽거나 쓸 수 있어 성능이 우수하다.버스 시스템이 복잡하여 설계가 복잡하다

ARM9, ARM10, XScale 등

프로세서

레지스터

명령어

데이터

데이터 버스어드레스 버스

메모리

Page 8: 임베디드 시스템 구조 · 2015-01-22 · 9 Cache의쓰기동작 Write Through CPU가특정주소에명령이나데이터를write하는경우, 해당하는 명령이나데이터가Cache

7

Cache 메모리 시스템

CPU

400MHz

Main Memory10MHz

Main Memory10MHz

Bus 66MHzBus 66MHz

CPU

Cache

고속의 CPU가 버스 및 메모리속도에 의존적이며 늦다

CPU 주변에 고속의 메모리를 두고자주 사용되는 명령과 데이터를저장하여 시스템 성능을 개선

Page 9: 임베디드 시스템 구조 · 2015-01-22 · 9 Cache의쓰기동작 Write Through CPU가특정주소에명령이나데이터를write하는경우, 해당하는 명령이나데이터가Cache

8

Cache의 읽기 동작

Cache의 성능

CPU가 읽고자 하는 명령이나 데이터가 Cache 내에 존재(Cache Hit)

하여야 할 회수가 많아야 Cache의 성능이 우수하다.

CPU가 데이터나 명령을 읽고자 하는데 Cache 내에 원하는 명령이나

데이터가 없으면(Cache Miss), Cache 제어기는 시스템 메모리

장치에서 line 크기 만큼 명령이나 데이터를 읽어 Cache 메모리에

저장(Line Fill) 한다.

Page 10: 임베디드 시스템 구조 · 2015-01-22 · 9 Cache의쓰기동작 Write Through CPU가특정주소에명령이나데이터를write하는경우, 해당하는 명령이나데이터가Cache

9

Cache의 쓰기 동작

Write Through

CPU가 특정 주소에 명령이나 데이터를 write하는 경우, 해당하는

명령이나 데이터가 Cache 메모리에 있을 때, Cache 메모리와 외부

메모리에 모두 쓰기 동작을 한다.

Write Back

CPU가 특정 주소에 명령이나 데이터를 write하는 경우, 해당하는

명령이나 데이터가 Cache 메모리에 있을 때, Cache 메모리에만 쓰기

동작을 하고, 외부의 메모리에는 나중에 기록 된다.

Page 11: 임베디드 시스템 구조 · 2015-01-22 · 9 Cache의쓰기동작 Write Through CPU가특정주소에명령이나데이터를write하는경우, 해당하는 명령이나데이터가Cache

10

Microprocessor Cache

Cache Improve Overall System PerformanceReducing read and write cycle time by using fast memoryImproving memory bus utilization

Page 12: 임베디드 시스템 구조 · 2015-01-22 · 9 Cache의쓰기동작 Write Through CPU가특정주소에명령이나데이터를write하는경우, 해당하는 명령이나데이터가Cache

11

Cache Configurations

Unified vs. Separated

Page 13: 임베디드 시스템 구조 · 2015-01-22 · 9 Cache의쓰기동작 Write Through CPU가특정주소에명령이나데이터를write하는경우, 해당하는 명령이나데이터가Cache

12

Cache Configurations

Look through vs. Look aside

Page 14: 임베디드 시스템 구조 · 2015-01-22 · 9 Cache의쓰기동작 Write Through CPU가특정주소에명령이나데이터를write하는경우, 해당하는 명령이나데이터가Cache

13

MMU (Memory Management Units)

어드레스 변환(translation) 기능

CPU에서 사용되는 logical 한 Virtual 어드레스를 physical 어드레스로 변환

메모리 보호(protection) 기능

CPU MainMemory

MemoryManagement

Unit

Virtual어드레스

Physical어드레스

Page 15: 임베디드 시스템 구조 · 2015-01-22 · 9 Cache의쓰기동작 Write Through CPU가특정주소에명령이나데이터를write하는경우, 해당하는 명령이나데이터가Cache

14

Memory Mapped I/O 와 I/O-mapped I/O

구분 Memory mapped I/O I/O-mapped I/O

대표적인CPU ARM, PowerPC, M68K x86 계열

I/O 장치의영역

메모리의 일부를 I/O 장치로 사용메모리 영역과는 별도의 I/O 번지 영역이존재

명령어메모리와 I/O 장치 모두 메모리 동작명령으로 억세스 하며, 각 영역의구분은 어드레스로 한다.

메모리 억세스 명령과 I/O 억세스명령(in/out)이 구분

하드웨어어드레스를 해석하는 디코더 회로에따라 메모리 혹은 I/O 장치가 선택

메모리 번지와 I/O 번지를 구분하는 신호가존재.

기타

- I/O 영역은 Non-cacheable로설정해야 한다

- I/O 영역 변수는 volatile type으로선언해야 한다.

Page 16: 임베디드 시스템 구조 · 2015-01-22 · 9 Cache의쓰기동작 Write Through CPU가특정주소에명령이나데이터를write하는경우, 해당하는 명령이나데이터가Cache

15

인터럽트 인터페이스

인터럽트 제어기

입출력 장치에서 발생되는 인터럽트의 요청을 제어 한다.

하드웨어에 따라 인터럽트 응답을 위한 신호도 제공된다.

CPU I/O 장치

인터럽트제어기

인터럽트 요청

Mask, Pending레지스터

시리얼, 네트워크 등

irq

인터럽트 응답irqack

인터럽트 요청irq

인터럽트 응답irqack

Page 17: 임베디드 시스템 구조 · 2015-01-22 · 9 Cache의쓰기동작 Write Through CPU가특정주소에명령이나데이터를write하는경우, 해당하는 명령이나데이터가Cache

16

인터럽트의 발생

인터럽트 요청 (Interrupt Request)외부 장치에서 입출력 동작에 대한 처리를 프로세서에 요청

인터럽트의 발생은 하드웨어적으로 이루어 진다. 따라서 인터럽트가발생하면 프로세서가 스스로 프로그램의 개입 없이 일련의 동작을수행해야 한다.인터럽트 Vector

인터럽트 서비스 루틴을 처리하기위한 명령 또는 위치가 저장된 메모리 공간

인터럽트의 요청에 따라 프로세서는 정해진 절차에 의하여 발생 된인터럽트의 처리 여부를 결정하고 인터럽트를 서비스하는 절차(ISR : Interrupt Service Routine)를 수행한다.

인터럽트 발생의 예

시리얼로 데이터 입력 완료

시리얼 데이터 전송 준비 완료, 또는 전송 에러 발생

이더넷 데이터 수신 완료, 이더넷 전송에러 등

Page 18: 임베디드 시스템 구조 · 2015-01-22 · 9 Cache의쓰기동작 Write Through CPU가특정주소에명령이나데이터를write하는경우, 해당하는 명령이나데이터가Cache

17

인터럽트 발생에 의한 프로세서 흐름제어

ISR(Interrupt Service Routine)

ISR(Interrupt Service Routine)

INT 발생

INT 발생

MAIN 프로그램 루틴

Page 19: 임베디드 시스템 구조 · 2015-01-22 · 9 Cache의쓰기동작 Write Through CPU가특정주소에명령이나데이터를write하는경우, 해당하는 명령이나데이터가Cache

18

인터럽트 처리 절차

입출력 장치에서 인터럽트 발생

프로세서에서 인터럽트 인식

프로세서의 현재 상태를 저장

인터럽트 처리를 위한 프로세서 상태 변경

인터럽트 처리 (인터럽트 ISR)

하드웨어하드웨어 적으로적으로 처리된다처리된다..

인터럽트 처리 후 되돌아갈 주소(PC) 저장

인터럽트 Vector로 PC 위치 변경

Page 20: 임베디드 시스템 구조 · 2015-01-22 · 9 Cache의쓰기동작 Write Through CPU가특정주소에명령이나데이터를write하는경우, 해당하는 명령이나데이터가Cache

19

인터럽트 서비스 루틴 (ISR)

인터럽트 처리 (인터럽트 ISR)

스택에 프로세서의 레지스터 정보 저장

입출력 동작을 처리

프로세서의 상태 및 되돌아갈 주소 복원

기존에 수행 중이던 프로그램 수행

모두모두 소프트웨어소프트웨어 적으로적으로 처리된다처리된다..

Page 21: 임베디드 시스템 구조 · 2015-01-22 · 9 Cache의쓰기동작 Write Through CPU가특정주소에명령이나데이터를write하는경우, 해당하는 명령이나데이터가Cache

20

Contents

1. 임베디드 시스템의 구조

2. 임베디드 시스템의 개발

3. ARM 아키텍처

4. ARM 프로세서의 구조

5. ARM 프로세서 명령어

6. Cached ARM7. 임베디드 소프트웨어 개발

8. S3C2410 및 실습용 보드의 이해

9. 디바이스 제어

Page 22: 임베디드 시스템 구조 · 2015-01-22 · 9 Cache의쓰기동작 Write Through CPU가특정주소에명령이나데이터를write하는경우, 해당하는 명령이나데이터가Cache

21

임베디드 시스템 설계 절차

시스템 용도 분석

CPU, 메모리 및주변 장치 선정

소프트웨어 사양 결정하드웨어 사양 결정

개발 환경 선정

OS 사용여부 및 OS 선정

소프트웨어 설계

디바이스 드라이버 설계

어플리케이션 설계

시스템 통합 시험

회로도 및 PCB 설계

하드웨어 조립 및 시험

Page 23: 임베디드 시스템 구조 · 2015-01-22 · 9 Cache의쓰기동작 Write Through CPU가특정주소에명령이나데이터를write하는경우, 해당하는 명령이나데이터가Cache

22

디바이스 드라이버 포팅

디바이스(Device )

네트워크 어댑터, LCD 디스플레이, PCMCIA, Audio, 터미널, 키보드, 하드디스크,

플로피디스크, 프린터 등과 같은 주변 장치들을 말함

디바이스의 구동에 필요한 프로그램, 즉 디바이스 드라이버가 필수적으로 요구됨

Device Driver

실제 장치 부분을 추상화 시켜 사용자 프로그램이 정형화된 인터페이스를 통해

디바이스를 접근할 수 있도록 해주는 프로그램

디바이스 관리에 필요한 정형화된 인터페이스 구현에 요구되는 함수와

자료구조의 집합체

응용프로그램이 H/W를 제어할 수 있도록 인터페이스 제공

하드웨어와 독립적인 프로그램 작성을 가능하게 함

Page 24: 임베디드 시스템 구조 · 2015-01-22 · 9 Cache의쓰기동작 Write Through CPU가특정주소에명령이나데이터를write하는경우, 해당하는 명령이나데이터가Cache

23

디바이스 드라이버 구조

Application

System Call Interface

VFS

Network SubsystemBuffer Cache

Network D/DBlock D/DChar Device Driver

Device Interface

Hardware

Applicationarea

Kernelarea

Hardware

Page 25: 임베디드 시스템 구조 · 2015-01-22 · 9 Cache의쓰기동작 Write Through CPU가특정주소에명령이나데이터를write하는경우, 해당하는 명령이나데이터가Cache

24

Contents

1. 임베디드 시스템의 구조

2. 임베디드 시스템의 개발

3. ARM 아키텍처

4. ARM 프로세서의 구조

5. ARM 프로세서 명령어

6. Cached ARM7. 임베디드 소프트웨어 개발

8. S3C2410 및 실습용 보드의 이해

9. 디바이스 제어

Page 26: 임베디드 시스템 구조 · 2015-01-22 · 9 Cache의쓰기동작 Write Through CPU가특정주소에명령이나데이터를write하는경우, 해당하는 명령이나데이터가Cache

25

Hard Macrocell 과 Synthesizable Core

Hard Macrocell

Layout level로 제공

사용자는 core를 변경 불가

ARM710T, ARM920T 등이 대표적인 예이다.

Synthesizable CoreRTL(Register Transfer Level)로 제공

사용자는 license 조건에 의해 core의 내부 변경 가능

내부 메모리 크기 등

기능은 변경 불가

ARM7TDMI-S, ARM926EJ-S, ARM1136J-S 등

Page 27: 임베디드 시스템 구조 · 2015-01-22 · 9 Cache의쓰기동작 Write Through CPU가특정주소에명령이나데이터를write하는경우, 해당하는 명령이나데이터가Cache

26

ARM 아키텍처 명명법

ARM {x}{y}{z} {T}{D}{M}{I}{E}{J}{F}{-S}x : 제품군

y: MMU/MPUZ: 캐시

T: Thumb 16bit DecoderD: JTAG DebugM: Hardware Multiplier(고속 곱셈기)I: Embedded ICE macrocellE: DSP Enhanced 확장 명령어

J: Jazelle ( Java extension – 8x performance for Java)F: VFP 장치

-S: synthesizible 버전

Page 28: 임베디드 시스템 구조 · 2015-01-22 · 9 Cache의쓰기동작 Write Through CPU가특정주소에명령이나데이터를write하는경우, 해당하는 명령이나데이터가Cache

27

ARM Architecture의 시장 변화

ARM1136EJ

Page 29: 임베디드 시스템 구조 · 2015-01-22 · 9 Cache의쓰기동작 Write Through CPU가특정주소에명령이나데이터를write하는경우, 해당하는 명령이나데이터가Cache

28

ARM 7 Family

ARM7TDMI Core32/16bit RISC Architecture3 stage pipelining(Fetch/Decode/Execution)Hard macrocell32-bit ARM/16-bit Thumb InstructionsUnified bus architecture32-bit ALU & High-performance multiplierlow-power, small die sizeCoprocessor interfaceEmbedded ICE-RT suport, JTAG InterfaceEmbedded Trace Macro cell

ARM720TARM7TDMI + MMU + Cache(8kb Unified) + WB + AMBA

Page 30: 임베디드 시스템 구조 · 2015-01-22 · 9 Cache의쓰기동작 Write Through CPU가특정주소에명령이나데이터를write하는경우, 해당하는 명령이나데이터가Cache

29

ARM Core 비교

Page 31: 임베디드 시스템 구조 · 2015-01-22 · 9 Cache의쓰기동작 Write Through CPU가특정주소에명령이나데이터를write하는경우, 해당하는 명령이나데이터가Cache

30

Aligned 과 Un-aligned 억세스

프로세서는 메모리 억세스

Byte, halfword(2바이트) 또는 word(4바이트) 단위로만 가능

31 24 23 16 15 8 7 0

11 22 33 44

11 22 33 44

11 22 33 44

11 22 33 44 0x00

0x04

0x08

0x0C

Aligned AccessAligned Access31 24 23 16 15 8 7 0

11 22 33 44

11 22 33 44

11 22 33 44

11 22 33 44 0x00

0x04

0x08

0x0C

UnUn--aligned Accessaligned Access

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

Page 32: 임베디드 시스템 구조 · 2015-01-22 · 9 Cache의쓰기동작 Write Through CPU가특정주소에명령이나데이터를write하는경우, 해당하는 명령이나데이터가Cache

31

Little-Endian 과 Big-Endian

Big-Endian

메모리의 하위 어드레스(Byte 어드레스

“0”)에 MSB(Most Significant Byte)가위치하고 있는 메모리 구조

MSB는 메모리 데이터의 가장 상위

비트 24 에서 31 까지

Little-Endian

메모리의 하위 어드레스(Byte 어드레스

“0”)에 LSB(Least Significant Byte)가위치하고 있는 메모리 구조

LSB는 메모리 데이터의 가장 하위 비트

0 에서 7 까지

31 24 23 16 15 8 7 0

8 9 10 11

4 5 6 7

0 1 2 3 0x00

0x04

0x0831 24 23 16 15 8 7 0

11 10 9 8

7 6 5 4

3 2 1 0 0x00

0x04

0x08

0,4,8은 word 어드레스, 0,2,4,6,8,10은 halfword 어드레스, 0,1,2,3,4,…은 byte 어드레스를 니타낸다.

word로 메모리를 억세스 하는데 1,2 또는 3 번지를 억세스 하면 un-aligned 억세스가 된다.

상위 어드레스

Word 어드레스Byte 어드레스

데이터 비트

Page 33: 임베디드 시스템 구조 · 2015-01-22 · 9 Cache의쓰기동작 Write Through CPU가특정주소에명령이나데이터를write하는경우, 해당하는 명령이나데이터가Cache

32

Operating 모드의 변환과 레지스터

r8

r9

r10

r11

r12

r13 (sp)

r14 (lr)

r15 (pc)

cpsr

r0

r1

r2

r3

r4

r5

r6

r7

User

r13 (sp)

r14 (lr)

spsr

SVC

Usermode

r0-r12,r15,andcpsr

외부메모리

stack

3. copy

1. copy

스택의 위치를나타낸다.

5. copy

Context 정보

(1) (1) 복원복원

(2) CPSR, PC(2) CPSR, PC를를 동시에동시에 복원복원2. CPSR 변경

- Mode- I/F 비트

- T Bit

4. PC = Vector

Page 34: 임베디드 시스템 구조 · 2015-01-22 · 9 Cache의쓰기동작 Write Through CPU가특정주소에명령이나데이터를write하는경우, 해당하는 명령이나데이터가Cache

33

프로세서의 Reset 과 Start-up 코드

프로세서에 리셋 신호가 입력되면 실행 중이던 명령을 멈추고

① SPSR_svc에 CPSR 값을 복사

② CPSR의 값을 변경

Mode bit M[4:0]를 Supervisor 모드인 10011’b로 변경

I 비트와 F 비트를 1로 세트하여 인터럽트를 disable

T 비트를 0으로 클리어하여 ARM state로 변경

③ PC 값을 LR_svc 레지스터에 복사

④ PC 값을 Reset Vector 어드레스인 0x00000000으로 변경

⑤ Reset 핸들러로 분기하여 시스템의 초기화 수행

Page 35: 임베디드 시스템 구조 · 2015-01-22 · 9 Cache의쓰기동작 Write Through CPU가특정주소에명령이나데이터를write하는경우, 해당하는 명령이나데이터가Cache

34

Reset Handler

Reset Vector에서 분기된 어셈블리어로 작성된 처리 루틴

주요 동작

시스템 초기화 작업 수행

시스템의 클록

메모리 컨트롤러

입출력 포트의 구성

MMU 등

인터럽트와 스택 초기화

리셋 핸들러의 마지막에서는 main() 함수와 같은 C로 구성된 함수를 호출

이 부분을 startup 코드라고 부른다.

Page 36: 임베디드 시스템 구조 · 2015-01-22 · 9 Cache의쓰기동작 Write Through CPU가특정주소에명령이나데이터를write하는경우, 해당하는 명령이나데이터가Cache

35

Startup 코드

Startup 코드를 작성하기 위해서는

Programmer’s model, 특히 명령어

시스템 하드웨어 구조 및 기능에 대한 전반적인 사항

등을 모두 알아야 한다.

Startup 코드의 필수 사항

Exception Vector Table의 설정

Reset 핸들러의 구성

Page 37: 임베디드 시스템 구조 · 2015-01-22 · 9 Cache의쓰기동작 Write Through CPU가특정주소에명령이나데이터를write하는경우, 해당하는 명령이나데이터가Cache

36

Contents

1. 임베디드 시스템의 구조

2. 임베디드 시스템의 개발

3. ARM 아키텍처

4. ARM 프로세서의 구조

5. ARM 프로세서 명령어

6. Cached ARM7. 임베디드 소프트웨어 개발

8. S3C2410 및 실습용 보드의 이해

9. 디바이스 제어

Page 38: 임베디드 시스템 구조 · 2015-01-22 · 9 Cache의쓰기동작 Write Through CPU가특정주소에명령이나데이터를write하는경우, 해당하는 명령이나데이터가Cache

37

ARM7TDM 코어의 내부 구조

ALU

Register bank

BarrelShifter

D[31:0]

명령어 해석기( Instruction Decoder )

Data in 레지스터

Immediate 상수

Multiplier

A-bus

B-bus

Data out 레지스터

ALU

-bus

어드레스 레지스터

+1제어장치

A[31:0]

제어신호

PC update

PC

Page 39: 임베디드 시스템 구조 · 2015-01-22 · 9 Cache의쓰기동작 Write Through CPU가특정주소에명령이나데이터를write하는경우, 해당하는 명령이나데이터가Cache

38

Data Processing 명령과 내부 버스

ADD Rd, Rs, OP2

OP 코드

Operand 2 : B 버스와 Barrel shifter를 통해 ALU에 입력

Operand 1 : A 버스를 통해 ALU에 입력, Source 레지스터

Destination 레지스터 : ALU 버스를 통해 레지스터 뱅크에 write

Page 40: 임베디드 시스템 구조 · 2015-01-22 · 9 Cache의쓰기동작 Write Through CPU가특정주소에명령이나데이터를write하는경우, 해당하는 명령이나데이터가Cache

39

Data Transfer 명령과 내부 버스

LDR Rd, [ Rb, Offset ]

OP 코드

Offset : B 버스와 Barrel shifter를 통해 ALU에 입력

Base 레지스터 : A 버스를 통해 ALU 에 입력

Destination 레지스터 : 데이터 버스를 통해 읽혀진 데이터가write 되는 레지스터

Page 41: 임베디드 시스템 구조 · 2015-01-22 · 9 Cache의쓰기동작 Write Through CPU가특정주소에명령이나데이터를write하는경우, 해당하는 명령이나데이터가Cache

40

ARM7TDMI 코어

ARM7TDM core

EmbeddedICE-RT

제어신호

어드레스 버스(A[31:0])

데이터 버스(D[31:0])

TAP

JTAG 인터페이스 신호

BREAK

ARM7TDMI는 ARM7TDM 코어에EmbeddedICE 로직이 추가된 프로세서이다

Page 42: 임베디드 시스템 구조 · 2015-01-22 · 9 Cache의쓰기동작 Write Through CPU가특정주소에명령이나데이터를write하는경우, 해당하는 명령이나데이터가Cache

41

이상적인 pipeline 동작

매 사이클마다 명령을 하나씩 실행하는 경우모든 명령이 메모리의 참조 없이 레지스터 내의 값을 가지고 데이터를 처리

CPI는 1

F D E

1 2 3 4 5 6 7 8 9 10사이클명령

ADD

F D ESUB

F D EAND

F D EMVN

F D EXOR

F D EMOV

F D ESBC

F D EXOR

F : Fetch D : Decode E : Execute

Page 43: 임베디드 시스템 구조 · 2015-01-22 · 9 Cache의쓰기동작 Write Through CPU가특정주소에명령이나데이터를write하는경우, 해당하는 명령이나데이터가Cache

42

LDR 명령과 pipeline 동작

LDR 명령이 사용되는 경우메모리에서 데이터를 읽는 메모리(M) stage와 레지스터에 write하는 Write(W) stage 추가

레지스터에 write 동작이 끝날 때까지 다른 명령은 stall 된다.

6 clock 사이클 동안에 4개의 명령 실행 : CPI는 1.5

F D E

1 2 3 4 5 6 7 8 9 10사이클명령

ADD

F D ESUB

F D EAND

F D ELDR

F D EXOR

F D EMOV

F DSBC

F : Fetch D : Decode E : Execute M : Memory W : Write S : Stall

M W

S S

S S

Page 44: 임베디드 시스템 구조 · 2015-01-22 · 9 Cache의쓰기동작 Write Through CPU가특정주소에명령이나데이터를write하는경우, 해당하는 명령이나데이터가Cache

43

Branch 명령과 pipeline 동작

Branch 명령이 사용되면Fetch한 명령을 모두 버리고 지정된 분기하여 새로운 명령을 읽는다

Pipeline이 깨진다(break)

F D E

1 2 3 4 5 6 7 8 9 10사이클명령

ADD

F D EBL 0x100

F DAND

FMVN

F D EMOV (0x100)

F D ESBC

F : Fetch D : Decode E : Execute L : Link Return A : Adjust

L A

버려진다

Page 45: 임베디드 시스템 구조 · 2015-01-22 · 9 Cache의쓰기동작 Write Through CPU가특정주소에명령이나데이터를write하는경우, 해당하는 명령이나데이터가Cache

44

Cache를 가진 ARM7TDMI 프로세서

ARM7TDMIcore

Cache

CP15

MMU WriteBuffer

BusInterface

Address

Data

Data write

Data read

Page 46: 임베디드 시스템 구조 · 2015-01-22 · 9 Cache의쓰기동작 Write Through CPU가특정주소에명령이나데이터를write하는경우, 해당하는 명령이나데이터가Cache

45

ARM9TDM 코어의 내부 구조

ALU

Register bank

BarrelShifter

DD[31:0]

명령어 해석기( Instruction Decoder )

Data in 레지스터

Multiplier

A-bus

B-bus Data out 레지스터

ALU

-bus

어드레스 레지스터

+1

제어장치

IA[31:0]

제어신호

C-bus

PC PC update

어드레스 레지스터

DA[31:0]

+1

ID[31:0]

Page 47: 임베디드 시스템 구조 · 2015-01-22 · 9 Cache의쓰기동작 Write Through CPU가특정주소에명령이나데이터를write하는경우, 해당하는 명령이나데이터가Cache

46

ARM9TDMI pipeline

ARM9의 경우 ARM7과 달리 32 비트 ARM 명령어와 16 비트 Thumb 명령어

decoder를 별도로 가지고 있다.

Memory stage가 추가되어 LDR 명령이 사용되더라도 매 사이클 마다 하나의

명령이 실행된다.

RegSelect

ARM/Thumb decodeInstruction

Fetch

FETCH DECODEPCPC

ARM :Thumb :

PC-4PC-2

RegRead

PC-8PC-4

EXECUTE

Shift ALU

MEMORY

MemoryAccess

WRITE

RegisterWrite

Page 48: 임베디드 시스템 구조 · 2015-01-22 · 9 Cache의쓰기동작 Write Through CPU가특정주소에명령이나데이터를write하는경우, 해당하는 명령이나데이터가Cache

47

이상적인 pipeline 동작

LDR 명령이 사용되더라도 매 사이클 마다 하나의 명령어 실행CPI = 1단 LDR 명령의 Destination 레지스터가 다음 명령에서 사용되면 않 된다.

F D E

1 2 3 4 5 6 7 8 9 10사이클명령

ADD R0, R1, R2

F D ESUB R1, R2, R4

F D EAND R2, R1, R0

F D ELDR R4, [ R5 ]

F D EXOR R0, R1, R2

F D EADD R1, R2, R4

F DSBC R1, R2, R3

F : Fetch D : Decode E : Execute M : Memory W : Write I : Interlock

M W

M W

M W

M W

M W

M W

ME

Page 49: 임베디드 시스템 구조 · 2015-01-22 · 9 Cache의쓰기동작 Write Through CPU가특정주소에명령이나데이터를write하는경우, 해당하는 명령이나데이터가Cache

48

LDR 명령과 Interlock 사이클

LDR 명령과 Interlock 사이클LDR 명령의 Destination 레지스터가 다음 명령에서 사용되는 경우 발생

CPI = 1.2

F D E

1 2 3 4 5 6 7 8 9 10사이클명령

ADD R0, R1, R2

F D ESUB R1, R2, R4

F D EAND R2, R1, R0

F D ELDR R4, [ R5 ]

F D EXOR R0, R4, R2

F D EADD R1, R2, R3

F DSBC R1, R2, R3

F : Fetch D : Decode E : Execute M : Memory W : Write I : Interlock

M W

I

I

M W

M W

M W

M W

M

E

Page 50: 임베디드 시스템 구조 · 2015-01-22 · 9 Cache의쓰기동작 Write Through CPU가특정주소에명령이나데이터를write하는경우, 해당하는 명령이나데이터가Cache

49

Cache를 가진 ARM9TDMI 프로세서

ARM9TDMIcore

InstructionCache

CP15

MMU WriteBuffer

BusInterface

Address

Data

Data write

Data read

DataCache

Data

Address

Page 51: 임베디드 시스템 구조 · 2015-01-22 · 9 Cache의쓰기동작 Write Through CPU가특정주소에명령이나데이터를write하는경우, 해당하는 명령이나데이터가Cache

50

Contents

1. 임베디드 시스템의 구조

2. 임베디드 시스템의 개발

3. ARM 아키텍처

4. ARM 프로세서의 구조

5. ARM 프로세서 명령어

6. Cached ARM7. 임베디드 소프트웨어 개발

8. S3C2410 및 실습용 보드의 이해

9. 디바이스 제어

Page 52: 임베디드 시스템 구조 · 2015-01-22 · 9 Cache의쓰기동작 Write Through CPU가특정주소에명령이나데이터를write하는경우, 해당하는 명령이나데이터가Cache

51

명령어 구조

Encoded in a 32-bit wordOP code + two or three registersByte(8bits) or Word(32bits) memory access

Memory access only through LOAD and STORE instructionsConditional Execution of instructions

All instructions are conditionally executed

Page 53: 임베디드 시스템 구조 · 2015-01-22 · 9 Cache의쓰기동작 Write Through CPU가특정주소에명령이나데이터를write하는경우, 해당하는 명령이나데이터가Cache

52

32-bit v4T Instructions

Page 54: 임베디드 시스템 구조 · 2015-01-22 · 9 Cache의쓰기동작 Write Through CPU가특정주소에명령이나데이터를write하는경우, 해당하는 명령이나데이터가Cache

53

Ex) 명령어 예제

a = ( b==c) ? d : e;

CMPS r2, r3MOVEQ r1, r4MOVNE r1, r5

Page 55: 임베디드 시스템 구조 · 2015-01-22 · 9 Cache의쓰기동작 Write Through CPU가특정주소에명령이나데이터를write하는경우, 해당하는 명령이나데이터가Cache

54

Memory Addressing Mode (1)

Memory AccessIndexed Addressing ModeEffective Address = base register (Rn)+ a signed offset (Rm)

a signed offset = immediate or register (Rm)

ExamplesLDR 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

Page 56: 임베디드 시스템 구조 · 2015-01-22 · 9 Cache의쓰기동작 Write Through CPU가특정주소에명령이나데이터를write하는경우, 해당하는 명령이나데이터가Cache

55

Memory Addressing Mode (2)

Variations of indexed addressing modesPre-indexed mode

EA = base register(R1) + a signed offsetLDR R0, [R1, R2] ;R0 [R1] + [R2]

Pre-indexed with writeback mode(update)EA = base register(R1) + a signed offsetR1 = EALDR R0, [R1, R2]! ; R0 [R1] + [R2]

R1 [R1] + [R2]Post-indexed mode

EA = R1R1 = base register(R1) + a signed offsetLDR R0, [R1], R2 ; R0 [R1]

R1 [R1]+[R2]

Page 57: 임베디드 시스템 구조 · 2015-01-22 · 9 Cache의쓰기동작 Write Through CPU가특정주소에명령이나데이터를write하는경우, 해당하는 명령이나데이터가Cache

56

Memory Addressing Mode (3)

Shifted offsetThe 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 modeLDR R0, [R1], R2, LSL #4

Related mode

Page 58: 임베디드 시스템 구조 · 2015-01-22 · 9 Cache의쓰기동작 Write Through CPU가특정주소에명령이나데이터를write하는경우, 해당하는 명령이나데이터가Cache

57

Pre-indexed addressing mode

Page 59: 임베디드 시스템 구조 · 2015-01-22 · 9 Cache의쓰기동작 Write Through CPU가특정주소에명령이나데이터를write하는경우, 해당하는 명령이나데이터가Cache

58

Pre-indexed addressing mode with writebacke

Page 60: 임베디드 시스템 구조 · 2015-01-22 · 9 Cache의쓰기동작 Write Through CPU가특정주소에명령이나데이터를write하는경우, 해당하는 명령이나데이터가Cache

59

Post-indexed addressing

Page 61: 임베디드 시스템 구조 · 2015-01-22 · 9 Cache의쓰기동작 Write Through CPU가특정주소에명령이나데이터를write하는경우, 해당하는 명령이나데이터가Cache

60

Relative address

Page 62: 임베디드 시스템 구조 · 2015-01-22 · 9 Cache의쓰기동작 Write Through CPU가특정주소에명령이나데이터를write하는경우, 해당하는 명령이나데이터가Cache

61

조건 플래그(Condition Flags)

c

2731 28 671623 815 5 4 024

f s x

N Z C V ModeI FQ J T

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 상실

Page 63: 임베디드 시스템 구조 · 2015-01-22 · 9 Cache의쓰기동작 Write Through CPU가특정주소에명령이나데이터를write하는경우, 해당하는 명령이나데이터가Cache

62

Condition Field

Page 64: 임베디드 시스템 구조 · 2015-01-22 · 9 Cache의쓰기동작 Write Through CPU가특정주소에명령이나데이터를write하는경우, 해당하는 명령이나데이터가Cache

63

Operand2와 Barrel Shifter

레지스터Shift 동작과 같이 사용 가능

Shift value

5 bit unsigned integer

하위 5비트에 shift value를 가진다른 register

Immediate 상수8 bit number

짝수(even number) 만큼 rotate right 하여표현이 가능한 32비트 상수

32 비트 상수가 사용되면 어셈블러가rotate 값으로 계산

Operand 1 Operand 2

BarrelShifter

ALU

Result

Page 65: 임베디드 시스템 구조 · 2015-01-22 · 9 Cache의쓰기동작 Write Through CPU가특정주소에명령이나데이터를write하는경우, 해당하는 명령이나데이터가Cache

64

32비트 상수 사용법

32비트 상수를 레지스터로 옮길 수 있는 방법 제공

MOV 또는 MVN 명령으로는 32비트 상수를 레지스터로 move 불가

Assembler에서 32비트 상수를 읽을 수 있는 방법 제공

Data Transfer 명령을 이용한 32비트 상수 loadingLDR rd, =constant

어셈블러에서는 사용된 값(constant)에 따라 유효한 명령어 사용

8 비트와 ROR*2로 표현 가능하면 MOV 또는 MVN으로 변환

32비트로만 표현이 가능하면 코드 영역 내에 상수 값(Literal pool)을 저장하고

PC-relative 한 LDR 명령으로 변환

LDR r0, =0xFF

LDR r0, =0x5555AAAA

MOV r0, #0xFF

LDR r0, [ PC, #offset ]

……

DCD 0x5555AAAA

Page 66: 임베디드 시스템 구조 · 2015-01-22 · 9 Cache의쓰기동작 Write Through CPU가특정주소에명령이나데이터를write하는경우, 해당하는 명령이나데이터가Cache

65

Relative 어드레스 지정 방식

LABEL 지정에 의한 어드레스 지정

어셈블리어에서 LABEL을 지정하면 어셈블러가 [PC+LABEL]형태의

주소로 변환하여 참조

literal pool을 사용한 32 비트 데이터의 Load 어셈블러가 코드 영역 내에 데이터 저장 후 [PC+LABEL]형태의 주소로

변환하여 참조

LDR r0, [ PC, #offset ]

……

DCD 0x5555AAAA

LDR r0, label_1

…….

label_1 DCD 0x12345678

LDR r0, =0x5555AAAA

LDR r0, [ PC, #offset ]

……

DCD 0x12345678

Page 67: 임베디드 시스템 구조 · 2015-01-22 · 9 Cache의쓰기동작 Write Through CPU가특정주소에명령이나데이터를write하는경우, 해당하는 명령이나데이터가Cache

66

Pre-indexed 어드레스 지정 방식

Base 레지스터(Rn)과 <offset>으로 주소 계산 후 데이터 전송

데이터 전송 이후에도 Rn의 값은 별도 지정이 없으면 변하지 않는다

0x3bf8

0x512a Address 0x00001234

1 Word = 4 bytes

0x00001234

Address 0x00001238

0x00000004

+

memory(byte addressable)

R1:

R0:

LDR r0, [ r1, #4 ]

상수:

???????????0x00003bf8

Page 68: 임베디드 시스템 구조 · 2015-01-22 · 9 Cache의쓰기동작 Write Through CPU가특정주소에명령이나데이터를write하는경우, 해당하는 명령이나데이터가Cache

67

Pre-indexed 방식 과 Auto update

Pre-indexed 방식을 사용하여 참조 후 Base 레지스터 Rn 갱신

0x3bf8

0x512a Address 0x00001234

1 Word = 4 bytes

0x00001234

0x00003bf8

Address 0x00001238

0x00000004

+

memory(byte addressable)

R1:

R0:

LDR r0, [ r1, #4 ] !

contents of r1 updated 0x1238

0x00001238

Page 69: 임베디드 시스템 구조 · 2015-01-22 · 9 Cache의쓰기동작 Write Through CPU가특정주소에명령이나데이터를write하는경우, 해당하는 명령이나데이터가Cache

68

Post-indexed 어드레스 지정 방식

Base 레지스터(Rn)가 지정하는 주소에 데이터의 전송 후 Rn 값과<Offset>의 연산 결과로 Rn 갱신

R0:

R1: 0x3bf8

0x512a Address 0x00001234

Address 0x00001238

memory(byte addressable)

0x00001234

0x00000004

0x0000512a

+

LDR r0, [ r1 ], #4

contents of r1updated

0x00001238

Page 70: 임베디드 시스템 구조 · 2015-01-22 · 9 Cache의쓰기동작 Write Through CPU가특정주소에명령이나데이터를write하는경우, 해당하는 명령이나데이터가Cache

69

LDM/STM의 레지스터 LIST

<register_list>에서 사용 가능한 레지스터

R0에서 R15(PC)까지 최재 16개

연속된 레지스터 표현

{r0-r5}와 같이 “-”로 표현 가능

<register_list>의 순서 지정

항상 low order의 register에서 high order 순으로 지정

LDM r10, {r1,r2,r3}LDM r10, {r2,r3,r1}실제 동작

Page 71: 임베디드 시스템 구조 · 2015-01-22 · 9 Cache의쓰기동작 Write Through CPU가특정주소에명령이나데이터를write하는경우, 해당하는 명령이나데이터가Cache

70

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

STMDB

유효 어드레스 계산

STMDA

Pre-decrement Store

Post-decrement Store

Decrement before store

STMED Decrement after store

STMFD

Page 72: 임베디드 시스템 구조 · 2015-01-22 · 9 Cache의쓰기동작 Write Through CPU가특정주소에명령이나데이터를write하는경우, 해당하는 명령이나데이터가Cache

71

Pre-Increment 어드레스 지정

STMIB r9!, {r0,r1,r2}Base 레지스터(r9) = 0x100C 데이터 저장 전 어드레스 증가

(Increment Before)

① r9 -> 0x1010 증가 후 r0 저장

② r9 -> 0x1014 증가 후 r1 저장

③ r9 -> 0x1018 증가 후 r2 저장

④ {!}, auto-update 옵션이 있으면

r9 값을 0x1018로 변경

0x10200x101C

0x03 0x10180x02 0x10140x01 0x1010

0x100C0x10080x10040x10000x0FFC0x0FF80x0FF4

0x100CR9:

0x03R2:

0x02R1:

0x01R0:

0x100C0x10100x010x10140x020x10180x03

0x1018

Page 73: 임베디드 시스템 구조 · 2015-01-22 · 9 Cache의쓰기동작 Write Through CPU가특정주소에명령이나데이터를write하는경우, 해당하는 명령이나데이터가Cache

72

Post-Increment 어드레스 지정

0x10200x101C

0x030x1018

0x020x1014

0x010x10100x100C0x10080x10040x10000x0FFC0x0FF80x0FF4

0x100CR9:

0x03R2:

0x02R1:

0x01R0:

0x100C0x100C0x010x10100x020x10140x03

0x1018

STMIA r9!, {r0,r1,r2}Base 레지스터(r9) = 0x100C

데이터 저장 후 어드레스 증가

(Increment After)

① 0x100c에 r0 저장 후 r9 -> 0x1010 증가

② 0x1010에 r1 저장 후 r9 -> 0x1014 증가

③ 0x1014에 r2 저장 후 r9 -> 0x1018 증가

④ {!}, auto-update 옵션이 있으면

r9 값을 0x1018로 변경

0x1018

Page 74: 임베디드 시스템 구조 · 2015-01-22 · 9 Cache의쓰기동작 Write Through CPU가특정주소에명령이나데이터를write하는경우, 해당하는 명령이나데이터가Cache

73

Pre-Decrement 어드레스 지정

STMDB r9!, {r0,r1,r2}Base 레지스터(r9) = 0x100C

어드레스를 <register_list> 개수 만큼

감소해 놓고, 어드레스를 증가하면서

데이터 저장

(Decrement Before)

① 어드레스를 0x1000로 감소

② 0x1000에 r0 저장 후 어드레스 증가

③ 0x1004에 r1 저장 후 어드레스 증가

④ 0x1008에 r2 저장 후 어드레스 증가

⑤ {!}, auto-update 옵션이 있으면

r9 값을 0x1000로 변경

0x10200x101C

0x03

0x1018

0x02

0x1014

0x01

0x10100x100C0x10080x10040x10000x0FFC0x0FF80x0FF4

0x100CR9:

0x03R2:

0x02R1:

0x01R0:

0x100C

0x10000x010x10040x020x10080x03

0x1000

Page 75: 임베디드 시스템 구조 · 2015-01-22 · 9 Cache의쓰기동작 Write Through CPU가특정주소에명령이나데이터를write하는경우, 해당하는 명령이나데이터가Cache

74

Post-Decrement 어드레스 지정

STMDA r9!, {r0,r1,r2}Base 레지스터(r9) = 0x100C

어드레스를 <register_list> 개수 만큼

감소해 놓고, 어드레스를 증가하면서

데이터 저장

(Decrement After)

① 어드레스를 0x1000로 감소

② 어드레스 증가 후 0x1004에 r0 저장

③ 어드레스 증가 후 0x1008에 r1 저장

④ 어드레스 증가 후 0x100C에 r2 저장

⑤ {!}, auto-update 옵션이 있으면

r9 값을 0x1000로 변경

0x10200x101C

0x03

0x1018

0x02

0x1014

0x01

0x10100x100C0x10080x10040x10000x0FFC0x0FF80x0FF4

0x100CR9:

0x03R2:

0x02R1:

0x01R0:

0x10000x10040x010x10080x020x100C0x030x1000

0x1000

Page 76: 임베디드 시스템 구조 · 2015-01-22 · 9 Cache의쓰기동작 Write Through CPU가특정주소에명령이나데이터를write하는경우, 해당하는 명령이나데이터가Cache

75

LDM/STM의 스택(Stacks) 동작

스택 동작

새로운 데이터를 “PUSH”를 통해 “top”위치에 삽입하고, “POP”을 통해가장 최근에 삽입된 데이터를 꺼내는 자료구조 형태.

스택의 위치 지정

Base pointer : Stack의 bottom 위치를 지정

Stack pointer : Stack의 top 위치를 지정

684

84

SPBASE

SP

BASE

SP

BASE

PUSH{4, 8, 6} POP

Result of pop = 6

Page 77: 임베디드 시스템 구조 · 2015-01-22 · 9 Cache의쓰기동작 Write Through CPU가특정주소에명령이나데이터를write하는경우, 해당하는 명령이나데이터가Cache

76

스택 type에 따른 포인트 변화

r5r4r3r1r0

r5r4r3r1r0

r5r4r3r1r0

r5r4r3r1r0

Old SP Old SPOld SP Old SP

STMFD sp!, {r0, r1, r3-r5}

STMED sp!, {r0, r1, r3-r5}

STMFA sp!, {r0, r1, r3-r5}

STMEA sp!, {r0, r1, r3-r5}

SP

Top of memory

SP

SP SP

Page 78: 임베디드 시스템 구조 · 2015-01-22 · 9 Cache의쓰기동작 Write Through CPU가특정주소에명령이나데이터를write하는경우, 해당하는 명령이나데이터가Cache

77

Stack의 Push 동작

STMFD sp!, {r0-r1,lr}Base 레지스터(sp) = 0x100C

Stack에 context 정보 저장

① 어드레스를 0x1000로 감소

② 레지스터 값 저장 후 어드레스 증가

③ 링크 레지스터 저장 후 어드레스

증가

④ Stack의 위치를 0x1000로 변경

0x10200x101C0x10180x10140x10100x100C0x10080x10040x10000x0FFC0x0FF80x0FF4

0x1234lr:

0x100Csp:

0x02R1:

0x01R0:

0x4321pc:0x010x02

0x1234

0x1000

Page 79: 임베디드 시스템 구조 · 2015-01-22 · 9 Cache의쓰기동작 Write Through CPU가특정주소에명령이나데이터를write하는경우, 해당하는 명령이나데이터가Cache

78

Stack의 Pop 동작

LDMFD sp!, {r0-r1,pc}Base 레지스터(sp) = 0x1000

Stack에서 context 정보를 읽는다

① 레지스터 값을 읽은 후 어드레스 증가

② 링크 레지스터(lr) 값을 읽어 프로그램

카운터(pc)에 저장

③ Stack의 위치를 0x100C로 변경

0x10200x101C0x10180x10140x10100x100C0x10080x10040x10000x0FFC0x0FF80x0FF4

0x1234lr:

0x1000sp:

0x??R1:

0x??R0:

0x4321pc:0x010x02

0x1234

0x01

0x02

0x1234

0x100C

Page 80: 임베디드 시스템 구조 · 2015-01-22 · 9 Cache의쓰기동작 Write Through CPU가특정주소에명령이나데이터를write하는경우, 해당하는 명령이나데이터가Cache

79

스택과 서브루틴

스택의 용도 중 하나는 서브루틴을 위한 일시적인 레지스터저장소를 제공하는 것.서브루틴에서 사용되는 데이터를 스택에 push하고, caller 함수로return 하기 전에 pop 을 통해 원래의 정보로 환원시키는 데 사용:

privilege 모드에서 LDM을 사용하여 Pop을 할 때 ‘S’ bit set 옵션인‘^’가 레지스터 리스트에 있으면 SPSR이 CPSR로 복사 된다.

STMFD sp!,{r0-r12, lr} ; stack all registers........ ; and the return address........

LDMFD sp!,{r0-r12, pc} ; load all the registers; and return automatically

Page 81: 임베디드 시스템 구조 · 2015-01-22 · 9 Cache의쓰기동작 Write Through CPU가특정주소에명령이나데이터를write하는경우, 해당하는 명령이나데이터가Cache

80

Contents

1. 임베디드 시스템의 구조

2. 임베디드 시스템의 개발

3. ARM 아키텍처

4. ARM 프로세서의 구조

5. ARM 프로세서 명령어

6. Cached ARM7. 임베디드 소프트웨어 개발

8. S3C2410 및 실습용 보드의 이해

9. 디바이스 제어

Page 82: 임베디드 시스템 구조 · 2015-01-22 · 9 Cache의쓰기동작 Write Through CPU가특정주소에명령이나데이터를write하는경우, 해당하는 명령이나데이터가Cache

81

ARM의 메모리 시스템

Memory

ARMcore

On-chipCaches

MMU

Virtual AddressesPhysical Addresses

BuffersMemory

Controller

ARM 프로세서

Page 83: 임베디드 시스템 구조 · 2015-01-22 · 9 Cache의쓰기동작 Write Through CPU가특정주소에명령이나데이터를write하는경우, 해당하는 명령이나데이터가Cache

82

Cached ARM 프로세서의 제어

CP15 인터페이스를 통해서 제어

Cache, MPU or MMU, endian 제어 등

Coprocessor Register Transfer 명령

MRC : Move to Register from CoprocessorCoprocessor 레지스터 내용을 ARM 레지스터로 전송

MCR : Move to Coprocessor from RegisterARM 레지스터의 내용을 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 표시

Page 84: 임베디드 시스템 구조 · 2015-01-22 · 9 Cache의쓰기동작 Write Through CPU가특정주소에명령이나데이터를write하는경우, 해당하는 명령이나데이터가Cache

83

CP15 레지스터 (ARM920T)

Register 용 도 비 고

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

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

0

7 Cache operation register Cache control

8 TLB operation register

Page 85: 임베디드 시스템 구조 · 2015-01-22 · 9 Cache의쓰기동작 Write Through CPU가특정주소에명령이나데이터를write하는경우, 해당하는 명령이나데이터가Cache

84

CP15 레지스터 (XScale)Register 용 도 비 고

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

9 Read buffer operation

10 TLB lockdown register

13 FSCE PID register Fast Context Switching Extension

14 Debug support register

15 Test & Clock control

0

7 Cache operation register Cache control

8 TLB operation register

11, 11, 12 Reserved

Page 86: 임베디드 시스템 구조 · 2015-01-22 · 9 Cache의쓰기동작 Write Through CPU가특정주소에명령이나데이터를write하는경우, 해당하는 명령이나데이터가Cache

85

MMU의 구성

Translation Lookaside Buffer (TLB)

최근에 사용된 Virtual address를 physical address로 변화하는 정보와

access permission에 대한 정보를 저장하고 있는 일종의 Cache

Translation Table Walking Logic

TLB를 update 하고 관리하는 기능을 가진 logic

Access Control Logic

Page 87: 임베디드 시스템 구조 · 2015-01-22 · 9 Cache의쓰기동작 Write Through CPU가특정주소에명령이나데이터를write하는경우, 해당하는 명령이나데이터가Cache

86

Translation Table

Physical 메모리에 있는 translation 정보를 가지고 있는 TableLevel 1 Translation Table

4096개의 32비트 translation table entry4GB 메모리를 virtual address 1MB 단위로 나누어 관리

Virtual address 비트 [31:20]로 정렬

Physical memory에 대한 1MB section 단위의 address translation 정보와 access control 정보를 가지거나, 레벨 2 table에 대한 주소

정보를 가진다.

Level 2 Translation Table64KB(large page), 4KB(small page), 1KB(tiny page) 단위의 translation table을 정보를 가지고 있다.각 translation table에는 address translation 정보와 access control 정보를 가진다.

Page 88: 임베디드 시스템 구조 · 2015-01-22 · 9 Cache의쓰기동작 Write Through CPU가특정주소에명령이나데이터를write하는경우, 해당하는 명령이나데이터가Cache

87

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

Page 89: 임베디드 시스템 구조 · 2015-01-22 · 9 Cache의쓰기동작 Write Through CPU가특정주소에명령이나데이터를write하는경우, 해당하는 명령이나데이터가Cache

88

MMU와 메모리 구성

D-CACHE

ARMcore

Virtual Addresses Space

SystemMemory

Instructions

Data

Translation Table

I-CACHE

ARM 프로세서MMU

Physical Addresses Space

VAPAAC

VAPAACB

32

ITLB

DTLB

TLB 관리Translation Table

Base Register

Page 90: 임베디드 시스템 구조 · 2015-01-22 · 9 Cache의쓰기동작 Write Through CPU가특정주소에명령이나데이터를write하는경우, 해당하는 명령이나데이터가Cache

89

MMU의 어드레스 변환

Physical Addresses Level 1 Translation Table

C BDomain SelectorAP0x000 1 1 0

C BDomain SelectorAP0x002 1 1 0

C BDomain SelectorAP0xFFF 1 1 0

C BDomain SelectorAP0xFFF 1 1 0

Virtual Addresses

4096 Entries

Fault

0 0

Fine Table Base 1 1 1Domain Selector

Coarse Table Base 1 0 1Domain Selector

Coarse Level 2 Translation Table

Fine Level 2 Translation Table

0x002 00000

0x003 00000

0x004 00000

0x001 00000

0xFFF 00000

0xFFC 00000

1 MB Sections

0x000 00000

1 MB Sections

0x001 00000

0x003 00000

0x004 00000

0x002 00000

0xFFF 00000

0xFFC 00000

0x000 00000

Page 91: 임베디드 시스템 구조 · 2015-01-22 · 9 Cache의쓰기동작 Write Through CPU가특정주소에명령이나데이터를write하는경우, 해당하는 명령이나데이터가Cache

90

Level 1 Descriptor

Level 1 Descriptor의 종류

FaultSection descriptorCoarse or fine page descriptor

Coarse page 는 256 entry의 Level 2 table을 가진다

Fine page는 1024 entry의 Level 2 table을 가진다

Coarse page table

Fault

Fine page table

Section

31 20 19 12 11 10 9 8 7 6 5 4 3 2 1 0

Section Base Address 1APDomainSelector

C B 1 0

Course Level 2 Descriptor Base Address 1DomainSelector

0 1

Fine Level 2 Descriptor Base Address 1DomainSelector

1 1

0 0

Descriptor Type

Page 92: 임베디드 시스템 구조 · 2015-01-22 · 9 Cache의쓰기동작 Write Through CPU가특정주소에명령이나데이터를write하는경우, 해당하는 명령이나데이터가Cache

91

Level 2 Descriptor

Level 2 Descriptor의 종류

FaultLarge page : 64KB 단위 관리

Small page : 4KB 단위 관리

Tiny page : 1KB 단위 관리

Large page

Fault

Tiny Page

Small Page

31 16 15 12 11 10 9 8 7 6 5 4 3 2 1 0

Large Page Base Address 0 1

0 0

AP3 AP2 AP1 AP0 C B

Small Page Base Address C B 1 0AP3 AP2 AP1 AP0

Tiny Page Base Address 1 1C BAP

Descriptor Type

Page 93: 임베디드 시스템 구조 · 2015-01-22 · 9 Cache의쓰기동작 Write Through CPU가특정주소에명령이나데이터를write하는경우, 해당하는 명령이나데이터가Cache

92

Cache와 Write Buffer 제어

Section 또는 page 별로 Cache와 Write Buffer의 사용여부 결정

CacheablePage 내의 데이터가 Cache될 수 있음을 나타낸다

BufferablePage 내의 데이터가 write buffer에 write될 수 있음을 나타낸다.

Memory mapped I/O 장치의 경우에는 반드시 disable 되어 있어야 한다.

Cacheable 과 Bufferable에 의한 메모리 시스템 특징

C B 의 미 Cache의 Write 동작

0 0 Cache 불가, 쓰기 버퍼 불가

Cache 불가, 쓰기 버퍼 동작

Cache 동작, 쓰기 버퍼 불가

Cache 동작, 쓰기 버퍼 동작

0 1

1 0 Write-through Cache

1 1 Write-back Cache

Page 94: 임베디드 시스템 구조 · 2015-01-22 · 9 Cache의쓰기동작 Write Through CPU가특정주소에명령이나데이터를write하는경우, 해당하는 명령이나데이터가Cache

93

Access Permission

Section 또는 page 별로 메모리의 access permission 제한

Access 권한은 각 descriptor의 AP 정보와 S(System) 비트와 R(Rom) 비트에 의해서 제어

S, R비트는 control 레지스터의 비트 8과 9이다

Access가 불가하면 permission fault가 발생

Access PermissionAP S R

Supervisor User00 0 0 No access No access00 1 0 Read only No access00 0 1 Read only Read only00 1 1 Reserved01 X X Read / Write No Access10 X X Read / Write Read only11 X X Read / Write Read / WriteXX 1 1 Reserved

Page 95: 임베디드 시스템 구조 · 2015-01-22 · 9 Cache의쓰기동작 Write Through CPU가특정주소에명령이나데이터를write하는경우, 해당하는 명령이나데이터가Cache

94

Domain Control

MMU의 Access는 기본적으로 “DOMAIN”의 의해서 제어 된다.개별적인 Access permission을 갖도록 제어 하는데 사용

16개까지의 domain 지정 가능

DACR(Domain Access Control Register)는 각 domain 별로 2비트씩 할당

Domain 과 Access Permission

Domain 의 미 설 명

00 No Access

Client

Reserved

Manager

모든 access에 대하여 domain fault 발생

01 Page Table의 Section descriptor 나 page descriptor의AP(Access Permission) 비트 정보를 따른다.

10 Reserved (No Access)

11Page Table의 Section descriptor 나 page descriptor의AP(Access Permission) 비트 정보를 무시하고 무조건access를 허용한다.

Page 96: 임베디드 시스템 구조 · 2015-01-22 · 9 Cache의쓰기동작 Write Through CPU가특정주소에명령이나데이터를write하는경우, 해당하는 명령이나데이터가Cache

95

MMU 설정

MMU를 설정하는 과정은 다음과 같다.1. Build Translation Table

Physical 메모리에 설정

Virtual to physical translation 정보

Cacheable / Bufferable 정보

Access Permission

2. Translation Table Base 설정

CP15의 c2 사용

3. Initialize Control RegisterEnable Cache, MMU

Clocking 모드 설정

Endian 모드 설정

Vector location 설정

Start

Build Translation Table

Translation Table Base 설정 (C2)

Initialize Control Register (C1)

MRC p15, 0, r0, c1, c0, 0 ; read control register

ORR r0, r0, #0x1

MCR p15, 0, r0, c1, c0, 0 ; enable MMU

MOV r0, =TTBase ; Translation table base

MCR p15, 0, r0, c2, c0, 0 ; set TT base

Page 97: 임베디드 시스템 구조 · 2015-01-22 · 9 Cache의쓰기동작 Write Through CPU가특정주소에명령이나데이터를write하는경우, 해당하는 명령이나데이터가Cache

96

Contents

1. 임베디드 시스템의 구조

2. 임베디드 시스템의 개발

3. ARM 아키텍처

4. ARM 프로세서의 구조

5. ARM 프로세서 명령어

6. Cached ARM7. 임베디드 소프트웨어 개발

8. S3C2410 및 실습용 보드의 이해

9. 디바이스 제어

Page 98: 임베디드 시스템 구조 · 2015-01-22 · 9 Cache의쓰기동작 Write Through CPU가특정주소에명령이나데이터를write하는경우, 해당하는 명령이나데이터가Cache

97

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

r14 lr link address / scratch register

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

r15 pc program counter

Page 99: 임베디드 시스템 구조 · 2015-01-22 · 9 Cache의쓰기동작 Write Through CPU가특정주소에명령이나데이터를write하는경우, 해당하는 명령이나데이터가Cache

98

Exception

Exception외부의 요청이나 오류에 의해서 정상적으로 진행되는 프로그램의 동작을 잠시

멈추고 프로세서의 동작 모드를 변환하고 미리 정해진 프로 그램을 이용하여

외부의 요청이나 오류에 대한 처리를 하도록 하는 것

Exception의 예

I/O 장치에서 인터럽트를 발생시키면 IRQ Exception이 발생하고, 프로세서는 발생된

IRQ Exception을 처리하기 위해 IRQ 모드로 전환되어 요청된 인터럽트에 맞는 처리

동작 수행

ARM의 ExceptionResetUndefined InstructionSoftware InterruptPrefetch AbortData AbortIRQ(Interrupt Request)FIQ(Fast Interrupt Request)

Page 100: 임베디드 시스템 구조 · 2015-01-22 · 9 Cache의쓰기동작 Write Through CPU가특정주소에명령이나데이터를write하는경우, 해당하는 명령이나데이터가Cache

99

Exception Vector 와 우선순위

Exception VectorException이 발생하면 미리 정해진 어드레스의 프로그램을 수행

미리 정해진 프로그램의 위치를 Exception Vector라 한다.

Exception Vector Table발생 가능한 각각의 Exception에 대하여 Vector를 정의해 놓은 테이블

각 Exception 별로 1 word 크기의 명령어 저장 공간을 가진다.

Vector Table에는 Branch 또는 이와 유사한 명령으로 실제 Exception을 처리하기

위한 루틴으로 분기 할 수 있는 명령으로 구성되어 있다.FIQ의 경우는 Vector Table의 맨 상위에 위치하여 분기명령 없이 처리루틴을 프로그램

할 수 있다.

ARM은 기본적으로 0x00000000에 Vector Table을 둔다. (MMU 제어 프로그램에 의해 위치 변경 가능)

Exception 우선 순위

동시에 Exception이 발생하는 경우 처리를 위해 우선 순위 지정

Page 101: 임베디드 시스템 구조 · 2015-01-22 · 9 Cache의쓰기동작 Write Through CPU가특정주소에명령이나데이터를write하는경우, 해당하는 명령이나데이터가Cache

100

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

Page 102: 임베디드 시스템 구조 · 2015-01-22 · 9 Cache의쓰기동작 Write Through CPU가특정주소에명령이나데이터를write하는경우, 해당하는 명령이나데이터가Cache

101

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 사이클이 더 필요하다.

Page 103: 임베디드 시스템 구조 · 2015-01-22 · 9 Cache의쓰기동작 Write Through CPU가특정주소에명령이나데이터를write하는경우, 해당하는 명령이나데이터가Cache

102

Exception Handling

Exception 발생

CPSR을 SPSR_<mode>에 복사

CPSR의 비트를 수정

되돌아갈 어드레스를LR_<mode>에 저장

PC 값을 Vector 어드레스로 변경

ARM state로 변경

Mode 비트 수정

필요시 인터럽트 disable

프로그램실행

Exception Handler

Exception Vector

ReturnCPSR 값 복원

PC 값 복원

ARMARM이이 하드웨어적으로하드웨어적으로 처리처리

Page 104: 임베디드 시스템 구조 · 2015-01-22 · 9 Cache의쓰기동작 Write Through CPU가특정주소에명령이나데이터를write하는경우, 해당하는 명령이나데이터가Cache

103

Return From Exception Handler

Exception 처리가 완료되면 다음의 절차를 수행하여 복귀

1. LR_<mode> 값을 PC에 복사한다.2. SPSR_<mode>를 CPSR에 복사한다.

주의사항 : 2가지 동작이 하나의 명령으로 처리되어야 한다.Exception 복귀 명령

Data processing 명령에 S 접미사를 사용하고 PC를 destination 레지스터로 사용하는 방법

Privilege 모드에서 S 접미사를 사용하면 CPSR 복원

LDM 명령을 사용하고 register list 뒤에 ^ 옵션 사용

Stack에 되돌아갈 주소 값이 계산 되어 들어가 있어야 한다.

SUBS PC, LR, #4

LDM SP!, {PC}^

Page 105: 임베디드 시스템 구조 · 2015-01-22 · 9 Cache의쓰기동작 Write Through CPU가특정주소에명령이나데이터를write하는경우, 해당하는 명령이나데이터가Cache

104

Exception 과 Pipeline

Exception 과 PipelineException 종류별로 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

Page 106: 임베디드 시스템 구조 · 2015-01-22 · 9 Cache의쓰기동작 Write Through CPU가특정주소에명령이나데이터를write하는경우, 해당하는 명령이나데이터가Cache

105

Reset Exception

발생 조건

ARM로 Reset 신호가 입력되면 Reset Exception 발생

Exception 발생에 따른 ARM의 동작

순서 동 작 동 작 설 명

1 SPSR_svc = CPSR

CPSR[5] = 0 ARM state로 전환

CPSR[6] = 1 FIQ disable

CPSR[7] = 1 IRQ disable2 CPSR 값 변경

CPSR[4:0] = 10011’b SVC 모드로 전환

3 LR_svc = unpredictable value

4 PC = 0x00

Page 107: 임베디드 시스템 구조 · 2015-01-22 · 9 Cache의쓰기동작 Write Through CPU가특정주소에명령이나데이터를write하는경우, 해당하는 명령이나데이터가Cache

106

Undefined Instruction Exception

발생 조건ARM에 정의 되지 않은 명령을 실행 하고자 하면 발생

Coprocessor에서 응답이 없으면 발생

Exception 발생에 따른 ARM의 동작

Return 명령MOVS PC, LR

순서 동 작 동 작 설 명

1 SPSR_undef = CPSR

CPSR[5] = 0 ARM state로 전환

CPSR[6] = no change

CPSR[7] = 1 IRQ disable2 CPSR 값 변경

CPSR[4:0] = 11011’b Undefined 모드로 전환

3 LR_undef = address of undefined inst + 4

4 PC = 0x04

Page 108: 임베디드 시스템 구조 · 2015-01-22 · 9 Cache의쓰기동작 Write Through CPU가특정주소에명령이나데이터를write하는경우, 해당하는 명령이나데이터가Cache

107

Software Interrupt (SWI)

발생 조건SWI 명령이 실행되면Exception 발생

Exception 발생에 따른 ARM의 동작

Return 명령MOVS PC, LR

순서 동 작 동 작 설 명

1 SPSR_svc = CPSR

CPSR[5] = 0 ARM state로 전환

CPSR[6] = no change

CPSR[7] = 1 IRQ disable2 CPSR 값 변경

CPSR[4:0] = 10011’b SVC 모드로 전환

3 LR_svc = address of SWI + 4

4 PC = 0x08

Page 109: 임베디드 시스템 구조 · 2015-01-22 · 9 Cache의쓰기동작 Write Through CPU가특정주소에명령이나데이터를write하는경우, 해당하는 명령이나데이터가Cache

108

SWI Handler

SWI 처리 순서

SWI 명령이 있는 위치를 찾는다.

SWI 명령에 있는 SWI 번호를 알아낸다.

SWI 번호에 해당하는 동작을 수행한다.

SWI의 Argument는 R0, R1, R2, R3을 통해 전달된다.

cond 1 1 1 1 24-bit (interpreted) immediate31 28 27 2423 0

Page 110: 임베디드 시스템 구조 · 2015-01-22 · 9 Cache의쓰기동작 Write Through CPU가특정주소에명령이나데이터를write하는경우, 해당하는 명령이나데이터가Cache

109

Prefetch Abort

발생 조건잘못된 어드레스 공간에서 명령을 읽으려고 하면 Exception 발생

MMU나 메모리 controller서 발생한 Abort 신호 입력에 의해서 발생

Exception 발생에 따른 ARM의 동작

Return 명령SUBS PC, LR, #4

순서 동 작 동 작 설 명

1 SPSR_abt = CPSR

CPSR[5] = 0 ARM state로 전환

CPSR[6] = no change

CPSR[7] = 1 IRQ disable2 CPSR 값 변경

CPSR[4:0] = 10111’b Abort 모드로 전환

3 LR_abt = address of abort + 4

4 PC = 0x0C

Page 111: 임베디드 시스템 구조 · 2015-01-22 · 9 Cache의쓰기동작 Write Through CPU가특정주소에명령이나데이터를write하는경우, 해당하는 명령이나데이터가Cache

110

Data Abort

발생 조건잘못된 어드레스 공간에서 데이터를 읽거나 쓰려고 하면 Exception 발생

MMU나 메모리 controller서 발생한 Abort 신호 입력에 의해서 발생

Exception 발생에 따른 ARM의 동작

Return 명령SUBS PC, LR, #8

순서 동 작 동 작 설 명

1 SPSR_abt = CPSR

CPSR[5] = 0 ARM state로 전환

CPSR[6] = no change

CPSR[7] = 1 IRQ disable2 CPSR 값 변경

CPSR[4:0] = 10111’b Abort 모드로 전환

3 LR_abt = address of abort + 8

4 PC = 0x10

Page 112: 임베디드 시스템 구조 · 2015-01-22 · 9 Cache의쓰기동작 Write Through CPU가특정주소에명령이나데이터를write하는경우, 해당하는 명령이나데이터가Cache

111

IRQ

발생 조건외부 장치에서 발생된 인터럽트(IRQ) 신호가 ARM에 입력되면 Exception 발생

Exception 발생에 따른 ARM의 동작

Return 명령SUBS PC, LR, #4

순서 동 작 동 작 설 명

1 SPSR_irq = CPSR

CPSR[5] = 0 ARM state로 전환

CPSR[6] = no change

CPSR[7] = 1 IRQ disable2 CPSR 값 변경

CPSR[4:0] = 10010’b IRQ 모드로 전환

3 LR_irq = address of next inst + 4

4 PC = 0x18

Page 113: 임베디드 시스템 구조 · 2015-01-22 · 9 Cache의쓰기동작 Write Through CPU가특정주소에명령이나데이터를write하는경우, 해당하는 명령이나데이터가Cache

112

FIQ

발생 조건외부 장치에서 발생된 인터럽트(FIQ) 신호가 ARM에 입력되면 Exception 발생

Exception 발생에 따른 ARM의 동작

Return 명령SUBS PC, LR, #4

순서 동 작 동 작 설 명

1 SPSR_fiq = CPSR

CPSR[5] = 0 ARM state로 전환

CPSR[6] = 1 FIQ disable

CPSR[7] = 1 IRQ disable2 CPSR 값 변경

CPSR[4:0] = 10001’b FIQ 모드로 전환

3 LR_fiq = address of next inst + 4

4 PC = 0x1C

Page 114: 임베디드 시스템 구조 · 2015-01-22 · 9 Cache의쓰기동작 Write Through CPU가특정주소에명령이나데이터를write하는경우, 해당하는 명령이나데이터가Cache

113

물리적인 메모리 구조

0x40000_0000

0x38000_0000

0x30000_0000

0x28000_0000

0x20000_0000

0x18000_0000

0x10000_0000

0x08000_0000

0x00000_0000Flash (nGCS0) 128MB

0x48000_0000

0x60000_0000

0xFFFF_FFFF

LAN (nGCS3)

SDRAM (nGCS6)

Boot SRAM

Special Register

Not Used (nGCS7)

Extension (nGCS1)

Extension (nGCS2)

Extension (nGCS4)

Extension (nGCS5)

Not Used

2MB/4MB/~128MB

2MB/4MB/~128MB

4KB

128MB

128MB

128MB

128MB

128MB

1GBAccessible Region

Page 115: 임베디드 시스템 구조 · 2015-01-22 · 9 Cache의쓰기동작 Write Through CPU가특정주소에명령이나데이터를write하는경우, 해당하는 명령이나데이터가Cache

114

소프트웨어 동작을 위한 메모리 구조

TEXT(RO) 영역

DATA(RW) 영역

BSS(ZI) 영역

Heap 영역

Stack 영역

RO code

RO data

Alphabetical order

ABC

Z

Page 116: 임베디드 시스템 구조 · 2015-01-22 · 9 Cache의쓰기동작 Write Through CPU가특정주소에명령이나데이터를write하는경우, 해당하는 명령이나데이터가Cache

115

Startup 코드

Startup 코드를 작성하기 위해서는

Programmer’s model, 특히 명령어

시스템 하드웨어 구조 및 기능에 대한 전반적인 사항

등을 모두 알아야 한다.

Startup 코드의 필수 사항

Exception Vector Table의 설정

Reset 핸들러의 구성

시스템 초기화

Page 117: 임베디드 시스템 구조 · 2015-01-22 · 9 Cache의쓰기동작 Write Through CPU가특정주소에명령이나데이터를write하는경우, 해당하는 명령이나데이터가Cache

116

시스템 초기화

일반적으로 시스템의 초기화 동작은 다음을 포함한다.

Entry point를 정의

Exception vector를 설정

메모리 시스템을 초기화

스택 포인터 레지스터 초기화

Critical I/O 초기화

필요 시 프로세서의 모드 및 state 변환

인터럽트 제어기 초기화

C 프로그램에서 사용되는 변수 영역 및 메모리 초기화

C 코드로 분기

Page 118: 임베디드 시스템 구조 · 2015-01-22 · 9 Cache의쓰기동작 Write Through CPU가특정주소에명령이나데이터를write하는경우, 해당하는 명령이나데이터가Cache

117

Entry Point 선언

모든 프로그램은 시작되는 부분을 정의해야 한다.어셈블러로 구성되며 모든 프로그램에는 반드시 필요

일반적으로 crt0.S(C-runtime 0 의 약자), init.S, startup.S 등의 이름 사용

Entry Point 선언

SDT, ADS, RVDS or CodeWarriorENTRY 어셈블러 디렉티브를 사용한다.

CodeWarrior 2.x or GNU

AREA Init,CODE,READONLYENTRY

ResetHandler

.text

.globl _start

.org 0_start: /* entry point */

Page 119: 임베디드 시스템 구조 · 2015-01-22 · 9 Cache의쓰기동작 Write Through CPU가특정주소에명령이나데이터를write하는경우, 해당하는 명령이나데이터가Cache

118

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을 초기화 한다.

Page 120: 임베디드 시스템 구조 · 2015-01-22 · 9 Cache의쓰기동작 Write Through CPU가특정주소에명령이나데이터를write하는경우, 해당하는 명령이나데이터가Cache

119

시스템 초기화 절차

System Reset & goto PC=0x0

Goto Reset Handler

Disable Watch-dog

Disable all interrupt

Setup system clock

Setup memory controller

Initialize each stack

Power-on 또는 reset switch에 의해서 시스템 reset

Reset handler로 이동

Watch-dog 타이머를 초기화 한다.

1

2

3

4

5

6

7

Clear BSS

Goto C_Entry

8

9

외부의 모든 인터럽트를 받아들이지 않도록 한다.

Clock 주파수, PLL 등을 초기화 한다.

메모리 제어기를 초기화

SVC,USR,ABT,IRQ,FIQ,Undef 등의 stack을 초기화

BSS 영역을 초기화 한다.

C 함수로 분기하여 메인 프로그램을 시작

Page 121: 임베디드 시스템 구조 · 2015-01-22 · 9 Cache의쓰기동작 Write Through CPU가특정주소에명령이나데이터를write하는경우, 해당하는 명령이나데이터가Cache

120

Exception Vector Table

Page 122: 임베디드 시스템 구조 · 2015-01-22 · 9 Cache의쓰기동작 Write Through CPU가특정주소에명령이나데이터를write하는경우, 해당하는 명령이나데이터가Cache

121

Initialization for Reset (1/2)

Page 123: 임베디드 시스템 구조 · 2015-01-22 · 9 Cache의쓰기동작 Write Through CPU가특정주소에명령이나데이터를write하는경우, 해당하는 명령이나데이터가Cache

122

Initialization for Reset (2/2)

Page 124: 임베디드 시스템 구조 · 2015-01-22 · 9 Cache의쓰기동작 Write Through CPU가특정주소에명령이나데이터를write하는경우, 해당하는 명령이나데이터가Cache

123

Memory Bank Initialization

Page 125: 임베디드 시스템 구조 · 2015-01-22 · 9 Cache의쓰기동작 Write Through CPU가특정주소에명령이나데이터를write하는경우, 해당하는 명령이나데이터가Cache

124

Stack Initialization

Page 126: 임베디드 시스템 구조 · 2015-01-22 · 9 Cache의쓰기동작 Write Through CPU가특정주소에명령이나데이터를write하는경우, 해당하는 명령이나데이터가Cache

125

Setup Handler

Page 127: 임베디드 시스템 구조 · 2015-01-22 · 9 Cache의쓰기동작 Write Through CPU가특정주소에명령이나데이터를write하는경우, 해당하는 명령이나데이터가Cache

126

RW/ZI Initialization

Page 128: 임베디드 시스템 구조 · 2015-01-22 · 9 Cache의쓰기동작 Write Through CPU가특정주소에명령이나데이터를write하는경우, 해당하는 명령이나데이터가Cache

127

Contents

1. 임베디드 시스템의 구조

2. 임베디드 시스템의 개발

3. ARM 아키텍처

4. ARM 프로세서의 구조

5. ARM 프로세서 명령어

6. Cached ARM7. 임베디드 소프트웨어 개발

8. S3C2410 및 실습용 보드의 이해

9. 디바이스 제어

Page 129: 임베디드 시스템 구조 · 2015-01-22 · 9 Cache의쓰기동작 Write Through CPU가특정주소에명령이나데이터를write하는경우, 해당하는 명령이나데이터가Cache

128

Contents

1. 임베디드 시스템의 구조

2. 임베디드 시스템의 개발

3. ARM 아키텍처

4. ARM 프로세서의 구조

5. ARM 프로세서 명령어

6. Cached ARM7. 임베디드 소프트웨어 개발

8. S3C2410 및 실습용 보드의 이해

9. 디바이스 제어