레지스터 구조
앞서 AVR의 범용레지스터는 R0 ~ R31 총 32개라고 얘기했다.
레지스터 하나당 8비트의 공간이 있으며 각각의 비트에 값을 저장 할 수 있도록 플립플롭(기억회로)으로 구성되어 있다.
따라서 하나의 레지스터에 8개의 플립플롭이 구성되어 있고 AVR 범용레지스터에만 256개가 내장되어있다.
MCU구조
우리가 컴퓨터로 게임, 영상시청, 문서작업 등 다양한 작업을 할 때 CPU가 매우 대단한 연산을 하는 것 같지만
사실 0과 1로 더하기, 빼기 연산밖에 하지 않는다.
(0과 1만 더하고 빼는데 이런 작업을 할 수 있다는게 대단하긴 하지...)
이런 기본적인 연산이 어떻게 이루어지는지 MCU의 내부구조를 확인해보자.
우선 "ADD Rd, Rr" 이라는 명령을 내리면 레지스터 두개가 사용되며 더하기 연산을 수행한다.
이때, Instruction Register(IR : 현재명령 레지스터)라는 공간에 해당 Opcode를 읽어서 저장 후 연산을 하게 된다.
그 다음 PC값이 증가하게 되며 다음 주소값을 가리키고 IR도 다음 메모리에 있는 Opcode로 바뀌게 된다.
이제 ADD가 어떻게 레지스터로 연산이 되는지 확인해 보자.
16진수로 이루어진 IR값이 디코더로 인해 지정된 레지스터에 0과 1이 들어간다.
많은 레지스터 중에서 의미있는 값만 선택하기 위해 MUX를 이용한다.
MUX를 통해 고른 두개의 신호는 덧셈기를 통해 연산을 하게 된다.
(MUX, 디코더, 덧셈기는 2학년때 '디지털공학및실습'에서 자세히 다루었기 때문에 생략)
덧셈하고 난 결과는 다시 사용했던 레지스터에 저장한다.
이렇게만 구성하면 더하기 연산만 하게 되지만 실제로는 빼기, AND, OR등 더 많은 연산을 한다.
AND명령을 추가한 구성은 다음과 같다.
105번째 주소 연산을 할 때 adder인지 AND인지 또 선택해야 하기 때문에 MUX를 이용한다.
이때, 특정 상황 일 때 add 혹은 AND를 할지 선택해야 한다. 즉 그에 맞는 논리회로를 구성해야 한다는 뜻이다.
이 구성에서 빼기, OR을 추가확장하면 다음과 같다.
위 사진에서 오른쪽과 같이 더하기, 빼기, AND, OR연산을 하는 부분을 ALU(Arithmetic Logic Unit)이라고 부른다.
그림에서는 네가지 밖에 그리지 않았지만 사실은 더 많은 논리연산을 한다.(NAND, XOR 등)
'AVR(Microchip Studio)' 카테고리의 다른 글
[AVR] 아두이노를 이용한 AVR코딩 & 버튼 채터링(Microchip Studio) (0) | 2021.12.25 |
---|---|
[AVR] Atmel Studio7 레지스터 제어, Simulator 디버깅 (0) | 2021.12.23 |
[µ-Processor] AVR내부연산 & Opcode (0) | 2021.07.17 |
[µ-Processor] 기본적인 어셈블리어 & 문법 (0) | 2021.07.17 |
[µ-Processor] 입문 (0) | 2021.07.15 |