2. Microprocessor 아뜰리에(Atelier) - ARM을 파헤쳐 보자
2장 목차
- ⓐ 마이크로 프로세서 아뜰리에
- ⓑ ARM Inside
- ⓒ ARM mode와 THUMB mode
- ⓓ ARM 동작 Modes - 나는 어느 mode를 써야 하나
- ⓔ ARM Register와 Context
- ⓕ ARM Exceptions and Modes
- ⓖ ARM/ Thumb PCS - 레지스터 사용법
- ⓗ ARM은 Interrupt냄새를 어떻게 맡는가
- ⓘ ARM SoC (System On Chip) - ARM 그렇고 말고
- ⓙ AMBA - SoC안에서 IP끼리의 Bus 규격
ⓐ 마이크로 프로세서 아뜰리에
- 하드웨어들이 실제 프로세서에서 어떻게 적용되는지 확인
- ARM의 특징, 사용하는 Mode들, Exception과 Mode, 내부 Register의 구조와 사용법, ARM SoC는 어떤 컨셉인가를 알아봄
- 크게 데이터 전송, 연산, 분기 기능을 수행
ⓑ ARM Inside
- 임베디드 시스템에서 가장 대표적인 프로세서
- 32 Bit RISC, Big/Little Endian 지원, Fast Interrupt Response 등의 특징을 가짐
- 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개
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
- 각 모드에 따라 권한이 다름
ⓔ ARM Register와 Context
- 레지스터는 Core가 이용할 수 있는 저장 매체 중 가장 빠른 속도를 가짐
- 각 동작 모드에 따라 레지스터 세트가 변경됨
- SVC mode에서 Fast Interrupt로 인해 FIQ mode로 진입했을 시
- System mode와 User mode는 완전히 같은 레지스터 셋을 사용. CPSR mode bits만 차이남
- 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 : 예외 발생 시 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 우선순위
- Rest
- Data abort
- FIQ
- IRQ
- Prefetch Abort
- Undefined Instruction
- SWI
- 예외처리시 일어나는 과정 그림
ⓖ ARM/ Thumb PCS - 레지스터 사용법
- ARM Procedure Call Standard. APCS 혹은 PCS라고 부름, TPCS, ATPCS, AAPCS 등
- 함수를 부를 때, Register는 어떻게 사용해야하는가
- return 값은 어떻게 돌려주는가
- Stack은 어떨때, 어떻게 사용되는가
- 1~3 이외의 Register들은 어떻게 사용되는가
- AAPCS에 의한 각 Register 사용법 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들
- R0, R1, R2, R3은 보통 Argument / Result / Scratch 값을 넣음
ⓗ ARM은 Interrupt냄새를 어떻게 맡는가
- Interrupt는 Exception 처리 중 하나
- 최대한 짧고 간결하게 짜야함.
- Interrupt Controller 라는 IP를 통해 인터럽트를 감지함
- 어느 핀에 입력 신호를 주느냐에 따라 어떤 인터럽트인지 분류함
- Nesting : 인터럽트 처리 중, 인터럽트가 또 들어온 경우 어떻게 처리할 것인지
- 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
- MCU 내부에 AHB, APB로 연결된 모습
- 고성능 프로세서에는 AHB이용, 주변장칟르은 APB로 연결된 모습
- Bridge를 통해 AHB와 APB의 중간 변환
- 버스 사용권을 얻기 위해 Arbiter에게 사용권한을 받음
- Master가 Arbiter에게 HBUSREQ를 전송
- Arbiter가 버스가 비어있다면 HGRANT를 전송
- Master가 사용을 위해 HLOCK을 전송하여 잠금. 우선순위에 따라 허가권을 배정함
- 허가권을 얻은 Master는 접근하고자 하는 Slave의 주소에 HADDR를 전송. Decoder는 이를 확인하고 HSEL 신호를 해당 Slave에게 전송함
- Master -> Slave 에게 HWRITE 신호를 이용해 쓰기 신호 전송
- Slave -> Master에게 HREADY 신호를 통해 준비 완료 신호 전송
- Master -> Slave에게 HWDATA 전송하여 데이터를 전송함
- 트랜잭션
- Address Phase 에서 주소 세팅 과정, Data Phase에서 실제 데이터 전송
- HBURST 신호는 데이터를 연속으로 보낼 때 사용함
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.