SPICE (전자 회로 시뮬레이션)
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.
1. 개요
SPICE는 캘리포니아 대학교 버클리에서 개발된 전자 회로 시뮬레이션 프로그램으로, 회로의 동작을 예측하고 분석하는 데 사용된다. 1973년 포트란으로 처음 개발되어 이후 C 언어로 개선되었으며, 다양한 전자 부품 모델과 분석 기능을 제공한다. 넷리스트 형식의 입력을 통해 회로를 정의하고, 과도, AC, DC 분석 등을 수행하며, 널리 사용되어 "회로를 SPICE하다"라는 표현이 시뮬레이션과 동의어로 사용될 정도였다. SPICE는 학계와 산업계에서 널리 사용되며, 다양한 상용 및 파생 프로그램의 기반이 되었고, 전기적 영역 외 열 시뮬레이션, 전기 기계 모델링, 전자기 모델링 등 다양한 분야에 적용된다.
더 읽어볼만한 페이지
- EDA 소프트웨어 - Altium Designer
Altium Designer는 Altium에서 출시한 전자 설계 자동화 소프트웨어로, 회로도 캡처, 3D PCB 설계, FPGA 개발, 릴리스/데이터 관리 등의 기능을 제공하며 3D PCB 시각화를 최초로 도입했다. - EDA 소프트웨어 - KiCad
KiCad는 1992년에 개발된 오픈 소스 전자 회로 설계 소프트웨어로, CERN의 지원을 받아 개발이 가속화되었으며, 다양한 운영 체제에서 실행된다.
2. 역사
SPICE는 캘리포니아 대학교 버클리에서 도널드 페더슨 교수의 지도하에 로렌스 네이글이 개발했다.[49] 초기 버전은 FORTRAN으로 작성되었으며,[1] 이후 C 언어로 이식되었다.[13] SPICE는 소스코드가 공개된 초기 퍼블릭 도메인 소프트웨어 프로그램으로 널리 배포 및 사용되었으며,[55] 현재는 BSD 허가서에 따라 자유롭게 사용 가능하다. "회로를 SPICE 하다"라는 표현은 "회로를 시뮬레이션하다"와 동의어가 되었다.[15]
SPICE의 주요 버전별 개발 과정은 다음과 같다.
2. 1. 초기 개발 배경
SPICE는 캘리포니아 대학교 버클리 전자공학 연구실에서 도널드 페더슨 교수의 지도를 받던 로렌스 네이글(Laurence Nagel)이 개발했다. SPICE1은 네이글이 로널드 로러 교수 밑에서 작업한 CANCER 프로그램[49]을 바탕으로 만들어졌다. CANCER는 "방사선을 제외한 비선형 회로의 컴퓨터 분석"(Computer Analysis of Nonlinear Circuits, Excluding Radiation)의 약자로,[50] 당시 미국 국방부에서 회로의 방사능 내성을 측정하기 위한 시뮬레이터 개발 프로젝트의 일환이었다. 로러 교수가 떠난 후 네이글의 새 지도교수가 된 페더슨은 CANCER의 특허 사용 제약을 없애고 퍼블릭 도메인으로 공개할 것을 추진했다.[51]2. 2. 주요 버전
- 1973년: SPICE1[52][1] - 최초 버전으로, FORTRAN으로 작성되었다. 노달 회로분석을 사용해 회로 방정식을 구했지만, 인덕터, 부동 전압원, 종속원 표현에 어려움이 있었다. 비교적 적은 수의 회로만 사용 가능했고, 고정된 시간 동안의 과도신호 분석만 가능했다.
- 1975년: SPICE2[53][2] - 더 많은 소자와 노달변형 회로분석을 통해 더 폭넓은 과도신호 분석을 지원했다. 엘리스 코헨(Ellis Cohen)이 개발한 포트란 기반 메모리 할당 시스템이 적용되었다.
- 1981년: SPICE2G.6[11][12] - 주요 상용 버전의 기반이 되었다.
- 1985년: SPICE3[54][13] - C로 작성되었으며, X 윈도우 시스템 방식을 추가하고, 같은 문법을 사용하도록 만들어졌다.
2. 3. 상용 및 파생 버전
SPICE는 소스코드가 공개된 초기 퍼블릭 도메인 소프트웨어 프로그램으로서[55], 널리 배포 및 사용되었다. SPICE의 대중성은 "회로를 SPICE 하다"라는 표현을 "회로를 시뮬레이션하다"와 동의어로 만들 정도였다.[56]1980년대에는 HSPICE, PSPICE 등 여러 상용 버전이 등장했다. SPICE는 학계, 산업계 및 상용 제품을 포함한 많은 회로 시뮬레이션 프로그램의 기반이 되었다. 최초의 상용 SPICE 버전은 ISPICE였으며, National CSS에서 시분할 서비스의 대화형 버전으로 제작되었다.[57] 가장 유명한 상업용 제품으로는 시놉시스 소유의 HSPICE와 카덴스 디자인 시스템 소유의 PSPICE가 있다.
오늘날에도 몇몇 IC 제조업체들은 SPICE 기반 회로 시뮬레이션 프로그램 개발팀을 운영하고 있으며, 그 결과 Analog Devices의 ADICE, Linear Technology의 LTspice 등이 개발되었다.[58]
현재 다양한 파생 SPICE 소프트웨어가 개발 및 사용되고 있다. 주요 파생 버전은 다음과 같다.
SPICE는 트랜지스터, 저항, 축전기 등 회로 요소와 그 연결을 기록한 텍스트 기반의 넷리스트를 입력받아 방정식을 풀고, 비선형 적분, 뉴턴 방법, 희소행렬 등의 방식으로 결과를 제공한다.[4] 1975년에 주로 사용된 SPICE2는 텍스트 넷리스트를 입력받아 숫자 열이나 문자 "플롯" 형태의 라인 프린터 출력을 생성했다. SPICE3는 넷리스트를 유지하면서도 C 셸과 유사한 명령 줄 인터페이스를 통해 분석을 제어하고, X 플로팅을 추가했다.[48]
3. 프로그램 특징 및 구조
최근에는 업체들과 다양한 자유 소프트웨어 프로젝트를 통해 회로도 캡처 프론트엔드가 추가되어, 회로도를 직접 그리면 프로그램이 자동으로 넷리스트를 생성하는 기능이 지원된다. 또한, 그래픽 사용자 인터페이스가 추가되어 전압과 전류 출력값을 벡터로 조작하고, 파형을 볼 수 있는 그래픽 도구들도 제공된다.
3. 1. 입력 형식: 넷리스트
넷리스트는 회로 요소( 저항, 커패시터, 인덕터, 트랜지스터 등)와 그 연결 관계를 텍스트로 기술한 것이다. 각 행은 소자의 인스턴스 이름, 연결되는 노드 이름, 소자의 특성값 등으로 구성된다. 주석은 `*`로 시작한다.[4]
회로 기술은 한 행에 하나의 소자를 기술한다. 각 행의 맨 앞은 소자의 인스턴스명(고유한 이름)을 나타내며, 첫 번째 문자가 소자 종류를 나타낸다. 저항은 `'''R'''인스턴스명`, 인덕턴스는 `'''L'''인스턴스명`과 같은 이름이 된다. 이어서, 소자의 각 단자가 연결되는 노드명을 기술하고, 마지막으로 소자의 특성값 등을 기술한다. 인스턴스명, 노드명 등의 구분에는 공백 문자를 사용한다.
행 머리글자가 `*`인 행은 주석이다.
'''간단한 예시 1: CR 회로'''
```text
CR circuit
R1 0 1 10
C1 1 2 20
.END
```
위 예시에서 R1 행의 마지막은 10Ω, C1 행의 마지막은 20F를 나타낸다. 0, 1, 2는 각각 단자의 노드를 나타낸다. 결과적으로 저항과 커패시터가 직렬로 연결된 회로가 된다.
이것만으로는 회로 기술만 되어 있고, 전기 회로로 동작하지 않는다. 회로로 동작시키기 위해서는, 예를 들어 다음과 같이 전압원(`'''V'''`로 시작하는 소자)을 추가한다.
'''간단한 예시 2: CR 회로 + 직류 전원'''
```text
CR circuit+power
R1 0 1 10
C1 1 2 20
V1 2 0 5
.END
```
위 예시는 앞서 언급한 회로의 양단(+측이 노드 2, -측이 노드 0)에 5V의 전압을 가한 것이다. 전원에는 직류 외에도 정현파나 펄스 파형, 정전류원 등도 지정할 수 있다. 전원도 형식적으로 소자와의 위치 관계이며, 다른 소자와 마찬가지로 회로 기술 내에 포함한다. 노드 0(그라운드)은 반드시 포함되어야 한다. 각 부분의 전압은 지정한 장소의 전위와 노드 0과의 전위차로 정의된다.
이것을 실제로 동작시키기 위해서는 해석 내용을 지정한다.
'''간단한 예시 3: CR 회로 + 직류 전원 + 과도 해석'''
```text
CR circuit+power+transient
.TRAN 1 10
R1 0 1 10
C1 1 2 20
V1 2 0 5
.END
```
`.TRAN` 문은 1sec 간격으로 10sec까지 경과시키는 것을 의미한다(과도 해석). 또한 마침표로 시작하는 단어는 각종 제어 문을 의미한다.
시뮬레이터로서는 동작한 결과의 관측도 가능해야 한다. 다음 지정을 통해 표시할 수 있다.
'''간단한 예시 4: CR 회로 + 직류 전원 + 과도 해석 + 표시'''
```text
CR circuit+power+transient+print
.TRAN 1 10
.PRINT TRAN V(1) I(V1)
R1 0 1 10
C1 1 2 20
V1 2 0 5
.END
```
`.PRINT` 문으로 노드 1의 전압과 전원 `V1`의 전류를 목록으로 출력한다. 그 외에 `.PLOT` 문도 있으며, 그래프화할 수 있다.
기대한 대로 콘덴서에 충전되어 가는 것과 같은 시뮬레이션 결과는 이대로는 나오지 않는다. 이는 SPICE가 과도 해석을 수행하기 전에 자동으로 DC 해석을 통해 초기 조건의 전위를 결정하고, 이 때 콘덴서는 단락 상태로 취급되기 때문이다. 즉, 콘덴서가 충전된 상태에서 시뮬레이션이 시작된다. 충전되지 않은 상태에서 시뮬레이션을 시작하기 위해서는 `.IC` 문을 사용하여 초기 조건에서의 전위를 명시적으로 지정한다.
'''간단한 예시 5: CR 회로 + 직류 전원 + 과도 해석 + 초기 조건 + 표시'''
```text
CR circuit+power+transient+ic+print
.TRAN 1 10
.PRINT TRAN V(1) I(V1)
R1 0 1 10
C1 1 2 20
V1 2 0 5
.IC V(1) = 2
.END
```
위 예시는 콘덴서 `C1`의 저항 `R1` 측 노드의 초기 전위를 2V로 설정한다. 이는 `V1`의 전압과 같으므로 콘덴서가 충전되지 않은 상태에서 시뮬레이션이 수행된다.
또한 첫 행과 `.END` 사이의 기술 순서는 임의이다.
3. 2. 회로, 동작 기술
SPICE 시뮬레이터에 대한 입력은 회로, 동작, 제어문 등으로 구성되며, 텍스트로 기술한다. 각 항목은 기본적으로 행 단위로 작성하지만, 여러 행에 걸쳐 기술할 수도 있다. 이 경우 다음 행의 맨 앞에 `+`를 붙인다. 명령어는 마침표(`.`)(period)로 시작한다.
첫 행은 표제이며, 다음 행부터 회로 및 제어문을 기술한다. 회로망은 SPICE 형식의 넷리스트로 표현한다. 마지막 행은 `.END`로 종료한다. `.END` 다음에 오는 행은 새로운 회로 기술로 인식되어, 여러 회로의 시뮬레이션이 가능하다.
회로 기술은 한 행에 하나의 소자를 기술한다. 각 행의 맨 앞은 소자의 인스턴스명(고유한 이름)을 나타내며, 첫 글자는 소자의 종류를 나타낸다. 예를 들어, 저항은 `'''R'''인스턴스명`, 인덕턴스는 `'''L'''인스턴스명`과 같이 표현한다. 이어서 소자의 각 단자가 연결되는 노드명을 기술하고, 마지막으로 소자의 특성값 등을 기술한다. 인스턴스명, 노드명 등은 공백 문자로 구분한다.
행의 맨 앞이 `*`인 행은 주석으로 처리되어, 사람이 내용을 파악하기 쉽도록 설명을 추가할 수 있다.
다음은 간단한 CR 회로를 기술하는 예시이다.
```text
CR circuit
R1 0 1 10
C1 1 2 20
.END
```
위 예시에서 `R1` 행의 마지막은 , `C1` 행의 마지막은 를 나타낸다. `0`, `1`, `2`는 각 단자의 노드를 나타낸다. 결과적으로 저항과 캐패시터가 직렬로 연결된 회로가 된다.
이것만으로는 회로 기술만 되어 있으므로, 전기 회로로 동작시키기 위해서는 전압원(`'''V'''`로 시작하는 소자)을 추가해야 한다.
```text
CR circuit+power
R1 0 1 10
C1 1 2 20
V1 2 0 5
.END
```
위 예시는 앞서 언급한 회로의 양단(+측이 노드 `2`, -측이 노드 `0`)에 의 전압을 가한 것이다. 전원에는 직류 외에도 정현파나 펄스 파형, 정전류원 등도 지정할 수 있다. 전원도 소자와의 위치 관계를 나타내며, 다른 소자와 마찬가지로 회로 기술 내에 포함한다. 노드 `0`(그라운드)은 반드시 포함되어야 한다. 각 부분의 전압은 지정한 장소의 전위와 노드 `0`과의 전위차로 정의된다.
이를 실제로 동작시키기 위해서는 해석 내용을 지정해야 한다.
```text
CR circuit+power+transient
.TRAN 1 10
R1 0 1 10
C1 1 2 20
V1 2 0 5
.END
```
`.TRAN` 문은 간격으로 까지 경과를 시뮬레이션하는 것(과도 해석)을 의미한다. 마침표로 시작하는 단어는 각종 제어문을 나타낸다.
시뮬레이터에서는 동작 결과를 관측할 수 있어야 한다. 다음 지정을 통해 결과를 표시할 수 있다.
```text
CR circuit+power+transient+print
.TRAN 1 10
.PRINT TRAN V(1) I(V1)
R1 0 1 10
C1 1 2 20
V1 2 0 5
.END
```
`.PRINT` 문으로 노드 1의 전압과 전원 `V1`의 전류를 목록으로 출력한다. `.PLOT` 문을 사용하면 결과를 그래프로 나타낼 수 있다.
콘덴서에 전하가 충전되는 것과 같은 시뮬레이션 결과를 얻기 위해서는 초기 조건의 전위를 DC 해석을 통해 자동으로 결정할 때 콘덴서가 단락 상태로 처리되므로, `.IC` 문을 사용하여 초기 조건에서의 전위를 명시적으로 지정해야 한다.
```text
CR circuit+power+transient+ic+print
.TRAN 1 10
.PRINT TRAN V(1) I(V1)
R1 0 1 10
C1 1 2 20
V1 2 0 5
.IC V(1)=2
.END
```
위 예시는 콘덴서 `C1`의 저항 `R1` 측 노드의 초기 전위를 로 설정한다. 이는 `V1`의 전압과 같으므로 콘덴서가 충전되지 않은 상태에서 시뮬레이션이 수행된다.
첫 행과 `.END` 사이의 기술 순서는 임의로 변경할 수 있다.
SPICE는 텍스트에 의한 기술을 기본으로 하지만, 상용 소프트웨어 등에서는 회로도 CAD와 통합하여 그래픽 기술도 가능해져 더욱 사용하기 쉬워졌다.
3. 3. 소자 기술 (상세)
SPICE는 다양한 전자 소자 모델을 제공하며, 집적 회로 설계에 필수적인 분석 기능과 함께 사용하기 편리하고 빠르기 때문에 널리 사용된다.[60] SPICE2는 여러 트랜지스터 모델을 포함하며, 저항, 축전기, 인덕터 (결합 포함), 전압원, 전류원, 전송선, 능동 소자, 종속 전압/전류원 등도 포함한다.[48] SPICE3는 더 정교한 MOSFET 모델(특히 UC 버클리에서 개발된 BSIM 모델군)을 추가했다.
상업용 및 산업용 SPICE 시뮬레이터는 기술 발전에 따라 여러 소자 모델을 추가했으며, Compact Model Council을 통해 모델 표준화를 추진하고 있다.[36] 현재 표준 모델에는 BSIM3, BSIM4, BSIMSOI, PSP, HICUM, MEXTRAM 등이 있다.
SPICE는 파운드리 PDK에서 소자 모델을 사용할 수 있으며, 소자 기술은 일반적으로 인스턴스 이름, 노드 이름, 파라미터 값 등으로 구성된다.
다음은 SPICE에서 사용되는 주요 소자들의 기술 형식이다.
'''R'''인스턴스 이름 N+ N- 값
- '''축전기 (C)'''
'''C'''인스턴스 이름 N+ N- 값
- '''인덕터 (L)'''
'''L''' 인스턴스명 N+ N- 값
- '''결합 인덕터 (K)'''
'''K'''인스턴스명 '''L'''인스턴스명1차 '''L'''인스턴스명2차 M결합
- '''전압원 (V)'''
'''V'''인스턴스 이름 N+ N- [옵션 …]
- '''전류원 (I)'''
'''I''' 인스턴스 이름 N+ N- [옵션 …]
- '''전압 제어 전류원 (G)'''
'''G''' 인스턴스명 N+ N- N제어+ N제어- 값
- '''전압 제어 전압원 (E)'''
'''E'''인스턴스명 N+ N- N제어+ N제어- 값
- '''전류 제어 전류원 (F)'''
'''F'''인스턴스명 N+ N- N제어 값
- '''전류 제어 전압원 (H)'''
'''H'''인스턴스 이름 N+ N- N제어 값
- '''다이오드 (D)'''
'''D'''인스턴스명 NA NK 모델명 [옵션 …]
- '''BJT (Q)'''
'''Q'''인스턴스명 NC NB NE 모델명 [옵션 …]
- '''JFET (J)'''
'''J'''인스턴스 이름 ND NG NS [NB] 모델 이름 [옵션 …]
- '''MOSFET (M)'''
'''M'''인스턴스 이름 ND NG NS [NB] 모델명 [옵션 …]
- '''전송선 (T)'''
'''T'''인스턴스 이름 N1+ N1- N2+ N2- '''Z0='''값
- '''Lossy Transmission Line (O)'''
'''O'''인스턴스 이름 N1+ N1- N2+ N2- 모델 이름
- '''RC 전송 선로 (U)'''
'''U''' 인스턴스명 N1 N2 N3 모델명 '''L='''length [옵션 …]
3. 4. 제어문 (상세)
SPICE에서 제어문은 분석 종류, 조건, 출력 등을 지정하는 데 사용된다. SPICE는 텍스트 기반으로 회로, 동작, 제어문 등을 기술하며, 각 항목은 행 단위로 작성된다. 여러 행에 걸쳐 기술할 때는 다음 행의 선두에 `+`를 사용한다. 명령어는 마침표(`.` )로 시작한다.첫 행은 표제가 되고, 다음 행부터 회로 및 제어문을 기술한다. 회로망은 SPICE 형식의 넷리스트로 표현하며, 마지막 행은 `.END`로 종료한다. `.END` 다음 행은 새로운 회로 기술로 인식되어 여러 회로의 시뮬레이션이 가능하다.
회로 기술은 한 행에 하나의 소자를 기술한다. 각 행의 머리에는 소자의 인스턴스명(고유 이름)을 쓰고, 첫 글자로 소자 종류를 나타낸다. (저항은 `R`, 인덕턴스는 `L` 등). 이어서 소자의 각 단자가 연결되는 노드명을 기술하고, 마지막으로 소자의 특성값 등을 기술한다. 인스턴스명, 노드명 등은 공백 문자로 구분한다. 행 머리가 `*` 인 행은 주석이다.
예시:```
CR circuit
- 0---R1---1---C1---2
R1 0 1 10
C1 1 2 20
.END
```
위 예시에서 `R1` 행의 마지막은 10Ω, `C1` 행의 마지막은 20F를 나타낸다. `0`, `1`, `2`는 각 단자의 노드를 나타낸다. 결과적으로 저항과 커패시터가 직렬 연결된 회로가 된다.
전원을 추가하려면 다음과 같이 전압원(`V`로 시작하는 소자)을 부가한다.
```
CR circuit+power
- 0---R1---1---C1---2---V1---0
R1 0 1 10
C1 1 2 20
V1 2 0 5
.END
```
이 예시는 회로 양단(+측 노드 `2`, -측 노드 `0`)에 5V 전압을 가한 것이다. 전원에는 직류 외에 정현파, 펄스 파형, 정전류원 등도 지정할 수 있다. 전원도 소자와의 위치 관계이며, 회로 기술 내에 포함한다. 노드 `0` (그라운드)은 반드시 포함되어야 한다.
해석 지정:```
CR circuit+power+transient
.TRAN 1 10
- 0---R1---1---C1---2---V1---0
R1 0 1 10
C1 1 2 20
V1 2 0 5
.END
```
`.TRAN` 문은 1초 간격으로 10초까지 과도 해석을 수행하는 것을 의미한다. 마침표로 시작하는 단어는 각종 제어문을 나타낸다.
결과 표시:```
CR circuit+power+transient+print
.TRAN 1 10
.PRINT TRAN V(1) I(V1)
- 0---R1---1---C1---2---V1---0
R1 0 1 10
C1 1 2 20
V1 2 0 5
.END
```
`.PRINT` 문으로 노드 1의 전압과 전원 `V1`의 전류를 목록으로 출력한다. `.PLOT` 문으로 그래프화할 수도 있다.
초기 조건 설정:SPICE는 과도 해석 전 DC 해석으로 초기 조건 전위를 결정하므로, 콘덴서가 충전된 상태로 시작될 수 있다. `.IC` 문으로 초기 조건 전위를 명시해야 한다.
```
CR circuit+power+transient+ic+print
.TRAN 1 10
.PRINT TRAN V(1) I(V1)
- 0---R1---1---C1---2---V1---0
R1 0 1 10
C1 1 2 20
V1 2 0 5
.IC V(1) = 2
.END
```
위 예시는 콘덴서 `C1`의 저항 `R1` 측 노드 초기 전위를 2V로 설정한다.
주요 제어문 상세:
- `.IC` : 초기 조건을 설정한다.
- 구문: `.IC` `V`인스턴스명1=초기값1 [`V`네트명2=초기값2 …]