[AVR 초급] 1. AVR 시작하기

우리가 많이 사용하는 가전제품들에는 그 가전제품들이 동작하기 위한 두뇌가 존재한다.

이 두뇌는 얼핏 보면 컴퓨터와 같은 역할을 하는데 좀 더 자세히 들여다보면 조금 차이가 나는 것을 알 수 있다.

컴퓨터는 할 수 있는 일이 아주 다양하다.

그리고 그렇게 일을 할 수 있도록 해주는 것이 CPU(Central Processing Unit) 즉, 중앙처리 장치라고 할 수 있다.

이 CPU는 연산 장치(ALU, Arithmetic Logic Unit), 제어 장치(CU, Control Unit) 그리고 레지스터(Registor)로 이루어져 있다.

여기서 연산 장치는 산술 연산, 논리 연산을 수행하고 제어 장치는 명령어를 해독하고 각 장치에 제어 신호를 보내는 역할을 한다.

레지스터의 경우엔 연산에 필요한 데이터와 명령어의 주소를 임시로 저장하는 메모리 역할을 하는데 속도가 빠르기 때문에 고속 메모리라고 할 수 있다.

CPU는 이러한 기능들이 포함되어 있고 이것을 하나의 IC(Integrated Curcit)로 구현한 것을 마이크로프로세서(Microprocessor)라고 부른다.

아무튼 이 마이크로프로세서가 있는 컴퓨터는 뛰어난 연산능력으로 많은 일을 빠르게 처리할 수 있다.

그런만큼 우리가 사용하는 가전제품들에도 당연히 사용이 가능하다.

하지만 가전제품과 같이 한정적인 동작을 하는 곳에 이런 컴퓨터를 사용하는 것은 큰 낭비가 될 수 있다.

자판기를 생각해보자.

자판기는 돈이 들어오는 것을 확인하고, 음료수 버튼을 누르면, 음료수가 나오는 구조다.

이러한 구조를 위해 안에 컴퓨터를 넣는다면 어떨까.

동작은 할 수 있지만 굳이 많은 일을 할 수 있는 컴퓨터를 여기에 넣기는 지나치게 낭비인 것이다.

많은 종류의 일을 한 번에 빠르게 처리할 수 있는 컴퓨터 같은 장치는 자판기처럼 정해진 동작을 반복 수행하는 장치에는 맞지 않다는 것이다.

이런 이유로 반복 동작을 하거나 제한적인 일을 하는 경우에 컴퓨터를 대신할 장치가 필요하다는 것이다.

그렇게 탄생한 친구가 마이크로컨트롤러(Microcontroller, MCU)다.

마이크로컨트롤러는 마이크로프로세서를 정해진 목적에 맞게 동작하도록 만든 것이다.

그리고 그렇게 만드는 김에 컴퓨터의 필수요소 몇가지를 하나의 칩에 같이 구현해 놓았다.

우리가 아는 것처럼 컴퓨터에서 CPU는 혼자 동작하지 않는다.

필수적으로 필요한 두 친구가 있는데 바로 프로그램을 저장할 플래시 메모리, 동작 중 데이터를 임시로 저장할 램이다.

이 두 친구가 존재해야 CPU가 정상동작을 한다고 해도 과언이 아닐 정도다.

아무튼 마이크로컨트롤러는 하나의 칩에 CPU, 플래시 메모리, 램 이렇게 3개의 기능을 하나로 담아 두었다.

거기다 추가로 외부 장치를 제어할 수 있도록 입출력 포트까지 하나의 칩 안에 담고 있다.

그래서 이 하나의 칩을 가지고 싱글 칩 컴퓨터라고도 부르기도 한다.

다만, 당연히 실제 컴퓨터와 성능 차이는 크니 참고하자.

아무튼 여기서는 이 마이크로컨트롤러에 대해 이야기해보려고 한다.

마이크로컨트롤러는 1970년 대에 이미 그 개념이 정립되고 제작되었지만, 오늘날 사용하는 마이크로컨트롤러의 특징인 연산 장치, 메모리, 타이머를 모두 넣어 하나의 칩으로 만든 것은 인텔의 8051이라고 할 수 있다.

그래서 이 8051 모델은 현대적 MCU 구조의 표준을 제시한 최초의 모델이라고도 한다.

그리고 8051은 동작 방식을 당시 유행하던 CISC(Complex Instruction Set Computer) 방식을 사용했는데, 이 방식은 하나의 명령어로 복잡한 일을 처리하는 방식이기 때문에 전체 프로그램 코드의 크기를 아주 작게 유지할 수 있다는 장점이 있었다.

당시 메모리 용량이 극도로 제한적이었고 비쌌던 환경에 비춰볼 때 이 방식은 최선의 선택이었다.

하지만 이 방식은 명령어 하나가 너무 많은 일을 하려다 보니 구조가 지나치게 복잡했고 이로 인해, 보통 하나의 명령어를 실행하기 위해 내부적으로 12클록 가까이 거쳐야만 했다.

연산 장치가 아무리 열심히 움직여도 기본적으로 거치는 단계가 많다보니 처리 속도는 느려질 수 밖에 없는 구조인 것이다.

여기에 더해 프로그램이 저장되는 공간과 데이터가 임시로 머무는 공간의 메모리 주소 체계가 서로 다르게 얽혀 있었기 때문에 개발자의 번거로움이 컸다.

그래서 당시에는 획기적인 방식이었으나 기술이 발전해오면서 이제 코드 용량 절약보다 빠른 연산 속도, 직관적인 개발 환경이 중요해지게 되자 그 한계가 명확해졌다.

이러한 한계를 해결하기 위해 등장한 구조가 RISC(Reduced Instruction Set Computer) 방식이다.

RISC는 간단히 요약해서 복잡한 명령어를 없애고 단순한 명령어 위조로 구성한 구조라고 할 수 있다.

명령어의 종류를 줄이는 대신 각각의 명령어를 최대한 단순하게 설계한 것이다.

그래서 대부분의 명령어를 1클록 만에 실행할 수 있도록 설계되었으며 내부 구조도 기존 CISC 방식에 비해 훨씬 단순해졌다.

또한 구조가 단순해진 만큼 회로를 설계하기도 쉬워졌으며 소비 전력 역시 줄일 수 있게 외었다.

이후 이러한 RISC 구조를 바탕으로 여러 회사들은 자신들만의 명령어와 레지스터 구성, 메모리 구조 등을 설계했고 이런 각 회사의 고유 프로세서 구조를 아키텍처(Architecture)라고 한다.

그리고 우리가 사용하는 대표적인 RISC 아키텍처가 AVR과 ARM이다.

AVR 아키텍처는 Atmel(현재 Microchip)에서 개발한 8비트 RISC 마이크로컨트롤러 아키텍처로 개발자인 Alf Bogen과 Vegard Wollan의 이름 앞 글자, 그리고 RISC 아키텍처의 R을 따서 이름을 지었다. (현재는 Advanced Virtual RISC의 줄임말로 더 많이 사용된다.)

이때 8비트라는 말이 있는데 앞서 말한 것과 같이 마이크로컨트롤러도 내부에 연산을 할 수 있는 연산장치인 CPU가 존재한다.

이 CPU가 8비트 단위로 데이터를 처리하는 것이다.

그로인해 CPU 내부의 ALU(산술논리연산장치)와 범용 레지스터(임시저장공간)의 크기가 기본적으로 8비트가 되게 설계되어 있다.

예를 들어 AVR의 ALU는 한 번에 최대 8비트의 덧셈, 뺄셈, 논리 연산 등을 수행할 수 있으며, 내부에 있는 32개의 범용 레지스터 역시 각각 8비트의 데이터를 저장한다.

따라서 16비트나 32비트 데이터를 처리하려면 여러 개의 레지스터를 함께 사용하고, 연산도 여러 번 나누어 수행해야 한다.

AVR이 8비트 RISC 시장을 대표한다면, 그보다 훨씬 더 크고 복잡한 데이터를 처리하기 위해 탄생한 또 다른 RISC 아키텍처가 바로 ARM이다.

ARM 아키텍처는 영국의 ARM사에서 설계한 32비트 및 64비트 기반의 RISC 아키텍처로 개발 당시 Acorn 컴퓨터라는 회사에서 개발하여 Arcorn RISC Machine의 줄임말로 표현되었다. (현재는 Advanced RISC Machines의 의미로 더 많이 사용된다.)

앞서 AVR은 한 번에 8비트의 데이터를 다룬다면 ARM은 무려 32 또는 64비트의 단위를 한 번에 처리할 수 있다.

이에 따라 ALU와 범용 레지스터의 크기 역시 기본적으로 32 또는 64비트로 설계되어 있다.

이로 인해 ARM은 수십억에 달하는 거대한 숫자를 단 한 번의 연산(1클록)으로 가볍게 처리할 수 있다.

당연히 다룰 수 잇는 메모리 주소 범위 역시 비교가 안 될 정도로 넓다.

물론 단순히 비트 수만으로 CPU의 성능이 결정되진 않는다.

동작 클럭, 명령어 구조, 파이프라인, 캐시, 메모리 구조 등등 CPU의 성능을 결정하는 요소는 다양하다.

다만, CPU의 일반적인 성능만 놓고 받을 때는 8비트에 비해 32비트 CPU가 성능이 높은 것은 사실이다.

또한 ARM은 사업 방식도 독특한다.

ARM 사는 AVR을 제작해 판매하는 Microchip 사와 달리 자신들이 직접 칩을 제저하여 판매하지 않는다.

오로지 프로세서의 설계도(아키텍처)만 만들어 반도체 기업들에게 라이선스를 판매한다.

그래서 ARM 칩을 보면 STMicroelectronics, 애플, 퀄컴, 삼성과 같은 전세게 수많은 반도체 기업들이 이 설계도에 자신들의 기능을 붙여 시장에 판매하고 있다.

결과적으로 높은 성능과 낮은 소비 전력을 동시에 가진 ARM 아키텍처는 현재 스마트폰의 두뇌라고 하는 AP(Application Processor) 시장을 장악했고 스마트 워치, 태블릿 그리고 고성능 제어가 필요한 임베디드 시스템의 표준으로 잡리 잡고 있다.

반면, AVR은 목적에 맞는 최적의 가성비와 효율을 대표하는 주자로 우리 주변의 단순하고 정밀한 제어 분야에서 대체 불가능한 주인공으로 활약하고 있다.

대표적으로 가전제품, 스마트 버튼, 전동 칫솔, 디지털 도어락, 자동차의 사이드 미러, 스마트 키등 다양한 분야에서 스마트 기능을 담당하고 있고 하드웨어 구조가 직관적이고 직결된 레지스터 덕분에 오차 없는 초 단위의 정밀한 타이밍 제어가 필요한 산업용 계측 장비에서도 널리 사용되고 있다.

결국 마이크로컨트롤러 시장은 어느 하나가 최고라서 독점하는 구조가 아닌 스마트 폰이나 드론, 자율주행 제어 같이 복잡하고 방대한 연산이 필요한 곳은 ARM이, 단순 반복적인 기계제어와 정밀한 타이밍이 중요한 곳엔 AVR이 활약하며 각 분야에서 두뇌역할을 하고 있다.

이 포스트에서는 이 중 AVR에 대해 알아보고자 한다.

error: Content is protected !!