CPU는 프로그램 메모리에 들어 있는 명령어를 순서대로 하나씩 호출(fetch)해서 실행(excute)시킴으로써 데이타를 처리하고, 다른 장치들을 제어하는 역할을 한다. 일반적으로 CPU는 레지스터부, 연산부, 그리고 제어부로 구성된다.
(1) 레지스터부
레지스터(register)는 데이타를 일시 보관하는 일과 데이타를 다른 곳으로 옮기는 일을 한다. 하드웨어면에서 볼 때 레지스터는 플리플롭(FlipFlop)회로로 이루어져 있다. 하나의 플립플롭회로는 하나의 비트(bit)를 기억하는 회로이고, 이것이 8개 또는 16개 모여서 레지스터를 이룬다.
일반적으로 Z80, i8051, PIC 등과 같은 폰노이만 방식의 마이크로컨트롤러에 있어서는 레지스터와 데이타 메모리가 구분되어 있어서 자주 사용하는 것은 CPU 소속의 레지스터에, 그 밖의 것은 데이터 메모리(RAM)에 저장한다. 그러나, 하바드 구조의 마이크로컨트롤러(AVR 마이컴)에서는 레지스터와 데이타 메모리의 구분 없이 레지스터 파일(register file)이라고 하는 통합된 공간에 레지스터와 데이터 메모리를 같이 배치해 두고 "register to register" 방식으로 일괄 통합 관리한다.
이런 의미에서 하바드 구조의 마이크로컨트롤러에서 레지스터는 더 이상 CPU에 속하지 않고 데이타 메모리에 속한다고 해야 할 것이다. 그래서 데이터 메모리에서 다루고자 한다.
(2) 연산부
AT90S2313의 연산부는 ALU(arithmetic logical unit) 를 중심으로 32개의 범용 레지스터와 2개의 T레지스터로 구성된다. T레지스터(temporary register)는 사용자가 직접 접근할 수 없는 일종의 버퍼이다.
연산부에서 하는 일은 다음과 같다.
a) 가감, 감산, 승산 등의 산술연산
b) AND, OR, EXOR, 로테이트(rotate), 쉬프트(shift) 등의 논리연산
c) 비트 연산
(3) 제어부
AT90S2313 CPU의 제어부는 프로그램 메모리에 들어 있는 일련의 명령어를 순서대로 하나씩 호출하여, 그 명령어의 뜻을 해독한 후, 그 뜻에 따라 AT90S2313 내 각 장치들을 동작시킴으로써 데이타를 명령어의 내용대로 처리하는 논리회로로서, 명령레지스터(instruction register), 명령해독기(instruction decoder), 그리고 제어신호기(contral signal circuit)로 구성된다.
프로그램 메모리에 들어 있는 명령어는 프로그램카운터가 지정하는 바에 따라 하나씩 명령레지스터에 호출(fetch)되어 명령해독기에서 해독(decode)된 후, 제어신호기를 거침으로써 그 명령어를 실행시키는 데 필요한 각종 제어신호로 바뀌어진다. 이 제어신호의 일부는 CPU 및 칩 내의 여러 회로를 제어하고, 다른 일부는 외부 제어신호로서 밖으로 나가며, 나머지 일부는 명령해독기로 되돌아가서 다음 차례의 제어신호를 만든다.
(一)-1. 프로그램 메모리
AT90S2313은 하바드 구조에 속하고 있어서 프로그램 메모리와 데이터 메모리가 엄격히 구분되어 각각 따로 존재하고, 버스 또한 각각 따로 존재한다. AT90S2313의 프로그램 메모리는 플래시 메모리로 되어 있고, 데이터 메모리는 레지스터 파일(SRAM)로 되어 있다.
플래시 메모리(Flash Memory)는 ROM의 일종이다. ROM(read only memory)은 판독(read)전용의 메모리로서, 고정 프로그램(특수한 경우에는 표 데이터도)을 저장하는 데 사용된다.
(一)-2. 데이터 메모리
Z80, i8050, PIC 등 기존의 8비트 마이크로컨트롤러(폰노이만 구조)에서 데이터는 CPU 소속의 레지스터를 통해서 전송되지만, 하바드 구조의 컴퓨터에서는 레지스터와 데이터 메모리가 통합되어 레지스터 파일(register file)의 형태로 존재한다.
레지스터 파일 형태로 존재하기 때문에 데이터 메모리를 마치 레지스터 다루듯이 할 수 있다. 즉 모든 데이터 메모리 공간을 레지스터처럼 사용할 수 있다.
AT90S2313애서도 모든 데이터 메로리 공간을 레지스터처럼 사용할 수 있어서 "레지스터에서 레지스터로(register to register)"의 방식으로 직접 데이터를 전송할 수 있다.
AT90S2313 데이터 메모리(레지스터 파일)의 메모리 맵(memory map)은 크게 범용 레지스터와 I/O 레지스터와 내부 SRAM으로 나누어져 있다. 메모리 맵은 번지 할당표(番地割當表)이다.
데이터 메모리의 범용 레지스터는 몇 번지에서 몇 번지까이고, I/O레지스터는 몇 번지에서 몇 번지까지이며, SRAM은 몇 번지에서 몇 번지까지인지를 할당해 놓은 표이다.
(1) 범용 레지스터(레지스터 파일)
AT90S2313에는 32개의 범용 레지스터가 있다. 범용 레지스터(general purpose register)라 함은 이렇게도 쓸 수 있고, 저렇게도 쓸 수 있는 레지스터라는 뜻이다.
범용 레지스터에 대한 접근(access)은 직접 또는 X. Y. Z 등의 레지스터를 통한 간접 주소방식으로 한다.
(2) SRAM
데이터 SRAM은 데이터 메모리의 $60번지에서 $DF번지에 위치하고, 일반 데이터의 저장 및 스택으로 사용된다.
(3) I/O 레지스터
I/O 레지스터(I/O register)는 데이터 메모리 파일에서 $20~$5F 번지에 속하는 레지스터들로 특수기능 레지스터라고 한다.
I/O 레지스터에 접근하기 위해서는 IN 또는 OUT 명령을 사용해야 한다.
IN, OUT 명령은 32개의 범용 레지스터와 I/O 레지스터 간에 이루어져야 한다.
(一)-3. 프그그래밍 언어
프로그램을 작성하는 데 필요한 언어를 프로그래밍 언어(programming language)라고 한다. 그리고 이에는 기계어, 어셈블리어, 컴파일러어 등 3 종류가 있다. 이들 중 컴퓨터가 직접 이해할 수 있는 것은 기계어뿐이다.
기계어(machine language)는 0과 1로 된 코드, 즉 2진 코드로 되어 있어서 마치 암호와 같다. 예컨데 "레지스터 R0의 내용을 클리어 하라"라는 명령을 AVR 마이크로컨트롤러에서는 0010 0100 0000 0000 이라고 하는데. 이것이 기계어다.
기계어를 쓰고 읽을 때의 번잡을 피하기 위해서 흔히 16진수로 표기한다. 예컨대 0010 0100 0000 0000 대신 $2400 이라고 쓴다.
기계어는 2진 코드로 되어 있어서 이해가 어려울 뿐만 아니라, 컴퓨터의 기종에 따라 다르고, 프로그램을 작성할 때에도 많은 시간과 노력을 필요로 한다. 또한 프로그램의 일부를 삭제한다든가 추가하는 소위 에디팅(editing)이 어려우며, 프로그램에서 잘못된 곳을 찾아내는 디버깅(debugging)이 매우 어렵다. 그래서 2진 코드로 된 기계어 대신 우리의 일상 언어에 가까운 기호(symbol)를 쓰자는 제안이 나왔다.
"기계어를 기호화 언어"가 출현했는데, 이것을 어셈블리어(assembly language)라고 한다. 그리고 어셈블리어에서 기계어와 1대 1의 대응 관계에 있는 알파벳 코드를 니모닉 코드(mnemonic code)라고 한다.
우리가 여기서 명심할 것은 컴퓨터가 알아들을 수 있는 언어는 기계어 뿐이라는 사실이다. 그러므로 어셈블리어로 작성된 프로그램을 컴퓨터에 아무리 넣어 보았자 소용이 없고, 이것을 기계어로 고쳐 컴퓨터에 넣어 주어야 한다. 어셈블리어로 작성된 프로그램을 원시 프로그램(source program)이라고 하고, 기계어로 고쳐진 프로그램을 목적 프로그램(object program)이라고 한다.
그러면 어떻게 어셈블리어로 작성된 프로그램을 기계어로 된 목적 프로그램으로 고치는가?.
현재에는 대부분의 경우 어셈블리 처리라고 하는 번역 과정을 거쳐서 기계어로 고친다. 이때에는 어셈블러(assembler)라는 번역용 프로그램을 사용한다. 방법은 사람이 표를 보면서 하나하나 고치는 것과 같다.
어셈블리어는 기계어를 기호화함으로써 이해하기 쉽고, 프로그램하기가 쉬우며, 에디팅 및 디버깅이 쉽다는 점에서 매우 편리한 언어이다.
컴파일러어에는 수 많은 종류가 있으나, 마이크로컨트롤러에서 사용되는 것에는 BASIC, FORTRAN, PASCAL, PL/M, C 등이 있다.
어느 것이든지 간에 이러한 언어로 작성된 원시프로그램은 반드시 기계어로 된 목적 프로그램으로 고쳐야 한다. 컴파일러(compiler)라는 번역용 프로그램의 힘을 빌어 소위 컴파일(compile)을 해야 한다.
< 참 고 >
a) 메 모 리(Memory) :
메모리란 여러가지 정보(내용)을 보관하는 장소이다. 일반적으로 사용하는 메모리는 프로그램을 보관하는 롬(ROM)과 데이타를 보관하는 램(RAM)으로 크게 구분된다.
마이컴(CPU)내부에 메모리가 존재하는 것이 있는데, 이들도 EPROM,
OPT, MASK ROM, EEPROM 타입들이 있다.
b) 타 이 머(timer) :
장치내의 기준 시각 또는 일정 시간 간격의 신호를 발생시키는 회로.
c) 카 운 터(counter) :
한 자리 또는 여러자리의 수를 기억하고, 입력신호에 따라 내용을 하나씩 가감시키도록 구성된 회로.
d) 클 록(clock) :
회로 및 장치 상호간의 동작에 시간적 기준점을 두었을 때, 동기(同期)를 취하기 위하여 주기적으로 발생하는 신호 또는 그 신호원.
e) 펄 스(pulse) :
정상적인 값에서 양적으로 벗어나는 것.
정상적인 상태에서 벗어나 또 다른 상태에 잠시 있다가 궁극적으로는 처음 상태로 되돌아 온다.
AVR 마이컴(2)
(一)-0. C P U
CPU는 프로그램 메모리에 들어 있는 명령어를 순서대로 하나씩 호출(fetch)해서 실행(excute)시킴으로써 데이타를 처리하고, 다른 장치들을 제어하는 역할을 한다. 일반적으로 CPU는 레지스터부, 연산부, 그리고 제어부로 구성된다.
(1) 레지스터부
레지스터(register)는 데이타를 일시 보관하는 일과 데이타를 다른 곳으로 옮기는 일을 한다. 하드웨어면에서 볼 때 레지스터는 플리플롭(FlipFlop)회로로 이루어져 있다. 하나의 플립플롭회로는 하나의 비트(bit)를 기억하는 회로이고, 이것이 8개 또는 16개 모여서 레지스터를 이룬다.
일반적으로 Z80, i8051, PIC 등과 같은 폰노이만 방식의 마이크로컨트롤러에 있어서는 레지스터와 데이타 메모리가 구분되어 있어서 자주 사용하는 것은 CPU 소속의 레지스터에, 그 밖의 것은 데이터 메모리(RAM)에 저장한다. 그러나, 하바드 구조의 마이크로컨트롤러(AVR 마이컴)에서는 레지스터와 데이타 메모리의 구분 없이 레지스터 파일(register file)이라고 하는 통합된 공간에 레지스터와 데이터 메모리를 같이 배치해 두고 "register to register" 방식으로 일괄 통합 관리한다.
이런 의미에서 하바드 구조의 마이크로컨트롤러에서 레지스터는 더 이상 CPU에 속하지 않고 데이타 메모리에 속한다고 해야 할 것이다. 그래서 데이터 메모리에서 다루고자 한다.
(2) 연산부
AT90S2313의 연산부는 ALU(arithmetic logical unit) 를 중심으로 32개의 범용 레지스터와 2개의 T레지스터로 구성된다. T레지스터(temporary register)는 사용자가 직접 접근할 수 없는 일종의 버퍼이다.
연산부에서 하는 일은 다음과 같다.
a) 가감, 감산, 승산 등의 산술연산
b) AND, OR, EXOR, 로테이트(rotate), 쉬프트(shift) 등의 논리연산
c) 비트 연산
(3) 제어부
AT90S2313 CPU의 제어부는 프로그램 메모리에 들어 있는 일련의 명령어를 순서대로 하나씩 호출하여, 그 명령어의 뜻을 해독한 후, 그 뜻에 따라 AT90S2313 내 각 장치들을 동작시킴으로써 데이타를 명령어의 내용대로 처리하는 논리회로로서, 명령레지스터(instruction register), 명령해독기(instruction decoder), 그리고 제어신호기(contral signal circuit)로 구성된다.
프로그램 메모리에 들어 있는 명령어는 프로그램카운터가 지정하는 바에 따라 하나씩 명령레지스터에 호출(fetch)되어 명령해독기에서 해독(decode)된 후, 제어신호기를 거침으로써 그 명령어를 실행시키는 데 필요한 각종 제어신호로 바뀌어진다. 이 제어신호의 일부는 CPU 및 칩 내의 여러 회로를 제어하고, 다른 일부는 외부 제어신호로서 밖으로 나가며, 나머지 일부는 명령해독기로 되돌아가서 다음 차례의 제어신호를 만든다.
(一)-1. 프로그램 메모리
AT90S2313은 하바드 구조에 속하고 있어서 프로그램 메모리와 데이터 메모리가 엄격히 구분되어 각각 따로 존재하고, 버스 또한 각각 따로 존재한다. AT90S2313의 프로그램 메모리는 플래시 메모리로 되어 있고, 데이터 메모리는 레지스터 파일(SRAM)로 되어 있다.
플래시 메모리(Flash Memory)는 ROM의 일종이다. ROM(read only memory)은 판독(read)전용의 메모리로서, 고정 프로그램(특수한 경우에는 표 데이터도)을 저장하는 데 사용된다.
(一)-2. 데이터 메모리
Z80, i8050, PIC 등 기존의 8비트 마이크로컨트롤러(폰노이만 구조)에서 데이터는 CPU 소속의 레지스터를 통해서 전송되지만, 하바드 구조의 컴퓨터에서는 레지스터와 데이터 메모리가 통합되어 레지스터 파일(register file)의 형태로 존재한다.
레지스터 파일 형태로 존재하기 때문에 데이터 메모리를 마치 레지스터 다루듯이 할 수 있다. 즉 모든 데이터 메모리 공간을 레지스터처럼 사용할 수 있다.
AT90S2313애서도 모든 데이터 메로리 공간을 레지스터처럼 사용할 수 있어서 "레지스터에서 레지스터로(register to register)"의 방식으로 직접 데이터를 전송할 수 있다.
AT90S2313 데이터 메모리(레지스터 파일)의 메모리 맵(memory map)은 크게 범용 레지스터와 I/O 레지스터와 내부 SRAM으로 나누어져 있다. 메모리 맵은 번지 할당표(番地割當表)이다.
데이터 메모리의 범용 레지스터는 몇 번지에서 몇 번지까이고, I/O레지스터는 몇 번지에서 몇 번지까지이며, SRAM은 몇 번지에서 몇 번지까지인지를 할당해 놓은 표이다.
(1) 범용 레지스터(레지스터 파일)
AT90S2313에는 32개의 범용 레지스터가 있다. 범용 레지스터(general purpose register)라 함은 이렇게도 쓸 수 있고, 저렇게도 쓸 수 있는 레지스터라는 뜻이다.
범용 레지스터에 대한 접근(access)은 직접 또는 X. Y. Z 등의 레지스터를 통한 간접 주소방식으로 한다.
(2) SRAM
데이터 SRAM은 데이터 메모리의 $60번지에서 $DF번지에 위치하고, 일반 데이터의 저장 및 스택으로 사용된다.
(3) I/O 레지스터
I/O 레지스터(I/O register)는 데이터 메모리 파일에서 $20~$5F 번지에 속하는 레지스터들로 특수기능 레지스터라고 한다.
I/O 레지스터에 접근하기 위해서는 IN 또는 OUT 명령을 사용해야 한다.
IN, OUT 명령은 32개의 범용 레지스터와 I/O 레지스터 간에 이루어져야 한다.
(一)-3. 프그그래밍 언어
프로그램을 작성하는 데 필요한 언어를 프로그래밍 언어(programming language)라고 한다. 그리고 이에는 기계어, 어셈블리어, 컴파일러어 등 3 종류가 있다. 이들 중 컴퓨터가 직접 이해할 수 있는 것은 기계어뿐이다.
기계어(machine language)는 0과 1로 된 코드, 즉 2진 코드로 되어 있어서 마치 암호와 같다. 예컨데 "레지스터 R0의 내용을 클리어 하라"라는 명령을 AVR 마이크로컨트롤러에서는 0010 0100 0000 0000 이라고 하는데. 이것이 기계어다.
기계어를 쓰고 읽을 때의 번잡을 피하기 위해서 흔히 16진수로 표기한다. 예컨대 0010 0100 0000 0000 대신 $2400 이라고 쓴다.
기계어는 2진 코드로 되어 있어서 이해가 어려울 뿐만 아니라, 컴퓨터의 기종에 따라 다르고, 프로그램을 작성할 때에도 많은 시간과 노력을 필요로 한다. 또한 프로그램의 일부를 삭제한다든가 추가하는 소위 에디팅(editing)이 어려우며, 프로그램에서 잘못된 곳을 찾아내는 디버깅(debugging)이 매우 어렵다. 그래서 2진 코드로 된 기계어 대신 우리의 일상 언어에 가까운 기호(symbol)를 쓰자는 제안이 나왔다.
"기계어를 기호화 언어"가 출현했는데, 이것을 어셈블리어(assembly language)라고 한다. 그리고 어셈블리어에서 기계어와 1대 1의 대응 관계에 있는 알파벳 코드를 니모닉 코드(mnemonic code)라고 한다.
우리가 여기서 명심할 것은 컴퓨터가 알아들을 수 있는 언어는 기계어 뿐이라는 사실이다. 그러므로 어셈블리어로 작성된 프로그램을 컴퓨터에 아무리 넣어 보았자 소용이 없고, 이것을 기계어로 고쳐 컴퓨터에 넣어 주어야 한다. 어셈블리어로 작성된 프로그램을 원시 프로그램(source program)이라고 하고, 기계어로 고쳐진 프로그램을 목적 프로그램(object program)이라고 한다.
그러면 어떻게 어셈블리어로 작성된 프로그램을 기계어로 된 목적 프로그램으로 고치는가?.
현재에는 대부분의 경우 어셈블리 처리라고 하는 번역 과정을 거쳐서 기계어로 고친다. 이때에는 어셈블러(assembler)라는 번역용 프로그램을 사용한다. 방법은 사람이 표를 보면서 하나하나 고치는 것과 같다.
어셈블리어는 기계어를 기호화함으로써 이해하기 쉽고, 프로그램하기가 쉬우며, 에디팅 및 디버깅이 쉽다는 점에서 매우 편리한 언어이다.
컴파일러어에는 수 많은 종류가 있으나, 마이크로컨트롤러에서 사용되는 것에는 BASIC, FORTRAN, PASCAL, PL/M, C 등이 있다.
어느 것이든지 간에 이러한 언어로 작성된 원시프로그램은 반드시 기계어로 된 목적 프로그램으로 고쳐야 한다. 컴파일러(compiler)라는 번역용 프로그램의 힘을 빌어 소위 컴파일(compile)을 해야 한다.
< 참 고 >
a) 메 모 리(Memory) :
메모리란 여러가지 정보(내용)을 보관하는 장소이다. 일반적으로 사용하는 메모리는 프로그램을 보관하는 롬(ROM)과 데이타를 보관하는 램(RAM)으로 크게 구분된다.
마이컴(CPU)내부에 메모리가 존재하는 것이 있는데, 이들도 EPROM,
OPT, MASK ROM, EEPROM 타입들이 있다.
b) 타 이 머(timer) :
장치내의 기준 시각 또는 일정 시간 간격의 신호를 발생시키는 회로.
c) 카 운 터(counter) :
한 자리 또는 여러자리의 수를 기억하고, 입력신호에 따라 내용을 하나씩 가감시키도록 구성된 회로.
d) 클 록(clock) :
회로 및 장치 상호간의 동작에 시간적 기준점을 두었을 때, 동기(同期)를 취하기 위하여 주기적으로 발생하는 신호 또는 그 신호원.
e) 펄 스(pulse) :
정상적인 값에서 양적으로 벗어나는 것.
정상적인 상태에서 벗어나 또 다른 상태에 잠시 있다가 궁극적으로는 처음 상태로 되돌아 온다.