2024년 7월 9일 화요일

ETRI 0.5um CMOS DK 예제: 비디오 게임기 "Pong"

ETRI 0.5um CMOS DK 예제: 비디오 게임기 "Pong"

"알기만 하는 사람은 좋아하는 사람만 못하고, 좋아하는 사람은 즐기는 사람보다 못하다"

<논어>의 어느 구절을 현대에 맞게 표현 한 글이라고 한다. 베릴로그와 반도체 설계를 교과목으로 배우다 보면 마땅한 예제가 없기도 하고 수많은 문법들을 모두 다뤄야 한다는 압박에 수박 겉핧기 식이 되어 버린다. 그러다 조별 과제가 떨어지면 덩달아 반도체에 정나미도 떨어질까봐 염려된다. 이제 학기도 끝났고 어렴풋이 베릴로그와 반도체 설계의 맛을 봤다면 이제 즐겨볼 차례다. 거의 모든 베릴로그 교과서에 '교통 신호 제어기(Verilog Traffic Light)'나 '자판기(Verilog Vending Machine)' 등이 예제로 등장한다. 이들 예제들은 나름대로 유한 상태 머신(FSM)의 기술방법을 설명하기에 훌륭하긴 하지만 심심하다. 지루한 학기가 끝난 지금 여전히 반도체 설계에 애정이 남아 있길 바란다.

베릴로그로 비디오 게임을 구현해 보자. 아주 예전에 초등학교 문방구 앞에 있었다는 '탁구' 게임이다. 마이크로 컨트롤러(MCU)로 고전 게임들을 재현하는 프로젝트(Arduino Game Console)가 흔한 요즘이다. 이번 예제는 그보다 단순 하니 너무 기대는 말자. 비디오 게임을 아주 단순화 하여 베릴로그 만으로 구현 하였다. 이번 예제의 특징은 베릴로그의 조합회로 기술법이 아주 다양하게 사용되었다는 점이다. 또한 여러 기법 중 모듈 인수화(parameterized module)를 적절히 구사하였다. 아울러 비디오 신호및 디스플레이 컨트롤러를 이해할 수 있을 것이다. 입출력 신호의 갯수가 10여개에 불과 하며 베릴로그를 최적화 하면 "내칩 MPW"에 지월 할 수 있을 것이다. 예제는 아래 링크에서 받을 수 있다.

https://github.com/GoodKook/ETRI-0.5u-CMOS-MPW-DK-Example--pong_pt1/

시현 장치에 그림을 표현하려면, 그것도 움직이게 보이도록 하려면 엄청난 신호가 필요하다. 예를 들어 640x480 크기의 VGA 화면에 초당 10프레임을 보여준다고 해보자. 픽셀당 1비트의 흑백 화면이라고 해도 초당 무려 3백만개(640x480x10=3,072,000)의 값이 생산되어야 한다. 이런 신호를 생산하는 하드웨어를 설계한다고 해보자. 하드웨어를 설계 한다면 디지털 파형을 떠올리기 마련이다. 이 파형을 들여다 보며 작동을 파악하기는 불가능 하다. 비디오를 다루는 하드웨어의 설계의 테스트 벤치에는 파형이 만들어내는 모습을 시각적으로 볼 수 있는 방안이 마련되어야 한다.

멀티미디어 정보를 보여주고 들려주는 소프트웨어 도구들이 다양하게 준비되어 있으므로 이를 활용한다. SDL(Simple Directmedia Layer, https://libsdl.org/ )은 게임 소프트웨어의 제작에 사용되는 C++ 라이브러리다. 화면과 음성 그리고 입출력 장치를 쉽게 제어할 수 있다. 응용 프로그램 제작에 필요한 소스는 물론 라이브로리와 헤더가 모두 공개되어 있으므로 하드웨어 설계물의 검증을 위한 테스트 벤치에 어렵지 않게 접목시킬 수 있다.

SystemC 테스트 벤치에 SDL을 연결하여 베릴로그 시뮬레이션하는 모습은 아래와 같다.

이 시뮬레이션을 파형으로 보면 이렇다. 탁구대 크기를 128x64로 줄였음에도 파형을 통해 게임이 진행되는 상황을 살펴보기는 곤란하다.

중간 틈틈이 키보드로 패들을 상하로 조작하는 모습을 볼 수 있다. SDL을 접목 시켜 하드웨어 시뮬레이션에 입출력을 대화형(interactive/real-world stimulus, 실시간 상호작용)으로 구성함으로써 실제와 근접한 검증 환경이 되었다.

베릴로그 RTL의 검증을 위해 에뮬레이션 기법으로 게임기를 FPGA에 구현하였다. 비디오 신호를 다루는 만큼 컴퓨터 화면은 물론 실제 비디오 장치(VGA와 G-LCD)에 연결 하였다. 탁구 게임기 베릴로그는 비디오 신호를 생성 할 뿐 실제 디스플레이 컨트롤러는 포함되어 있지 않다. 비디오 컨트롤러까지 포함하면 "내칩 MPW"에서 허용하는 크기를 훌쩍 넘어서기 때문이다. 별도의 아두이노 보드를 비디오 컨트롤러로 사용한 에뮬레이션 구성은 아래와 같다. 시뮬레이션을 위해 구성한 테스트 벤치가 그대로 재활용 되고 있다는 점에 유의하자. 설계물의 추상화 수준이 베릴로그 RTL에서 FPGA 게이트 회로로 변경 되었다고 검증 환경이 바뀌었다면 온전한 검증이라고 할 수 없다.

아두이노 보드를 가지고 그래픽 LCD 구동, VGA 구동 시키는 공개 라이브러리가 많이 있으므로 이를 활용 하였다. 반도체를 설계하면서 베릴로그를 익히는데 그치지 않고 내장형 시스템 (embedded system) 프로그래밍 까지 두루 섭렵해보자. CPU 라는 반도체에 의미를 부여하는  펌웨어 코딩 또한 반도체 설계의 한 방법론이다.


이 예제를 만드는 도중 '반도체 설계 취미가'의 책상 샷! 아주 저렴하게 반도체 설계 실험실을 꾸몄다. FPGA+Arduino DUE+MEGA+Oscilloscope+MultiTester 합쳐서 50만원도 않됨. 이게다~ 알리 상회 덕분.

반도체 설계와 MPW제작에 심오한 알고리즘의 구현도 좋지만 재미를 빼놓을 수 없다. 좀더 최적화 하고 아이디어를 넣어 재미있는 게임기를 만들어 보기 바란다. "내칩 MPW", 씹고 뜯고 맛보고 즐겨보자.


댓글 없음:

댓글 쓰기