메뉴 건너뛰기

개발도구


게재가 상당히 늦었습니다. 게으름이 가장 큰 원인이겠고, 다른 일로 바쁨을 당해서 일이 밀린 감도 많이 있습니다. 부족함이 엄청 묻어나는 글임에도 불구하고 많은 분들이 읽어봐주셔서 감사하게 생각하고 있습니다. 각설하고, 4편으로 넘어 가도록 하겠습니다.

제 3편에서, CISC 구조를 갖춘 DSP냐 RISC 구조를 갖춘 DSP냐에 따라서 개발전략을 다르게 가져가야 한다고 언급했다. DSP칩을 익히는 과정에서도 마찬가지다. 일반적으로 마이크로프로세서를 이해하기 위해서는 다음 세가지 부분에 초점을 맞추어서 익히면 된다.

마이크로 프로세서의 Core 구조
메모리 맵의 이해
인터럽터 구조
위 세가지 부분만 이해하면 칩은 한낱 도구에 불과함을 느끼게 된다. 간혹, 칩에 짓눌려서 가뿐숨을 몰아내쉬다 전사하는 분들을 많이 보았는데, 대부분 지엽적인 문제로 둘러쌓인 덫에 걸려서 최종적으로 늪에 빠져 버리는 최악의 경우에 해당한다고 볼 수 있다. 이런 경우를 막기 위해서 이번 편이 준비된 것이다.

먼저, Core를 이해하는 방법에 대해서 얘기해보자.

해당칩의 데이터 매뉴얼을 보게되면, Core를 블록단위로 그려놓은 그림을 흔히 접하게 된다. 그 그림이 이해가 된다면, Core는 거의 완벽하게 이해했다고 봐도 무난하다. 그 그림이 이해가 될 때까지 백번, 천번이상 들여다 보아야 한다. 그 그림을 통해서, Accumulator 기반 프로세서인지 레지스터 기반 프로세서 인지, 다중버스 구조인지, 등등을 이해할 수 있게 된다.

다양한 도구를 이해하면 이해의 속도와 깊이를 증대시킬 수 있다. 그중에서도 어셈블리 프로그래밍을 으뜸으로 칠 수 있는데, 어셈블리와 친해지기를 체질적으로 싫어하시는 분들한테는 참으로 어려운 방법이 아닐 수 없다. 과감히 체질을 개선하라고 말씀드리고 싶다. C로 프로그래밍을 해서는 구조에 대한 이해는 사실상 불가능하며, 칩은 점점 멀어진다.

예를 들어, A + B = C를 TI DSP 중에서 24계열에서 각각 프로그램 한다고 해보자.

C로 한다면,

C = A + B ;
끝이다. 계열에 상관없다. 얼마나 훌륭한가, 구조를 몰라도 되고, 플랫폼에 상관없이 C = A + B 다.

어셈블리로 한다면, 난감해진다. 조금만 참자.

ADD A
ADD B
SACL C
무슨 말인지 도통...그러면서 긁적 긁적...에잇 뭐야...하면서 글읽기를 그만 두시려는 분들, 조그만 참아주세요.

SACL은 Accumulator 에 있는 내용을 C 에 저장하는 명령어다. 한가지 궁금증이 생길 것이다. 왜, ADD A, B 라고 하지 않았을까? 이 대목에서 궁금증이 안 생기면 큰 일이다. ADD A, B 라고 쓰면 치명적 오류가 난다. 궁금해지는가? 28계열이나 54계열 등등에서는 ADD A, B 가 된다. 이래도 안궁금하면... 데이터 버스가 몇 개냐에 따라서 명령어 사용법이 달라짐을 설명한 것인데, C에서는 이런 부분이 가려져서 안 보인다. 위 어셈블리 코드를 보면, 24 계열은 데이터버스가 하나밖에 없구나 하는 것을 알 수 있다.

구조를 이해하면 얻게되는 이득은 뭘까? 프로그래밍 효율이 극대화되어서, 남들보다 경쟁력있는 솔루션을 만들 수 있다는 것이다. 예를들어, 남들은 TMS320C3000으로 문제를 푸는데, 나는 24XX로 풀었다고 한다면 소위 대박이다.

그렇다면, 어셈블리만 알면 구조를 쉽게 이해할 수 있나? 그렇지는 않다. 프로그래머블 칩들을 보면 대개 개발환경을 동반하고 있다. TI DSP의 경우, 코드 컴포져라는 아주 훌륭한 개발환경을 제공하고 있는데, 이런 개발환경의 가장 큰 특징은 칩 내부 레지스터/메모리 등의 시각화라는 것이다. 프로그램 한 줄 한 줄 수행할 때마다 내부 레지스터, 메모리등등의 변화를 관찰하게 되면 어느듯 칩은 내 가슴속에 들어와 있고, 이걸 토대로 강력한 디버깅 기술을 구사할 수 있게 된다. 궁금해하는 부분들을 눈으로 볼 수 있으며, 쉽게 건드릴 수 있다는 것은 칩의 이해와 활용에 있어서 실로 어마어마한 효과를 보이게 된다.

칩 구조를 이해하는 데 있어서 가장 큰 적은 롬 에뮬레이션 방식이다. 24 계열의 경우, 시리얼 포트등을 통해서 내부 플래시 메모리에 코드를 굽고, 코드를 실행시켜 원하는 동작 수행을 제대로 관찰하는 지 지켜보면서 코드 수정을 해가는 방식을 사용하는 예가 많은데, 참으로 안타까운 경우라 하겠다. 시간은 시간대로 소비하고 노력은 노력대로 쏟아부었지만 결국 칩에 대해서는 조금밖에 모르는 비효율적인 방법이라 도시락을 싸들고 다니면서 말리고 싶은데, 도시락 싸는 작업이 만만찮아서 제대로 못하고 있기에 이렇게 글로써 대신한다.

다음은 세종대 정보통신공학과 양 홍준학생이 조사 정리한 마이크로 프로세서의 역사에 관한 에세이다. 상식차원에서 읽어보심도 좋을 듯 하다.

1.개요

마이크로프로세서(MicroProcessor)는 한 개의 IC칩으로 된 CPU를 가리킨다. 여러 IC 칩으로 설계한 CPU와는 다르게, 마이크로프로세서에서는 직접적으로 레지스터나 ALU 등과 외부 부품을 연결할 수가 없으며, 다만 이 칩의 단자를 통해서만 정보전달이 가능하다. 또 마이크로프로세서는 CPU의 모든 내용이 하나의 조그만 칩 속에 내장됨으로 해서, 가격이 훨씬 싸지며 부피가 줄어든다는 중요한 장점이 있다.

저렴한 가격과 작은 크기로 인해 마이크로프로세서가 이전에는 경제성이 없던 구조를 설계 가능하게 해줌으로써 컴퓨터 설계기법에 있어 변혁을 가져오게 했다. 또한 마이크로 프로세서의 발달은 ‘Embedded System’ 의 발달에 중요한 키워드가 되었다.

2. 마이크로프로세서의 역사

현재 널리 사용되고 있는 마이크로프로세서는 인텔사의 80계열과 모토롤라사의 68계열이 있다. 1969년 최초로 발표된 4004는 4비트를 처리할 수 있는 마이크로프로세서였다.

그러나 마이크로프로세서가 오늘날처럼 대중적으로 사용되기 시작한 것은 인텔사의 8비트 마이크로프로세서인 8080이 나온 후부터이다. 8080은 특히 CP/M 운영체제의 등장과 함께 개인용 컴퓨터의 CPU로 매우 널리 사용되었으며, 자일로그 사에서 8080을 개량하여 만든 Z80은 오늘날까지도 많이 사용되는 8비트 마이크로프로세서가 되었다. 한편 모토롤라 사의 6800과 6809, 모스텍 사의 6502 등도 널리 사용된 8비트 마이크로프로세서였다.

1970년대 후반부터 16비트 마이크로프로세서가 등장하였다. 인텔사의 8086과 모토롤라 사의 68000은 초창기의 16비트 마이크로프로세서인데, 이들은 각각 IBM PC와 매킨토시 마이크로컴퓨터에 채용되어 널리 알려졌다.

인텔사의 80386과 80486, 그리고 모토롤라 사 의 68020과 68030, 68040은 모두 32비트이다. 특히 80486과 68040 이상의 마이크로 프 로세서들은 하나의 실리콘 칩에 100만개 이상의 트랜지스터들을 집적한 고성능의 제품이다.

아래 도표에서는 빠져 있지만, 4비트 마이크로 프로세서가 등장했을 당시에 TI사의 TMS1802NC 라는 4비트 마이크로 프로세서가 소개되었다. 그러나 그것은 그리 안정적인 것은 아니었으며 TI 사는 1974년에 첫번째 마이크로 컨트롤러 ‘TMS1000’ 을 소개하였고 80년대에 DSP가 소개되면서 TI사는 'TMS320C10' 이라는 DSP를 위한 특별한 마이크로 프로세서를 개발하였다. 근래에는 C2000, C5000, C6000, OMAP 계열의 마이크로 프로세 서들이 개발되어 유통되고 있다. 그리고 최근에는 Mips에 근거를 둔 64Bit의 새로운 RISC 마이크로 프로세서도 개발되었다.



*자료참조 : http://home.opentown.net

An Introduction to Digital Signal Processors

Texas Instruments 사 홈페이지

<자료출처 - (주)싱크웍스(http://www.syncworks.co.kr)>

※ 글을 옮겨갈 때에는 꼭 출처를 밝혀주시기 바랍니다.





번호 제목 날짜 조회 수
공지 [TIP] Jedis로 원격지 Redis접속에 실패할때 2017.09.27 7038
공지 [TIP] 앱 실행시 관리자 권한을 얻도록 Visual Studio에서 설정하기 2017.01.22 6556
공지 [TIP] 파이선에서 C 코드 호출하기 (How to call C function from Python) [1] 2018.08.14 6421
33 [LINK]PID 제어와 연관해서 만든 로봇 정보 2005.03.25 575
32 [LINK]프린터 포트이용 ARM9 디버깅 2005.03.03 547
31 [LINK] 소스코드 깔끔히 하이라이트 시켜주는 툴 2004.10.25 596
30 [LINK] The Art of assembly language 2004.10.23 499
29 [LINK] USB정보 분석 툴- USB Monitor, USB머하니 2004.10.13 2881
28 [TIP] WinCVS의 간략한 사용방법 [1] 2004.10.11 455
27 [TIP] Linux상에서 메모리 릭 잡는 도구 2004.08.24 619
26 [TIP] CYGWIN 설정/변경하기 2004.06.21 664
25 [TIP]OUTLOOK에서 첨부파일 형식 허용 및 차단하는 방법 2004.05.19 824
24 [DSP]제9편 - Fixed Point Processor - (1) 2004.05.07 690
23 [DSP]제8편 - Floating Point Processor의 한계 2004.05.07 621
22 [DSP]제7편 - Floating Point Processors 2004.05.07 719
21 [DSP]제6편 - DSP 칩을 제대로 익히기 위해서(3) - DSP와 인터럽트 2004.05.07 1398
20 [DSP]제5편 - DSP 칩을 제대로 익히기 위해서(2) - 메모리 맵의 이해하기와 DSP 칩이 갖춰야 할 덕목 2004.05.07 1151
» [DSP]제4편 - DSP 칩을 제대로 배우기 위해서 - Core 이해하기 2004.05.07 741
18 [DSP]제3편 - DSP는 RISC 인가? CISC인가? 아니면 뭔가? 2004.05.07 950
17 [DSP]제2편 - DSP 칩, 왜 필요한가? 2004.05.07 858
16 [DSP]제1편 - DSP 칩, 그것이 알고 싶다. 2004.05.07 1187
15 [TIP] Windows Update 가 안될때 ... 2004.04.30 892
14 [LINK] 8051 CPU Application Notes 2004.04.27 550
위로