콘텐츠로 이동

SPICE3f5 와 ngspice 의 차이

SPICE3f5는 1993 년에 배포가 종료된 기준 구현이다. ngspice 는 그 소스를 출발점으로 삼아 결함을 고치고 기능을 더해 온 구현이며, 넷리스트(netlist) 문법과 소자 접두사, 해석 제어문의 뼈대를 그대로 유지한다. 그러므로 두 구현의 차이는 문법의 차이가 아니라 다룰 수 있는 범위의 차이다.

SPICE3f5 에서 이어진 구현이며 문법은 유지되고 다룰 수 있는 범위가 더해졌다

SPICE3f5ngspice
개발1993 년 7 월 종료계속 갱신된다
해석 종류9 종11 종 — .PSS · .SP 추가
소자§2 의 목록에 한정소자 디렉터리 57 개
행렬 솔버(matrix solver)희소 LU 하나희소 LU 와 KLU 중 선택
넷리스트 문법상수와 .MODEL파라미터 · 수식 · 함수 정의 · 조건
비선형 종속 소스다항식 계수임의 수식
실행 형태실행 파일실행 파일과 공유 라이브러리(shared library)
디지털없음이벤트 구동(event-driven) 엔진과 코드 모델(code model)
소자 기술 언어없음컴파일된 Verilog-A 모델 적재
공정 소자 해석없음소자 물리 수준 해석기 포함

디지털 지원이 실무에서 가장 큰 차이를 만든다. §4 부터 그것만 따로 다룬다.

SPICE3f5 의 MOSFET 모델 여섯과 ngspice 가 더한 소자 계열

SPICE3f5 의 MOSFET 모델은 LEVEL 1 – 6 이며, 실체는 MOS1 · MOS2 · MOS3 · BSIM1 · BSIM2 · MOS6 여섯이다. 현대 공정의 파라미터 집합은 이 여섯 가운데 어느 것으로도 배포되지 않는다.

계열ngspice 가 추가로 수록하는 것
MOS 대량생산 공정BSIM3 계열 · BSIM4 계열
SOI 공정BSIM3SOI 계열 · BSIMSOI · SOI3
고전압·전력HiSIM-HV 계열 · VDMOS
바이폴러VBIC · HICUM
화합물 반도체HFET · MESA
전송선(transmission line)결합 다중 도체 선로 · TXL
소자 물리 수준수치 다이오드 · 수치 BJT · 수치 MOS

모델이 없으면 부품을 넣을 수 없다. 반도체 공급사가 배포하는 파라미터 집합이 어느 모델을 요구 하는지가 곧 시뮬레이터 선택의 조건이 된다 — 넷리스트가 같아도 .MODEL 카드가 요구하는 LEVEL 을 구현하지 않으면 해석이 서지 않는다.

SPICE3f5 의 넷리스트는 상수만 담는다. ngspice 는 파라미터와 수식을 담는다.

* 파라미터 정의와 수식 참조
.param vdd=5 rload=2k
V1 in 0 DC {vdd}
R1 in out {rload}
R2 out 0 {rload}
* 임의 수식으로 기술한 비선형 종속 소스
B1 sq 0 V = V(out)*V(out)
Rb sq 0 1meg
.end
절점(node)
v(in)5.000000 V
v(out)2.500000 V
v(sq)6.250000 V — v(out) 의 제곱

SPICE3f5 의 종속 소스는 다항식 계수 목록만 받으므로 같은 것을 적으려면 계수를 손으로 전개해야 한다. 파라미터 정의가 없으므로 소자값을 한 곳에서 바꾸는 방법도 없다 — 같은 값을 여러 줄에 되풀이해 적고, 바꿀 때 모두 고쳐야 한다.

논리 블록을 아날로그 커널로 다룰 때와 이벤트 구동으로 다룰 때의 차이

기판에는 아날로그와 디지털이 함께 실린다. 그런데 디지털 블록을 아날로그 해석기로 다루려는 순간 네 가지가 동시에 막힌다.

제약내용
모델 부재논리 IC 의 내부 회로는 공개되지 않는다. 트랜지스터 수준 기술을 얻을 수 없다
미지수 증가플립플롭 하나가 수십 개의 절점을 요구한다. 행렬이 그만큼 커진다
수렴(convergence)논리 소자는 강한 비선형이며, 스위칭 시점마다 뉴턴 반복이 늘어난다
시간 간격아날로그 커널은 파형이 급변하는 구간에서 시간 간격을 좁힌다. 스위칭이 잦을수록 계산량이 늘어난다

해법은 디지털을 아날로그로 흉내 내는 것이 아니라, 디지털을 다른 방식으로 푸는 것이다. 논리 값은 연속량이 아니므로 상태가 바뀌는 순간에만 계산하면 된다. 이것이 이벤트 구동 방식이며, ngspice 는 아날로그 커널과 이벤트 구동 엔진을 같은 시간 축 위에서 함께 돌린다.

§6 의 4 비트 계수기가 이 차이를 수치로 보인다 — 플립플롭 네 개를 포함하고도 아날로그 미지수는 10 개이고, 각 단의 이벤트 기록은 17 · 9 · 5 · 3 건으로 절반씩 줄어든다. 이벤트 구동의 계산량은 시간 간격이 아니라 활동량에 비례한다.

아날로그 커널과 이벤트 구동 엔진이 같은 시간 축을 공유하고 브릿지가 두 영역을 잇는다

아날로그 절점(analog node)이벤트 절점(event node)
전압 · 전류 (연속량)이산 값
계산 시점시간 간격마다상태가 바뀔 때
푸는 방법연립 방정식값 전파와 지연(delay)
행렬 기여있다없다

이벤트 절점의 자료형은 하나가 아니다. 디지털 외에 실수정수 타입이 있고 사용자 정의 타입을 더할 수 있다 — 그래서 상태 기계나 계수값처럼 전압으로 표현할 이유가 없는 양을 그대로 나를 수 있다.

디지털 절점의 값은 상태 하나가 아니라 (상태 state, 세기 strength) 쌍이다.

상태0 · 1 · U(미정)
세기강 · 저항성 · 고임피던스 · 미정

곱하면 12 가지 조합이 된다. 세기 축이 있어야 개방 컬렉터(open collector)와 삼상태(tri-state) 버스(bus)가 성립한다 — 아무도 구동하지 않는 버스는 고임피던스(high impedance)이고, 풀업이 있으면 저항성 1 이며, 강한 구동이 오면 그것이 이긴다.

미정 상태는 오류가 아니라 결과다. §6 의 계수기에서 클록의 아날로그 준위가 문턱(threshold) 구간을 지나는 동안 디지털 절점은 실제로 U 를 거친다 — 이벤트 기록에 그대로 남는다.

문턱 두 개가 가르는 세 구간과 상태 세 가지 세기 네 가지의 열두 조합

아날로그 절점과 이벤트 절점은 직접 연결되지 않는다. 사이에 브릿지(bridge)를 두어야 한다.

모델방향하는 일
adc_bridge아날로그 → 디지털문턱 두 개로 전압을 0 · 1 · U 로 판정한다
dac_bridge디지털 → 아날로그논리 값을 지정 전압으로 구동한다
bidi_bridge양방향한 절점을 양쪽에서 구동한다

adc_bridge 의 파라미터

이름기본값
in_low0.1이 값 이하를 0 으로 판정한다
in_high0.9이 값 이상을 1 로 판정한다
rise_delay · fall_delay1 ns판정 결과가 나타나기까지의 지연

두 문턱 사이 구간은 U 다. 문턱을 하나로 두지 않는 이유가 여기에 있다 — 판정할 수 없는 구간을 0 이나 1 로 밀어 넣지 않고 미정으로 남긴다.

dac_bridge 의 파라미터

이름기본값
out_low · out_high0 · 10 · 1 에 대응하는 출력 전압
out_undef0.5U 에 대응하는 출력 전압
input_load1 pF구동하는 쪽이 보는 용량성 부하
t_rise · t_fall1 ns출력 전이 시간

6. 표본 ① — 아날로그 · 디지털 · 아날로그 경로

섹션 제목: “6. 표본 ① — 아날로그 · 디지털 · 아날로그 경로”

정현파 입력과 세 준위로 나오는 출력, 그리고 두 문턱 사이의 판정 구간

정현파를 판정해 디지털로 바꾸고, 디지털 영역에서 반전한 뒤, 다시 아날로그로 되돌린다.

Mixed signal chain
V1 ain 0 SIN(1.65 1.65 1k)
A1 [ain] [dout] adc1
.model adc1 adc_bridge(in_low=1.0 in_high=1.5 rise_delay=1n fall_delay=1n)
A2 dout dinv inv1
.model inv1 d_inverter(rise_delay=5n fall_delay=5n input_load=0.5p)
A3 [dinv] [aout] dac1
.model dac1 dac_bridge(out_low=0 out_high=3.3 out_undef=1.65 t_rise=2n t_fall=2n)
Rl aout 0 1k
.tran 0.5u 1.2m
.end

결과 — 한 주기에서 뽑은 값이다.

v(ain)v(aout)판정
3.30000 V0.00000 Vin_high 위 → 1 → 반전 0
2.15988 V0.00000 Vin_high 위 → 1
1.65000 V0.00000 Vin_high 위 → 1
1.14012 V1.65000 V문턱 사이 → Uout_undef
0.68016 V3.30000 Vin_low 아래 → 0 → 반전 1
0.00000 V3.30000 Vin_low 아래 → 0

출력은 두 준위가 아니라 세 준위로 나온다. 가운데 1.65 V 는 결함이 아니라 out_undef 가 그대로 나온 것이며, 입력이 판정 구간에 있었다는 사실을 파형이 그대로 알려 준다. 문턱 설정이 실제 회로와 맞지 않으면 이 구간이 넓어지므로, 브릿지의 파라미터를 실제 소자의 입력 문턱에 맞추어야 한다.

네 비트가 각각 2 4 8 16 클록마다 반전되는 계수기 파형

아날로그 클록을 판정해 들여보내고, 디지털 영역에서 4 비트 리플 계수기(ripple counter)를 구성한 뒤, 각 비트를 다시 아날로그로 꺼낸다.

Ripple counter
Vclk clk 0 PULSE(0 3.3 0 1n 1n 499n 1u)
A0 [clk] [dclk] adcx
.model adcx adc_bridge(in_low=1.0 in_high=2.0)
A1 dq0b dclk NULL NULL dq0 dq0b dffx
A2 dq1b dq0b NULL NULL dq1 dq1b dffx
A3 dq2b dq1b NULL NULL dq2 dq2b dffx
A4 dq3b dq2b NULL NULL dq3 dq3b dffx
.model dffx d_dff(rise_delay=1n fall_delay=1n ic=0)
A5 [dq0 dq1 dq2 dq3] [q0 q1 q2 q3] dacx
.model dacx dac_bridge(out_low=0 out_high=3.3 out_undef=1.65)
.tran 10n 16u
.end

각 단은 자기 반전 출력을 자기 데이터 입력에 되먹여 2 분주기가 된다. 쓰지 않는 set · reset 입력은 NULL 로 둔다.

결과 — 1 µs 마다 읽은 네 비트다. 3.3 V 를 1 로 읽는다.

시각q3 q2 q1 q0
1.5 µs0 0 1 02
2.5 µs0 0 1 13
3.5 µs0 1 0 04
4.5 µs0 1 0 15
5.5 µs0 1 1 06
6.5 µs0 1 1 17
7.5 µs1 0 0 08
8.5 µs1 0 0 19
9.5 µs1 0 1 010
측정 항목
아날로그 미지수10 개clk · q0q3 · 전압원 분기 · 브릿지 분기 넷
플립플롭(flip-flop) 네 개가 행렬에 더하는 미지수0 개
이벤트 기록 — dq0 · dq1 · dq2 · dq317 · 9 · 5 · 3 건
이벤트 기록 — dclk50 건

단마다 이벤트이 절반으로 줄어든다. 아날로그 해석이었다면 뒷단도 앞단과 같은 시간 간격으로 계산 되었을 것이다. dclk 의 항목이 클록 에지 수보다 많은 이유는 에지마다 U 를 한 번 거치기 때문이다 — 아날로그 준위가 in_lowin_high 사이를 지나는 동안의 상태가 그대로 기록된다.

ngspice 46 계열이 수록하는 디지털 코드 모델은 32 종이다.

갈래모델
브릿지adc_bridge · dac_bridge · bidi_bridge
조합 논리d_and · d_nand · d_or · d_nor · d_xor · d_xnor · d_inverter · d_buffer
버스 구동d_tristate · d_open_c · d_open_e · d_pullup · d_pulldown
기억 소자d_dff · d_jkff · d_srff · d_tff · d_dlatch · d_srlatch · d_ram
자극d_source · d_osc · d_pwm
함수·상태d_lut · d_genlut · d_state · d_fdiv
외부 결합d_process · d_cosim

이벤트 절점의 실수·정수 자료형을 다루는 모델이 따로 있다 — real · int · d_to_real · real_to_v · real_delay · real_gain. 아날로그 전압으로 바꾸지 않고 값 자체를 나르는 경로다.

대상조건
SPICE3f5BSD
ngspice 본체Modified BSD
이벤트 구동·코드 모델 부분퍼블릭 도메인
일부 하위 구성 요소그 구성 요소마다 별도 조건이 붙는다

전체가 한 조건이 아니다. 소스를 가져다 쓰거나 재배포할 때는 파일 단위로 조건을 확인해야 한다 — 특히 행렬 솔버, 파라미터 처리, 소자 기술 언어 적재, 표 기반 코드 모델은 본체와 조건이 다르다.

요구선택
1993 년의 기준 결과를 재현한다SPICE3f5
현대 공정의 소자 파라미터를 쓴다ngspice — 모델 계열이 조건이다
넷리스트를 파라미터로 다룬다ngspice
아날로그와 디지털이 섞인 회로를 본다ngspice — 이벤트 구동 엔진과 브릿지
응용 프로그램에 해석기를 내장한다ngspice — 공유 라이브러리

두 구현은 대립하지 않는다. SPICE3f5 는 결과를 대조할 기준이고, ngspice 는 그 기준을 유지한 채 범위를 넓힌 구현이다. 해석 결과가 갈리면 먼저 의심할 것은 소자 모델과 해석 옵션이지 커널이 아니다.