2026년 8월 9일 일요일

"남의 칩"으로 구현한 탁구 게임 소스코드를 인공지능에게 분석해 달라고 해봤습니다.

"남의 칩"으로 구현한 탁구 게임 소스코드를 인공지능에게 분석해 달라고 해봤습니다.

[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]"은 그 패기에 도움과 응원을 보냅니다.

2026년 8월 1일 토요일

[MyChip-on-MyDesk 예제/유튜브] "탁구 게임기"

[MyChip-on-MyDesk 예제] "탁구 게임기"

노란 딱지가 붙은 SOIC-28 패키지가 "내 칩" MPW로 제작된 탁구 게임기 칩
오른쪽 RP2040-Zero 보드는 OLED128x64 그래픽 컨트롤러 기능 수행

by GoodKook, goodkook(at)gmail.com
--------------------------------------------------------------------------------------------------
"탁구 게임기" 예제 소스(실습 자료)[링크]
"탁구 게임기" 교재 [pdf][유튜브 플레이리스트]
커뮤니티/네이버 카페 "마이칩 인앤아웃(mychipinout)"[링크]
"내 칩 제작 서비스"/"반도체 설계 교실" 오픈-소스 디자인 킷 사용자 그룹[링크]의 유튜브 채널[링크]
--------------------------------------------------------------------------------------------------
"[베릴로그 RTL 예제] 탁구 게임기"는 "내 칩 설계교실"의 한학기 분량의 교재 입니다. 오픈-소스 툴 사용법은 줄이고 디지털 반도체 "설계"에 집중합니다. 선수과목으로 "디지털 논리회로", 베릴로그 HDL 그리고 C++ 과목을 이수를 전재로 쉽게 작성하려고 했습니다. 디지털 회로에서 배웠던 카운터 회로부터 시작하여 시스템 수준 테스트벤치, 코-시뮬레이션, FPGA 활용 코-에뮬레이션 검증 그리고 "내 칩 제작 서비스"의 공정으로 합성에서 레이아웃 생성까지 다룹니다. 총 8편으로 구성되었습니다.

0. 시작하기 전에...

"내 칩 제작 서비스[바로가기]"의 MPW 경험이 반도체 분야 취업에 도움이 될까?[바로가기]

    0-1. 오픈-소스 설계 툴이 사전 설치된 WSL 가상 디스크 이미지 배포 및 사용법

    0-2. 미리 읽어둘 것들,
        자인 킷의 디렉토리 “doc/ETRI_ 연구노트 ” 중 아래 문서
            연구노트 3: 하드웨어 기술 언어의 코딩 스타일[pdf]
            연구노트 4: C++ 템플릿 크래스와 SystemC 의 최소한 이해[pdf]
            연구노트 11: MyChip FIR PE(1 부 ):RTL[pdf]
            연구노트 12: MyChip FIR PE(2 부 ):GDS[pdf]
        [추가 읽을 꺼리]
            연구노트  9: C-to-GDS, FIR 필터(1부:시뮬레이션)[pdf]
            연구노트 10: C-to-GDS, FIR 필터(2부:합성과 표준 셀 배치배선)[pdf]
        [추가 도구 설치]
            연구노트 XX: Ubuntu 24.04, Fresh Install for MyChip-on-MyDesk[link]
            연구노트 12: Arduino, Quartus, Vitis-HLS [pdf]
            연구노트 13: 다시 WSL![pdf]

    0-3. ETRI 0.5um CMOS DK 예제: 비디오 게임기 "Pong"
        "알기만 하는 사람은 좋아하는 사람만 못하고, 좋아하는 사람은 즐기는 사람보다 못하다"

    0-4. "내 칩"하기전에 "남의 칩" 체험
        [소스코드 해설] ATmega328P활용 "미니 오실로스코프"
        

    0-5. "남의 칩"으로 탁구 게임기
        
        Pong_1/2/3 @ 32x16 LED Matrix
        

1. RTL 베릴로그로 "탁구대" 그리기
    1-1. 래스터 스캔 방식 비디오 시현
    1-2. 베릴로그 HDL로 탁구대 그리기
    1-3. C++ 로 작성하는 하드웨어 시뮬레이션 테스트벤치
    1-4. 시뮬레이터 빌드
    1-5. Makefile
    1-6. 실습

2. 그래픽 LCD 구동 칩의 시뮬레이션 모델
    2-1. 도트 매트릭스 그래픽 LCD 구동 칩
    2-2. 인터페이스 프로토콜
    2-3. 그래픽 데이터 메모리
    2-4. SystemC 모델
        a. 리셋 동작
        b. 명령 또는 데이터 구분
        c. 명령 해석
        d. 그림 데이터 접근(읽기 또는 쓰기)
    2-5. 실습
        a. 따라하기
        b. 과제

3. "탁구대"의 그래픽 테스트 벤치
    3-1. 핸드 쉐이크
    3-2. RTL 베릴로그 "탁구대"
    3-3. 그래픽 LCD 인터페이스 모델
    3-4. 실습 및 과제

4. 움직이는 탁구공
    4-1. 탁구공 이미지 비트-맵
    4-2. 임의 위치에 탁구공 그리기
    4-3. 움직이는 탁구공
    4-4. 실습 및 과제

5. GLCD의 버스 기능 모델
    5-1. 버스 기능 모델
    5-2. BFM 수준으로 작성된 GLCD 모델
    5-3. 실습 및 과제

6. 탁구대, 움직이는 공 그리고 탁구채
    6-1. "탁구대"와 "움직이는 공" 시현
    6-2. "탁구채"
    6-3. 대화형 하드웨어 시뮬레이터
    6-4. 실습 및 과제

7. 코-에뮬레이션(Co-Emulation) 검증
    7-1. 테스트벤치 재사용 코-에뮬레이션
    7-2. "내 칩" 에뮬레이션 검증 키트
    7-3. 에뮬레이터 작동 모드
        a. 싸이클 상세(CA, Cycle Accurate) 모드
        b. 전송수준(TL, Transaction Level) 모드
        c. 시스템 응용(SA, System Application) 모드
    7-4. 실습 및 과제
        a. 싸이클 상세(CA) 모드
        b. 전송수준(TL) 모드
        c. 시스템 응용(SA) 모드
        d. 과제

8. "내 칩"
    8-1. 반도체 제조도면
    8-2. 합성
    8-3. 합성 후 시뮬레이션
    8-4. 표준 셀 배치와 배선
    8-5. 사인-오프: '레이아웃' 도면 검사
        a. 적층 비아 검사(Stacked Via Check)
        b. 디자인 룰 검사(Design Rule Check)
        c. 레이아웃 대 회로도(Layout versus Schematic) 검사
    8-6. 칩-탑
    8-7. 실습 및 과제