NXP에서 만든 MCU인 FRDM-KL25Z
를 예시로 SoC의 구조에 대해서 알아보자.
FRDM-KL25Z
는 ARM의 M0+ core가 탑재돼있다.ARM Cortex-M0+ 프로세서는 ARMv6 아키텍처를 적용했다. ARMv6는 이전에 배웠던 RISC-V처럼 register를 operand로operation을 수행하는 load & store 아키텍처다.
총 R0
부터 R12
까지 13개 register를 범용(general purpose) register로 정의했다. R13
은 stack pointer, R14
는 flow 변경 시 돌아올 주소를 저장할 link register, R15
는 PC로 할당돼있다.
특수 목적으로 사용하는 register도 있다. PSR
은 프로그램의 상태를 저장하고, PRIMASK
는 인터럽트를 어떻게 마스킹할지 결정해주고, CONTROL
은 내부적으로 control bit 같은 것을 관리한다.
PSR
APSR
): 수행중인 instruction의 상태 (N(Negative), Z(Zero), C(Carry), V(Overflow)
)를 알려준다.IPSR
): 수행 중 예외나 오류로 인터럽트가 발생했을 때, 발생한 예외에 대한 정보를 Exception Number
bits로 알려준다.EPSR
): 수행하는 instruction의 종류를 T
bit를 통해 알려준다. ARM은 평범한 길이의 instruction도 있지만, 짧고 빠른 Thumb 이라는 instruction도 있다.PRIMASK
PRIMASK
의 정해진 bit마다 set해두면, 발생한 인터럽트에 해당하는 자리 bit가 set 돼있다면 handler를 수행하고, reset 돼있다면 wait 하는 방식이다.CONTROL
SP
는 두 가지가 있다고 한다. CONTROL
의 SPSEL
bit로 둘 중 어떤 register를 SP
로 사용할지 결정한다.모든 register는 32-bit로 구성돼있다.
Memory의 모든 공간을 자유롭게 활용할 수 있는 것은 아니다. 특정 영역을 특정 용도로 사용하기 위해 mapping 돼있다. 이런 특성을 Memory mapped 라고 부른다.
모든 프로세서는 저마다 개별적인 memory map을 가지고 있으므로 datasheet를 반드시 확인해야 한다.
MOV
/ MOVS
: Data를 target register로 옮기는 명령. -S
는 APSR
의 N
, Z
bit를 update까지 한다.MRS
/ MSR
: Special register와 general purpose register 사이의 data movement 명령어다.이후로 instruction에 대한 설명이 이어지는데 RISC-V와 거의 비슷하기도 하고, 필요할 때 검색해서 자세한 사용법을 알아보는 것이 더 효과적이라고 생각한다. 컴퓨터 구조/SoC를 공부하는 데 있어서 instruction의 종류 하나하나 상세히 공부하는 것은 비효율적이므로 요약 정리에서는 생략한다.