완성 — 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)로 바뀌었다. 기분은 나빠졌지만 측정은 정직해졌다.

왜 봉합이 단락을 만들었나

원인은 봉합 코드였다. 미로가 찾은 경로는 검사를 통과하는데, 절개 끝점과 비아를 잇는 손으로 그은 직선 스티치는 검사 없이 깔리고 있었다. 그 스티치가 창을 거꾸로 가로질러 남의 넷 수직선을 밟았다.

교훈은 비아 전층검사 때와 같은 문장으로 수렴한다: 새 구리를 낳는 코드는 예외 없이 검사를 내장하라. 미로 경로보다 손으로 잇는 직선이 더 위험하다 — 검사 밖에 있으니까.

재수술은 오히려 단순했다. 새 비아를 포기하고, 그 넷에 이미 있던 관통 비아를 접점 삼아 하면(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개 있었다. 사용자 규칙은 명확하다 — 비스듬한 선은 오류다.

전 과정 DRC (0,0,0) 유지 게이트. 결과: 세그 1,445개 전부 직교 823 / 45° 622, 임의각 0.

최종 성적표

항목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부 (완결)

댓글

로그인 없이 이름만 적고 남기실 수 있어요. 남긴 댓글은 바로 게시됩니다.

댓글을 불러오는 중…