용's

[Chap 2] The ARM Architecture 본문

Computer Science/Embedded System

[Chap 2] The ARM Architecture

TaeYOng's 2014. 10. 11. 20:38

2.1 The Acorn RISE Machine

- [Before]글 참조..*


2.2 Architectural Inheritance

- ARM은 앞서 말했듯이, Berkeley RISC의 개념들을 가져와 설계되었는데 그중 채택된 특징은

 => Load-Store arch

 => Fixed-Length 32-bit insts

 => 3 address inst format


- 반면 채택되지 않은 특징들도 있다. 대표적으로는 Register windows, Delayed branches, Single-Cycle execution

- 채택되지 않은 이유를 알아보면,

  =>Resgister window : 이 특징은 기본적으로 레지스터 사용률이 높아지게 됨으로써 채택되지 않음. 이로 인해 더 많은 레지스터가 사용된다면 비용면에서 문제가 발생(ARM과 맞지 않음)

  =>Delayed Branch: 이 방법은 pipeline하나일 경우 문제가 없지만 슈퍼스칼라 구조에서는 분기예측 회로를 복잡하게 만듬과 동시에 하드웨어적 부담을 증가시킴(ARM과 역시 맞지 않음)

  =>Single-Cycle execution: 대부분의 ARM의 명령어들이 한 사이클내에 실행이 되지만 Load나 Store같은 경우는 메모리에 두번 접근을 해야하므로 한 사이클 내에 실행되기 어렵다. 그렇다고 메모리를 두개를 두자니 비용적인 문제가 발생하므로 이 부분은 채택되지 않음


- ARM은 가능한 심플하게 HW을 구성하였다는 것이 특징(Simplicity). 게다가 CISC적인 몇몇 특징들을 채택함으로써 code density 또한 좋게 만듦으로써 ARM은 저전력에 싼 가격의 작은 코어 사이즈를 가질 수 있게됨.


2.3 The ARM programmer's model

- ARM Resisters

- 위의 사진을 보면 알 수 있듯이 user mode에서 총 16개의 레지스터(r0~r15)와 system mode에서만 사용되는 레지스터가 총 15개, 그리고 CPSR과 각 모드에서의 SPSR 레지스터 5개로 총 37의 레지스터가 있음을 알 수 있다.

- r0~r12 : 일반적으로 load와 store 명령어를 가지고 사용할 수 있는 레지스터, r13: Stack Pointer로 사용, r14: 서브루틴 호출시 Return address를 저장하는 레지스터, r15는 PC를 위한 레지스터로 실행할 프로그램을 읽어올 위치를 가르킴

(PC는 User mode와 System mode의 두 경우 모두 공유함)

- 위에서 파랑색으로 칠된 부분은 reg들은 각 모드에서의 전용레지스터로서 예외 및 에러 처리를 전용으로 함. 나머지 reg들은 모두 다른 모드들과 공유함으로써 공용으로 사용(즉, 각 모드마다 모두 15개의 reg와 CPSR를 사용한다는 뜻)

- Register Mode

 => User Mode: 일반적은 응용프로그램을 실행할 때 사용. 이때 다른 모드로의 전환은 svc(supervisor call)을 사용

 => FiQ Mode: Fast IRQ로서 빠른 인터럽트 처리를 위해 만들어짐. (ARM은 예외처리보다 interrupt 처리를 더 중점 둠)

 => IRQ Mode: 일반적으로 사용되는 외부 입터럽트들을 처리하기 위해 만들어진 register로서 대부분 하드웨어적인 입출력을 처리 한다고 보면 됨

 => SVC Mode: User Mode가 아닌 다른 레지스터나 커널, 장치 드라이버등을 처리할 때 이용. Reset 신호나 SWI(Software interrupt: 프로그래머의 임의적인 요청)가 발생하면 SVC모드로 넘어감

 => Abort Mode: 에러처리를 위한 모드

 => Undefined Mode: ARM에서 정의되지 않는 명령어 처리를 위한 모드


- CPSR(Current Program Status Register): N(Negative), Z(Zero), C(Carry), V(Overflow, IF(Interrupt enables), T(Instruction set), Mode: 프로세서


- SPSR은 현재 실행되고 있는 Mode를 실행하기 바로 직전의 CPSR을 저장하는 역할


- ARM memory system

-> ARM에서 데이터는 8bit(byte), 16bit(half word),32bit(word)로 구성됨. 

-> Word들은 항상 4byte기준으로 할당 되며, half word(16 bit)같은 경우는 짝수번째 Byte를 기준으로 데이터가 채워진다. 즉, 총 4byte에서 0,4,8,12,16, ... 위치에 데이터가 위치하거나, 또는 2,6,10, 14, ... 와 같은 위치에만 존재할수 있다)


- ARM Load-Store Architecture 

-> ARM에서는 CPU에서 명령어를 처리 할 때 명령어를 처리할 떄마다 Memory에 접근을 한다면 Memory에 갔다오기까지 pipeline이 멈춰 있어야하므로 메모리의 접근 명령어를 무조건 Load 명령어와 Store명령어만으로 구성해놓음


- 그외 ARM의 특징

-> 3 address data processing insts(2 source, 1 destination)

-> 모든 명령어가 Condition을 포함

-> Multi-access가 가능한 Load-Store 명령어

-> ALU연산에 포함된 Shift연산

-> co-Processor의 명령어 세트(새로운 명령어 생성 가능)

-> 16bit의 Thumb 명령어


- I/O System

-> ARM의 I/O 시스템은 Memory-mapped I/O devices를 기반으로 함. 이는 메모리의 일부공간을 I/O port에 할당. I/O 시스템을 위한 개별 주소BUS가 있는 것이 아닌 memory와 같은 주소를 공용으로 사용함. 이로인해 BUS구조가 간단해지고 하드웨어도 간단해지지만 메모리와 함께 사용하므로 메모리 이용 효율이 낮다는 단점이 발생.(입출력을 위한 특별한 명령어를 사용하지 않음)


-ARM exception

-> 종류로는 Interrupt, trap, supervisor call, procedure가 있음

  => Procedure의 경우: 먼저 현재 상태를 저장(PC, CPSR이 R14와 SPSR에). 프로세서 동작모드가 적절한 예외모드로 바꿈. PC값에 Exception handler를 위한 branch 주소가 포함된 Vector address 값을 저장하고 예외 처리. 유저 프로그램으로 return.


-ARM은 Cross Development가 가능함







Comments