SPICE 흔한 함정과 회피법
"Garbage in, garbage out." —Anonymous
SPICE는 신뢰할 수 있는 시뮬레이션 엔진이지만, 숙련자도 걸리기 쉬운 몇 가지 특이사항이 있습니다. 이 글에서는 잘못된 결과를 내는 버그가 아닌, SPICE가 강제하는 미묘한 파일 포맷과 회로 토폴로지 규칙에 초점 맞춥니다. 이들 다수는 SPICE 2g6 고유지만 최신 버전에서도 나타날 수 있습니다.
올바른 파일 시작
모든 SPICE 넷리스트는 비-소자 줄로 시작해야 함—보통 제목, 주석, 또는 빈 줄. 첫 줄이 소자 카드면 SPICE가 'serious error'로 중단, 노드 연결 문제로 오진단 흔함. 단순 개행이나 주석 한 줄이면 파서 만족.
끝도 깔끔하게
마지막 .end 카드는 줄바꿈 문자 없이 써야 함. .end 입력 후 커서를 'd' 직후에 멈추고 [Enter] 누르지 말 것. 아니면 'missing .end card' 에러 뜸(시뮬레이션 자체 영향 없지만 출력 어지럽힘).
노드 0 필수 포함
노드 0은 모든 전압 문장의 기준 그라운드. 유효 넷리스트마다 노드 0 반드시 있어야 함; 없으면 SPICE가 전압 스케일 못 잡음. 예: DC 해석 출력은 노드 0 기준 전압 나열.
node voltage node voltage ( 1) 15.0000 ( 2) 0.6522
여기서 노드 1은 그라운드 위 15V, 노드 2는 0.6522V.
회로 열어두지 말 것
열린 회로—특히 열린 전압원—은 SPICE의 전류 경로 탐색을 깨뜨림. 종속 소스 입력(예: 오피앰프 모델)에 전압원 연결 시, 큰 저항(rbogus라 흔히 부름) 삽입해 최소 부하 주고 시뮬레이션 유지.
언데드 전압/인덕터 루프 피하기
SPICE는 DC 해석 시 인덕터를 단락, 커패시터를 개방으로 취급. 따라서 인덕터나 전압원의 끊김 없는 루프, DC 경로 없는 직렬 커패시터는 솔버 실패 유발. 대표적 문제 패턴:
netlist l1 2 4 10m l2 2 4 50m l3 2 4 25m
netlist v1 1 0 dc 12 l1 1 0 150m
netlist c1 5 6 33u c2 6 7 47u
해결: 인덕터엔 저저항 션트, 커패시터엔 고저항 션트 삽입. 예:
original netlist l1 2 4 10m l2 2 4 50m l3 2 4 25m
fixed netlist rbogus1 2 3 1e-12 rbogus2 2 5 1e-12 l1 3 4 10m l2 2 4 50m l3 5 4 25m
rbogus 저항은 사실상 단락(
1 pΩ), 인덕터 루프가 솔버에 완벽한 단락으로 안 보이게 함. 커패시터:
original netlist c1 5 6 33u c2 6 7 47u
fixed netlist c1 5 6 33u c2 6 7 47u rbogus 6 7 9e12
9 TΩ 션트로 DC 경로 확보하되 AC 거동엔 영향 없음.
SPICE에서 전류 측정
전압 프로브는 단순—두 노드 참조. 전류 프로브는 전압 소스 참조 필요. 회로에 그런 소스 없으면 0전압 '보거스' 소스 삽입해 측정 고정:
c1 4 7 22u vbogus 6 4 dc 0 .print ac i(vbogus)
AC 해석 여전히 적용돼 0전압 소스가 시뮬레이션 안 바꿈.
SPICE는 DC 소스에 대해 관례적 방향과 반대 극성으로 전류 할당. 단순 직렬 회로:
example v1 1 0 r1 1 2 5k r2 2 0 5k .dc v1 10 10 1 .print dc i(v1) .end
SPICE는 –1 mA 보고.
v1 음극에서 나가는 전류를 음수로 보기 때문. 0전압 소스 방향 바꾸면 양수 읽기 가능.
푸리에 해석 팁
푸리에(주파수 영역) 해석 실행 시 대상 파형 반드시 출력/플롯해야 함; 안 하면 SPICE가 'initial transient solution' 보여준 뒤 일시정지 후 중단. 펄스 소스로 사각파 생성 시 현실적 상승/하강 시간 줘야. 이상적 사각파(순간 에지)는 SPICE 푸리에 변환에 짝수 고조파 잘못 도입.