[MyChip-on-MyDesk 예제/유튜브] "탁구 게임기"[링크]는 오픈-소스 도구를 사용하여 "내 칩"을 설계하는 예제 입니다. "내 칩"을 설계하기 전에 게임 규칙(알고리즘에 해당하는)을 마이크로 컨트롤러("남의 칩")에 프로그래밍 언어(C++)로 먼저 구현하고 하드웨어 언어(베릴로그)로 전용 칩(ASIC)을 설계하는 반도체 설계 교육 과정의 예제입니다. 미래에 어떤 일을 할지 모르니 반도체 설계를 기화로 내장형 소프트웨어 제작도 맛보길 바라면서 작성한 예제 이기도 합니다.
구글의 인공지능(AI) 제미니에게 "남의 칩"에 구현한 탁구 게임기의 소스를 분석해 달라며 아래와 같이 물어봤습니다.
"https://github.com/GoodKook/ETRI-0.5um-CMOS-MPW-Std-Cell-DK/blob/main/Projects/RTL/pong_SbS/00_pong_Uno/pong_Uno/04_Table_Ball_Paddle/04_Table_Ball_Paddle.ino의 소스코드를 분석해보라"
남이 제작한 소스 코드의 맥락을 파악하는데 도움이 될만한 답변을 해줍니다. 언뜻 신통하다 싶다가 가만히 보니 구체성이 다소 부족합니다. "무료" 버젼이라 그런가요? "유료" 인공지능은 좀더 다른 답변을 줄런지 알 수 없습니다. 어쨌든 인공지능의 답변이 이 소스코드를 설명한 아래 링크의 글을 읽는데 도움이 될 수도 있을 것 같습니다.
"남의 칩"으로 탁구 게임기
https://fun-teaching-goodkook.blogspot.com/2026/07/blog-post_27.html
"남의 칩"으로 탁구 게임기를 구현하는 이유는 탁구 게임기를 "내 칩"으로 설계하기 전에 탁구 게임의 규칙(알고리즘)을 실현(또는 확인)해 보려는 목적이었습니다. 그리고 하드웨어 언어와 소프트웨어 언어의 차이도 이해할 목적도 있습니다. 막상 해놓고 보니 굳이 "내칩"을 만들어야 해? 라는 "현타"가 옵니다. 그래서 이 글의 마지막에 "고속 마이크로 컨트롤러를 사용하면 충분히 그리고 쉽게 구현 할텐데 굳이 전용 반도체를 만들어야 하는 이유"를 토론해 보자는 과제를 던집니다.
이 질문에 인공지능은 그럴듣 하지만 일반적인 답변을 내놓습니다. 인공지능이 주는 전용 칩의 잇점, "처리속도", "전력효율성" 그리고 "실시간"의 측면에서 "남의 칩"과 "내 칩"을 "탁구 게임기"를 예로 구체적으로 비교할 수 있을까요? 우리는 공학도 입니다. 그럴듣함에 더하여 실제적(실무적)답을 할 수 있어야 합니다. 실제 게임기 "내 칩"을 만들어 봤다면 이 질문에 아주 구체적인 답을 할 수 있을 겁니다. 전용 하드웨어를 설계하는 절차를 이해 했을 것이며 그로부터 얻는 장점을 자신있게 그리고 조리있게 설명한다면 "신입" 이상의 인상을 보여줄 수 있을 것입니다.
이번에는 인공지능에게 탁구 게임기 예제의 베릴로그를 분석해 보라고 해봤습니다.
"https://github.com/GoodKook/ETRI-0.5um-CMOS-MPW-Std-Cell-DK/blob/main/Projects/RTL/pong_SbS/06_Table_Ball_Paddle/pong_SbS/pong_SbS.v의 소스코드를 분석해보라"
소프트웨어와 마찬가지로 꽤나 신통한 설명을 내놓습니다. 그중에 문제점으로 "제공된 소스코드 내부에는 공이 패들에 맞고 튕겨 나가는 판정 로직이 없다"고 합니다. 그래서 이어 질문을 던져봅니다. "패들 충돌 로직 반영 코드"를 작성하라고 했더니 아래와 같은 베릴로그 코드를 내놓았습니다. 중간중간 설명과 함께,
verilog
// 변경 전: 항상 x_ball == 119에서 튕기던 로직을 제거하고 아래 코드로 대체합니다.
reg sign_x;
reg sign_y;
always @( posedge clk or posedge reset)
begin
if (reset)
begin
sign_x <= 0;
sign_y <= 0;
end
else if (v_sync)
begin
// --- 세로 벽 반사 (상/하단 벽은 기존과 동일) ---
if (y_ball == 55)
sign_y <= 1;
else if (y_ball == 0)
sign_y <= 0;
// --- 가로 벽 및 패들 충돌 판정 ---
// 1. 왼쪽 벽에 부딪히면 오른쪽으로 반사
if (x_ball == 0)
sign_x <= 0;
// 2. 패들이 위치한 가로 경계(x_ball == 115)에 공이 도달했을 때
else if (x_ball == 115)
begin
// 공의 y축 위치가 패들의 세로 범위(paddle ~ paddle+20) 안에 있는지 검사
if ((y_ball + 7 >= paddle) && (y_ball <= paddle + 20))
sign_x <= 1; // 패들에 맞았으므로 왼쪽으로 반사
else
sign_x <= sign_x; // 패들을 놓치면 반사하지 않고 그대로 진행 (실점 처리용)
end
// 3. 패들을 놓쳐서 화면 오른쪽 끝까지 완전히 나갔을 때의 예외 처리 (리셋 대용)
else if (x_ball == 120)
sign_x <= 1; // 임시로 화면 끝에서 튕기게 처리 (이후 점수 루틴 연동 가능)
end
end
예제 작성자(중견 기술자)가 보기에 인공지능의 실력이 만만치 않군요. 그런데 일은 누가 시켰죠? "신입"은 시키는 일을 맡아 하다가 경험이 쌓이고 중견 기술자(연구자)로 성장 합니다. 인공지능도 시키는 일은 잘 합니다. 중견 기술자가 보기에 인공지능이 해놓은 결과를 보면 시원찮은 "신입"보다 빠릿해 보일 겁니다. 그렇다고 "신입"을 뽑지 않는다거나 내보낸다면 그 회사(사회)의 미래가 걱정 스럽습니다. 미래를 바쳐줄 기초는 생각하지 않고 당장 인건비 절약을 따지는 꼴이라는 생각을 떨칠 수가 없군요. 몇년 전까지만 해도 키워 놓으니 대기업으로 떠난다는 중소기업의 사장님들의 하소연을 종종 듣던 때가 있었습니다. 중소기업 사장님에게는 안타깝지만 사회 성장 체계는 엄연했습니다. 이제는 그나마 "신입"조차 내보내는 풍조라고 하니 다가올 미래 사회가 우려 스럽습니다. 중견 기술자의 수명이 다하면 "소"는 누가 키운 답니까?
강의를 하면서 학생들에게 듣는 질문에 "인공지능이 코딩을 해준다고 한다"며 다소 걱정어린 표정을 짓곤 합니다. 여러 매체에서 인공지능이 다 해준다며 신입 직원을 뽑지 않는다는 말을 서슴없이 해대는 까닭에 이제 막 사회에 나서려는 학생들이 어지간히 주눅이 들까봐 걱정 입니다. 사회가 "신입"을 배려해 주지 않더라도 스스로 커가는 패기를 기대해 봅니다. 내 칩 제작 서비스의 오픈-소스 디자인 킷 사용자 그룹 "MyChip-on-MyDesk[https://groups.google.com/g/mychip-on-mydesk]"은 그 패기에 도움과 응원을 보냅니다.