Profile

RAKU

RAKU

개발자가 적어본 마이컴/마이크로프로세서 이야기

해당 글은 : http://reconfig-systems.com/microcontroller.htm 에서 정리되었습니다.


들어가는 말

마이컴(Microcontroller)을 처음 접하는 분들에게 도움이 되었으면 하고 마이컴에 대해 토픽별로 적어보았다. 이미 마이컴에 대해 잘 알고 있는 분들께는 도움이 되지 않을 것이다. 그리고 이야기를 추가해 나아가다 보니 마이크로프로세서 영역까지 확장하게 되었다.


(괄호한의 "uC"는 Microcontroller, "uP"는 Microprocessor "Adv"는 Advanced topic의 줄임말이다.)


Q.01 [uC] 마이컴과 마이크로 프로세서는 어떤 차이점이 있는가?

마이컴은 마이크로컨트롤러(Microcontroller)를 줄여서 부르는 말이다. 마이컴은 소형의 범용 컴퓨터(General purpose computer)라고 할 수 있다. 물론 책상위의 PC 보다는 성능과 기능이 월등히 떨어진다. 마이크로프로세서와 마이컴의 가장 큰 차이점은 마이크로프로세서는 주변 장치(메모리, I/O 등등)와 함께 하나의 시스템(컴퓨터)을 구성하도록 설계되어 있으나, 마이컴은 앞서 언급한 것처럼 그 자체가 (또는 간단한 주변장치 만으로) 하나의 컴퓨터로서 동작할 수 있도록 설계되어 있다.

그렇다고 해서 마이컴에 책상위 PC의 성능/기능을 기대해서는 안된다. 마이컴에 직접 마우스나 모니터를 연결할 수 있는가 하면 그렇지는 않다. 마이컴 안에는 프로그램 가능한 ROM(요즘은 대부분 플레쉬 메모리)이 있기 때문에, 마이컴 칩과 간단한 주변회로만으로 특정 기능을 수행할 수 있다. 마이컴은 우리 주변에서 흔하게 찾아 볼 수 있는데, 냉장고, 세탁기, TV, VCR, 마이크로웨이브 오븐 등등 Embedded system 환경에 적용되어있다.


Q.02 [uC] 마이컴 주변회로

8비트 마이컴은 연산을 처리하는 ALU와 메모리 인터페이스부분 그리고 주변회로로 이루어져 있다. 주변회로에는 인터럽트, 타이머, UART등이 있다. 이 것들에 대해서는 아래에서 좀더 자세히 설명할 것이다. 32비트 마이컴의 주변기기도 8bit와 크게 다르지 않다. 위에서 언급한 것 이외에 마이컴이 사용되는 특정 용도에 맞게끔, 주변기기가 들어가 있습니다. 삼성에서 만드는 ARM7 또는 ARM9 계열의 마이컴을 보면, 특정 용도에 맞게 주변기기가 들어가 있음을 확인가능하다.


Q.03 [uC] 인터럽트(Interrupt)와 폴링(Polling)에 대하여...

예를들어 설명해 보겠다. 만약 친구가 보낸 편지를 기다리고 있다고 가정해 보자. 상대방이 그것을 나에게 보통우편으로 보냈다면, 나는 그 편지가 왔는지를 확인해 보기 위해서, 지속적으로 우편함을 체크해야 된다. 이것을 폴링(Polling) 방식이라고 한다. 반면 등기로 보낸 경우는 우편배달부가 현관의 초인정을 눌러 나에게 직접 전달해 준다. 이것이 인터럽트 방식에 해당 한다. 등기 우편의 좋은점은 무엇일까? 편지가 도착하면, 우편배달부가 나에게 직접 전달해주므로, 나는 내가 수행하는 업무에 집중할 수 있다. 반면 보통우편의 경우는 편지가 왔는지 하던 일을 멈추고 우편함을 수시로 체크해야 하는 번거로움이 존재 한다.

위에서 예시로 들은 설명이 마이컴의 경우에도 그대로 적용된다. 마이컴의 핀 중 몇개는 인터럽트 핀으로 할당되어 있다. 여기에 신호(Low 또는 High가 될 수 있고, Low에서 High로 변하는 Transition이 될 수도 있다.)가 가해지면, 프로그램이 미리 지정된 번지로 점프하게 된다.(이렇게 미리 지정된 번지를 인터럽트 벡터라고 한다.)

이 곳에 인터럽트가 발생하면 어떤 일을 수행할 것인지를 프로그램으로 기술해 준다.

참고로 외부에서 마이컴의 인터럽트 핀으로 들어오는 인터럽트를 외부 인터럽트라고 부른다. 외부 인터럽트가 있다면, 내부 인터럽트도 있는데, 마이컴의 내부에 있는 타이머에 의한 인터럽트가 내부 인터럽트의 한 예로 적절하다.


Q.04 [uC] 타이머(Timer)에 대하여...

타이머는 우리가 흔히 알고 있는 스톱워치와 비슷한 기능을 가지고 있으나 차이가 있다. 스톱워치는 시간이 얼마나 흘렀는지를 측정하지만,  타이머는 지금부터 지정한 만큼의 시간이 경과하면 소리를 내어 알려주게끔 되어있다. 예를 들어 마이컴이 1/100초에 한번씩 키패드(Key pad)를 스캔해야 한다고 가정하자. 마이컴은 키가 언제 눌려지지 알 수 없으므로 항상 키패드를 일정 시간 간격으로 스캔해야 한다. 그리고, 입력된 키값에 따라 정해진 작업을 해야 한다. 이 경우 마이컴이 1/100초 간격으로 키패드를 스캔하기 위해 다음과 같은 코드를 사용한다면 어떻게 될까?



여기서 for 루프안의 1000은 1/100초의 시간 간격을 맞추기 위한 반복횟수라고 하자.(마이컴 동작 주파수와 명령어당 몇 사이클이 필요한가에 따라 이 값은 달라진다.) 이 경우 마이컴은 1/100 초가 경과하기를 손가락을 세면서 기다리는 형태이다. 그리고 입력된 키 값을 가지고 정해진 일을 하는 동안에는 1/100초가 지났는지를 체크하지 못하는 문제점이 있다.

사람의 경우를 생각해보자. 책상에 앉아서 공부를 하고 있는데, 커피가 마시고 싶어서, 주전자에 물을 넣어 가스레인지에 올려놓고, 다시 책장에 앉았다. 경험상 물은 약 3분이 지나면 끓는다는 것응 알고 있다. 이 3분간 시계를 보면서 3분이 지나기를 기다린다면, 위의 코드와 같은 형태가 된다.

만약 타이머가 있다면, 3분 후 알람이 울리게 설정을 한 뒤 계속 공부를 할 수 있을 것이다. 만약 커피물이 아니라 사골국을 끓인다면 타이머 없이는 장장 몇시간 동안을 아무일도 못하며 시계를 보면서 기다려야 할 것이다.

해당 예시는 타이머의 개념 뿐 아니라 인터럽트의 개념도 들어간다. 커피물이 정확하게 언제 끓을 지도 모를 때, 수시로 물이 끓는지를 확인해 보는것이 폴링(Polling) 방식이고, 나에게 알려주는 방법(여기서는 물 끓는 소리에 의한)인터럽트에 해당된다.

타이머가 없으면, 프로세서는 시간이 얼마나 흘렀는지 알기 위해 자기가 몇 개의 명령어를 수행했는지 카운트해야하는데, 이 일이 프로세서에게는 상당히 비효율적이다.(이 일을 한다고 더 중요한 일을 전혀 못한다.) 이것을 없애기 위해 외부에서 시간을 알려주는 타이머가 필요한 것이다. 


Q.05 [uC] UART에 대하여...

UART(Universal Asynchronous Receiver / Transmitter)는 PC의 시리얼 포트(보통 COM1, COM2 등으로 알려진)와 통신하기 위한 주변장치이다. PC와 마이컴간의 데이터 교환을 위해 사용된다. 실제로 PC와 인터페이스를 위해서는 MAX232라는 칩이 필요한데  이 칩의 주된 용도는 전압 레벨을 변환해 주는 것이다.

RS-232C 시리얼 포트는 '1'은 (-3) ~ (-25)볼트, '0'는 (+3) ~ (+25) 볼트로 변환되어 전송된다. 위에서 말한 MAX232가 하는 역할이 전압 레벨을 변환해 주는 것이다.


Q.06 [uC] USB에 대하여...

USB(Universal Serial BUS)는 최근(2004년) 가장 성공적인 PC와 주변 기기의 인터페이스로 자리잡았다. USB는 4개의 선을 사용하는데 그 중 2개가 전원선이고, 나머지 두 개가 데이터를 위한 신호선이다. 신호선은 차동(differential)방식이라 하여, 서로 극성이 다른 신호를 보내게 된다. USB 이름이 말해주듯이 데이터를 시리얼 형태로 보낸다. 

즉, RS-232 케이블과 비교할 수 없을 정도로 빠른 속도이다. MP3 플레이어 대부분이 PC와의 인터페이스를 위해 USB를 사용하고 있는데, 그 주된 이유가 데이터 전송 속도 때문이다. 만약 RS-232를 사용하였다면 음악 한 곡을 다운받는데 상당한 인내심이 필요할 것이다. 8bit 마이컴 중에서 USB를 내장한 것을 찾아보기 힘들다. 32bit 계열에서는 그리 어렵지 않게 USB를 내장한 마이컴을 찾아 볼 수 있다.


Q.07 [uC] 8051 VHDL Code에 대하여...

해당 내용은 마이컴을 처음 접해보는 분을 위한 것은 아니다.
VHDL(VHSIC:[Very High Speed Integrated Circuit] Hardware Description Language)은 하드웨어를 기술하기 위한 언어 이다. 알테라나 자이링스 툴을 사용해 보신 분은 아마 VHDL을 접해 보았을 것이다. 이전의 로직 디자인이 Gate나 라이브러리를 이용한 것이었다면, 요즘은 언어(Language)로 설계를 하는 것이 일반적인 추세이다. 8051의 VHDL 소스가 존재하는가 하는 생각을 해 볼 수 있는데, 존재한다(여러개가 존재). 그리고 적절한 신세시스(Systhesis)툴을 이용하여, VHDL로 기술된 것을 게이트레벨로 옮길 수 있고, FPGA로 구울 수 있다. 


Q.08 [uC] 임베디드 시스템(Embedded System)에 대하여...

임베드(Embed)의 사전적 의미는 "끼워넣다"라는 뜻이다. 여기에 수동의 형태인 과거분사형을 사용해, 임베디드, 즉 "끼워넣어진"의 뜻이 된다. 무엇을 어디에 넣었다는 얘기인가 하면, 시스템에 컴퓨터(또는 마이컴)을 넣었다는 의미이다. 겉으로 봐서는 그 안에 컴퓨터가 들어가있는지 모르는데, 실제로 뚜껑을 열어 내부를 확인해 보면, 컴퓨터가 있는 시스템이 임베디드 시스템이다. 겉으로 봐서는 그 안에 컴퓨터가 들어가있는지 모른는 가장 큰 이유 중의 하나는 아마도 마우스나 키보드가 없기 때문일 것이다. 키보드 대신 터치 스크린이나, 키패드를, 모니터 대신 작은 LCD를 사용하는 경우가 많다. 은행의 현금자동 인출기, 병원의 무인 처방전 발급기 등이 임베디스 시스템에 해당되고, PDA, MP3 플레이어, 마이크로웨이브 오븐, 세탁기 등도 임베디드 시스템의 범주에 넣을 수 있다. 


Q.09 [uC] 리얼타임 시스템(Real time system )에 대하여...

리얼타임 시스템 역시 엄밀하게 정의하고자 한다면 상당히 까다로울 수 있다. 만약 학교에서 리얼타임시스템을 전공한 분이 이 글을 본다면, 여기의 설명이 정확하지 않다고 지적할 수도 있겠지만 여기서는 일반인이 알기 쉽게 설명하고자 한다. 지금 사용하고 있는 PC의 키보드를 누르면, 해당 키에 해당하는 글자가 사람이 느끼기에 즉시 화면에 출력된다.

이런식으로 입력이 가해지면, 정해진 시간내에 반응을 나타내는 시스템을 리얼타임 시스템이라고 한다. 리얼타임 시스템을 하드 리얼타임(Hard real time)과 소프트 리얼타임(Soft real time) 시스템으로 구분할 수 있는데, 소프트 리얼타임 시스템은 반응속도가  주어진 기준치를 넘어서도 그냥 불편함이 증가하는 정도의 시스템이고(느려 터진 PC가 여기에 해당 된다), 하드 리얼타임 시스템은 반응속도가 주어진 기준치를 넘어서면, 심각하거나 치명적인 일이 일어나는 시스템을 말한다. 하드 리얼타임 시스템의 예로 많이 인용되는 것이 제트 엔진의 제어 시스템으로, 주어진 시간내에 시스템이 응답하지 않으면, 심각한 사로를 불러 올 수 있다.


Q.10 [uC] 리셋 벡터(Reset Vector)에 대하여...

리셋 벡터는 마이컴에 리셋이 인가 되었을 때 마이컴이 처음으로 실행되는 어드레스를 말한다. 마이컴에 전원이 인가되었을 때 마이컴이 어떻게 동작하는지가 궁금한 분들은 리셋 벡터를 공부하는 것을 추천한다. 앞서 설명한 적이 있지만, 리셋 벡터의 '벡터'라는 단어가 리셋 벡터를 이해하기 힘들게 만드는 것 같다. 

물리 시간에 배운 바로는 벡터는 크기와 방향을 가지는데, 리셋 벡터는 크기와 방향이 어떻게 될까라고 생각하는 사람이 있을 수도 있다. Vector를 사전에서 찾아 보면, n[항공] 방향, 진로(방위) vt.(비행기, 미사일 따위를)전파로 유도하다 등의 뜻이 있다. 리셋 벡터의 벡터는 물리 시간에 배운 크기와 방향을 같는 의미의 벡터가 아니라는 뜻이다.


Q.11 [uP] 레지스터 파일(Register File)에 대하여...

레지스터(Register)가 무엇인지 알고 파일(File)이 무엇인지도 알겠는데, 두 단어를 결합하니 정학히 무엇을 말하는지 모르겠다고 생각하는 분들이 많을 것이라 생각된다. 

그냥 레지스터가 여러개 모여 있는 것을 레지스터 파일이라고 부른다고 생각하면 된다. 비 영어권 사람이 겪는 어려움의 한가지 예이다.


Q.12 [uP] DMA (Direct Memory Access)에 대하여...

프로그램을 해보신 분은 쉽게 이해할 수 있으나, 교과서만 가지고 배우신 분은 이해하기 어렵다고 느낄 수 있는 것이 DMA이다. 주변기기에서 메모리로 데이터를 옮길 때는 CPU가 주변기기에서 데이터를 CPU로 가져온 다음에 메모리에 써야 한다. 즉 주변기기에서 데이터를 읽어온 뒤 메모리로 보내는 작업을 하나하나 CPU가 해야한다. 

즉 이렇게 데이터를 옮기는 동안에 CPU가 다른 작업을 할 수 없다. DMA는 별도의 하드웨어에 이 작업을 맡기는 것이다. 그러면 CPU는 그 시간 동안에 다른 작업을 수행할 수 있다.


Q.13 [uP] 파이프라인과 캐쉬메모리에 대하여...

90년대 중반 이 후 컴퓨터 아키텍쳐를 배워본 사람들은 파이프라인과 캐쉬메모리에 대해 잘 알 것이다. 사실 글쓴이는 80년대 중반에 컴퓨터 아키텍쳐를 배웠으며, 그 당시에는 이러한 용어를 배운 기억이 없다. 파이프라인과 캐쉬 메모리는 1990년대와 그 이후에 출간된 컴퓨터 아키텍쳐 교과서의 많은 부분을 차지하는 내용으로, 여기서는 파이프라인과 캐쉬 메모리를 모르는 분들을 위해 간단히 설명하고자 한다.

파이프 라인은 공장의 조립라인과 같은 개념이다. 예를 들어 자동차 조립라인을 보면, 조립라인의 시작 부분에서 자동차 조립이 시작되어 조립라인의 끝에서 완성된 차가 나온다. 일단 조립라인이 자동차로 채워지면 잛은 시간내에 자동차가 한대 씩 조립되어 나오게 된다. 마이크로 프로세서의 파이프 라인도 마찬가지이다. 명령어들이 파이프 라인으로 들어가면서 각 파이프라인 스테이지(stage)에서 부분적으로 실행되게 된다. 파이프라인을 사용하는 주된 이유는 마이크로 프로세서의 처리 속도(클럭)을 높일 수 있다는 것이다. 일단 파이프라인이 채워지게 되면, 파이프라인을 사용하지 않을 경우보다 빠르게 명령어들이 처리 된다.

캐쉬 메모리는 마이크로 프로세서와 메인 메모리 간의 속도차이를 극복하기 위해 사용하는 메모리이다. PC에 사용되는 프로세서가 3GHz가 넘는 반면, 메모리 속도는 그 보다 훨씬 못하다. 즉 프로세서는 빠른데 메모리가 느려, 프로세서가 제 성능을 발휘하지 못하는 일이 실제로 일어나느데, 여기에 대한 해결책이 용량은 작지만 속도가 빠른 메모리를 프로세서와 메인 메모리 사이에 두는것이다. 캐쉬 메모리의 용량은 크면 클수록 좋겠지만, 용량이 클수록 비사고 속도도 늦어지므로, 작은 용량의 것을 사용한다(메인 메모리보다 용량이 적은것을 의미).

그렇다면, 어떤 원리로 캐쉬 메모리가 메인 메모리의 느린 속도를 커버할 수 있는 것일까? 여기에는 로칼리티(Locality)라는 경험적 법칙이 이용된다. 로칼리티란 자주 사용하는 명령어들이 서로 가깝게 존재한다는 것을 말한다.  예를 들어 점프 명령이 없는 경우, 명령어는 순서적으로 실행한다. 즉, 다음에 실행할 명령어가 바로 다음 어드레스에 있다. 작은 루프의 경우에도 루프를 구성하는 명령어들이 인접한 어드레스에 모여 있다. 이러한 로칼리티를 근거로하여, 프로세서는 제일 먼저 필요한 데이터 도는 다음에 실행할 명령어가 캐쉬 메모리에 있는지를 체크한다. 있다면, 캐시 메모리의 것을 사용하고, 없으면 데이터를 메인 메모리에서 캐시 메모리로 적제하고, 이 때 당장 사용할 것만 딸랑 가져오는 것이 아닌, 긴 안목으로 지금 당장 사용할 것보다 많은 용량을 가져 온다.( 이 용량을 캐쉬 라인 사이즈(line size) 라고 부른다.)

캐시 메모리의 원리를 사람에 비유하여 설명할 수 있다. 어떤 사람이 책상에 앉아서 기술 잡지의 연재 기사를 읽는 작업을 하는데, 기술 잡지는 다른 방에 있는 책장에 있다. 만약에 현재 읽고 있는 잡지가 2017년 1월호라고 하면, 이 것을 다 읽은 다음 책장에 가서 잡지를 더 가지고 와야 하는데, 이 때 다음호(2017년 2월호)마나 딸랑 가지고 오는 것이 아닌, 2017년 2월호 부터 7월호 까지 6개월 분의 잡지를 가져와 책상위에 두고 잡지의 연재 기사를 읽어 나가는 방식이 캐시 메모리의 동작과 유사하다고 할 수 있다.


Q.14 [uP] 슈퍼스칼라 (Super Scalar)프로세서에 대하여...

벡터(Vector) 프로세서의 반대말이 스칼라(Scalar) 프로세서이다. 스칼라 프로세서는 한번에 하나의 명령어만 실행한다. 그러면 슈퍼스칼라 프로세서는 스칼라 프로세서와 벡터 프로세서의 중간 정도에 해당한다고 볼 수 있는데, 한번에 여러 개의 명령어를 실행할 수 있다. 

현재 고급사양의 마이크로 프로세서는 대부분 슈퍼스칼라 프로세서이다. 명령어를 실행할 수 있는 유닛(Unit)이 하나밖에 없는데 어떻게 한번에 여러 개의 명령어를 처리할 수 있을까? 하는 의문이 생길텐데, 슈퍼스칼라 프로세서에는 실행 유닛이 여러개가 있다. 또 다른 의문점은 프로그램은 순서적으로 실행되어야 하지만, 동시에 실행하면 결과가 엉망이 되지 않는가 인데, 앞 명령어와 동시에 실행해도 문제가 생기지 않는 명령어들만이 동시에 실행해도 문제가 생기지 않는 명령어들만이 동시에 실행 가능하다. 여러가지 자세한 내용은 컴퓨터 아키텍처 책(Ex. Hennessy & Peterson)을 참고하기 바란다.


Q.15 [Adv] One Billion Transitor Chip

빌리온(Billion)은 10의 9승이다. 즉 10억에 해당한다. 하나의 칩(die)에 담을 수 있는 트렌지스터 갯수가 얼마나 될까? 메모리 분야에서는 1 billion transistor를 넘어서는 칩이 이미 오래전부터 존재해 왔다. 그러나 로직 분야에는 아직까지(2004년 9월) 1 billion  칩이 발표되지 않았다. 메모리는 기본이 되는 메모리 셀을 상하좌우로 배열함으로서 더 큰 용량의 메모리를 쉽게 설계할 수 있었으나, 로직의 경우에는 이렇게 반복되는 구조가 없어, 설계가 더 복잡하기 때문으로 생각된다.

1 billion transistor 칩을 얼마나 클까? 80386DX CPU의 transistor 갯수가 275,000개 이고, 80486DX는 1,200,000개 임을 감안하면, 1 billion(1,000,000,000) transistor 칩안에는 80386DX 3,636개, 80486DX는 800개가 들어갈 수 있다. 

팬티엄을 비롯한 고급기종의 마이크로 프로세서는 transistor를 어떤 용도로 가장 많이 사용할까? 아이러니하게도 캐쉬 메모리를 구현하는데 가장 많은 transistor를 사용하고 있다. 즉 계산을 하는데 사용하는 transistor 보다 느린 외부 메모리를 보완하기 위해 사용하는 transistor가 더 많다.


Q.16 [uC] Big Endian and Little Endian

8 비트의 데이터를 바이트(byte)라고 하고, 여러 바이트의 그룹을 워드(word)라고 한다. 여기서는 4바이트를 하나의 워드라고 생각한다. 메모리의 각각의 어드레스에 1바이트를 저장할 때, 워드를 저장하는 방법에는 2가지 방법을 생각해 볼 수 있다. 예를 들어 하나의 워드를 0번지부터 3번지까지 저장한다고 하면, 워드의 최하위 바이트(Least significant byte)를 0번지에 넣을 수도 있고, 최상위 바이트(Most significant byte)를 0번지에 넣을 수도 있다.

워드의 최하위 바이트부터 메모리의 어드레스가 작은 쪽에 넣는 방식을 "리틀 엔디안"이라고 하고, 그 반대의 방법을 "빅 엔디안"이라고 한다. 엔디안이라는 용어는 걸리버 여행기에서 계란의 뽀족한 쪽(little end)부터 먼저 깨야하는가 아니면 뭉둑한 쪽(big end)에서 부터 깨야하는가를 가지고 전쟁을 일으킨 정치가들의 이야기에서 나왔다고 한다. 리틀 엔디안은 인텔 계열에서 사용되며, 빅 엔디안은 SPARC나 IBM 메인프레임에서 사용된다고 한다. ARM의 경우는 CPU에서 둘 중 하나를 선택하여 사용할 수 있도록 되어 있다.

빅 엔디안 / 리틀 엔디안 표기가 문제를 일으킬 수 있는 경우는,  서로 다른 엔디안을 사용하는 컴퓨터가 네트워크를 통해 데이터는 주고 받는 경우 발생할 수 있다.


Q.17 [Adv] Computation in time end Computation in space

사실 위 제목은 글쓴이가 만든 말은 아니다. 어디서 봤는지 출처를 명확히 기억을 하지 못하나, 그 내용은 다음과 같다.

"지금까지의 CPU 구조는, 계산을 하기 위해 CPU에 있는 하나의 ALU를 수 많은 명령어들이 시간적으로 계속하여 반복 사용하는 구조로 되어 있는데(computation in time), 이것은 먼 옛날 하나의 칩상에 집적할 수 있는 트렌지스터의 수가  제한적이 었을시기에 나온 구조이나, 트렌지스터가 남아도는 지금에도 같은 구조가 계속 사용되고 있다. 앞으로는 남아 도는 트렌지스터를 이용하여 Computation in space라는 새로운 페러다임으로 나아가야 한다."


Q.18 [uP] 트랩(Trap)과 인터럽트(Interrupt)

프로그램 실행 중 overflow나 underflow 같은 특이한 사항이 발생한 경우, 프로그램은 지정한 특정번지로 점프하여 그곳의 명령을 실행하게 되는데, 이렇게 프로그램이 자동적으로 특정 번지로 점프하여 그곳의 명령을 실행하는 것을 트랩(Trap)이라고 하며, 특정 번지의 있는 프로그램을 트랩 핸들러(trap handler)라고 한다. 사실 overflow는 flag register의 특정 비트를 체크해 봄으로서, 각 명령어를 실행했을 때 overflow가 일어났는지 알 수 있다. 그러나 모든 산술 명령에 대해 flag register를 체크해 보는 것은 비효율적이다.

트랩과 인터럽트의 주된 차이점은 트랩은 어떤 프로그램을 실행 시켰을때,  항상 고정된 위치에서 일어나나, (외부)인터럽트는 언제 발생될지 모른다는 점이다.


Q.19 [Adv] VLIW(Very Long Instruction Word) 프로세서

트렌스메타(Transmeta)사의 크루소(Crusoe)칩이 VLIW(Very Long Instruction Word)구조를 갖는 것으로 알려져 있다. 128비트의 명령어 길이를 가지며,  여기에 32비트 명령어 4개(load/store 명령 하나, 분기 명령 하나, 연산 명령 2개)가 들어갈 수 있다. 이 명령어를 디코딩한 뒤 각각의 실행 유닛에서 실행하는 구조로 되어있다.

한편 Mpact라는 Chromatic이라는 회사에서 만든 media processor 칩 역시 VLIW구조로 알려져 있다. 이 칩은 발표될 당시(1990년대 말)에는 획기적인 칩이었으나, 상업적 성공을 거두지는 못했다.


Q.20 [Adv] 벡터 프로세서(Vector Processor)에 대하여...

벡터 프로세서는 과학 기술용 계산에서 많이 나타나는 벡터(Array)또는 매트릭스 형태의 데이터를 빠르게 연산할 수 있도록 고안된 구조를 가지고 있다. 여러개의 데이터(예를 들면 32비트 데이터 64개)를 담아 둘 수 있는 벡터 레지스터에 계산하고자 하는 데이터를 담아 둔 후,  이 데이터를 파이프라인 구조를 갖는 연산기(ALU)를 통과시켜 결과를 얻는다.

1974년에 발표된 Cray Research사의 Cray-1 슈퍼컴퓨터 및 그 후속 모델들이 벡터 프로세서라고 한다. 그리고 2004년 11월에 발표된 top 500 슈퍼컴퓨터에서 3위에 랭크된 NEC사의 Earth사의 Earth Simulator가 벡터 프로세서로 알려져 있다.


Q.21 [uP] 싸이클 스틸링(Cycle Stealing)에 대하여...

싸이클 스틸링은 DMA와 관련되어 설명되는 용어이다. 우선 버스에 연결된 여러개의 디바이스(CPU, 메모리, DMA Controller, I/O-1, I/O-2. 등등)가 연결되어 있을때, 어느 한쪽(예를 들어 CPU)이 버스를 사용하면 다른 한쪽(예를 들어 DMA Controller)은 버스를 사용하지 못한다.(예를 들어 전화가 1대 밖에 없는 사무실에서 한 사람이 전화를 사용하면, 다른 사람이 전화를 사용하지 못하는 것과 같다. 즉 사용 가능한 리소스(resource)가 하나 밖에 없는 경우이다.)

DMA는 I/O에서 메모리로 데이터를 옮기는 것이라고 설명하였다. DMA가 실행된 후 I/O에서 메모리로 데이터를 쉬지 않고 옮긴다면, 이 경우에는 CPU가 버스를 쓰고 싶어도(메모리를 억세스 할 경우 ) 쓰지 못하는 경우가 발생한다. DMA 컨트롤러가 좀 더 남을 배려하여 양보할 줄 안다면, CPU가 버스를 사용하지 않는 동안에만 DMA를 싱행하려 할 것이다. 이것을 싸이클 스틸링(Cycle stealing) 이라고 한다.


Q.22 [Adv] Supercomputer

8비트 마이컴에서 부터 이야기를 시작하여, 슈퍼 컴퓨터까지 왔다. 한 시대에 있어 다른 컴퓨터 보다 월등한 성능을 가진 컴퓨터를 슈퍼 컴퓨터라고 한다. 책상 위(또는 바닥)에 놓인 PC도 30년 전으로 가져 갈 수 만 있다면 슈퍼 컴퓨터가 되었을 것이다.(최초의 마이크로 프로세서 4004가 나온것이 1971년 임.)

IBM의 BlueGene/L 이라는 슈퍼컴퓨터가 70 petaflops를 기록했다는 뉴스 기사가 있었다.(11/04/2004, eetimes)  아마 몇 십년 후에는 이 정도의 성능을 가진 PC를 책상위에 두고 사용하는 날이 오지 않을까 하는 생각을 해본다.

www.top500.org 를 통해 최신 슈퍼컴퓨터의 동향을 확인할 수 있다.


Q.23 [Adv] Synchronous logic 과  Asynchronous ARM

Digital system을 구현하는 방법 중 현재(2005년) 주류(main stream)를 이루는 것이 synchronous logic이다. 즉 모든 시스템이 클럭을 중심으로 하여 동작되는 형태이다. Asynchronous logic은 주류에서 떨어져 있으며, 가급적이면 디지털 시스템을 설계 시 asynchronous 한 방식을 사용하지 말 것을 당부한 글 들을 어렵지 않게 찾아 볼 수 있다.

디지털 시스템(칩)에서 전력을 가장 많이 소모하는 부분이 클럭 라인이다. 다른 글에서 설명하였듯, CMOS 회로는 신호의 변화가 있을 경우에만 전력을 소모한다.(leakage 전류에 의한 전력소비를 무시한 경우) 그런데, 클럭 라인은 매 주기 마다 하이에서 로우로 변화를 하니, 전력을 가장 많이 소모한다. 마이크로 프로세서의 소비 전력의 상당 부분(~50 %)을 클럭 라인에서 소모한다고 한다.

Asynchronous logic 에는 이러한 메인 클럭이 없다. asynchronous ARM(AMULET)은 Steve Fuber의 ARM system-on-chip architecture라는 책의 제일 마지막 장에도 소개되어 있다. 


Q.24 [uP] Harvard architecture 와 Princeton architecture

8051이나 AVR 마이컴 데이터 시트를 보면, 하버드 아키텍처라는 말이 나온다. 즉 두 마이콤 모두 프로그램 메모링와 데이터 메모리가 따로 따로 존재하며, 이들을 억세스하는 버스 역시 따로 존재한다는 말이다. 이 용어의 유래는 하버드 대학에서 개발한 Mark 1 컴퓨터에서 왔다고 한다. 반면 프린스턴 아키텍처라는 용어도 가끔씩 등장하는데 이 것은 프로그램 메모리와 데이터 메모리가 하버드 아키텍처러럼 분리되지 않은 컴퓨터를 말한다. 이 것은 ISA 컴퓨터 라는 프린스턴 대학에서 개발한 컴퓨터에서 유래하였다고 한다.


Q.25 [uP] Soft Microprocessor

FPGA상에 구현된 마이크로프로세서(또는 마이크로 컨트롤러)를 소프트 마이크로 프로세서(Soft Microprocessor)라고 한다. FPGA는 configuration 과정을 통해 그 내용(기능)을 손쉽게 바꿀 수 있으므로, 왜 "소프트" 마이크로 프로세서라 부르는지 짐작할 수 있을것이다. 글쓴이가 생각하는 소프트 마이크로 프로세서의 장점은 단종 걱정이 없다는 것과 원하는 주변기기를 직접 만들어 넣을 수 있다는 것이다. 단종에 대한 걱정은 개발자라면 한 번씩은 겪었을 만한 것으로, 개발이 끝나고 양산 준비를 하려고 하니, 사용했던 부품 중 하나가 단종이 되거나, 단종 예고가 되는 개발자에게는 드믈지 않게 경험하는 현상이다. 소프트 마이크로프로세서의 장점이 있으면, 단점도 있을텐데 단점은 FPGA가 가지고 있는 단점을 생각해 보면 될 것이다.

'System > MICOM' 카테고리의 다른 글

I2S(Intergrated Interchip Sound) 통신  (2) 2017.08.23
레지스터란?  (0) 2017.08.18
Renesas 개발일지(2)  (0) 2017.01.09
Renesas 개발일지(1)  (0) 2017.01.04
GPIO(General Purpose Input Output) 란?  (0) 2016.12.26
개발자가 적어본 마이컴/마이크로프로세서 이야기  (0) 2016.12.23