리콜

사용자 삽입 이미지
요즘 내가 하고 있는 일은 유종의 미를 거두고 원할한 인수인계를 위해 내가 개발한 VICODE의 사용자, 개발자 메뉴얼을 작성하는 것이다. 간단한 예제에 대하여 개발하는 과정을 직접 따라가며 메뉴얼을 작성하던 중 사진 아래에 보이는 임베디드 보드를 활용하여 실제로 시스템을 구현하는 단계에 이르렀다.

VICODE의 핵심기능 중 하나는 임베디드 리눅스에서 돌아가는 소프트웨어와 임베드드 보드에 붙어 있는 FPGA의 하드웨어간의 인터페이스를 자동으로 생성하는 것이다. 하드웨어와 소프트웨어 사이의 연결통로를 자동으로 생성해주어 소프트웨어는 라이브러리를 사용하듯 API를 호출하여 하드웨어와 통신할 수 있도록 하는 것이다.

원하는 시나리오는 다음과 같다. 소프트웨어가 A()라는 함수를 호출하고 B()라는 함수를 호출하면 LED 1번에 찬란하게 빛이 들어와야 한다. 그러나 결과는 깜깜 무소식! 순간 내 머리속을 스치는 단어는 “리콜”. (석사학위논문은 지도교수가 6개월안에 취소할 수 있는데 우리는 이를 흔히 “리콜”이라고 부른다.) 순간 마음이 분주해졌다. 소프트웨어 버그였다면 비교적 금방 찾겠지만 소프트웨어와 하드웨어사이의 통신은 몇 단계를 거치기 때문에 무엇이 문제인지 찾기 힘들다. 결국 묵혀둔 연구노트를 펼쳐 원인을 발견하고 문제해결에 성공. 희망의 LED가 찬란하게 빛났다.

아직 연구실에서 해야할 일이 많지만 내가 원해서 하는 일이기에 즐겁게 하고 있다. VICODE를 이어서 개발하게 될 재호형이나 올해 연구실에 들어올 석사신입생들의 시행착오를 조금이라도 줄여줄 수 있다고 생각하니 뿌듯한 마음이 든다. 떠나는 뒷모습이 아름답도록(?) 남은 기간 내게 주어진 일들을 즐겁게 매듭짓자!

하드웨어 디버깅

요즘 하는 일은 하드웨어 디버깅. 학부 2학년때 논리회로 수업을 지지리도 싫어했었는데 먼 훗날 Verilog HDL 코드를 작성하게 될 줄이야 꿈앤들 알았겠는가. VICODE에서 하드웨어와 소프트웨어를 연결하기 위해서 필요한 인터페이스는 3가지 파트로 이루어져있는데 제대로 동작안하면 대체 어떤 부분에 문제가 있는지 파악할 수 없다는 사실이 나를 슬프게 한다. 그래도 죽으라는 법은 없는지 어제 밤 겨우 Verilog HDL코드에 문제가 있다는 것을 알아낼 수 있었다.


그리하여 오늘의 미션은 Verilog HDL 코드에서 오류를 찾아내는 것! 코드를 고치고, 컴파일 하고, FPGA에 프로그램하고, 임베디드 리눅스에 연결한 터미널로 소프트웨어를 실행하고, FPGA 보드위에 LED의 불빛을 애처로운 눈빛으로 바라보기를 수십번 반복해야만 했다. (하드웨어의 반응을 확인하는 뾰족한 수가 없다.) 종국에는 속에 천불이라는 요즘 잘 나가는 술집이름이 생각났다.

소프트웨어를 디버깅 할 때 마다 언제나 컴퓨터는 정직하여 나를 배신하지 않았다. 모든 버그는 나의 잘못이였다. 그러나 나는 하드웨어를 불신하기 시작했다. ‘하드웨어는 소프트웨어와 달라’, ‘회로에 이상이 있을꺼야’, ‘Verilog 컴파일러에 문제가 있을지도?’

내가 이렇게 생각하게 된 이유는 논리적으로 따져보았을 때 전혀 말도 안되는 상황이 자꾸 연출되었기 때문이다. 이를테면 같은 코드인데 순서를 바꿨을 때 동작이 다르다. 속에 천불을 내고 있다가 우연히 발견한 것은 연결하지 않은 시그널이 있을 때 이상한 동작을 보인다는 점. 자세히 알아보니 연결되지 않은 회로가 있는 경우에 오동작할 가능성이 있었다. 선무당이 사람 잡는다고 하드웨어는 문외한이라 소프트웨어의 변수처럼 선언하고 안써도 그만이라고 생각했던 것이다.

상처난 회로를 정성스럽게 어루만지며 오늘도 나는 간다.