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 |