ARM System Developer's Guide  

- Designing and Optimizaing System Software




#####

ARM processor core

Data movement flow

Programmer's model from SW developer's view (processor core <-> differnt parts)

ARM core naming conventions, ARM Instruction Set Architecture

ARM processor core families



# Dataflow and ARM core's abstract components

> 폰노이만 형태로 구현된 ARM 모델

Von Neumann implementations : 데이터와 명령어가 같은 버스를 공유하는 형태

  Harvard implementations : 데이터용 버스와 명령어용 버스가 분리되어있는 형태


> Data : Data Bus를 통해 core로 입력

> Instruction decoder : 명령어 실행 전 명령어 해독

> Load-Store Architecture 

load 명령 : 메모리에서 코어내의 레지스터로 데이터를 복사

store 명령 : 레지스터에서 메모리로 데이터를 복사

* 메모리 안에서 데이터를 직접 조작할 수 있는 데이터 처리 명령어는 없으므로 레지스터 안에서만 수행할 수 있음

> Register file : 32비트 레지스터들로 구성된 저장공간

메모리에서 읽은 signed 8-bit or 16-bit 값은 register에 저장되기 전 "Sign Extend(부호 확장기)"를 통해 32-bit 값으로 변경된 후 저장

> Two source registers & Single result register

Two source registers : Rn(Bus A, *barrel shifter), Rm(Bus B)

Single result register : Rd

*barrel shifter 선처리 작업 수행

> ALU(Arithmetic Login Unit, 산술논리장치) & MAC(Multiply-Accumulate Unit, 곱셈누산장치)

: Bus A와 B에서 각각 Rn, Rm register의 값을 읽어 연산을 수행

: Rd 레지스터에 저장된 결과를 결과버스를 통해 register files에 바로 저장



### 2.1. Registers

- 데이터나 주소가 저장



- 16개의 Data registers[r0-r15]와 2개의 Status registers로 구성

- 한번에 18개까지 활성화 가능


> 특수 목적을 갖는 레지스터

- r13 :  SP(Stack Pointer). 현재 모든 프로세서 모드의 스택 맨 위 주소값 저장 

- r14 : LR(Link Register). 코어가 서브루틴을 호출할 때마다 그 복귀주소를 저장

- r15 : PC(Program Counter). 프로세서가 읽어들인 다음 명령어의 주소를 저장


* r13, r14는 범용 레지스터로도 사용하며 프로세서 모드가 바뀌면 뱅크에 저장되므로 특히나 유용하게 사용할 수 있음

but, r13은 OS에서 유효한 스택 프레임을 가리키고 있는 것으로 가정하여 동작하므로 위험함


> 상태레지스터

- cpsr : Current Program Status Register. 현재의 프로그램 상태 레지스터

- spsr : Stored Program Status Register. 이전에 저장된 프로그램 상태 레지스터




### 2.2. CPSR 

: Current Program Status Register. 현재의 프로그램 상태 레지스터


- ARM core 내부 동작 모니터링 및 제어

- 전용 32-bit register. Register file안에 위치



* 8-bit씩, 4개의 영역으로 나뉨.    

" Flag(8-bit), Status(8-bit), Extension(8-bit), Control(8-bit) "


- 부록 B



## 2.2.1. Processor Modes

: 어떤 레지스터가 활성화되고, cpsr를 액세스 할 수 있는 권리를 갖게 될지 결정

Privileged Mode : 특권모드. cpsr을 완전히 읽고 쓸 수 있는 모드

- User Mode : 일반모드. cpsr의 제어 필드는 읽기만 가능, 상태 플래그 필드는 읽기/쓰기 모두 가능


> Seven Processor's Modes

six privileged modes, single user mode


 abort mode

 프로세서가 메모리 액세스에 실패한 경우 진입 

 Privileged Mode

 FIQ & IRQ mode 

 ARM 프로세서에서 사용할 수 있는 2가지의 입터럽트 레벨을 위한 모드 

 supervisor mode 

 프로세서에 리셋이 걸렸을 때 진입하여 OS Kernel이 동작하는 모드 

 system mode  

 user mode의 특수한 버전으로 cpsr의 완전한 read/write이 가능 

 undefined mode

 프로세서가 정의되지 않거나 지원되지 않는 명령어를 만났을 때 진입하는 모드 

 user mode 

 프로그램과 어플리케이션이 동작하는 모드 

 User Mode



## 2.2.2. Banked Registers



*왼쪽 흰색 부분에서 

[r0-r12] : 일반적으로 CPU에서 "load-store" 명령어를 가지고 사용하는 레지스터

r13 sp, r14 lr, r15 pc, cpsr


* 회색 부분 : 프로세서의 특정 모드에따라 사용이 가능하게 되며, 해당 프로그램에 따라 매번 숨겨짐


- Banked registers는 user mode registers에 하나씩 대응

- 프로세서 모드 변경 시 새로운 모드의 banked registers로 대체됨

* 프로세서 모드는 HW의 interrupt나 exception, 혹은 cpsr을 직접 제어하여 변경

(exceptions - reset, interrupt request, fast interrupt request, software interrupt, data abort, prefetch abort, and undefined instruction)


# 익섹셥시 모드 변경


- user mode -> irq mode


- r13, r14가 r13_irq, r14_irq로 뱅크되어 대체됨

r13_irq : 복귀할 주소를 포함

r14_irq : IRQ mode를 위한 SP 저장


* user mode의 r13, r14는 어떤 명령에 의해서도 영향을 받지 않음


- spsr_irq : 이전 모드의 cpsr을 저장하며 irq모드에서만 보여짐

user mode로 돌아가기 위해 spsr_irq에서 cpsr을 복구시켜 주는 특별한 리턴 명령어 사용


* spsr은 특권모드에서만 read/write 할 수 있으므로, user모드에서의 액세스는 불가능


> ?????

: 그림에서 spsr_irq의 색은 왜 하얀색인가?


# Processor mode


# spsr. cpsr의 저장

: cpsr은 interrupt나 exception 발생에만 저장이 됨. cpsr의 직접 제어로 인한 모드변경에서는 저장되지 않음


# Mode bits

- Figure 2.3에서 cpsr의 하위 5비트는 프로세서 모드를 나타냄

- Table 2.1에서 맨 오른쪽 열인 "Mode[4:0]"이 해당 모드를 각각 나타내는 비트패턴


* 코어에 전원이 공급되면 해당 Mode bit을 "supervisor"로 시작됨

이 모드는 특권모드이므로 cpsr을 완전히 액세스 할 수 있음

=> 초기화 코드가 다른 모드들을 위한 스택을 셋업할 수 있게되는 것.



## 2.2.3. State and Instruction Sets


- ARM 명령어 세트 : 프로세서가 ARM 상태에 있을 때만 활성화

- Thumb 명령어 세트 : 프로세서가 Thumb 상태에 있을 때만 활성화. 순수한 16-bit Thumb 명령어만 실행

- Jazelle 명령어 세트 : Java Virtual Machine을 수정한 버전.

Jazelle의 하드웨어 일부분에서 java코드를 지원해야하며 나머지는 소프트웨어적으로 에뮬레이션 됨

table 2.3


* ARM, Thumb, Jazelle 명령어 세트를 섞어서 사용할 수 없음


> cpsr의 Jazelle J, Thumb T ? 프로세서의 상태를 반영함

- J와 T가 0인 경우 :  프로세서는 ARM 상태에 있으며 ARM 명령어를 실행하고 있음. (전원이 공급되는 순간은 항상 ARM 상태)

- T비트가 1인 경우 : Thumb 상태


* 코어의 상태를 바꾸기 위해서는 특별한 분기 명령어가 필요 table 2.2




## 2.2.4. Interrupt Masks

: 특정 인터럽트 소스가 프로세서에게 인터럽트 요청을 할 수 없도록 하는 것

ARM 프로세서 코어에서 가능한 인터럽트 요청 레벨에는 IRQ와 FIQ의 2가지가 있음


> ex. cpsr - 2개의 인터럽트 마스크 비트 

6번(F) : 1일때, FIQ의 인터럽트를 마스크

7번(I) : 1일때, IRQ의 인터럽트를 마스크



##  2.2.5. Condition Flags


> 상태 플래그 업데이트

- 비교명령어에 의한 업데이트

- 산술 명령어 뒤에 "S"가 붙은 경우 산술 처리 결과에 따라 업데이트

  : "subs" -> 뺄셈 명령어의 결과 레지스터에 0이 저장되면 cpsr의 Z(zero) 플래그가 1로 설정


- DSP 확장 명령어를 포함하는 프로세서 코어의 경우,

Q 비트가 오버플로우나 포화가 발생하였는지 표시하며 "sticky"하며 0으로 플래그값을 설정하려면 cpsr의 값을 직접 수정해야 함

* sticky : 하드웨어에 의해서만 플래그가 1로 설정될 수 있음을 의미.


- Jazelle를 지원하는 프로세서에서 J비트는 코어의 상태를 반영 함(1인경우 Jazelle 상태라는 것을 의미)

Jazelle를 사용하고자 할 경우 몇몇 프로세서 코어에서만 사용이 가능하며, ARM Limited와 Sun Microsystems로부터 라이센스를 받아야 함




- 대부분의 ARM 명령어는 상태 플래그 값에 따라 조건부로 실행이 가능

- cpsr의 최상위 비트에 위치



- DSP와 Jazelle를 지원

- nzCvq -> C만 대문자인 이유는 플래그 값이 1임. 플래그 값이 1일 때는 대문자로 표현

* 인터럽트의 경우, 대문자는 인터럽트 비활성을 의미


- j와 t가 0이므로 Jazelle와 Thumb가 0. -> ARM 상태에 있음

- IRQ interrupt : 0(활성화), FIQ1(비활성화)

- SVC : Mode[4:0]이 supervior 모드임을 의미



## 2.2.6. Conditional Execution


- 조건부 실행 : 코어가 어떤 명령어를 실행할 지의 여부를 제어할 있음

- 조건 인자를 통해 명령어 실행여부를 결정

- 명령어는 조건인자를 가지고 있음

- 조건인자는 명령어 mnemonics 바로뒤에 추가되어 명령어와 함께 incode 됨

- 명령어 실행 전 core는 자신이 가지고있는 조건인자와 cpsr의 상태플래그를 비교

일치하면 명령어 실행, 일치하지 않으면 명령어는 무시됨

- 조건인자가 없다면 "AL"으로 설정되어 항상실행 됨



* mnemonic?

: 연상기호. 일반적으로 무엇인가를 연상하여 기억하기 위해 만들어진 짧은 코드들을 의미. 이러한 기억방법을 개발하는 기술을 "mnemonics"라고 부름름

: 어셈블리 언어에서는 연상기호는 연산 명령어를 줄여서 만들어 놓은 것

각 어셈블러 명령어의 연산 코드 필드에 사용

  출처. http://www.terms.co.kr/mnemonic.htm




### 2.3. Pipeline

- RISC Processor가 명령어를 실행하기 위해 사용하는 메커니즘

- 한 명령어가 해독되어 실행되는 동안, 다음 명령어를 미리 읽어올 수 있도록 함으로써 실행속도를 향상


# 3단 파이프라인의 구조


- Fetch : 메모리에서 명령어를 로드

- Decode : 실행한 명령어를 해독

- Execute : 명령어를 처리하고 그 결과를 레지스터에 저장




- "Filling the Pipeline" : 매 사이클마다 하나의 명령어를 실행시킬 수 있도록 해줌줌


> 파이프라인의 길이가 길어지면, 

1. 프로세서는 더 많은 동작 주파수를 필요로하며 각 단계에서 처리 가능한 일의 양이 감소

=> 성능 향상. but, 명령어를 실행하기 전 파이프라인을 채우는 시간이 길어지므로 시스템 지연도 발생

2. 각 단계의 데이터가 서로 영향을 끼침. 의존관계

=> 의존도를 줄이기 위해 "명령어 스케줄링(6장)"을 이용


# ARM 제품군에 따른 파이프라인 설계


> ARM9

- 5단계 : "Memory", "Write(writeback)" 추가

- 결과 : MHz당 평균 1.1 Dhrystone MIPS를 처리

ARM7에 비하여 13%의 명령어 처리 능력이 향상


> ARM10

- 6단계 : "Issue" 추가

- 결과 : MHz당 평균 1.3 Dhrystone MIPS를 처리

ARM7에 비하여 34%의 명령어 처리 능력이 향상. but, 지연시간이 길어짐



* ARM7, ARM9, ARM10은 모두 "Pipeline executing characteristics(파이프라인 동작 특성)"를 사용하고 있음

-> ARM7에서 작성된 코드는 ARM9나 ARM10에서 그래도 실행 가능



## 2.3.1. Pipeline Executing Charateristics


- ARM Pipeline은 어떤 명령어가 실행 단계로 넘어오기 전까지는 그 명령어를 처리하지 않음

즉, 3단게를 가진 ARM7 파이프 라인에서는 4번째 명령어가 읽혀들어 올 때 쯤에야 하나의 명령어가 수행 됨



> ex. MSR : IRQ Interrupt 활성화 명령어

실행 단계에서 cpsr의 I비트를 0으로 설정

ADD 명령이 실행단계로 오면 IRQ Interrupt가 활성화 됨



> 파이프라인과 PC의 사용

- 실행 단계에서 PC는 항상 명령어의 주소(0x8000)에 8을 더한 값을 가리킴

즉, PC는 현재 실행되고 있는 명령어의 주소보다 2단계 앞서 값을 가지고 있음

(PC의 offset값 계산에 중요한 요인)

* Thumb 상태에서 pc는 "명령어주소+4"



# 파이프라인의 세가지 특성

1. 분기 명령어로 실행되거나 PC값을 직접 수정하여 분기하면 파이프라인이 깨짐

2. ARM10은 분기 예측방식을 사용.

명령어를 실행하기 전에 가능한 분기를 미리 예측하여 새로운 분기 주소를 로드하여 파이프라인이 깨지는 상황을 줄여줌

(하드웨어적으로 자주가는 곳을 미리 기억)

3. 실행 단계의 명령어는 인터럽트가 발생하더라도 해당 명령의 수행은 완료함.

파이프라인 안의 다른 명령어들은 무시되고, vector table에 적절한 엔트리 명령어로 파이프라인을 채움




### 2.4. Exceptions, Interrupts, and the Vector Table

(ARM 프로세서에서의 exceptions)


> Exceptions이나 Interrupt가 발생한 경우, 

프로세서는 "Vertor Table"에서 해당 exceptions이나 interrupts를 처리하도록 이미 설계가 되어있는 특정 루틴으로 분기하는 특정 메모리의 주소값을 PC에 설정


# 분기 명령어

 Reset vector

 전원이 공급될 때 프로세서에 의해 처음으로 실행되는 명령어의 위치. 

 초기화 코드로 분기. 

 Undefined Instruction vector 

 프로세서가 명령어를 분석할 수 없을 때 사용 

 Software Interrupt vector

 SWI 명령어를실행했을 때 호출

 * SWI : 운영체제 루틴에서 벗어나고자 할 경우 주로 사용 

 Prefetch Abort vector

 프로세서가 정확한 접근 권한 없이 어떤 주소에서 명령어를 읽어들이려고 시도할 때 발생

 (실제 abort는 파이프라인의 decode단계에서 발생) 

 Data Abort vector

 Prefetch Abort와 유사

 명령어가 정확한 접근권한이 없이 데이터 메모리를 액세스 하려고 할 때 발생 

 Interrupt Request vector

 프로세서의 현재 프름을 중단시키기 위해 외부 하드웨어 장치에 의해 사용됨.

 IRQ가 cpsr에서 마스크 되지 않았을 경우만 발생 

 Fast Interrupt Request vector

 IRQ와 유사하나 더욱 빠른 응답 시간을 요규하는 하드웨어를 위해 할당.

 FIQ가 cpsr에서 마스크 되지 않았을 경우만 발생 





### 2.5. Core Extensions (캐시 메모리와 코프로세서)

: ARM 코어 주변에 확장 시킬 수 있는 하드웨어 장치


- 표준 컴포넌트

- 성능 향상, 자원 관리, 추가 기능 제공

- 캐시 및 TCM(Tightly Coupled Memory), MMU, Co-processor Interface



## 2.5.1. 캐시와 TCM


# 캐시

: main memory와 core 사이에 위치하는 빠른 메모리 블럭으로 효율적인 fetch를 가능하게 함


# ARM기반 시스템의 캐시

- 프로세서 내부에 1단계 캐시를 이용

- 폰노이만 형태의 캐시 구조 vs 하버드 형태이 캐시 구조


> Von Neumann 형태의 구조

: 데이터와 명령어를 하나의 통일된 캐시에 함께 저장


* Logic and control : 로직제어장치. 메모리 시스템을 AMBA 버스에 연결해주는 논리 장치


> Harvard 형태의 구조

: 명령어와 데이터를 위한 캐시가 각각 분리되어 있음


캐시는 성능은 향상시키지만, 예측성을 떨어뜨릴 수 있음. 

특히 실시간 시스템에서 이런 코드 실행의 확정성(deterministic)의 문제는 큰 이슈가 됨

=> TCM으로 해결


> TCM 

- Tightly Coupled Memory

- 코어 가까이에 빠른 SRAM을 위치하여 명령어나 데이터를 읽을 때 필요한 클럭 사이클을 보장

(확정적 동작에 필요한 실시간 알고리즘을 위해 필수적으로 필요한 클럭사이클)


> 캐시 + TCM 구조

: 성능향상과 예측 가능한 실시간 응답을 보장



## 2.5.2. 메모리 관리

> 임베디드 시스템에서는 여러 개의 메모리 소자를 사용하므로 이를 체계적으로 관리하고,

 하드웨어로 부적적하게 접근하는 어플리케이션으로부터 시스템을 보호해야 함

=> 메모리 관리 하드웨어 사용


# 3가지 유형의 메모리 관리 하드웨어

 일반 관리 장치 (no extensions providing no protection)

 - 비보호 메모리. non-protected memory

 - 고정적, 유연성 없음

 - Applications로부터의 보호를 필요하지 않는 작고 간단한 임베디드 시스템에서 사용

 제한적인 보호를 제공하는 메모리 보호 장치 (MPU)

 - 제한된 수의 메모리 region을 사용하는 간단한 시스템에 적용

 - 특별한 코프로세서 레지스터를 사용하여 제어

 - 각 영역은 특정 권한으로 정의

 - 메모리 보호는 필요하지만 복잡한 memory map구조는 사용하지 않는 시스템에서 사용

 (13장)

 완전한 보호를 제공하는 메모리 관리 장치 (MMU)

 - ARM에서 사용되는 가장 복잡한 메모리 관리 장치

 - mapping table set을 제공

 - main memory에서 저장되어 접근권한 및 가상메모리 mapping을 수행

 - multi tasking 시스템을 위해 설계

 (13장)



## 2.5.3. Coprocessor

코어의 처리 기능을 확장하기 위해 ARM 프로세서에 부착하여 사용

- 명령어세트의 확장, 값을 설정할 수 있는 레지스터를 제공

- 인터페이스를 통한 하나이상의 코프로세서를 추가할 수 있음

- load-store 타입의 인터페이스를 제공해주는 전용 ARM 명령어 사용


> ex. Coprocessor 15(CP15)

: TCP, MMU의 제어를 위해 CP15 레지스터를 사용


- 새로운 특정 명령어들을 제공하여 명령어 세트 확장이 가능    

=> decode 단계에서 처리

ex. decode 단계에서 coprocessor의 명령어 발견

-> 명령어가 관련 coprocessor로 이동

만약, coprocessor가 없다면? "Undefined Instruction Exception" 발생

-> 소프트웨어적으로 coprocessor의 동작을 에뮬레이션 할 수 있음 

> ????? 그럼 이 예외처리는 당연히 OS가 하는건가??





'System > Embedded' 카테고리의 다른 글

[ARM] 32비트 ARM 명령어  (0) 2015.11.09
[ARM] ARM 프로세서 개요 2  (0) 2015.11.09
[ARM] ARM 임베디드 시스템  (0) 2015.11.08
[ARM] 참고 + ARM 아키텍처의 미래  (0) 2015.11.08
스토리지 시스템  (0) 2015.08.13

ARM System Developer's Guide  

- Designing and Optimizaing System Software




# ARM  ? 

ARM 유한회사(Adbanced RISC Machines)는 RISC 프로세서를 설계하고 라이센싱하는 회사로,

ARM 아키텍처는 ARM사에 의해 개발한 CPU 디자인의 한 종류이다.

(wiki)


# ARM Architecture ?

ARM 아키텍처는 임베디드 기기에서 많이 사용되는 RISC 프로세서이다. 저전력을 사용하도록 설계하여 ARM CPU는 모바일 시장에서 뚜렷한 강세를 보인다.

- 1985년 4월 26일 영국의 캠브리지에 있는 에이콘 컴퓨터(Acorn Computers)에 의해서 탄생.

- 1990년 11월에 애플과 VLSI의 조인트 벤처 형식으로 Advanced RISC Machines Ltd.)가 생김

(wiki)




### 1.1. RISC의 특징


# RISC 

 : 매우 빠른 속도로 한 클럭안에 실행 될 수 있는 간결하면서도 막강한 명령어들을 가지고 있는 아키텍처를 의미


# RISC vs CISC

 

 RISC 

 CISC 

 Full Name

 Reduced Instruction Set Computer

 Complex Instruction Set Computer 

 Focus on

 Software

 Hardware 

 Depend on

 Compiler

 Hardware

 Hardware Complexity

 decrease

 increase


# RISC의 4가지 Design rules

1. Instructions : 명령어의 복잡도를 줄여 성능을 향상


- 적은수의 명령어 클래스를 가짐

- single cycle에서 실행가능한 simple operations 제공

- simple operation 몇 개를 조합하여 복잡한 연산(나눗셈 연산 등)들을 구현

일정한 길이의 명령어를 가지며 파이프라인을 구현(decode, fetch)


* CISC : 가변길이의 instructions, 실행을 위해 많은 사이클이 걸림


2. Pipelines : 명령어 처리의 속도를 높임


- instructions의 수행은 파이프라인에 의해 병렬로 수행될 수 있는 작은 units으로 쪼개져서 수행 됨

- 이상적인 파이프라인에서는 한 사이클에 각 명령어를 한 단계씩 앞서 처리

- 명령어들은 한 파이프라인 단계에서 decode 될 수 있음

- 마이크로 코드는 필요하지 않음


* CISC는 미니 프로그램에 의해 실행될 명령어인 마이크로 코드가 필요


3. Registers : 데이터 저장을 위한 거대한 레지스터군을 제공


- 빠른 데이터 처리를 위해 로컬 메모리처럼 동작하는 레지스터로 데이터와 주소가 저장


* CISC는 특정 목적을 위한 전용 레지스터를 가짐


4. Load-store architecture 사용


- 메모리와 레지스터사이에 발생하는 데이터 이동에 따른 비용을 줄이기 위해 메모리를 여러번 access하지 않고, 데이터를 여러번 access.

- 데이터 처리 동작과 메모리 access 동작을 분리




### 1.2. ARM 프로세서의 특징


# ARM 프로세서의 고려사항

1. 저전력, 작은 die 사이즈로 설계

2. 제한된 메모리를 고려한 코드 직접도

3. 저가격의 메모리 소자 사용

4. 설계 및 제조비용. 주변장치 공간을 위해 임베디드 프로세서가 차지하는 다이 사이즈 줄이기


# 프로세서나에 하드웨어 디버그 기술 포함

: 신속한 문제해결로 전체적 개발 비용 줄이기


# 순수 RISC의 개념을 벗어남

: 프로세서 자체의 속도보다는 효율적인 시스템 성능과 전력 소모를 중요하게 봄



## 1.2.1. 임베디드 시스템을 위한 명령어 세트


1. 가변 사이클로 실행되는 명령어

: 전력소모, 실리콘 면적, 코드 사이즈를 줄이기 위해 여러 사이클에 실행되는 명령어를 만듬


ex. "multiple load-store"

- 전송될 레지스터의 수에 따라 실행 사이클이 달라지고 메모리에 linear한 access가 이루어짐

- random access 보다 빠르니까 성능 향상


2. 복잡한 명령어 처리를 위한 Inline Barrel Shifter (2장, 3장)

: 명렁어에 의해 사용되기 전, 입력 레지스터 중의 하나를 미리 처리하는 하드웨어 컴포넌트 

: 성능과 코드 집적도 향상


3. 16bit Thumb 명령어

: 코드 직접도 향상


4. 조건부 실행

: 특정 조건의 경우 실행며 분기 명령어의 사용을 줄여주므로 성능 향상 및 코드직접도 향상


5. DSP 확장 명령어

: 기존 DSP와 프로세서가 수행하던 일을 "Digital Signal Process"가 처리

: 16x16비트의 곱셈 처리를 지원하고자 추가



### 1.3. ARM 하드웨어 임베디드 시스템 아키텍처


# ARM 기반 임베디드 하드웨어의 의 4가지 중요 컴포넌트

1. ARM Processors : 임베디드 디바이스 제어. (코어+주변장치 = Memory Management, Caches, ...)

2. Controllers : 시스템의 주요 기능을 담당하는 블록. (Interrupt Controller, Memory Controller, ...)

3. Peripherals : 칩 외부로의 입출력 기능 제공. 메모리 매핑된 레지스터를 통해 주변장치를 제어함

4. Bus : 주변 장치간의 통신 담당



## 1.3.1. ARM 버스 기술

> 칩 내부 버스 사용

> Bus에 연결될 수 있는 디바이스 타입 

- Bus Master : 다른 디바이스로 데이터를 전송할 수 있는 논리 장치 (ARM Processor Core)

- Bus Slave : 버스 마스터로부터 전송 요청이 있는 경우에만 동작 (Peripherals)

> 2-level Bus Architecture 

- 전기적인 특성과 버스폭(16, 32, 64비트)을 담당하는 물리적 단계

- 프로토콜의 처리단계



## 1.3.2. AMBA Bus Protocol

- Advanced Microcontroller Bus Architecture

- 프로세서와 주변 장치를 연결해주는 역할을 담당

- ARM 프로세서의 On-chip Bus Arhcitecture로 채택

- ASB(ARM System Bus), APB(ARM Peripheral BUS)

- AHB(ARM High Performance Bus)

: 하나에 집중된 multiprex bus를 기반으로 빠른 속도를 제공, 64/128bit 폭 지원, 한번에 하나의 버스 마스터를 활성화

- Multi-layter AHB : 동시에 여러개의 버스 마스터를 활성화. 멀티프로세서 시스템에 적합함

- AHB-lite : 기본 AHB 버스의 하위셋으로, 하나의 버스 마스터로 한정시켜 AHB 버스의 특성을 축약시킴

- 다양한 주변장치의 지원을 위한 인터페이스 제공



## 1.3.3. 메모리


# Memory Hierarcy

> Memory의 trade-off : 

- 위치 :  ARM 프로세서 코어 - 캐시 - 메인메모리 - 보조기억장치

- 성능 및 가격 : 캐시 > 메인메모리 > 보조기억장치

- 용량 : 캐시 < 메인메모리 < 보고기억장치


* 대다수의 임베디드 시스템은 캐시의 성능이 불필요함

: 전반적인 성능향상은 도움이 되지만 실시간 시스템 응답에는 도움이 되지 않음


> Memory Width

: 한번에 access 할 수 있는 비트 수. 8, 16, 32, 64 비트

* 32bit ARM 명령어,  16bit width의 메모리 칩에서 캐시가 없는 경우에서는 2번의 Memory Access는 성능의 저하를 가져오지만, 16bit 메모리 값이 상대적으로 저렴


> Types

 ROM(Read Only Memory)

 - 업데이트나 수정이 필요없는 대량 생산품

 - 부트코드 저장을 위해 사용

 Flash ROM

 - 디바이스 펌웨어 저장

 - 전원이 꺼져도 오랫동안 유지해아하는 데이터를 저장

 - Erasing 할 때, 소프트웨어적으로 완전한 제거가 가능하여 가격 절감

 DRAM(Dynamic Random Access Momory) 

 - 디바이스에서 가장 일반적으로 사용

 - storage cell이 데이터를 데이터를 지속적으로 유지하기 위해 수 ms마다 refreshㅏ며 데이터를 지속적으로 충전(refresh는 메모리 사용 전에 DRAM Controller에서 수행)

 SRAM(Static Random Access Momory)

 - 실리콘 공간을 더 많이 필요

 - refresh가 필요하지 않아 "static"이라고 함

 - 캐시와 같은 작은 크기의 high peed task에 사용

 SDRAM(Synchronous Dynamic Random Access Memory)

 - DRAM의 하위 범주에 속함

 - 기존보다 훨씬 더 빠른 클럭속도로 동작

 - 프로세서 버스와 동기화하여 동작

 * "Memory Cells -> Pipeline -> Bus"의 구조로 이동하는 데이터들의 효율적인 처리를 도모



## 1.3.4 Peripherals

- 각 주변장치는 보통 하나의 기능만을 수행. 칩 내에 존재

- 모든 ARM 주변장치는 memory-mapped되어있으며, Controll Register들이 메모리 상에 위치함

- 주변장치를 제어하는 2가지 주요 컨트롤러 : 메모리 컨트롤러, 인터럽트 컨트롤러


# Memory Controller

: 메모리를 프로세서 버스에 연결

- 메모리 디바이스의 사용 가능한 상태를 위한 소프트웨어적인 초기 설정

- 메모리 디바이스는 초기화 코드를 실행

* ex. DRAM : 메모리 타이밍, 리프레시 비율, ...


# Interrupt Controller

: 주변장치나 디바이스가 실행될 때, 프로세서에게 인터럽트를 발생 (인터럽트 발생에 대한 소프트웨어 정책을 제공)

  Interrupt Controller Regitster의 해당 비트를 1로 설정


- Standard Interrupt Controller : 외부 디바이스의 요청에 대한 인터럽트를 프로세서 코어에게 보냄. (요청을 수렴할지 결정)

Interrupt Handler는 Interrupt Controller 내부의 Device Bitmap Regitster를 확인 후 해당 디바이스를 알아냄

- VIC(Vector Interrupt Controller) : 디바이스 혹은 주변장치가 특정시간에 인터럽ㅌ를 발생시켰는지를 결정



### 1.4. Embedded System Software


# Embedded System을 제어하기 위한 4가지 S/W Component


- Initialization Code 

- Operating Systems

- Device Drivers

- Applications


* firmware : 디바이스에 고정되어 있는 ROM code (ex. Initialization code, ...)



## 1.4.1. Initialization Code 

: OS가실행될 수 있는 상태로 만들어 주는 코드.

  OS에게 제어권을 넘기기전 타겟보드(혹은 특정 타켓 그룹)의 동작을 위한 최소한의 부분을 설정


# 초기화코드의 3단계

- initial hardware configuration 

: 초기 하드웨어 설정 코드. 이미지 부팅을 위한 타겟 플랫폼을 설정

(타겟플랫폼의 일반적 설정정, 부팅 이미지의 요구사항에 따른 수정사항, ...)

- diagnostics 

: 진단 코드. 초기화 프로그램에 내장되어 결점을 찾아 수정하는 것을 목표로 함

HW System이 작업 순서에 맞는 처리를 하는지 테스트

표준 시스템 관련 문제 찾기

- booting 

: 부팅 코드. 이미지를 *로드한 후 그 이미지로 제어권을 넘겨주는 작업을 수행

PC를 부팅이미지(OS)의 시작 위치로 옮김

* loading : 코드와 데이터를 포함하여 모든 프로그램과 변수를 포함한 데이터영역을 RAM으로 복사하는 작업

* OS이미지가 압축된 경우 road과정 또는 제어권을 가질 대 압축을 해제함


> Example 1.1.   Memory Layout <

: 메모리 초기화 과정의 필요성

전원공급 시 바로 초기화 코드가 실행되야 함

=> ARM 기반의 임베디드 시스템에서는 일반적으로 Memory remapping을 수행

RAM을 0x00000000 주소로 변경시킴 (Exception Vector Table이 RAM에 존재 하도록 재프로그래밍 될 수 있기 때문임. 2.4절)



## 1.4.2. Operating System 

: 하드웨어 리소스와 infrastructure를 사용하기 위한 일반적인 프로그래밍 환경을 제공

:  OS 환경에서 효율적인 시스템의 사용을 위해 시스템 리소스를 조직 (Memory, Peripheral, ...)


# ARM 프로세서가 지원하는 운영체제의 타입

: ARM 프로세서는 50개가 넘는 OS를 지원. 크게 2가지로 분류


> RTOS : Real Time Operating System. 실시간 운영체제.

이벤트에 대한 반응시간을 보장해야 함. 

반응 시간 초과시엔 성능이 서서히 줄어듬.

일반적으로 보조 저장 장치를 가지지 않음.

- Hard Real-time Applications : 모든 작업에 대한 반응시간을 보장

- Soft Real-time Applications : 충부한 반응 시간을 보장


> Platform OS

규모가 크고 실시간이 필요없는 applications를 관리위해 MMU를 필요로 함

일반적으로 보조기억장치를 가짐 (ex. 리눅스 OS)


> 기타....



## 1.4.3. Applications

: 임베디드 시스템의 특정 작업을 수행


## Device Drivers

: 주변 장치와의 표준 인터페이스를 제공







'System > Embedded' 카테고리의 다른 글

[ARM] ARM 프로세서 개요 2  (0) 2015.11.09
[ARM] ARM 프로세서 개요  (0) 2015.11.09
[ARM] 참고 + ARM 아키텍처의 미래  (0) 2015.11.08
스토리지 시스템  (0) 2015.08.13
컴퓨터 하드웨어  (0) 2015.08.13

### 참고



# ARM 명령어 세트 

(ISA : Instruction Set Architecture)


http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dui0204ik/Cegbgefe.html


http://www.jkelec.co.kr/img/lecture/arm_arch/arm_arch_4.html#7.1



# ARM7, ARM9 

http://www.jkelec.co.kr/img/lecture/arm_arch/arm_arch_1.html



# 라즈베리파이

https://www.raspberrypi.org/





------------------------------------------------------------------------------------------



ARM System Developer's Guide 

- Designing and Optimizaing System Software





#####

Advanced DSP and SIMD Support in ARMv6

- SIMD Arithmetic Operations

Future Technologies Beyond ARMv6

- TrustZone






### 15.1. ARMv6 에서의 DSP 및 SIMD 명령어



## 15.1.1. SIMD 산술 연산





### 15.4. 향후 새로운 기술



## 15.4.1. TrustZone

'System > Embedded' 카테고리의 다른 글

[ARM] ARM 프로세서 개요 2  (0) 2015.11.09
[ARM] ARM 프로세서 개요  (0) 2015.11.09
[ARM] ARM 임베디드 시스템  (0) 2015.11.08
스토리지 시스템  (0) 2015.08.13
컴퓨터 하드웨어  (0) 2015.08.13
스토리지 구셩

http://kindstorage.tistory.com/7



스토리지 구성방식

1. DAS

2. NAS

3. SAN

* iSCSI https://www.his21.co.kr/advantage/no68/docu08.htm



HDD 인터페이스

https://ko.wikipedia.org/wiki/%ED%95%98%EB%93%9C_%EB%94%94%EC%8A%A4%ED%81%AC




'System > Embedded' 카테고리의 다른 글

[ARM] ARM 프로세서 개요 2  (0) 2015.11.09
[ARM] ARM 프로세서 개요  (0) 2015.11.09
[ARM] ARM 임베디드 시스템  (0) 2015.11.08
[ARM] 참고 + ARM 아키텍처의 미래  (0) 2015.11.08
컴퓨터 하드웨어  (0) 2015.08.13


PC 속도? , 용량? 개념 따라잡기 (4) HDD 종류와 용어 1,2,3

http://hunspage.tistory.com/entry/38

http://hunspage.tistory.com/44

http://hunspage.tistory.com/45




HDD 인터페이스

http://skymeet.tistory.com/43

http://egloos.zum.com/sracher/v/1978586





[IT강의실] 0과 1로 세상을 바꾼 컴퓨터의 두뇌 - CPU

http://it.donga.com/21086/

[IT강의실] 많을수록, 빠를수록 좋은 컴퓨터의 기억장치 - 램(RAM)

http://it.donga.com/21689/


[IT강의실] HDD를 대체하는 고속의 데이터 저장장치 - SSD

http://it.donga.com/21701/

[IT강의실] 초보자를 위한 SSD 구매 및 설치 가이드(상)

http://it.donga.com/21610/

[IT강의실] 초보자를 위한 SSD 구매 및 설치 가이드(하)

http://it.donga.com/21751/

[IT강의실] PC의 그래픽 성능을 좌우하는 그래픽 카드의 핵심칩 - GPU

http://it.donga.com/21795/

[IT강의실] 대용량 데이터 저장장치의 대명사 - 하드 디스크 드라이브

http://it.donga.com/21796/


[IT강의실] 컴퓨터 네트워크의 출발점 - 랜카드

http://it.donga.com/21201/

[IT강의실] 빠른 데이터 전송을 위한 외장 하드 전용 인터페이스 - eSATA

http://it.donga.com/21980/


[IT강의실] 가상현실에 한 걸음 더, HMD

http://it.donga.com/21346/


'System > Embedded' 카테고리의 다른 글

[ARM] ARM 프로세서 개요 2  (0) 2015.11.09
[ARM] ARM 프로세서 개요  (0) 2015.11.09
[ARM] ARM 임베디드 시스템  (0) 2015.11.08
[ARM] 참고 + ARM 아키텍처의 미래  (0) 2015.11.08
스토리지 시스템  (0) 2015.08.13

+ Recent posts