검증 (ERC)
한 줄 요약 — 회로를 만들기 전에 에러를 자동으로 찾습니다. 각 경고는 해당 학습 문서로 연결됩니다.
사용법
circuit check my-circuit.yaml # 정적 검사 (ngspice 불필요)
circuit check my-circuit.yaml --deep # + 시뮬레이션 기반 정량 검사
circuit check my-circuit.yaml --json # 기계 판독용
circuit check examples/**/*.yaml # 전체 검사종료 코드:
| 코드 | 의미 |
|---|---|
| 0 | 정상 |
| 1 | ERC 에러 |
| 2 | 사용법 오류 |
| 3 | 시뮬레이션 실패 |
| 4 | expect 불일치 |
출력 예
examples/05-diode/led-no-resistor.yaml
✖ W301 LED1에 직렬 저항이 없습니다 (12번째 줄)
LED는 전압이 조금만 올라가도 전류가 급격히 증가해
파괴됩니다. 반드시 전류를 제한해야 합니다.
수정: LED와 직렬로 저항을 넣으세요.
R = (V_supply - V_F) / I_desired
참고: docs/05-diode/04-led-current-limiting.md
⚠ I309 벌크 커패시터가 없습니다
참고: docs/08-power/04-decoupling.md
에러 1개, 경고 0개, 정보 1개💡 모든 진단이 학습 문서로 연결됩니다. 검증기가 곧 교재입니다.
규칙 분류
E1xx — 구조 (정적)
| 코드 | 심각도 | 규칙 |
|---|---|---|
| E101 | error | ref 중복 |
| E102 | error | 존재하지 않는 핀 (R1.3) |
| E103 | error | 부품 핀이 어떤 넷에도 없음 |
| E104 | error | 같은 핀이 두 넷에 |
| E105 | error | 부유 넷 (핀 1개만) |
| E106 | error | 알 수 없는 type |
| E107 | error | 값 파싱 실패 |
| E108 | error | 반도체에 model 없음 |
| E109 | error | 넷 이름/ref 정규식 위반 |
| W110 | warning | ref 접두어와 타입 불일치 |
| W111 | warning | expect가 없는 노드 참조 |
| I112 | info | 사용되지 않은 부품 |
E2xx — 전기 (정적)
| 코드 | 심각도 | 규칙 | 참고 |
|---|---|---|---|
| E201 | error | GND 넷 없음 | 2-02 |
| E202 | error | GND에서 도달 불가한 회로 섬 | |
| E203 | error | 전원 단락 (전압원 양단이 같은 넷) | |
| E204 | error | 전압원만의 루프 | |
| E205 | error | 전류원이 개방(open) 노드에 | |
| E206 | error | 출력 충돌 (한 넷에 출력 2개 이상) | |
| E207 | error | 부품 양단이 같은 넷 (소자 단락(short)) | |
| W208 | warning | 커패시터(capacitor)만으로 GND 연결 (DC 경로 없음) | |
| W209 | warning | 전해 커패시터 역극성 | 0-04 |
| W210 | warning | VCC 넷에 전원이 없음 |
W3xx — 부품 (정적)
| 코드 | 규칙 | 참고 |
|---|---|---|
| W301 | LED에 직렬 저항 없음 | 5-04 |
| W302 | BJT 베이스 저항 없음 | 6-02 |
| W303 | 레귤레이터(regulator) 디커플링 없음 | 8-02 |
| W304 | MOSFET 게이트 플로팅 | 6-05 |
| W305 | opamp 피드백 경로 없음 | 7-01 |
| W306 | opamp 전원핀(v+/v-) 미결선 | 7-01 |
| W307 | 스위치에 풀업(pull-up)풀업 pull-up아무도 신호선을 잡고 있지 않을 때 전압을 높은 쪽으로 끌어 두어, 떠 있는 입력을 없애는 저항입니다.자세히 보기 →·풀다운 없음 | 9-05 |
| W308 | 유도성 부하에 플라이백 없음 | 5-05 |
| I309 | 벌크 커패시터(bulk capacitor)벌크 커패시터 bulk capacitor보드 입구에 두는 큰 커패시터로, 디커플링이 못 따라가는 느린 전류 변화를 받아 냅니다.자세히 보기 → 없음 | 8-04 |
★ W5xx — 측정 회로 특화 (정적)
이 저장소의 목적에 맞춘 규칙들입니다.
| 코드 | 규칙 | 참고 |
|---|---|---|
| W501 | 고임피던스 노드에 버퍼 없음 (> 100 kΩ가 긴 배선(trace)/부하로) | 13-03 |
| W502 | ADC 입력에 안티에일리어싱 필터(anti-aliasing filter)에일리어싱 aliasing샘플링 주파수의 절반보다 높은 성분이 낮은 주파수인 척 되접혀 들어오는 현상으로, 한 번 섞이면 되돌릴 수 없습니다.자세히 보기 → 없음 | 10-04 |
| W503 | OP앰프 출력에 직접 큰 용량성 부하 | 7-07 |
| W504 | 소스 임피던스(impedance)임피던스 impedance교류에서의 저항으로, 크기뿐 아니라 전압과 전류의 시간 차이(위상)까지 담은 복소수입니다.자세히 보기 → × 부하 용량이 목표 대역폭(bandwidth) 초과 | 11-05 |
| W505 | IC 전원핀에 디커플링 없음 | 8-04 |
| W506 | 고임피던스 노드에 누설 큰 보호 소자 | 5-05 |
| W507 | 차동 입력의 임피던스 불균형 | 12-07 |
E4xx — 정량 (--deep, 시뮬레이션 필요)
| 코드 | 규칙 |
|---|---|
| E401 | 저항 소비전력 > 정격 |
| E402 | LED 전류 > 최대 |
| W403 | LED 전류 < 1 mA (너무 어두움) |
| E404 | 커패시터 전압 > 정격 |
| W405 | opamp 출력 클리핑 |
| W406 | BJT가 의도치 않게 포화(saturation)/차단 |
| E407 | 다이오드(diode) 역전압 초과 |
| W408 | 레귤레이터 드롭아웃(dropout) 미달 |
| E409 | ngspice 비수렴 (한국어 원인 추정) |
★ 왜 정적 검사와 --deep을 나누는가
정적 (check) | 정량 (--deep) | |
|---|---|---|
| ngspice 필요 | ❌ | ✅ |
| 속도 | 즉시 | 시뮬레이션 시간 |
| CI에서 | 항상 | ngspice 있을 때 |
| 검출 | 구조·연결 오류 | 정격 초과, 동작점(operating point)동작점 operating point신호가 없을 때 트랜지스터가 앉아 있는 전압·전류 자리로, 여기가 어긋나면 증폭이 잘려 나갑니다.자세히 보기 → |
ngspice가 없는 환경에서도 기본 검증은 되어야 하므로 분리했습니다.
규칙 조회
circuit rules # 전체 목록
circuit rules --code W301 # 특정 규칙 상세
circuit rules --json # 스킬·도구용출력 예:
W301 — LED에 직렬 저항이 없습니다
심각도: warning
왜 문제인가:
LED는 다이오드이므로 전압-전류 관계가 지수함수입니다.
전압이 0.1 V만 올라도 전류가 4배가 되어, 전원 전압의
오차나 온도 변화만으로 파괴될 수 있습니다.
어떻게 고치나:
LED와 직렬로 전류제한 저항을 넣으세요.
R = (V_supply − V_F) / I_desired
예: 5 V, 적색 LED(2.0 V), 10 mA → R = 300 Ω
관련 문서:
docs/05-diode/04-led-current-limiting.md★ 검증기가 학습 도구인 이유
실수를 통해 배우되, 부품을 태우지 않고 배웁니다.
⚖️ 트레이드오프
| 선택 | ✅ | ⚠️ |
|---|---|---|
| 엄격한 규칙 | 실수 방지 | 오탐(false positive) 이 많으면 무시하게 됨 |
| 느슨한 규칙 | 방해 안 됨 | 놓치는 실수 |
| 경고에 문서 링크 | 학습 효과 | 문서 유지보수 |
| 정적 + 정량 분리 | 환경 무관 기본 검증 | 두 번 실행 |
💡 오탐을 줄이는 것이 중요합니다. 경고가 너무 많으면 사용자가 전부 무시하게 되어, 진짜 문제도 놓칩니다. 심각도를 신중하게 정하고, 의도적인 설계는 예외 처리할 수 있게 합니다.
예외 처리
의도적인 설계라면 규칙을 끌 수 있습니다.
components:
- {ref: D1, type: led, model: LED_RED,
ignore: [W301]} # 정전류 드라이버로 구동하므로 저항 불필요⚠️ 이유를 주석으로 남기세요.
🔌 CI에서 사용
# .github/workflows/ci.yml
- name: 회로 검증
run: |
circuit check examples/**/*.yaml
circuit test examples/**/*.yaml # ngspice 필요모든 예제가 항상 검증됩니다. 문서와 코드가 같이 썩지 않습니다.
연습문제
문제 1. 다음 회로에서 검증기가 잡을 문제는?
exercises/17-02-led-fixed.yamlcomponents:
- {ref: V1, type: vdc, value: 5}
- {ref: D1, type: led, model: LED_RED}
nets:
A: [V1.p, D1.a]
B: [V1.n, D1.k]풀이
| 코드 | 문제 |
|---|---|
| E201 | GND 넷이 없음 → SPICE 시뮬레이션 불가 |
| W301 | LED에 직렬 저항 없음 → 파괴 위험 |
수정:
components:
- {ref: V1, type: vdc, value: 5}
- {ref: R1, type: r, value: 330}
- {ref: D1, type: led, model: LED_RED}
nets:
VIN: [V1.p, R1.1]
A: [R1.2, D1.a]
GND: [V1.n, D1.k]
```text
</details>
**문제 2.** W501(고임피던스 노드에 버퍼 없음)은 어떻게 검출합니까?
```schematic
exercises/17-02-w501-buffer.yaml풀이
검출 논리:
- 각 노드의 테브난 등가(Thévenin equivalent) 저항을 계산 (2-05)
- 100 kΩ 이상인 노드를 찾음
- 그 노드가 다음 중 하나에 연결되었는지 확인:
- 커넥터 (외부로 나감)
- 큰 용량성 부하
- 여러 부품 (배선이 길어질 가능성)
- 그리고 버퍼(팔로워 구성 OP앰프, 소스 팔로워(source follower)소스 팔로워 source follower전압 이득이 1인데도 쓰는 이유는 높은 임피던스를 낮은 임피던스로 바꿔 주기 때문입니다.자세히 보기 →)가 없으면 경고
메시지 예:
W501 노드 'ELECTRODE'의 임피던스가 1.0 MΩ입니다
이 노드가 커넥터 J1로 나갑니다. 케이블 용량(약 100 pF/m)과
만나면 대역폭이 1.6 kHz로 제한됩니다.
수정: 이 노드 바로 옆에 버퍼(볼티지 팔로워)를 넣으세요.
참고: docs/13-signal-chain/03-input-impedance.md이 규칙이 이 저장소의 목적(신호 측정)에 특화된 부분입니다. 일반 EDA 도구는 이런 검사를 하지 않습니다.
이전 ← 01 circuit.yaml 포맷 | 다음 → 03 시뮬레이션으로 측정 확인