포스트

2. Microprocessor 아뜰리에(Atelier) - ARM을 파헤쳐 보자

Embedded Recipes

2장 목차


ⓐ 마이크로 프로세서 아뜰리에


  • 하드웨어들이 실제 프로세서에서 어떻게 적용되는지 확인
  • ARM의 특징, 사용하는 Mode들, Exception과 Mode, 내부 Register의 구조와 사용법, ARM SoC는 어떤 컨셉인가를 알아봄
  • 크게 데이터 전송, 연산, 분기 기능을 수행

ⓑ ARM Inside


  • 임베디드 시스템에서 가장 대표적인 프로세서
  • 32 Bit RISC, Big/Little Endian 지원, Fast Interrupt Response 등의 특징을 가짐

armprocessor

  • ARM Architecture는 일반 프로세서와 유사한 구조임
  • 기본적인 구조는 같고, 추가된 회로라 몇개 있는 정도
  • ARM은 RISC구조를 가짐
    • RISC : 단순한 명령어 구조. 명령어 길이가 고정되어, 종류가 많음. 소비전력이 줄어 임베디드 시스템에 적합함.
    • 그러나 CISC 한줄로 처리 가능한 명령어를 RISC에서는 여러줄로 처리해야하는 등의 단점

ⓒ ARM mode와 THUMB mode


  • THUMB mode
    • 32bit ARM이 word 크기가 32이므로, 32bit씩 처리함
    • THUMB mode는 32bit ARM에서 돌아가는 16bit 기계어
      • 당시 메모리는 16bit word가 주류였기 때문에, 32bit 명령어를 압축한 16bit 명령어 set인 THUMB mode를 발표함

ⓓ ARM 동작 Modes - 나는 어느 mode를 써야 하나


  • ARM 동작 Mode. 총 7개

armmode

User : Normal Program execution mode
System : Run privileged operating system tasks
FIQ : When a high priority (fast) interrupt is raised
IRQ : When a low priority (normal) interrupt is raised
Supervisor : A protected mode for the operating system ,entered when a SWI instruction is executed
Abort : Used to handle memory access violations
Undef : Used to handle undefined instruction

armmode2

  • 각 모드에 따라 권한이 다름

ⓔ ARM Register와 Context


  • 레지스터는 Core가 이용할 수 있는 저장 매체 중 가장 빠른 속도를 가짐
  • 각 동작 모드에 따라 레지스터 세트가 변경됨

mode

  • SVC mode에서 Fast Interrupt로 인해 FIQ mode로 진입했을 시

modechange

  • System mode와 User mode는 완전히 같은 레지스터 셋을 사용. CPSR mode bits만 차이남

CPSR

  • CPSR : Current Program Status Register
    • NZCV, IF, T, mode를 가짐
    • NZCV : 상태 플래그. Negative, Zero, Carry ,OverFlow의 약자
    • IF : IRQ나 FIQ를 허용할 것인지 설정하는 bit
    • T : Thumb mode, ARM mode이냐를 구분하는 bit
    • mode : 현재의 모드를 표현하는 bit
    • 위 비트들을 통해, 현재의 mode를 확인할 수 있음. 또한 원하는 모드로도 변경 가능함
  • SPSR : Saved Program Status Register - CPSR을 복사해 백업 용도로 사용하는 특수 레지스터
  • Context
    • 국내에서는 “문맥”으로 번역
    • 현재 MCU의 상황, 상태등을 표현
    • 레지스터 Set의 종합적인 상황
      • 이들의 상태를 스냅샷 찍듯이 저장해서 살펴보면, 뭘 하고있는지, 뭘 하려는지 파악 가능함
      • 이러한 Context를 복원하면 그 특정 순간으로 돌아갈 수 있음

ⓕ ARM Exceptions and Modes


  • Exception
    • 모드로 진입하는 방법
    • Interrput는 Exception의 한 종류
    • 예외가 발생하면, 에외의 종류에 해당하는 모드에 진입하고,
      그 예외에 물려있는 해당 주소로 pc를 점프 시킨 후, 예외처리

exception_vector_table

  • Exception Vector Table : 예외 발생 시 jump하는 주소들을 모은 것
  • SVM mode : ARM에 전원을 인가하거나, reset 시킨 경우
  • IRQ mode : 하드웨어 인터럽트 발생 시
  • FIQ mode : Fast 인터럽트 발생 시
  • ABT mode : Access 할 수 없는 주소인 경우(Data Abort)가 발생한 경우,
    Instruction Fetch를 해오려는데 못해온 경우(Prefetch abort)
  • UNDEF mode : Instruction을 decode했는데 모르는 명령어인 경우(Undef Exception)
    보통 memory corruption이 났을 때 발생.
    • 이를 응용하여, ARM이 사용하지 않는 코드를 삽입하여 UND vector 주소로 jump 하게 만들어, 디버깅 code등을 실행시킬 수 있음
  • User mode와 System mode로 진입하는 Exception은 없음
    • 즉, Privileged mode 에서 User mode로 넘어가면 Exception 없이는 돌아올 수 없음
  • Exception 우선순위
    1. Rest
    2. Data abort
    3. FIQ
    4. IRQ
    5. Prefetch Abort
    6. Undefined Instruction
    7. SWI

exception_context_swap

  • 예외처리시 일어나는 과정 그림

ⓖ ARM/ Thumb PCS - 레지스터 사용법


  • ARM Procedure Call Standard. APCS 혹은 PCS라고 부름, TPCS, ATPCS, AAPCS 등
    • 함수를 부를 때, Register는 어떻게 사용해야하는가
    • return 값은 어떻게 돌려주는가
    • Stack은 어떨때, 어떻게 사용되는가
    • 1~3 이외의 Register들은 어떻게 사용되는가
  • AAPCS에 의한 각 Register 사용법 Table

aapcs_table

  • synonym은 레지스터의 다른 이름. special은 특수 기능
  • R0, R1, R2, R3, R4, SP, LR ,PC 를 가장 많이 사용함
    • R0, R1, R2, R3은 보통 Argument / Result / Scratch 값을 넣음
      • 매개변수
      • 결과값. 리턴값이 여러개일 수 있음
      • Scratch는 연습장. 임시 변수처럼 사용 가능
    • R4~R11
      • 변수용. 함수 호출 전 내용들을 스택에 넣고, 사용 후 복원해야함
    • R12~R15
      • PC, SP, LR, IP 등 특수 Register들

ⓗ ARM은 Interrupt냄새를 어떻게 맡는가


  • Interrupt는 Exception 처리 중 하나
  • 최대한 짧고 간결하게 짜야함.
  • Interrupt Controller 라는 IP를 통해 인터럽트를 감지함

icip

  • 어느 핀에 입력 신호를 주느냐에 따라 어떤 인터럽트인지 분류함
  • Nesting : 인터럽트 처리 중, 인터럽트가 또 들어온 경우 어떻게 처리할 것인지
    • 시스템, 디자인에 따라 다름

      ⓘ ARM SoC (System On Chip) - ARM 그렇고 말고


  • ARM은 실제 프로세서를 만들어 파는 회사가 아님
    • 프로세서의 아키텍처를 만들어 라이센스를 다른 회사에 로열티를 판매하는 회사
  • SoC : System On Chip
    • 칩을 모듈화 하여 Block화. 이를 Interllectual Property(IP)라고 부름
    • USB, UART, DMA 등 IP module 만들어 라이센스를 판매
    • 이런 block들을 모아 한개의 MCU를 구성함
  • AMBA : ARM에서 제안한 IP 구조를 연결해주는 BUS 구조

ⓙ AMBA - SoC안에서 IP끼리의 Bus 규격


  • AMBA : Advanced Microcontroller Bus Architecture
  • ARM에서 주도하는 버스 규격. 아래 3가지로 구성되어 있음
  • BUS Interface 버스의 통신 방식
    • AHB : Advanced High Performance Bus
    • ASB : Advanced System Bus
    • APB : Advanced Peripheral Bus

bus

  • MCU 내부에 AHB, APB로 연결된 모습
    • 고성능 프로세서에는 AHB이용, 주변장칟르은 APB로 연결된 모습
    • Bridge를 통해 AHB와 APB의 중간 변환

arbiter

  • 버스 사용권을 얻기 위해 Arbiter에게 사용권한을 받음
    1. Master가 Arbiter에게 HBUSREQ를 전송
    2. Arbiter가 버스가 비어있다면 HGRANT를 전송
    3. Master가 사용을 위해 HLOCK을 전송하여 잠금. 우선순위에 따라 허가권을 배정함
    4. 허가권을 얻은 Master는 접근하고자 하는 Slave의 주소에 HADDR를 전송. Decoder는 이를 확인하고 HSEL 신호를 해당 Slave에게 전송함
    5. Master -> Slave 에게 HWRITE 신호를 이용해 쓰기 신호 전송
    6. Slave -> Master에게 HREADY 신호를 통해 준비 완료 신호 전송
    7. Master -> Slave에게 HWDATA 전송하여 데이터를 전송함

transcation

  • 트랜잭션
  • Address Phase 에서 주소 세팅 과정, Data Phase에서 실제 데이터 전송
  • HBURST 신호는 데이터를 연속으로 보낼 때 사용함
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.