전자제품 구동을 위해서 핵심 반도체로 쓰이는 MCU(Micro Controller Unit)에 대해 MCU 반도체 전문기업인 ST마이크로일렉트로닉스의 유지 카와노 매니저가 연재기고를 통해 알기 쉽게 해설합니다.
MCU 핵심 ‘CPU’, 연산 결과 출력
어큐뮬레이터, 연산결과 직접 입력·구조 단순
FIFO, 연산 성능 향상 고안·데이터 임시 저장
[편집자주]일반적으로 반도체라 하면 컴퓨터의 CPU와 메모리처럼 일반인에게 익숙한 반도체를 떠올리기 마련이다. 반면에 전자제품 구동을 위해서 핵심 반도체로 쓰이는 MCU(Micro Controller Unit)의 경우 일반적으로 우리가 쉽게 접하는 모든 전자제품에서 사용되고 있으면서도 일반인에게는 아직 낯선 반도체다. 이런 MCU가 최근 반도체 부족 사태로 인해 언론에 오르내리며, 일반인들에게 주목받기 시작했다. 이에 본지는 MCU 반도체 전문기업인 ST마이크로일렉트로닉스의 유지 카와노 매니저의 연재기고를 통해 MCU에 대해 전문적으로 알아보는 자리를 마련했다.
마이크로컨트롤러(MCU)의 핵심 구성요소는 CPU다. 약 30년 전의 MCU는 오로지 CPU만을 의미했고 메모리와 주변 장치 모듈은 동일한 인쇄회로기판(PCB)에 별도의 IC 형태로 MCU와 연결돼 있었다.
CPU라는 용어는 중앙 처리 장치(Central Processing Unit)를 의미한다. CPU는 입/출력 디바이스(주변 장치 모듈)를 제어함으로써, 데이터를 수신하고 연산 실행의 결과를 출력한다.
CPU에는 두 가지 유형이 있으며, 각 유형은 연산중의 데이터를 임시로 저장하기 위해 각기 다른 유형의 레지스터를 사용한다. 한 CPU는 범용 레지스터(레지스터 CPU)를 사용하고 다른 하나는 어큐뮬레이터(어큐뮬레이터 CPU)를 사용한다.
MCU와 같은 디지털 회로에서 플립플롭(flip-flop)이나 데이터를 저장하는 기타 회로들을 ‘레지스터’라고 부른다.
레지스터는 데이터를 저장하는 데 사용된다는 점에서는 메모리와 유사하지만 상대적으로 용량이 작은 저장회로다.
범용 레지스터(general-purpose register)는 명령에 사용되는 데이터를 임시로 저장하는, CPU 내부에서 볼 수 있는 유형의 레지스터로 CPU에는 다수의 범용 레지스터가 포함돼 있다.
반면에 주변 장치 레지스터(peripheral register)는 주변 장치 모듈(예, 타이머, USART 및 ADC)에 대한 설정 값이나 측정 결과를 저장하는 레지스터이다.
MCU에 따라 주변 장치 레지스터를 부르는 이름이 다를 수 있다. ST마이크로일렉트로닉스가 생산하는 STM32에 사용되는 ARM Cortex-M3 프로세서는 범용 레지스터를 사용한다.
어큐뮬레이터는 유형이 다른 레지스터이다. 이 레지스터는 범용 레지스터와 구조가 동일하며, 데이터를 저장한다.
하지만 레지스터 CPU가 다수의 범용 레지스터를 탑재하고 레지스터 사이에서 연산이 수행되는 반면에 어큐뮬레이터 CPU는 하나의 어큐뮬레이터만 탑재되고 어큐뮬레이터와 메모리 사이에서만 연산이 실행된다. 연산 결과는 어큐뮬레이터(일부 MCU는 메모리)에 입력된다.
어큐뮬레이터는 연산 결과들의 누적 값이 반복적으로 더해진 연산 결과가 항상 어큐뮬레이터의 입력으로 사용되기 때문에 이런 이름을 얻게 됐다. 어큐뮬레이터 CPU 장점 중 하나는 레지스터 CPU보다 회로 구조가 단순하다는 것이다.
현재는 거의 모든 MCU가 레지스터 CPU를 사용하지만, ST의 STM8 시리즈 제품은 어큐뮬레이터 CPU를 사용하는 고성능 MCU 라인이다.
▲그림1. CPU 블록도
그림 1에서는 CPU의 블록도를 볼 수 있다. 블록도의 맨 윗부분은 CPU 레지스터의 실행 유닛, 밑부분에는 어큐뮬레이터 CPU가 표시돼 있다.
이 두 가지 유형의 CPU에 대한 기본 개념을 이해하는 데 도움이 될 수 있도록 블록도에는 주요 요소만 표시했다.
레지스터 CPU와 어큐뮬레이터 CPU의 유일한 차이점은 실행 유닛의 내부구조에 있다.
메모리(ROM)에서 명령코드가 입력될 때, 먼저 FIFO 프리패치 버퍼(pre-fetch buffer)에 저장된다. FIFO는 선입(First In), 선출(First Out)을 의미한다.
다르게 발음할 수도 있지만, 일반적으로는 ‘파이포(fai-fo)’와 ‘피포(fee-fo)’로 발음한다.
버퍼는 데이터를 임시로 저장하는 메모리이며, FIFO 버퍼는 데이터를 순차적으로 처리하는 메모리이다.
‘프리패치(pre-fetch)’라는 단어는 ‘사전에 읽다(to read in advance)’라는 뜻이다. 이를 요약하면, FIFO 프리패치 버퍼는 ‘사전에 데이터를 읽어 저장하는 버퍼’다. 이 고속 연산 메모리는 연산 성능을 향상시키기 위해 고안됐다.
디코더(Decorder)는 이름에서 알 수 있듯이 명령어를 해석한다. FIFO 프리패치 버퍼의 명령을 순서대로 읽고 어떤 명령의 유형인지를 결정한다. 또한 명령어들의 기능에 따라 명령어를 실행 유닛으로 전송한다.
실행 유닛(Execution Unit)도 마찬가지로 이름에서 알 수 있듯이 명령어를 실행하는 장치다. 이 장치는 연산 기능을 하는 ALU와 시프터를 통해 레지스터나 어큐뮬레이터의 데이터를 계산하는데 사용된다.
▲그림 2. 레지스터 CPU의 명령 처리 과정
그림 2는 레지스터 CPU가 어떻게 연산을 수행하는지를 나타내고 있다.
CPU는 어드레스 계산, 인터럽트(interrupt) 처리 및 연산 결과 처리(운반 및 가져오기)를 포함해 다른 여러 가지 유형의 임무를 수행한다. 이러한 여러 임무에 대해서는 이후에 더 상세하게 설명할 예정이다.