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

+ Recent posts