완성 — DRC 0, 임의각 0, 그리고 마지막 0.1mm
7부는 “포위전 진행 중”으로 끝났다. 이 편은 그 끝이다 — DRC error 0 / 미연결 0 / 단락 0, 다섯 번 재서 다섯 번 같은 값.
게이트가 통과시킨 단락
창 절개가 드디어 미연결 0을 찍었는데, 클리어런스가 5건 늘었다고 내 게이트가
그 결과를 버렸다. 우선순위(단락 > 미연결 > 클리어런스)를 게이트에 넣어 채택시키고
보니 — 이상한 게 눈에 들어왔다. DRC 항목 중에 tracks_crossing이 있었다.
구리 두 가닥이 물리적으로 겹쳐 있다는 뜻이다. 그건 단락이다. 그런데 내
단락 카운터는 shorting_items라는 항목만 세고 있었고, 교차는 ‘일반 error’로
분류돼 게이트를 통과했다. +5V와 I2C 신호가 내층에서 십자로 밟고 지나가는
보드가 “단락 0” 판정을 받고 있었던 것이다.
측정 함정 세 번째. 1편: DRC가 보드를 덮어쓴다. 2편: 존이 겹치면 값이 흔들린다. 3편: 집계가 카테고리를 놓치면 게이트가 눈을 감는다.
한 줄 고치자 보드의 진실이 (9, 0, 1)로 바뀌었다. 기분은 나빠졌지만 측정은 정직해졌다.
왜 봉합이 단락을 만들었나
원인은 봉합 코드였다. 미로가 찾은 경로는 검사를 통과하는데, 절개 끝점과 비아를 잇는 손으로 그은 직선 스티치는 검사 없이 깔리고 있었다. 그 스티치가 창을 거꾸로 가로질러 남의 넷 수직선을 밟았다.
- 나선 탐색으로 찾은 비아 두 개가 서로의 존재를 몰라 0.34mm 간격에 착지 (드릴 홀 최소 간격 위반)
- 스티치는
seg_clear없이mkseg직행
교훈은 비아 전층검사 때와 같은 문장으로 수렴한다: 새 구리를 낳는 코드는 예외 없이 검사를 내장하라. 미로 경로보다 손으로 잇는 직선이 더 위험하다 — 검사 밖에 있으니까.
재수술은 오히려 단순했다. 새 비아를 포기하고, 그 넷에 이미 있던 관통 비아를 접점 삼아 하면(B.Cu)으로 11.8mm를 돌렸다. 중복 비아는 0.17mm만 미끄러뜨렸다. (3, 0, 0) — 단락이 사라졌다.
패드는 원이 아니다
남은 클리어런스 2건은 옵토커플러 패드 옆을 지나는 커먼 배선이었다. 부족분 0.06mm. 미세이동 64가지, 미로 재배선, 체인 재배선 — 전부 “후보 무효”로 끝났다.
이럴 때의 규칙을 이미 갖고 있었다: “모든 후보 무효”면 후보 수부터 의심하라. 이번엔 후보 수가 아니라 두 가지가 더 있었다.
하나. 장애물 모델이 패드를 원으로 부풀리고 있었다. 탐색 도구는 패드를
max(가로,세로)/2 반지름의 원으로 근사했다. 1.2×0.8 패드가 반지름 0.6 원이
되면 짧은 변 쪽으로 0.2mm를 과하게 막는다. 부족분이 0.06mm인 싸움에서
그 과차단은 “합법 통로가 도구 눈에만 없음”이 된다. 4편에서 렌더의 패드가
너무 크다는 지적을 받고 그리기 코드를 고쳤는데 — 막기 코드가 같은 근사를
쓰고 있었다. 그리는 코드와 막는 코드가 같은 버그를 공유하면, 같은 곳에서
같이 틀린다.
둘. 검색 원점이 틀렸다. DRC 위반의 좌표로 첫 번째 아이템(패드) 위치를 썼는데, 정작 움직여야 할 배선은 거기서 0.886mm 떨어져 있었다. 검색 반경이 0.8mm — 후보가 말 그대로 0개였다. 위반에 낀 넷마다 자기 아이템의 좌표를 원점으로 써야 한다.
그래도 안 되는 것은, 정말로 안 되는 것이다
모델을 정확하게 고치고 격자를 절반으로 줄이고 원점을 바로잡아도, 두 건은 안 풀렸다. 그제서야 좌표로 계산했다.
전원 버스 모서리에서 옵토 패드 모서리까지 0.959mm. 배선이 지나가려면 클리어런스 0.2 × 2 + 선폭 0.3 + 버스 반폭 0.25 = 0.95mm.
이론 여유 0.009mm. 격자도, 패드 모서리 라운드도, 45° 제약도 넣기 전의 숫자다. 도구가 5세대에 걸쳐 실패한 게 아니라, 채널이 원래 없었다. 도구 결함을 다 걷어내고 나서야 그게 도구 문제가 아니라는 걸 증명할 수 있었다는 게 이 마감전의 제일 얄궂은 부분이다.
없는 채널은 만들면 된다. 골목의 한쪽 벽인 옵토커플러 두 개를 0.1mm 아래로 내렸다. 풋프린트 이동 + 패드에 물린 배선 끝점 이설, 트랜잭션 한 번.
(0, 0, 0).
배선 도구를 고치는 것과 배치를 움직이는 것 사이에는 순서가 있다. 도구를 다 고치기 전에 배치를 움직이면 진짜 원인을 모른 채 넘어가고, 배치를 끝까지 안 움직이면 없는 채널에 다섯 세대의 도구를 갈아 넣는다. “배선으로 불가능”을 좌표로 증명한 다음에 배치를 움직인다.
각도 대청소
마감 수술들이 남긴 임의각이 21개 있었다. 사용자 규칙은 명확하다 — 비스듬한 선은 오류다.
- 스냅 30개: 한쪽 끝을 고정하고 반대 끝을 정확한 0/45/90 선 위로 사영. 이웃 끝점을 동반 이동시키되, 그 이웃이 새 임의각이 되면 후보를 버린다 (스냅이 스냅을 낳는 연쇄 방지)
- 도그레그 분해 4개: 양끝이 다른 대각선에 물려 끝점을 못 움직이는 세그는 끝점을 고정한 채 내부를 꺾는다 — 정확한 45° + 직교 두 토막으로
- 손수술 1개: 45.5°짜리 마지막 하나는 접점을 수직 이웃의 방향으로만 0.01mm 밀어 45.000°로
전 과정 DRC (0,0,0) 유지 게이트. 결과: 세그 1,445개 전부 직교 823 / 45° 622, 임의각 0.
최종 성적표
| 항목 | 2층 최종 | 4층 완성 |
|---|---|---|
| DRC error | 12 | 0 |
| 미연결 | 3 | 0 |
| 단락 (교차 포함 집계) | 0 | 0 |
| 임의 각도 세그 | 17 | 0 |
| 직각 꺾임 | 9 | 8 |
| 넷당 꺾임 | 12.4 | 10.6 |
| 우회율 최대 | 3.07배 | 2.37배 |
| 총 배선길이 | 4,633mm | 4,311mm |
| 선폭 규칙 위반 | 0 | 0 |
| 넷리스트 | 일치 | 일치 |
| 측정 재현성 | — | 5회 전부 동일 |
내층 두 장이 배선의 78%를 받아냈다 (In1 1,776mm + In2 1,593mm / 총 4,311mm). 2층에서 앞뒷면에 우겨넣던 것이 왜 안 됐는지를 숫자가 말해 준다.



시리즈를 닫으며 — 도구 결함 일곱 가지
마감전 내내 도구는 일곱 가지 방식으로 거짓말을 했다. 전부 실측으로 잡았다.
| # | 결함 | 증상 |
|---|---|---|
| 1 | 모따기 크기 한 가지만 시도 | 풀릴 직각이 안 풀림 |
| 2 | 15개 일괄 판정 | 하나 나쁘면 14개 동반 폐기 |
| 3 | 첫 실패에서 전체 중단 | 뒤의 쉬운 건 시도조차 안 함 |
| 4 | 탐색 범위 고정 ±12mm | 돌아가는 길이 밖에 있으면 영영 못 찾음 |
| 5 | 비아 후보 한 점 | 0.3mm 옆의 자리를 못 봄 |
| 6 | 패드를 원으로 과대근사 | 합법 통로가 도구 눈에만 없음 |
| 7 | 검색 원점을 items[0]로 고정 | 움직일 배선이 검색 반경 밖 — 후보 0개 |
그리고 측정의 세 함정(덮어쓰기·비결정·집계 누락), 봉합의 두 규칙(새 구리는 전부 검사 내장·제안과 판정 분리), 마지막의 한 문장(배선 불가능은 좌표로 증명한 뒤 배치를 움직인다)까지 — 이 시리즈가 남긴 것은 완성된 보드 한 장이 아니라, 다음 보드에서 같은 함정을 안 밟게 해줄 이 목록이다.
다음 보드는 이 규칙들이 처음부터 들어간 채로 시작한다. 그게 자동화다.
▶️ 9부 — “검증한 줄 알았던 것들”: “완성” 뒤 리뷰에서 드러난 자동화의 진짜 구멍 (후속편)
댓글
로그인 없이 이름만 적고 남기실 수 있어요. 남긴 댓글은 바로 게시됩니다.
댓글을 불러오는 중…