TECH 으로 돌아가기
TECH HACKER NEWS 오늘 8분 읽기 21 READS

칩 하나를 역설계하라: 제인 스트리트 ASIC 퍼즐이 남긴 교훈

칩 하나를 역설계하라: 제인 스트리트 ASIC 퍼즐이 남긴 교훈
SOURCE IMAGE · HACKER NEWS

지난 8월 제인 스트리트(Jane Street)는 작은 칩의 최종 GDS 레이아웃만 공개하고, 그것이 무엇을 하는 회로인지 알아내라는 퍼즐을 냈다. 넷리스트도, 내부 신호 이름도 주지 않았다. 참가자는 물리 레이아웃만 들고 내부 동작을 거꾸로 추적해야 했다. 결과적으로 30개국 이상에서 약 400건의 제출이 들어왔고, 미국·인도·영국·호주가 대부분을 차지했다. 고등학생부터 연구자, 현업 엔지니어, 은퇴자까지 참여했으며 KLayout, Yosys, Z3에 더해 파이썬·러스트·C++·OCaml·하스켈, 심지어 Odin으로 작성한 자체 도구가 동원됐다.

정체는 11x11 '스타 배틀(Star Battle, 일명 Two Not Touch)' 퍼즐을 검증하는 하드웨어 체커였다. 각 행·열·색상 구역에 정확히 별 두 개를 놓되, 대각선을 포함해 두 별이 서로 맞닿으면 안 된다는 규칙이다. 칩은 121사이클에 걸쳐 각 칸에 별을 둘지를 입력받고 여러 검사를 병렬로 돌린다. 행과 열마다 2비트 카운터로 별이 정확히 두 개인지 세고, 121비트 ROM으로 칸을 구역에 매핑한 뒤 구역별 카운터로 다시 센다. 인접 여부는 지연선(delay line)으로 주변 칸을 추적해 확인하고, 전체 별 개수를 세는 카운터는 이스터에그 출력에 쓰인다. 이 검사들을 모두 AND로 묶어 성공 신호를 만든다. 정답 문자열은 게임 보드로 구동되는 소형 LFSR로 난독화해 ROM에 저장했기 때문에, 성공 신호만 강제로 켠다고 해서 평문 답이 튀어나오지 않는다. 틀린 입력은 대개 'TRY AGAIN'을 뱉는다. 칩 자체는 SKY130 오픈소스 표준 셀 라이브러리와 LibreLane 툴체인으로 설계됐다.

넷리스트에서 시작하는 정공법

첫 관문은 GDS에서 게이트 수준 넷리스트를 뽑아내는 일이었다. 출제진은 sky130_fd_sc_hd__nand2_2 같은 셀 이름을 GDS에 남겨둬, Magic이나 KLayout의 LVS 패스로 원시 넷리스트를 추출할 수 있게 해뒀다. 일부 참가자는 더 어려운 길을 택했다. 블라디슬라프 샤포발로프는 C++로 추출 파이프라인을 직접 짜 GDS를 파싱하고 각 셀의 도형을 뽑은 뒤 셀 이름과 결합해 완전한 논리 넷리스트를 만들었고, 본 문제에 앞서 워밍업 설계로 파이프라인을 디버깅했다.

넷리스트는 회로 그래프일 뿐, 시뮬레이션하려면 각 셀의 동작도 알아야 한다. 어떤 이는 Verilog를 생성해 SKY130 셀 모델과 기존 시뮬레이터를 썼고, 스티븐 에버트처럼 레지스터 사이 논리를 계산하고 클록마다 레지스터를 갱신하는 평가기를 직접 만든 이도 있었다. 출제진이 제공한 파형은 입력 시퀀스와 기대 출력을 담고 있어 검증에 유용했다.

파형을 맞췄다고 끝이 아니다

그런데 제공된 파형을 재현했다고 해서 시뮬레이터가 옳다는 보장은 없었다. 알레한드로 소토 프랑코의 파이썬 모델은 tie-high 셀을 전부 틀리게 처리하고도 샘플 트레이스를 똑같이 재현했다. 상수 1을 공급해야 할 이 셀들을 아예 평가하지 않아 출력이 0에 머물렀고, 그 결과 인접 검사가 사실상 꺼져버렸다. 이 모델을 쓰면 별이 맞닿은 '겉보기 정답' 보드까지 통과시킬 수 있었다. 그는 별도의 Icarus Verilog 시뮬레이션과 추가 입력을 비교해서야 문제를 잡아냈다. 샘플만 반복 재생해서는 드러나지 않던 오류를 서로 다른 구현의 교차 검증과 '실패해야 마땅한 입력' 구성으로 잡아낸 셈이다.

접근법은 다양했다. 성공 출력에서 거꾸로 넷리스트를 따라 올라가며 유효 입력 조건을 찾는 방식이 출제진이 가장 많이 예상한 정공법이었는데, 레이아웃의 각 '섬(island)'이 원래 RTL의 모듈 하나에 대응한다는 힌트가 깔려 있었다. 산제이 라비샨카르는 구역마다 경계 상자를 그려 회로도를 나눈 뒤 모듈 간 연결로 경계를 검증하고 각 모듈을 시뮬레이션했다. 아론 시는 신호 및 시스템 수업에서 배운 대로 넷리스트에 임펄스를 넣고 전(全) 영(zero) 기준선과 플롭을 비교해, 변화하는 플롭이 행·열·구역에 대응하며 각각 2까지 누적돼야 한다는 사실을 읽어냈다. 또 다른 길은 SAT 솔버로 회로 내부를 몰라도 정답 입력을 바로 찾는 것이었는데, 로케시 아라바팔리는 SAT로 유효 입력을 얻은 뒤 그 입력으로 회로의 목적까지 되짚어 두 마리 토끼를 잡았다.

예상 못 한 풀이와 이스터에그

출제진이 예상하지 못한 풀이도 쏟아졌다. 가브리엘 타보아다는 출력 모듈을 역설계해 LFSR 체크섬이 정답 문자열과 어떻게 XOR되는지, 올바른 출력을 얻으려면 어떤 시드가 필요한지 밝혀냈다. 조슈아 스테이플턴은 회로도와 레이아웃을 나란히 보여주는 뷰어를, 호세 바르가스는 PMOS·NMOS 트랜지스터에서 셀 논리를 복원하는 시각 자료를 만들었다. 알렉산더 스몰우드는 추출한 넷리스트를 FPGA에 올려 스위치와 LED로 입출력을 표현했고, 니킬 카니예리는 넷리스트를 마인크래프트 커맨드 블록으로 컴파일했으며, 마르친 보이치크는 정답을 공개하지 않고도 보유 사실을 증명하는 Groth16 영지식 증명을 구성했다. 이스터에그도 숨어 있었다. 실패 메시지는 전부 0이면 EMPTY SKY, 전부 1이면 BIG BANG, 개수는 맞지만 별이 붙으면 TWO NOT TOUCH 힌트가 나왔다. VCD 헤더 날짜는 실제 윤초였던 2016년 12월 31일 23:59:60으로 찍혀 있었고, 사용하지 않은 레이어의 모스 부호는 PER ARENAM AD ASTRA(모래를 지나 별에게로)를 새겼다. TWO NOT TOUCH 경로에 떠 있던 미연결 배선은 원래 레이아웃 버그였지만, 누가 잡아내는지 보려고 일부러 남겨 추가 이스터에그로 삼았다.

이 퍼즐이 실무자에게 주는 메시지는 분명하다. AI는 분석·넷리스트 뷰잉·디버깅 도구를 짜는 데 이미 판도를 바꾸고 있고, 최신 모델은 단일 프롬프트로 30분 안에 최종 해답까지 내놓을 수 있었다. 하지만 그렇게 하면 문제를 풀며 얻는 재미와 배움 대부분이 사라진다. 더 눈여겨볼 대목은, 샘플 파형을 완벽히 재현한 모델에도 결함이 있었다는 점이다. 도구를 만드는 속도가 검증하는 속도를 앞지르는 시대에, 서로 다른 구현을 비교하고 실패해야 할 입력을 일부러 던져 자기 도구를 깨뜨려 보는 습관은 퍼즐 바깥에서도 값지다. 참고로 제인 스트리트는 UART·SPI·I2C 같은 프로토콜을 다루고 제조 후에도 새 프로토콜을 지원하도록 재구성 가능한 오픈소스 칩을 겨루는 프로토콜 에뮬레이터 ASIC 대회를 열었으며, 제출 마감은 2027년 1월 18일이다.

SOURCE · HACKER NEWS
원문 전체 보기 → https://blog.janestreet.com/asic-puzzle-results/
SHARE
NEXT · CHOOSE

변화를 읽었다면,
내가 만들 수익 구조를 고릅니다.

정보를 더 모으는 데서 멈추지 않고, 광고·외주·판매·중개·구독 중 내 상황에 맞는 출발점을 정해보세요.

21가지 수익 구조 살펴보기 →
처리 중...