**SPICE** (''Simulation Program with Integrated Circuit Emphasis'') 는 공용 오픈소스 아날로그 회로 시뮬레이터이다. 이것은 집적 회로와 보드 레벨 설계에 사용되며, 회로 설계의 무결성을 확인하고 그 회로의 동작을 예측한다.

## 소개
개별 부품으로 이루어진 보드 레벨 설계와는 달리, 집적 회로를 제조하기 전에 브레드보드로 실험하는 것은 굉장히 어렵다. 또한, 포토마스크 등의 제조를 위한 전제조건들은 설계단계에서의 완벽함을 필요로 하게 되었다. 이러한 배경으로 인해 SPICE를 사용하여 시뮬레이션하는 방법은 집적 회로를 제조하기 전에 미리 트랜지스터 레벨에서 회로작동을 시험하기 위해 업계표준으로 자리잡게 되었다.

보드 레벨 설계는 종종 브레드보드를 통해 테스트된다. 하지만 브레드보드를 활용해도 기생 소자와 같은 몇몇 회로의 특성은 실제 제조후와 비교했을 때 정확하지 않을 수 있다. 이러한 기생소자들은 SPICE를 통해 더 정확하게 측정이 가능하다. 또한, 설계자들은 제조시의 오차 발생을 대비해 모형보다 더 정확한 정보를 갖기 원한다. 그러한 이유로 몬테 카를로의 시뮬레이션을 수행하는데에 SPICE를 사용하는 것은 흔한 일이다.

회로 시뮬레이션 프로그램은 트랜지스터, 저항, 축전기 등으로 이루어진 회로요소, 그리고 그들의 연결들을 모두 기록한 넷리스트를 받아서 그것을 풀기위한 방정식들로 변환한다. 그 후, 이러한 비선형 미분 대수방정식을 비선형 적분 방식, 뉴턴 방법, 희소행렬 등의 방식으로 정리된 일반 방정식이 사용자에게 주어지게 된다.

## 기원
SPICE는 캘리포니아 대학교 버클리의 전자공학 연구실에서 도널드 페더슨 교수(Donald Pederson)의 지도를 받는 로렌스 네이글(Laurence Nagel) 에 의해 만들어졌다. SPICE1은 본래 네이글이 로널드 로러(Ronald Rohrer) 교수 밑에서 작업한 CANCER 프로그램

SPICE1는 1973년에 처음 소개되었다.가 포트란으로 개발되었다. SPICE2는 더 많은 소자와 노달변형 회로분석을 통한 더 폭넓은 과도신호 분석을 가능하게 하였다. 그리고 동료 대학원생인 엘리스 코헨(Ellis Cohen)에 의해 포트란에 기초한 메모리 할당 시스템이 적용되었다. 1983년에 마지막으로 포트란으로 짜여진 SPICE가 업데이트되었고, 토마스 쿼리스(Thomas Quarles)는 리차드 뉴턴(A. Richard Newton)의 지도를 받으며 1989년, C로 짜여진 SPICE3를 개발하였다. SPICE3는 [[X 윈도우 시스템의 방식을 주가하고, 같은 문법을 사용하도록 만들어졌다.

소스코드가 공개된 초기 퍼블릭 도메인 소프트웨어 프로그램으로서 과거에는 캘리포니아 대학교 버클리에서 자기 테이프의 가격을 충당하기 위해서 약간의 비용을 받고 제공되었으며, 현재는 BSD 허가서에 따라 자유롭게 사용이 가능하다.

## 과도신호 분석
과도신호 분석은 시간에 대해 종속적이기 때문에, 기존과는 다른 방식의 분석 알고리즘을 사용한다. 하지만, 과도신호 분석은 DC 동작점 분석을 선행하므로, 대부분의 DC분석 알고리즘은 과도신호분석에 사용된다.

### 과도신호 분석을 위한 초기조건
발진기 또는 피드백 회로같은 몇몇 회로들은 안정된 동작점을 가지고 있지 않는다. 이러한 회로들은 초기 조건을 확인하기 위해서 피드백 루프를 개방하거나, 처음부터 초기조건을 지정해주어야만 한다. DC 동작점 분석은 UIC 매개변수가 있을경우 무시된다. 만약 UIC가 .TRAN 선언에 포함되어있다면, 과도신호 분석은 .IC 선언으로 분석된 노드의 전압을 이용해 동작한다. .IC 선언에서 5V로 지정되었을 경우, 초기시간에서의 전압이 5V가 되는 것이다.

과도신호 분석중에 DC 동작점을 추정한 값을 저장하기 위해 .OP 선언을 사용할 수도 있다.

.TRAN 선언의 UIC 매개변수로 인해 초기 동작점 분석은 무시된다. .OP선언은 과도신호 동작점을 t=20일 때의 값으로 계산하게 된다.

비록 과도신호 분석이 수렴된 DC분석을 제공하지만, 과도신호 분석 스스로는 부족한 경우가 많다. 과도신호 분석에서 "internal timestep too small" 오류가 발생할 경우가 있는데, 이것이 바로 저런 이유로 생기는 에러이다. 수렴 실패는 실제 DC 동작점 값이 초기조건과 크게 다를 경우 발생하는 문제이다.

## 적용
SPICE는 학계에서도, 산업적으로도, 영리 제품으로서도 많은 회로 시뮬레이션 프로그램의 토대로 우뚝섰다. 첫번째 SPICE의 영리버젼은 ISPICE인데, National CSS에서 시분할 서비스의 상호작용 버전으로 제작하였다.

오늘날에는 몇몇, 특히 거대한 회사를 위시한 IC 제조업체들은 계속해서 SPICE를 토대로 한 회로 시뮬레이션 프로그램을 개발하기 위한 팀을 꾸리고 있고, 이 결과로 Analog Devices에서 만든 ADICE, Linear Technology에서 만든 LTspice 등이 있다.

SPICE의 탄생은 2011년 IEEE Milestone에서 언급되었는데, 이때의 언급은 "범세계적 표준 집적회로 시뮬레이터"이다.

## 프로그램 특징 및 구조
SPICE는 현재 집적회로 설계에 필요한 분석법과 소자들을 가지고 있고, 편리하게 쓰기에 충분히 강력하며 빠른 덕분에 유명해졌다. 그 이전에 쓰인 프로그램들은 한정된 기능만 수행하였는데, BIAS이 그러하였다. SPICE는 이러한 기능들을 모두 포함해 많은 회로를 성공적으로 시뮬레이트 하게 되었다.

### 분석
SPICE2에는 다음과 같은 분석이 가능하다.
SPICE가 비선형 회로모델을 자주 사용하기 때문에, 소신호 분석에는 회로가 선형에 가깝게 되는 정지점 계산이 필수적이다. SPICE2는 다른 소신호 분석방식도 가지고있는데, 민감도 분석, 극영점 분석, 그리고 소신호 왜곡 분석이 바로 그것이다. 극한 기후에서의 시뮬레이션을 가정하기 위해서 자동으로 갱신되는 반도체 모델 매개변수도 존재한다.

적절한 분석과 매개변수 선택은 매우 종요하다. 선형 분석과 비선형 분석은 필요한 경우가 다르며, 시뮬레이션이 적용하는 기본값만 사용할 경우 과도신호 분석에 제대로 된 값을 얻기 힘들다.

### 장치 모델
SPICE2는 수많은 트랜지스터 모델을 포함하고 있다. 그것 뿐만 아니라, 커플링을 포함한 저항, 축전기, 인덕터 등도 가지고 있다. 전압원, 전류원, 이상적인 전송선, 능동소자, 종속원들도 포함하고 있다.

### 입력과 출력:넷리스트, 도식화 및 기입
SPICE2는 텍스트로 된 넷리스트를 받아 문장으로 출력한다. 이것은 1975년에 자주 쓰인 방식이다. 이러한 출력방식은 문장들의 모임으로 구성될수도 있고, 문자로 된 "그림"이 될 수도 있다. SPICE3는 이전의 방식도 그대로 가지고 있지만, C 셸과 비슷한 명령 줄 인터페이스로도 제어할 수 있다. 또한 개발용 워크 스테이션이 더 흔해짐에 따라 X 윈도우 시스템 방식도 추가되었다.

업체들과 다양한 자유 소프트웨어 프로젝트들은 스키매틱 캡쳐 프론트엔드를 추가하였는데, 이 덕분에 회로의 개략도를 직접 그리면 프로그램이 자동으로 넷리스트를 만드는 기능이 추가되었다. 또한, 그래픽 사용자 인터페이스가 추가되고, 전압과 전류의 출력값을 벡터로 조작할 수 있게 되었다. 게다가, 파형을 볼 수 있는 적절한 그래픽 도구들이 추가되었다.