서울대 컴공과 하드웨어 수업의 결정판.
내장형 시스템 (Embedded System)
처음 수강 신청한 사람은 20명 쯤 되는 것 같았는데, 마지막까지 살아남은 사람은 9명 뿐이다. 컴퓨터공학부 03학번은 나를 포함해 3명. 컴공 고학번 2명이 있었고 전기과 1명, 기계과 3명이 있었다.
장 교수님의 말씀에 따르면 다음과 같은 선수과목이 필요하다. (정확하진 않다.)
논리설계 + 회로이론(전자회로) + 운영체제 + 컴파일러 -> 내장형 시스템
즉, 알고리즘, 자료구조, 데이터베이스 등 지극히 소프트웨어적인 것을 제외한 모든 컴퓨터공학부 전공과목을 기반으로 하고 있다는 뜻이다. 다시 말하면 컴공과 전공의 집대성이라고 해도 과장은 아니라는 것. 뭐, 물론 어떤 과목이 기초 과목 없이 가능하겠냐마는, 내장형 시스템이야말로 그러하지 않을까 하는 생각이 든다.
물론 대충 할 사람에게는 그 어떤 지식도 필요 없다. 대충 옆에 있는 사람 하는 것 보고 따라서 납땜하면 되고 조교님께서 주시는 소스 코드 붙여다가 컴파일 하면 돌아가긴 돌아간다. 하지만 제대로 하려는 사람에게는 생각해야 할 문제가 하나둘이 아니다.
알고리즘, 자료구조, 데이터베이스 등이 '컴퓨터를 어떻게 돌릴 것인가'를 배운것이라면, 내장형 시스템은 '컴퓨터를 어떻게 돌아가게 만들것인가'를 배우는 것이라고 말할 수 있다. 내장형 시스템도 하나의 작은 컴퓨터이기 때문에, 보드가 잘 돌아가게 만드는 것은 컴퓨터를 만들어 나가는 과정과 같다.
수업에서는 ARM9 MCU와 Xilinx FPGA가 붙어있는 PCB를 기본으로 시작하였다. 여기에 저항과 캐패시터, SRAM 등을 달아서 MCU와 FPGA가 돌아가게 만든다. LCD를 달아서 화면도 보여야 하고 NAND 플래시 메모리를 달아서 non-volatile storage로 사용한다. RS232C 시리얼 통신으로 PC 하이퍼터미널과 통신할 수 있다.
기본 스펙은 주어진 부품을 모두 달아서 작동하게 만드는 것. 이후 MP3P나 오실로스코프 등 추가 기능을 넣는 추가 스펙은 자유롭게 정할 수 있다. 추가 스펙은 의외로 비중이 낮아 만점의 10%밖에 안된다. 그만큼 기본 스펙조차 만족하기 어렵다는 것.
FPGA는 VHDL 코드에 의해 표현된다. Very High Speed Integrated Circuit (VHSIC) Hardware Description Language라고 하지만, 보통 Very Hard and Dirty Language로 통하는 하드웨어 표현 언어. C나 JAVA에 익숙한 나에게는 놀라울 정도로 지저분하다. 하드웨어적인 부분을 생각하지 않으면 그 동작을 보장할 수 없다. 오실로스코프를 이용해서 파형을 읽는 능력도 필요하다. 각종 디바이스의 데이터시트(datasheet)와 친해져야 한다.
하지만 뭐니뭐니해도 가장 필요한 능력은 '전체 흐름을 읽을 수 있는 능력'이다. 시스템을 설계하면서 이 디바이스와 저 디바이스를 연결하기 위해 필요한 것이 무엇인지 알수 있어야 한다. 어떤 시그널이 오가고 어떤 스테이트에 있어야 하는지, 한두번 겪어서는 알 수 없는 노하우가 쌓여야 하는 것 같다. 쉽지 않은 일이다.
어쨌거나 한학기 동안 수도 없이 날을 새서 검사 받는 날까지 완성할 수 있었다. (실제로 검사 예정일까지 완성한 사람은 9명 중에 4명 뿐이었다.)
나의 주제는 Ubiquitous Sensor Network Sink Node. USN의 센서 노드 패킷을 받아 처리하는 시스템이다.
Crossbow사의 MICAz 센서 노드를 사용했고, 이 센서 노드에는 Chipcon사의 ZigBee 무선통신 칩이 있어 서로 무선통신하고 정보를 전달할 수 있다. 처음에는 ZigBee 모듈을 직접 이용해 센서 노드와 통신하려고 했지만 무리였다. 아직은 무선 통신 모듈은 내가 이해할 수 있는 범위 안에 있는 것 같지 않다. 비교적 쉬워 보이는 시리얼 통신 가능한 ZigBee 개발 키트를 사용하려고 시도해보았지만 그것마저도 실패. 결국은 MICAz 센서 노드 자체의 통신 기능을 이하였다. 그저 시리얼 포트로 패킷을 받기만 하면 되므로 내가 할 일은 패킷 포맷을 분석하여 처리하는 일 뿐.
프로젝트 1 과목에서 어느정도 해 본 일이기 때문에 크게 어렵지는 않았다. 센서 노드의 TinyOS + NesC 애플리케이션은 프로젝트 1에서 사용한 것을 그대로 썼다. 보드 화면에는 오실로스코프처럼 조도, 온도, 소음도의 변화를 그래프로 표현하고 NAND 플래시 메모리에 그 통계 데이터를 저장하고 PC로 보낼 수 있게 하였다.
아래 사진에도 나와 있지만 원래 보드 외에도 스위치, 7-segment 디스플레이, LCD, RS232C 포트가 추가된 쪽보드를 만들어 붙였다. 트렌지스터 저항 계산과 납땜에 고생을 했던 기억이 난다. ESD 보드 남땜에도 문제가 있어서 건드릴 때마다 리셋되고는 했는데, 전체적으로 납땜을 다시 하니까 문제가 사라졌다. 나름대로 납땜을 잘 한다고 생각했었는데 부끄러운 일이다.
최근 큰 관심을 받고 있는 센서 네트워크 분야인데다, 실제로 응용할 수 있는 분야였기 때문에 좋은 주제 선택이었다고 생각한다. 다른 사람들의 MP3P도 나쁘지 않았지만, 독창적이고 앞으로도 발전할 여지가 많은 주제가 아니었나 싶다. 이런 점을 교수님과 조교님, 수강생들이 좋게 평가해준 덕분인지 난이도가 크게 높지 않았음에도 불구하고 A+의 평점을 받았다.
MP3P는 MP3 디코더를 붙이는 하드웨어적인 작업도 많고, I2C 시리얼 통신을 새로 공부해야 한다는 난관도 있지만, 워낙 하는 사람도 많고 공개된 강좌와 소스도 많아서 쉽게 극복한 모양이다. 처음에는 MP3P는 너무 쉬워서 최후의 선택이 될 것이라고 생각했는데, 막상 닥쳐보니 너무나 해결할 것들이 많아 보였다. 그래도 보드에 연결된 이어폰에서 음악 소리가 나는 것을 듣는 순간 너무나 신기하고 놀라웠다. 그런 즐거움에 이 과목을 듣는게 아닌가 싶다.
동작하는 화면. 그래프와 최근 수치가 보인다. (조교님~ 사진 흔들렸잖아요 ㅠㅠ)
수업 홈페이지: http://cslab.snu.ac.kr/course/esd06/
내장형 시스템 (Embedded System)
처음 수강 신청한 사람은 20명 쯤 되는 것 같았는데, 마지막까지 살아남은 사람은 9명 뿐이다. 컴퓨터공학부 03학번은 나를 포함해 3명. 컴공 고학번 2명이 있었고 전기과 1명, 기계과 3명이 있었다.
장 교수님의 말씀에 따르면 다음과 같은 선수과목이 필요하다. (정확하진 않다.)
논리설계 + 회로이론(전자회로) + 운영체제 + 컴파일러 -> 내장형 시스템
즉, 알고리즘, 자료구조, 데이터베이스 등 지극히 소프트웨어적인 것을 제외한 모든 컴퓨터공학부 전공과목을 기반으로 하고 있다는 뜻이다. 다시 말하면 컴공과 전공의 집대성이라고 해도 과장은 아니라는 것. 뭐, 물론 어떤 과목이 기초 과목 없이 가능하겠냐마는, 내장형 시스템이야말로 그러하지 않을까 하는 생각이 든다.
물론 대충 할 사람에게는 그 어떤 지식도 필요 없다. 대충 옆에 있는 사람 하는 것 보고 따라서 납땜하면 되고 조교님께서 주시는 소스 코드 붙여다가 컴파일 하면 돌아가긴 돌아간다. 하지만 제대로 하려는 사람에게는 생각해야 할 문제가 하나둘이 아니다.
알고리즘, 자료구조, 데이터베이스 등이 '컴퓨터를 어떻게 돌릴 것인가'를 배운것이라면, 내장형 시스템은 '컴퓨터를 어떻게 돌아가게 만들것인가'를 배우는 것이라고 말할 수 있다. 내장형 시스템도 하나의 작은 컴퓨터이기 때문에, 보드가 잘 돌아가게 만드는 것은 컴퓨터를 만들어 나가는 과정과 같다.
수업에서는 ARM9 MCU와 Xilinx FPGA가 붙어있는 PCB를 기본으로 시작하였다. 여기에 저항과 캐패시터, SRAM 등을 달아서 MCU와 FPGA가 돌아가게 만든다. LCD를 달아서 화면도 보여야 하고 NAND 플래시 메모리를 달아서 non-volatile storage로 사용한다. RS232C 시리얼 통신으로 PC 하이퍼터미널과 통신할 수 있다.
기본 스펙은 주어진 부품을 모두 달아서 작동하게 만드는 것. 이후 MP3P나 오실로스코프 등 추가 기능을 넣는 추가 스펙은 자유롭게 정할 수 있다. 추가 스펙은 의외로 비중이 낮아 만점의 10%밖에 안된다. 그만큼 기본 스펙조차 만족하기 어렵다는 것.
FPGA는 VHDL 코드에 의해 표현된다. Very High Speed Integrated Circuit (VHSIC) Hardware Description Language라고 하지만, 보통 Very Hard and Dirty Language로 통하는 하드웨어 표현 언어. C나 JAVA에 익숙한 나에게는 놀라울 정도로 지저분하다. 하드웨어적인 부분을 생각하지 않으면 그 동작을 보장할 수 없다. 오실로스코프를 이용해서 파형을 읽는 능력도 필요하다. 각종 디바이스의 데이터시트(datasheet)와 친해져야 한다.
하지만 뭐니뭐니해도 가장 필요한 능력은 '전체 흐름을 읽을 수 있는 능력'이다. 시스템을 설계하면서 이 디바이스와 저 디바이스를 연결하기 위해 필요한 것이 무엇인지 알수 있어야 한다. 어떤 시그널이 오가고 어떤 스테이트에 있어야 하는지, 한두번 겪어서는 알 수 없는 노하우가 쌓여야 하는 것 같다. 쉽지 않은 일이다.
어쨌거나 한학기 동안 수도 없이 날을 새서 검사 받는 날까지 완성할 수 있었다. (실제로 검사 예정일까지 완성한 사람은 9명 중에 4명 뿐이었다.)
나의 주제는 Ubiquitous Sensor Network Sink Node. USN의 센서 노드 패킷을 받아 처리하는 시스템이다.
Crossbow사의 MICAz 센서 노드를 사용했고, 이 센서 노드에는 Chipcon사의 ZigBee 무선통신 칩이 있어 서로 무선통신하고 정보를 전달할 수 있다. 처음에는 ZigBee 모듈을 직접 이용해 센서 노드와 통신하려고 했지만 무리였다. 아직은 무선 통신 모듈은 내가 이해할 수 있는 범위 안에 있는 것 같지 않다. 비교적 쉬워 보이는 시리얼 통신 가능한 ZigBee 개발 키트를 사용하려고 시도해보았지만 그것마저도 실패. 결국은 MICAz 센서 노드 자체의 통신 기능을 이하였다. 그저 시리얼 포트로 패킷을 받기만 하면 되므로 내가 할 일은 패킷 포맷을 분석하여 처리하는 일 뿐.
프로젝트 1 과목에서 어느정도 해 본 일이기 때문에 크게 어렵지는 않았다. 센서 노드의 TinyOS + NesC 애플리케이션은 프로젝트 1에서 사용한 것을 그대로 썼다. 보드 화면에는 오실로스코프처럼 조도, 온도, 소음도의 변화를 그래프로 표현하고 NAND 플래시 메모리에 그 통계 데이터를 저장하고 PC로 보낼 수 있게 하였다.
아래 사진에도 나와 있지만 원래 보드 외에도 스위치, 7-segment 디스플레이, LCD, RS232C 포트가 추가된 쪽보드를 만들어 붙였다. 트렌지스터 저항 계산과 납땜에 고생을 했던 기억이 난다. ESD 보드 남땜에도 문제가 있어서 건드릴 때마다 리셋되고는 했는데, 전체적으로 납땜을 다시 하니까 문제가 사라졌다. 나름대로 납땜을 잘 한다고 생각했었는데 부끄러운 일이다.
최근 큰 관심을 받고 있는 센서 네트워크 분야인데다, 실제로 응용할 수 있는 분야였기 때문에 좋은 주제 선택이었다고 생각한다. 다른 사람들의 MP3P도 나쁘지 않았지만, 독창적이고 앞으로도 발전할 여지가 많은 주제가 아니었나 싶다. 이런 점을 교수님과 조교님, 수강생들이 좋게 평가해준 덕분인지 난이도가 크게 높지 않았음에도 불구하고 A+의 평점을 받았다.
MP3P는 MP3 디코더를 붙이는 하드웨어적인 작업도 많고, I2C 시리얼 통신을 새로 공부해야 한다는 난관도 있지만, 워낙 하는 사람도 많고 공개된 강좌와 소스도 많아서 쉽게 극복한 모양이다. 처음에는 MP3P는 너무 쉬워서 최후의 선택이 될 것이라고 생각했는데, 막상 닥쳐보니 너무나 해결할 것들이 많아 보였다. 그래도 보드에 연결된 이어폰에서 음악 소리가 나는 것을 듣는 순간 너무나 신기하고 놀라웠다. 그런 즐거움에 이 과목을 듣는게 아닌가 싶다.

완성된 보드. 센서 노드 2개와 베이스 노드가 달린 ESD보드.


단체사진 한 컷




덧글