"왜 MyChip은 어색한 리눅스에서 실습하나요? win11이 익숙한데요."
심오한 질문을 질문을 주셨습니다. 이 질문은 아마 다음과 같은 뜻을 담았으리라 짐작되네요.
응용 프로그램들이 그래픽 사용자 인터페이스(GUI, Graphic User Interface)체제를 갖추면 직관성이 높아 집니다. 한마디로 "척보면" 뭘할지 안다는 것입니다. 이는 사무 자동화 분야에 커다란 혁신이 되었고 컴퓨터 활용이 전문가에서 "누구나"로 옮겨가게 되었습니다. 화면에 보이는 "그림"이 컴퓨터 사용자가 원하는 최종 결과물이 됩니다. "화면에 보이는 것이 바로 당신이 갖게될 출력물"이라는 뜻으로 What You See is What You Get을 줄여서 WYSWYG(위지위그)라고 합니다. 이 GUI의 문제는 응용 프로그램의 수많은 기능들을 화면에 보이는 메뉴로 모두 나열하기 어렵다는 것입니다. 각종 기능들이 메뉴 항목의 어디에 숨어있는지 아는 것으로 "컴 퓨터 활용 능력자"의 평가 척도가 되어버립니다. 이는 문서의 작성 내용과는 무관한 '잔기술' 입니다. 정작 창작자는 없고 그저 베끼기 좋은 도구가 생겨버린 셈입니다. PCB 그리기나 레이아웃 도면 그리기도 위지위그 방식의 저작 도구입니다.
개발 도구로 IDE(Integrated Development Environment, 통합 환경)가 대세 입니다. 뭐가 통합되었다는 뜻일까요? 소프트웨어든 하드웨어를 막론하고 개발은 목적을 묘사하고 이를 물리적인 형태로 바꾸는 절차를 거칩니다. "묘사"는 컴퓨팅 언어로, "물리적"인 결과물은 묘사와 전혀 수준이 다른 2진 기계어 코드(소프트웨어) 또는 레이아웃 도면(반도체 하드웨어)입니다. 앞서 말한 "위지위그"와는 전혀 다른 결과물 얻기 입니다. 그 결과물을 얻는 과정은 여러 단계의 절차(이를 추상화 수준 낮추기라고 합니다)를 거치는데 이를 또다른 소프트웨어가 맞아서 해줍니다. 이들을 자동화 도구라고 부릅니다.
최종 목적물을 얻기까지 여러 자동화 도구들이 동원되고 각 도구마다 제각기 명령 체계를 가지고 있으며 옵션 또한 매우 광범위 합니다. 이들을 모두 통합된 환경에서 운영하려면 명령과 옵션들을 모두 메뉴로 만들고 단축키를 사용해야 하는 GUI로는 어렵습니다. GUI의 또다른 단점은 도구가 발전하면서 메뉴 항목이 사라지거나 새로운 항목이 생길 수 있습니다. 어느 메뉴를 눌러야 할지 어느 항목은 선택사항에서 디폴트로 바뀌었는지 일일이 메뉴들을 모두 찾아 들어가 확인하기는 어렵습니다. 제조기술이 급격히 발전하는 경우 이를 다루는 도구의 갱신 또한 빈번합니다. 소프트웨어 버젼이 바뀌었다고 사용법이 달라져서 곤란을 격은 경험이 있을 겁니다. 아마 반도체 분야처럼 도구 버젼을 많이 따지는 경우도 없을 것입니다.
(C, C++, Verilog 등) 컴퓨팅 언어로 묘사한 내용(행위, behavior)을 물리적 변환이 가능한 형식으로 바꾸고 이를 미리 준비된 라이브러리와 합쳐 최종 목적물을 만들어 냅니다. 전자는 컴파일러(Compiler) 또는 합성기(Synthesizer)라고 하고 후자를 링커(Linker) 또는 자동배치배선(Auto P&R)과 셀 병합(migration 또는 phanton cell merge)이라고 합니다. 반도체 설계에서 라이브러리는 '표준 셀(Standard Cell)'이 이에 해당 합니다. 통합 환경이라고 부르는 도구는 추상화 단계 낮추기에 사용되는 소프트웨어들을 체계적으로 관리해 줍니다. 통합 환경은 사용자의 편의를 도울 뿐이지 실제 목표물을 얻는데 직접적으로 기여하는 부분은 없습니다. 그래서 '환경'이라고 부르나 봅니다.
하드웨어 묘사 언어를 기반으로 하는 디지털 반도체 설계의 과정은 소프트웨어 개발에 근접할 만큼 상당부분 자동화 되어 있습니다. 다만 소프트웨어 개발 도구의 경우 기본 옵션으로도 결과를 얻을 수 있는 것과는 달리 하드웨어 설계에 동원되는 도구마다 명령이 많고 이에 따르는 옵션이 매우 중요합니다. 기본 옵션으로 결과를 내지 못하는 경우가 허다합니다. 이 다양한 처리 옵션들에 대하여 메뉴 누르는 절차를 일일이 기술하기도 어렵고 나중에 재현하려면 번잡하게 됩니다. 이는 설계 생산성을 매우 떨어뜨리는 요인입니다. 그래서 명령줄과 스크립트를 적극 활용 합니다. Makefile은 개발자들이 가장 널리 사용하는 스크립트로 이를 처리하는 유틸리티가 make 입니다. 아마 분야를 막론하고 개발자라면 필수적으로 사용합니다. MPW 로 "내 칩"를 만들어보기 위해 반도체 설계에 입문하려고 나선 지금, 이참에 한번 익혀두면 평생 잘한 일 중 하나로 꼽힐 것입니다. 기본 사용법은 어렵지 않습니다. 아래 링크의 문서를 참고하십시요.
"하드웨어 기술 언어의 코딩 스타일"[링크]