PCB 아트웍을 자동화하기로 했다 — 회로도부터 거버까지 손 안 대고
회로도를 그리고, 부품을 배치하고, 선을 깔고, 거버를 뽑는다. 20년 넘게 PADS 로 해오던 일이다. 손에 익어서 빠르기는 한데, 같은 보드의 채널 수만 늘린 파생 모델을 만들 때마다 처음부터 다시 그린다. 8채널 보드가 잘 돌아가면 16채널을 원하고, 그러면 또 며칠이 간다.
그래서 목표를 이렇게 잡았다.
입력은 “이런 보드가 필요하다”는 설계 의도, 출력은 거버. 그 사이에 사람 손이 안 들어가게.

이 사진이 목표 지점이다. 회로도도 배치도 배선도 사람이 안 그렸다. 물론 여기까지 오는 길이 순탄하지는 않았고, 이 시리즈는 그 실패까지 다 적는 기록이다.
왜 KiCad 인가
PADS 를 자동화하려면 결국 PADS 를 조종해야 한다. 그런데 PADS 의 ASCII 포맷은
읽기는 좋아도 쓰기는 위험하다. 반대로 KiCad 는 회로도(.kicad_sch)와
보드(.kicad_pcb) 가 전부 S-expression 텍스트다. 파일을 직접 만들어 넣으면
그게 곧 설계다. 게다가:
kicad-cli로 ERC / DRC / 거버 / 렌더를 명령 한 줄로 돌릴 수 있다- 파이썬 바인딩(
pcbnew)으로 보드를 프로그램으로 만질 수 있다 - 오토라우터(Freerouting)와 Specctra DSN/SES 로 주고받는다
“GUI 를 자동화”하는 게 아니라 “파일을 만든다” 로 갈 수 있다는 게 결정적이었다.
파이프라인
이렇게 짰다. 각 화살표마다 게이트가 있고, 통과 못 하면 거기서 멈춘다.
설계 의도(intent.json)
↓ 회로도 생성
.kicad_sch → [ERC 0건] → [넷리스트가 의도와 일치하는가]
↓ 보드 생성 (부품 배치)
.kicad_pcb → [보드 넷이 의도와 일치하는가]
↓ 배선 (Freerouting)
↓ 후처리 (45° 정리 · GND 포어 · 비아)
→ [DRC 0건] → [설계 규칙 게이트]
↓
거버 · 드릴 · 배치파일 · 3D 렌더
중간의 대괄호가 게이트다. 특히 “넷리스트가 의도와 일치하는가” 는 두 번 나온다. 회로도를 만든 뒤 한 번, 보드를 만든 뒤 또 한 번. 부품 하나가 빠지거나 핀 번호가 어긋나면 여기서 걸린다.
첫 관통 — 아주 작은 보드로
처음부터 큰 보드로 시작하지 않았다. LED 하나 깜빡이는 수준의 보드를 만들어서 의도 → 회로도 → 보드 → 배선 → 거버를 끝까지 한 번 통과시켰다. 이게 되면 파이프라인이 성립하는 것이고, 안 되면 어디가 끊겼는지 명확해진다.
여기서 얻은 것들이 이후 내내 쓰였다:
- KiCad 파일 포맷의 실제 생김새 (문서보다 실제 파일을 뜯어보는 게 정확하다)
kicad-cli각 명령의 실제 옵션과 종료 코드- Freerouting CLI 의 실제 인자 (
-de -di -dr -do -mp… 문서와 다른 게 있다)
특히 세 번째. Freerouting 2.3.0 CLI 에는 배선 각도를 제한하는 옵션이 없다.
-dr 로 룰 파일을 줘도 무시된다. 나중에 45° 배선 때문에 한참 고생하는데,
그 씨앗이 여기 있었다.
처음부터 정한 규칙 하나
자동화를 시작하면서 스스로에게 건 규칙이 있다.
“우리 값끼리 맞는다”는 검증이 아니다.
회로도에서 뽑은 넷리스트와 보드에서 뽑은 넷리스트가 100% 일치해도, 입력 해석이 통째로 틀렸으면 두 값이 사이좋게 같이 틀린다. 게이트는 전부 초록불인데 물건은 못 쓰는 상태. 이게 실제로 일어났고, 그게 2부의 이야기다.
그래서 게이트와 별개로 파일 밖 기준과 최소 한 번은 대조하기로 했다. 제조용 CAM 데이터, 부품 데이터시트, 표준 피치 같은 것들.
다음 편에서는 실제로 쓰고 있는 8채널 릴레이 보드를 KiCad 로 1:1 재설계하면서, 부품 60개와 배선 152쌍이 전부 일치한 상태로 1.5배 틀린 보드를 만든 이야기를 쓴다. 검증이 다 통과했는데 물건이 틀린 경우가 어떻게 생기는지.
▶️ 2부: 기존 보드를 1:1로 다시 그리다 — 그리고 모든 검증을 통과한 1.5배 오류
댓글
로그인 없이 이름만 적고 남기실 수 있어요. 남긴 댓글은 바로 게시됩니다.
댓글을 불러오는 중…