하드웨어 디버깅

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


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

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

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

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