ECO 규칙
ECO 의 결과가 예측 가능하려면 판정의 근거가 규칙으로 고정되어야 한다. 같은 회로도(schematic)와 같은 기판을 넣으면 언제나 같은 마크가 나와야 하고, 마크가 왜 그렇게 나왔는지 규칙으로 설명되어야 한다.
이 문서는 그 규칙을 축별로 정리한다. 절차의 전체 모습은 ECO to PCB 란 무엇인가가 소유한다.
1. 방향
섹션 제목: “1. 방향”방향은 인자이지 기본 동작이 아니다. 정방향과 역방향은 옮기는 것도 근거도 다르므로 하나의 “동기화” 로 뭉뚱그리지 않는다. 구현되지 않은 방향을 요청하면 오류로 답한다 — 조용히 성공한 것처럼 답하지 않는다.
2. 부품의 단위
섹션 제목: “2. 부품의 단위”참조 지정자(reference designator) 하나가 부품 하나다.
멀티게이트 심볼(symbol)이 네 개 흩어져 있어도 U1 은 부품 하나다. 그러므로 핀 집합은 배치된 게이트의 핀이
아니라 부품 정의 전체의 핀을 쓴다. 게이트 하나를 아직 그리지 않았더라도 그 핀에 대응하는 패드(pad)는
기판에 있어야 하기 때문이다.
수집은 프로젝트에 등록된 회로도 전체를 순회한다 — 열려 있는 문서는 편집 중인 상태로, 닫혀 있는 문서는 상주 사본으로 읽고, 계층 시트는 따라 내려간다. 번호 매기기(annotate)와 같은 순회를 쓴다. 두 곳에 순회를 두면 “번호는 매겨졌는데 ECO 에는 안 보이는 부품” 이 생긴다.
3. 대응 규칙
섹션 제목: “3. 대응 규칙”| 순서 | 기준 | 결과 |
|---|---|---|
| 1 | 기판 부품이 든 심볼 식별자 | 대응 확정 |
| 2 | 식별자가 없으면 참조 지정자 | 폴백 |
| — | 어느 쪽으로도 못 찾으면 | 회로도 쪽은 add · 기판 쪽은 delete |
식별자로 대응됐는데 참조 지정자가 다르면 이름 변경이다. 실행은 부품을 지우고 다시 만드는 대신 이름만 고친다.
4. footprint 이름의 해석
섹션 제목: “4. footprint 이름의 해석”| 형태 | 해석 |
|---|---|
라이브러리:이름 | 그 라이브러리에서 그 이름을 찾는다 |
이름 | 등록된 라이브러리를 등록 순서대로 조회해 첫 일치를 쓴다 |
| 빈 문자열 | 미지정 — 오류다 |
두 번째 형태에서 여러 라이브러리에 같은 이름이 있으면 첫 일치를 쓰되 그 사실을 그 행에 표시한다. 조용히 고르면 라이브러리 등록 순서가 바뀌는 날 다른 footprint 가 실린다.
5. 핀과 패드의 대조
섹션 제목: “5. 핀과 패드의 대조”부품의 핀 번호 집합과 footprint 의 패드 번호 집합을 비교한다.
| 상태 | 판정 |
|---|---|
| 핀에 대응하는 패드가 없다 | 오류 — 모자란 번호를 함께 답한다 |
| 패드가 남는다 | 오류가 아니다 — 남는 수를 결과에 담는다 |
| 번호가 없는 패드 | 세지 않는다 |
패드가 남는 것을 실패로 보지 않는 이유는 고정 홀·기구 패드 때문이다. 커넥터 하우징을 잡는 패드는 심볼에 핀이 없는 것이 정상이다. 반대로 핀에 패드가 없으면 그 부품은 물리적으로 배치할 수 없으므로 오류다.
6. 마크
섹션 제목: “6. 마크”| 마크 | 조건 |
|---|---|
error | footprint 미지정 · 라이브러리에서 찾지 못함 · 핀에 대응 패드 없음 |
add | 검사를 통과했고 대상 기판에 대응 부품이 없다 |
replace | 대응 부품이 있고 footprint 이름이 다르다 |
unchanged | 대응 부품이 있고 footprint 이름이 같다 |
delete | 대상 기판에만 있고 회로도에 없다 |
error 가 다른 마크에 앞선다. 실행할 수 없는 항목에 대해 무엇을 할지 정하는 것은 뜻이 없다.
replace 의 판정 기준은 footprint 이름 하나다. value 나 필드가 달라졌다고 부품을 다시 만들지
않는다 — 그것은 값을 고치면 되는 일이고, 다시 만들면 배치와 배선(routing)을 잃는다.
7. 넷
섹션 제목: “7. 넷”7.1 넷 스냅샷의 출처
섹션 제목: “7.1 넷 스냅샷의 출처”넷은 프로젝트 연결 그래프에서 온다. 파일을 다시 파싱하지 않는다. 그래프가 아직 한 번도 계산되지 않았다면 넷 목록은 비어 있고, “넷을 알 수 없다” 는 사실을 그대로 답한다 — 지어내지 않는다.
7.2 넷 차이의 판정
섹션 제목: “7.2 넷 차이의 판정”| 상태 | 동작 |
|---|---|
| 회로도에만 있다 | 추가 |
| 기판에만 있다 | 제거 |
| 양쪽에 있다 | 참조.핀 집합을 비교해 다르면 연결 변경 |
| 자동 생성 이름이고 연결이 하나 이하 | 무시한다 |
마지막 줄이 실무에서 크다. 이름을 붙이지 않은 넷은 도구가 자동으로 이름을 만드는데, 그 이름은 부품 번호와 핀 번호에서 나오므로 번호가 바뀌면 이름도 바뀐다. 연결이 하나뿐인 자동 이름까지 차이로 세면 목록이 의미 없는 항목으로 덮인다.
7.3 넷 배정의 범위
섹션 제목: “7.3 넷 배정의 범위”오류와 삭제를 뺀 모든 부품의 패드를 회로도 값으로 맞춘다.
새로 더한 부품만이 아니다. 이미 기판에 있던 부품도 패드마다 넷 이름을 대조해 다른 것만 고친다. 같으면 건드리지 않으므로 비용은 실제로 바뀐 부품에만 든다.
| 상황 | 처리 |
|---|---|
| 회로도에서 그 핀의 연결이 없어졌다 | 패드의 넷을 해제해 미결선으로 둔다 |
| 넷 객체가 기판에 없다 | 만든다 |
| 넷이 비게 되었다 | 지우지 않는다 — 트랙(track)이 아직 그 넷을 가리킬 수 있다. 빈 넷의 수를 답한다 |
8. 실행 순서
섹션 제목: “8. 실행 순서”| 단계 | 내용 | 순서의 근거 |
|---|---|---|
| ① | 부품 삭제 | 참조 지정자 충돌을 막는다 — 옛 R1 을 지우기 전에 새 R1 을 넣을 수 없다 |
| ② | 이름 변경 | 추가보다 앞서야 같은 이름이 부딪히지 않는다 |
| ③ | 추가와 교체 | 이 단계에서는 넷을 배정하지 않는다 |
| ④ | 넷 배정 | 부품이 모두 제자리에 있어야 핀과 패드를 짝지을 수 있다 |
| ⑤ | 재구축 | 연결성과 ratsnest 를 다시 만든다 |
footprint 교체는 자세를 보존한 재생성이다. 새 footprint 정의로 부품을 만들어 위치·회전·실장면(mounting side)·참조 지정자·value·링크 키를 옛 부품에서 옮기고 옛 부품을 지운다. 패드의 넷은 ④ 에서 다시 붙으며, 번호가 같은 패드만 이어진다.
9. 되읽기 검증
섹션 제목: “9. 되읽기 검증”단계마다 적용한 값을 다시 읽어 대조한다. 이름을 고쳤으면 이름을 다시 읽고, 넷을 배정했으면 패드의 넷 이름을 다시 읽는다. 어긋난 항목은 실패 목록에 사유와 함께 남고, 나머지 항목은 계속 진행한다.
실행이 끝나면 전체를 다시 대조해 남은 add · replace · delete 의 수를 답한다. 정상이면 전부
0 이다.
10. 되돌리기와 이력
섹션 제목: “10. 되돌리기와 이력”| 축 | 규칙 |
|---|---|
| 되돌리기 | 실행 한 번이 되돌리기 한 칸이다. 사용자에게 그것은 한 동작이기 때문이다 |
| 닫힌 대상 | 파일에 직접 쓰는 경로에는 되돌리기가 없다. 그 사실을 실행 전에 경고한다 |
| 이력 | 언제 무엇을 반영했는지 기록으로 남긴다 |
11. 사전 검사
섹션 제목: “11. 사전 검사”반영을 시작하기 전에 회로도 자체를 본다. 여기서 걸리면 대조로 넘어가지 않는다.
| 항목 | 심각도(severity) |
|---|---|
| 배정되지 않은 참조 지정자 | 오류 |
| 중복된 참조 지정자 | 오류 |
| 다른 시트에서 같은 지역 넷 이름 | 오류 |
| 빈 value | 경고 |
| 핀이 하나뿐인 넷 | 경고 |
| 실장 제외 부품 알림 | 정보 |
12. 사후 검사
섹션 제목: “12. 사후 검사”항목마다 실행 가능성을 본다.
| 항목 | 심각도 |
|---|---|
| footprint 미지정 · 삭제 대상이 기판에 없음 | 오류 |
| footprint 를 라이브러리에서 찾지 못함 | 오류 |
| 핀에 대응하는 패드 없음 | 오류 |
| 추가·이름 변경 대상 참조 지정자가 이미 있음 | 오류 |
| 패드가 핀보다 많음 | 설정에 따라 경고 또는 정보 |
| 전원 넷 변경 | 경고 |
| 넷 삭제 · 영향 핀 목록 | 정보 |
항목의 상태는 그 항목이 가진 가장 높은 심각도로 정해진다. 오류가 하나라도 있으면 그 항목은 실행에서 제외된다.
13. 비용 규칙
섹션 제목: “13. 비용 규칙”| 대상 | 비용 |
|---|---|
| 부품 수집 | 부품 수에 비례 · 명령당 1회 |
| 라이브러리 목록 | 파일당 1회 — 정의 본체를 읽지 않는다 |
| footprint 정의 파싱 | 고유 이름당 1회 — 같은 부품이 천 개여도 파싱은 한 번 |
| 핀·패드 대조 | 집합 조회 |
| 대상 기판 읽기 | 1회 |
14. 필드 전달 규칙
섹션 제목: “14. 필드 전달 규칙”회로도의 사용자 필드는 기판으로 함께 옮겨진다. 제조·조립 문서가 기판 쪽 자료에서 나오기 때문이다.
| 규칙 | 내용 |
|---|---|
| 필수 필드와 사용자 필드를 식별자로 가른다 | 사용자가 Value 를 다른 말로 바꿔도 분류가 흔들리지 않는다 |
| 게이트 어디에 적혀 있어도 그 부품의 것이다 | 먼저 읽은 값을 지킨다. 그러지 않으면 게이트 순서가 값을 정한다 |
| 값이 바뀐 것만 반영한다 | 되돌리기가 옛 값을 바르게 복원하려면 측정이 수정보다 앞서야 한다 |
| 기판에만 있는 필드는 지우지 않는다 | 기판에서 적은 제조 메모가 ECO 마다 조용히 사라지면 안 된다 |
| 기판에만 있는 필드를 보고한다 | 지우지 않는 것만으로는 사용자가 그 존재를 알 수 없다 |
| 빈 값으로 필드를 만들지 않는다 | “값이 없다” 와 “필드가 없다” 는 다른 사실이다 |
| 옮긴 값의 수를 답한다 | 0 이면 아무것도 옮기지 않았다는 뜻이고, 그 사실이 보여야 한다 |
15. 확정 전 점검 항목
섹션 제목: “15. 확정 전 점검 항목”| 축 | 확인 |
|---|---|
| 사전 | 참조 지정자가 전부 배정되었고 중복이 없는가 |
| 이름 | footprint 이름이 라이브러리 지정 형태로 적혀 있는가 |
| 이름 | 여러 라이브러리에 같은 이름이 있다는 표시가 없는가 |
| 핀 | 핀에 대응하는 패드가 없는 부품이 없는가 |
| 마크 | error 를 남긴 채 실행하려 하지 않는가 |
| 넷 | 전원 넷 변경 경고를 확인했는가 |
| 실행 | 되돌릴 수 없는 경로(닫힌 대상)를 고른 것이 의도인가 |
| 검증 | 실행 뒤 남은 마크와 실패 목록을 확인했는가 |
| 필드 | 기판에만 있는 필드 보고를 확인했는가 |