7부는 “포위전 진행 중”으로 끝났습니다. 이 편은 그 끝입니다 — DRC error 0 / 미연결 0 / 단락 0, 다섯 번 재서 다섯 번 같은 값.

게이트가 통과시킨 단락 — 교차 집계 누락

DRC 게이트가 창 절개 결과를 버렸습니다. 드디어 미연결 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.

4층 완성본 최종 성적표

항목2층 최종4층 완성
DRC error120
미연결30
단락 (교차 포함 집계)00
임의 각도 세그170
직각 꺾임98
넷당 꺾임12.410.6
우회율 최대3.07배2.37배
총 배선길이4,633mm4,311mm
선폭 규칙 위반00
넷리스트일치일치
측정 재현성5회 전부 동일

내층 두 장이 배선의 78%를 받아냈습니다 (In1 1,776mm + In2 1,593mm / 총 4,311mm). 2층에서 앞뒷면에 우겨넣던 것이 왜 안 됐는지를 숫자가 말해 줍니다.

완성 보드 상면

완성 보드 하면

완성 보드 투시

시리즈를 닫으며 — 도구 결함 일곱 가지

도구 결함 일곱 가지가 마감전 내내 거짓말을 했습니다. 전부 실측으로 잡았습니다.

#결함증상
1모따기 크기 한 가지만 시도풀릴 직각이 안 풀림
215개 일괄 판정하나 나쁘면 14개 동반 폐기
3첫 실패에서 전체 중단뒤의 쉬운 건 시도조차 안 함
4탐색 범위 고정 ±12mm돌아가는 길이 밖에 있으면 영영 못 찾음
5비아 후보 한 점0.3mm 옆의 자리를 못 봄
6패드를 원으로 과대근사합법 통로가 도구 눈에만 없음
7검색 원점을 items[0]로 고정움직일 배선이 검색 반경 밖 — 후보 0개

그리고 측정의 세 함정(덮어쓰기·비결정·집계 누락), 봉합의 두 규칙(새 구리는 전부 검사 내장·제안과 판정 분리), 마지막의 한 문장(배선 불가능은 좌표로 증명한 뒤 배치를 움직인다)까지 — 이 시리즈가 남긴 것은 완성된 보드 한 장이 아니라, 다음 보드에서 같은 함정을 안 밟게 해줄 이 목록입니다.

다음 보드는 이 규칙들이 처음부터 들어간 채로 시작합니다. 그게 자동화입니다.

측정이 정직해야 게이트가 눈을 뜨고, 배선 불가능은 좌표로 증명한 뒤에 배치를 움직입니다.


▶️ 9부 — “검증한 줄 알았던 것들”: “완성” 뒤 리뷰에서 드러난 자동화의 진짜 구멍 (후속편)

🔧 시리즈 전체: 1부 · 2부 · 3부 · 4부 · 5부 · 6부 · 7부 · 8부 (완결)

문의