8051
AVR
EZLab
PIC
80C196KC
DSP
ARM
VHDL
마이크로마우스
로봇축구
Battle 로봇
로봇대회
휴먼로봇
Embeded Linux
HW/SW 강좌
RTOS
 
 

 

 I. Controller가 뭐죠?

1. CPU?

 (1) CPU의 동작 : Central Processing Unit

CPU는 기본적으로 GUM, ALU(Arithmetical and Logical Unit)와 Bus Controller, Instruction Decoder, Register File(include SFRs) 등으로 구성되어 있는데, 여기서 이에 대해 간단히 알아보자

ALU : CPU의 핵심적인? 부분으로서 보통 산술 연산(+, -, *, /)과 논리 연산(AND, OR, Ex-OR, Complement, Shift, etc..) 을 담당하게 되는 부분

Bus Controller : 내부/외부 bus를 제어하는 장치로서 CPU가 메모리를 읽거나 쓸 때, Address bus와 Data bus를 제어해서 data를 읽거나 쓰도록 해준다. 이 때 외부 버스를 제어하기 위한 신호로는 ALE,  RD#, WR#, BHE#, HOLD#, HLDA# 등이 있고 이는 CPU마다 조금씩 다르다.

Instruction Decoder : instruction 이란 간단히 말해 명령을 뜻하며 CPU에 따라 instruction은 다르다. instruction decoder는 간단히 명령 해석 장치라고 할 수 있다. 각각의 instruction을 해독하여 CPU가 어떤 동작을 할 것인가를 결정하게 해준다.

Register File : CPU내부의 일종의 RAM으로 외부 메모리를 access하는 것 보다 빠르게 사용할 수 있다. 그리고 SFR(Special Function Register)은 특수 기능을 가진 register를 말하며, 이는 CPU의 특수 기능들을 제어할 수 있는 register이다.

CPU가 하는 일은 간단하다. CPU는 단순히 memory에서 명령을 읽어 이를 해독하고 실행한다. 명령을 읽어오기 위해서 외부에 data BUS와 address BUS가 있고, 각종 제어 신호가 있다. 이 때 이 명령을 instruction 혹은 기계어라고 한다. 이는 CPU만 아는 명령으로 사람은 아무리 들여다봐도 모른다. 다음 그림은 간단한 노이만 architecture(3-bus architecture)의 예이다.

                                           img9.gif

이는 단순히 CPU 외부에서 명령(instruction) 읽는 과정을 나타낸 것으로 address는 memory에서의 instruction의 위치를 나타내는 것이고, 여기에서 읽혀진 data는 instruction이다. 또 control BUS는 memory를 제어하기 위한 것이다. (위의 BUS controller에서 외부로 나오는 부분) 이 과정(CPU가 외부에서 instruction 읽는 과정)을 Fetch라고 한다.

data를 memory나 IO에 쓰거나 읽어오는 과정 역시 위와 비슷하다. 이 때 memory program 아니라 그대로의 data가 된다. IO역시 마찬가지이다.

(2) 기계어, 어셈블러(Assembler)

위에서 CPU는 instruction 읽고 이를 실행하는 것을 알았다. 이 CPU만 있는 Low level의 언어가 기계어이다. 또 위에서 언급한 instruction decoder에는 각각의 instruction 대한 code가 정의되어 있다. 예를 들면 다음과 같다.

 

instruction code(Hex)

function

0FFH

CPU reset

0D0H

아무것도 하지 않음

59H

직접 번지 지정 data 전송

90H

Return

 
즉, 위의 예에서 때, 0FFH가 instruction으로 실행되면 CPU는 reset이 되고, 0D0H가 instruction 되면 CPU는 아무 것도 하지 않게 된다.

그렇다면 사람이 program을 만들기 위해서 위와 같이 각각의 code들과 그에 대응하는 기능들을 일일이 찾아가며 program을 짜야할까? 그렇다면 program 너무 어려워지고, 말 그대로 '삽질'이 될 것이다. 그래서 이를 해결하기 위해 Assembler라는 것이 있다. 이는 사람이 정한 규칙대로 program을 만들어서 기계어로 바꿔주는 역할을 한다. 아래는 196에서의 한 예이다. (list file)

addr code line program

8203 B1000F 76       LDB IOPORT1, #0 ; port1(motor connected) initialize

77

8206   A10A001C 78     LD EX, #10

820A   B1801F 79      LDB CH, #10000000B

820D   B01F0F 80       HH: LDB IOPORT1, CH ; blink LED

8210   2806 81            CALL    DELAY

8212   95801F 82        XORB CH, #10000000B

8215   E01CF5 83        DJNZ EX, HH

84

85

8218   86          MAINL:

87

8218   A100801A 88       DELAY: LD AX, #08000H

821C   FD 89           DELAY1: NOP

821D   FD 90          NOP

821E   E01AFB 91       DJNZ AX, DELAY1

8221   F0 92             RET

위의 2번째 줄의 내용이 바로 기계어 code로서 최종적인 목표가 된다. assembler 이런 역할을 한다. 외에도 compiler나 linker등에 대해서 것이다. 이는 assembler보다 높은 수준의 언어를 실행 가능한 code로 만들어 주는 것이다. Assembler에 대해서는 뒷부분에서 더욱 자세히 다루도록 하겠다.

이 code는 memory 들어가게 되고, CPU는 이를 순서대로 읽어서 명령을 수행한다. 이 때 CPU는 현재 자신이 어느 위치를 읽고있는지를 알아야 하는데, 여기에 필요한 것이 IP(Instruction Pointer)이다. IP는 현재 실행중인 memory address 나타낸다. 또 CPU마다 각각의 reset 값을 가지고 있다. (초기 프로그램 실행위치를 알아야 하기 때문에)

(3) Embedded controller

요즘 우리가 흔히 접하는 CPU는 Pentium 쯤 것이다. 보통 Processor를 CPU라고 하는데, processor는 위에서 설명한 CPU의 기능밖에 하지 못한다. 그러나 작은 system이나 특정한 목적의 control system에서는 processing 외의 기능들이 많이 필요하게 된다. 따라서 한 chip안에 이런 기능을 가진 주변 장치를 모두 넣은 것을 controller라고 한다. 흔히 Embed라는 말을 붙이는 이유는 controller로서의 기능이 강조되었기 때문이다. controller는 보통 주변장치(serial, timer, counter, interrupt controller, general purpose IO)등을 포함하여 심지어는 RAM이나 ROM까지 모두 가지고 있어 chip 한개로도 system 만들 수가 있다. 우리가 흔히 접하는 전자제품에는 이런 controller 들어가 있을 것이다. processor 사용하면 작게 만들 없기 때문이다.

우리가 앞으로 다루게 것은 바로 controller 것이다.



 

상호 : (주) 로보블럭 사업자등록번호:214-86-56219 통신판매업신고19-2544 대표: 신대섭 전화:(02)2679-8556 Fax :(02)2679-8557
본사 : 경기도 부천시 원미구 약대동 부천 테크노파크 401동 502호     서울사무소 : 서울시 영등포구 문래동 4가 8-1 4층
Copyright(C) 2004, (주) 로보블럭 시스템즈 All Rights Reserved E-Mail : WebMaster