티스토리 뷰

 

프롤로그

 

  이전 포스팅에도 언급한 적이 있지만, 회로 설계 분야는 크게 아날로그와 디지털로 구분된다. 7년의 디지털 회로 설계 엔지니어로 일하면서 아날로그와는 이제 정말 담을 쌓았다고 생각했는데, 다시 대학원에 와서 이 녀석을 마주치게 될 줄은 정말 난 몰랐었다.

 

아무 것도 몰라요

 

  마지막 텀 프로젝트가 Spice 툴을 사용해서 직접 회로를 구성하고 각 공정 코너별로 전력 최적화를 진행하는 것이었다. 최소 동작 주파수와 공급 전압을 도출하고, 관련된 논문을 참고하여 최적의 아키텍처와 저전력 회로 기술을 적용해야 하는 것이 주어진 요구 사항이었다. Spice 툴에는 종류가 많지만, 라이센스 문제 때문에 Cadence 사의 Virtuoso와 같은 상용 툴이 아닌 LTspice를 활용하라고 가이드가 주어졌다. 생소한 툴이다 보니 시행착오가 많았는데, 누군가는 내가 했던 삽질을 하지 않을 수 있도록 블로그에 기록으로 남겨두려고 한다.

 

 

LTspice란?

 

  LTspice는 반도체 제조업체인 Analog Devices에서 제공하는 Spice 기반의 아날로그 전자 회로 시뮬레이터이다. Spice는 Simulation Program with Integrated Circuit Emphasis의 약어로, 1972년 미국 Berkely 대학에서 개발되었다. 내가 처음 Spice를 접한 것은 학부 2학년 전자회로 시간이었다. 교수님의 강의 스타일이 교과서를 사용하지 않고 화면에 Pspice를 띄워 놓고 시뮬레이션을 해가며 수업을 진행하시는 것이어서 굉장히 멘붕이었던 기억이 있다. 아직 BJT, MOSFET 같은 트랜지스터의 기본 동작도 배우기 전인데, 증폭기 회로를 시뮬레이션하고 칠판에는 소신호 등가 모델을 그리고 있으니 이해가 잘 될 리가 없었다. 차라리 전자회로 2 수업이 이런 식으로 진행됐다면 훨씬 좋았을 텐데, 뭐 어찌 됐건 그때 사용했던 Pspice보다 LTspice는 기본적으로 많은 라이브러리를 제공하고, 기능도 나름 훌륭하게 지원하고 있는 듯했다. Analog Devices사 홈페이지에서 쉽게 다운로드할 수 있으며, 기본적인 매뉴얼 등도 제공하고 있으니 아래 링크를 참고하길 바란다. 

 

▼ LTspice 다운로드 링크

https://www.analog.com/en/design-center/design-tools-and-calculators/ltspice-simulator.html

 

본인의 환경에 맞는 것을 선택하면 된다.

 

▼ LTspice 매뉴얼 링크

https://www.analog.com/media/en/simulation-models/spice-models/LTspiceGettingStartedGuide.pdf?modelType=spice-models 

 

 


 

 

기본 세팅에 대하여

 

  시작하기 전에 기본적인 세팅부터 진행하는 것을 권장한다. 이 내용들은 아래 블로그를 참고하였고, 많은 도움을 받았기에 출처를 밝혀둔다. (https://m.blog.naver.com/tnghks1416/221703844611

 

  LTspice를 구동하면 아래와 같은 화면을 처음 만나게 될 것이다. 별생각 없다가 문득 저 백그라운드 그림이 무엇을 의미하는지 궁금해졌다. 역시 구글에는 없는 것이 없었다. LTspice 공식 트위터 계정에서 이 이미지가 무엇인지를 알려주고 있는데, 최초의 아날로그 컴퓨터의 X-ray 사진이라고 한다. 나도 엔지니어지만, 엔지니어들의 센스란 참... 🙄

 

LTspice의 첫 화면

 

나 말고도 이런 게 궁금했던 사람이 있었나보다.

 

  자, 그럼 일단 Tools > Control panel을 눌러서 세팅 창을 연다. 아래와 같이 패널에 보이는 망치 모양 아이콘을 클릭해도 동일하게 설정 창이 열린다.

 

어떤 방법을 사용해도 동일하다.

  SPICE 탭에서 Solver의 정확도를 수정하거나 Thread priority 등을 변경할 수 있다. 해당 부분은 시뮬레이터의 연산 시간과 밀접한 관련이 있으니, 정확도와 소요 시간 사이의 trade-off 관계를 잘 고려해서 결정하면 된다. 다음으로 좀 더 쾌적한 GUI 환경을 만들기 위해 아래와 같이 세팅하면 좋다. Drafting Options 탭으로 들어가서 아래와 같이 변경해 준다.

 

  • Show schematic grid points 체크
  • Pen thickness = 3으로 변경
  • Reverse Mouse Wheel Scroll 체크
  • Color Scheme에서 Background 색상을 white로 변경

  물론 이 세팅이 정답은 아니고, 본인 입맛대로 바꿔줘도 무방하다. 이렇게 변경하면 아래와 같이 회로도를 조금 더 보기 편하게 출력해 준다.

 

시원시원해서 보기 좋은 것은 나만의 착각일까

 

  다음으로 Hot Keys 버튼을 눌러서, 단축키를 본인 취향대로 변경해 준다. 보통 Virtuoso를 쓰던 사람들은 해당 tool에서 쓰던 단축키대로 변경해서 쓰는 듯했다. 나는 딱히 Virtuoso를 사용할 일도 많이 없기 때문에 그냥 내가 느끼기에 직관적인 단축키 입력으로 변경했다.

 

단축키를 잘 쓰는게 시간을 아끼는 길

 

  마지막으로 Waveforms 탭에서 Data trace width를 3으로 변경하였다. 시뮬레이터에서 보여주는 trace의 굵기가 더 크게 바뀌는 것을 알 수 있다.

 

이렇게 바꿔주자

 

  만약 현재 세팅에서 기본 설정으로 돌리고 싶다면, Reset to Default Values 버튼을 클릭하면 된다. 여기까지 했으면 기본적인 세팅은 다 끝난 것이다. 이제 본격적으로 회로를 그려보자.

 

 


 

 

본격적으로 시작해보기

 

  일단 회로를 그리기 위해 아래의 New schematic 버튼을 클릭한다.

 

시원한 백색의 도화지가 나타난다

 

기본 아이콘들에 대한 설명은 아래와 같다.

 

 

  다음으로 Component를 배치한다. 각 Component를 우클릭해서 세부 설정을 변경해줄 수 있다. 간단한 CMOS 인버터 회로를 그려보았다. 라이브러리에서 디폴트로 W/L 사이즈를 제한하고 있어서 W=8, L=2의 최소 사이즈로 입력해주었다. 사용하고 있는 라이브러리에 따라 적절하게 W(Width)와 L(Length)를 조절해 주면 된다.

 

기본적인 인버터 회로

 

  이제 label을 달아준다. 전압이나 전류 등을 측정할 때, label이 있으면 특정 node의 값을 찾기가 쉬워서 시뮬레이션 분석이 편해진다. 이때, Port type으로 방향을 정할 수 있으니 원하는 대로 달아주면 된다. 보통 VDD나 GND 등은 In/Out 양방향으로 설정하면 된다.

 

직관적인 이름이 좋다

 

  다음으로 symbol을 그려보자. 아래의 버튼을 누르면 심볼을 그릴 수 있다. 심볼은 상위 hierarchy에서 해당 instance를 instantiation 할 때, 회로를 표현해주는 그림이다. 버튼을 누르면, "Couldn't find the sheet's symbol. Shall I try to automatically generate one?"이라는 팝업이 뜨는데, 그냥 예(Y)를 누르면 된다. 이제 아주 심플한 모양의 네모 박스가 보일 텐데, 웬... 만하면 그냥 지우고 우리에게 익숙한 직관적인 형태의 instance 모양대로 그려줘라. 예를 들면 이런 형태로 해주라는 말이다.

 

귀차니즘을 이겨내야 한다

 

  상단의 Draw 탭을 눌러서 나오는 아이콘을 사용해서 그리면 되는데, 원이나 포물선을 그리는 게 중앙부터 선이 그려지지 않아, 조금 병맛스러운데 적응되면 나름 할만하다. 

 

Draw 탭 화면

 

  검색해도 잘 안 나오던 것 중에, Bus 입/출력 (Multi bitwidth port)을 사용하는 게 있는데, 이 것 저 것 해보다가 어찌어찌 됐다. Multi bit는 흔히 사용하게 되는 부분이라, 자료가 많을 줄 알았는데 생각보다 많이 없었다. 일단 3bit D flip-flop을 예시로 보여주면 아래와 같이 연결해주면 된다.

 

3-bit D flip-flop 회로도

 

  이제 어떻게 하면 되는지 알아보자. 먼저 라벨에서 위의 그림처럼 array 형태로 생성하면, 각 포트 별로 bus로 만들 것인지를 물어본다. 예라고 하면, 조금 두꺼운 wire가 달리는 라벨이 만들어진다. 여기에 Edit > Place BUS tap으로 개별 포트를 위에서 했듯이 연결해주면 된다.

 

Place BUS tap

 

  가끔 시뮬레이션에서 pin을 못 찾겠다는 error 메시지가 발생할 때가 있는데, View > pin table을 통해 Spice order가 순서대로 잘 되어 있는지 확인해라. 가끔 복사&붙여넣기를 하면서 포트를 날리게 되는 경우가 있는데, 해당 번호를 빼고 list를 만들기 때문에 시뮬레이션 엔진이 이 pin을 못 찾는 경우가 있다. 이런 사소한 오류 때문에 해결하는 데에 시간을 꽤나 소모했다. 동일한 문제에 봉착한 누군가에게 꿀팁이 되길 바란다.

 

빠진 숫자 없는 지 확인!

 

  심볼까지 잘 만들었다면 이제 회로 시뮬레이션을 돌려볼 차례이다. 당연히 parametric sweep을 통해 한 번에 여러 조건으로 시뮬레이션을 해보고 싶을 것이다. LTspice는 당연히 이런 기능도 지원하고 있기에, 여기서는 트랜지스터의 width를 파라미터로 지정하고 sweep 하는 예시를 첨부하고자 한다. 전압이나 주파수 등을 parametric sweep으로 시뮬레이션하는 방법도 이와 동일하다.

 

  먼저 회로도에서 spice derivative 아이콘을 눌러서 파라미터를 아래와 같이 지정한다. 일단은 .param 명령어로 기본 값을 설정해 두고, 해당 파라미터로 변경할 부분 (여기에서는 W)에 대괄호로 쌓아서 연산식을 넣어 준다. 이 예시에서는 drive strength를 파라미터로 두고, sweep 할 수 있도록 구현하였다. 참고로 spice derivative 아이콘을 클릭해서 measure나 tran과 같은 명령어도 넣어 줄 수 있다.

 

parameter sweep을 위해 변경한 회로

 

  상위 단계에서 해당 instance를 instantiation 한 후에, instance를 우클릭해서 parameter를 직접 설정하는 것도 가능하다.

 

PARAMS 부분에 앞서 설정한 parameter를 직접 명시

 

  이제 구현한 회로를 검증하기 위해, testbench를 만드는 과정을 설명하려 한다. 현재 그린 회로도에 전류원, 전압원 등을 넣어주고 시뮬레이션을 진행해도 되지만, 새로 testbench 용도의 cell을 만드는 것을 더 추천한다. 전압은 LTspice에서 기본적으로 제공하는 voltage source를 넣어주면 된다. Virtuoso는 vdc와 vpulse가 각각 instance로 구현되어 있는데, LTspice는 그냥 voltage 하나로 두 기능 모두 지원한다. DC를 넣어 주고 싶다면 아래와 같이 적어주면 되고, AC 신호를 넣어주고 싶으면 Advanced 버튼을 누르고 설정해주면 된다.

 

DC 전압을 설정

 

  아래는 간단한 pulse 신호를 만들어 주는 예시이다. Tdelay를 통해 처음 신호가 나오기 전에 지연 시간을 설정해줄 수 있다. Trise와 Tfall은 각각 rising time과 falling time이고, Ton과 Tperiod를 조절하여 duty ratio를 변경해줄 수 있다. 아래 예시는 T=10ns인, 100 MHz로 pulse 신호를 출력하는 전압원이다.

 

Vpulse 생성 예시

  시뮬레이션은 메뉴의 Simulate -> run으로 실행해도 되고, 달리기하고 있는 사람 아이콘을 클릭해도 된다. run이 달리기라는 뜻도 가지고 있기 때문에 이런 아이콘을 만든 것으로 유추해 볼 수 있다. (haha...)

 

run!

 

  아래 파형을 통해 시뮬레이션이 잘 되었음을 확인할 수 있다. Plot을 보여주는 창을 더 추가하기 위해서는 Add Plot Pane 버튼을 누르면 되고, 해당 창에 trace를 더 추가하려면 Add Traces 버튼을 누르면 된다.

 

Waveform viewer 화면

 

  신호 라벨의 이름을 클릭하면, 창 위에 cursor가 표시되고 구체적인 값이나 두 cursor 간의 time difference를 볼 수 있다. 

 

디테일한 값을 확인 가능

 

  앞부분에서 잠시 언급했는데, LTspice도 기본적으로 SPICE 계열이다 보니, hspice 등에서 사용되는 구문도 사용할 수 있다. spice directive icon을 클릭하고, .measure 구문을 아래와 같이 기술하면 된다. 아래 예시는 입력이 처음 0.5V가 되는 rise 시점부터 두 번째 0.5V가 rise 되는 시점까지의 시간 주기를 구하는 구문이다.

 

measure 구문 예시

 

  결과는 VIEW > SPICE Error Log를 누르면 텍스트 형태의 리포트를 볼 수 있다.

리포트된 결과

 

 

마무리하며

 

  아마 이 블로그를 찾아주신 분들은 대부분 디지털 회로에 관심이 있거나, 해당 분야에 종사하고 있는 분이 많을 것이라고 생각한다. 이 블로그도 대부분 디지털 회로 관련 내용만 올리다 보니, 이 포스팅을 기획하면서 어떤 카테고리에 글을 올려야 하는지부터 고민이 많이 되었다. 일단 Convergence Factory라는 카테고리를 새로 만들었다. 이름에서부터 알 수 있듯이 융합이라는 명목 아래 잡다한 내용들을 다룰 생각이다. 앞으로 이 카테고리에 디지털 회로 외의 내용이나 다른 학문 및 분야에서 관심 있게 보던 내용에 대해 종종 글을 쓰려고 한다.

 

  디지털 회로 설계자가 단순히 디지털 회로만 잘해서는 큰 메리트가 없는 요즘이다. LTspice는 프리웨어이면서, 간단한 아날로그 회로 시뮬레이션을 위해서는 필수적인 기능들은 모두 갖추고 있다. LTSpice를 통해 아날로그 회로 공부를 시작하고자 하는 사람들에게 이 포스팅이 조금의 도움이 되었으면 하는 바람이다. 공부란 정말 끝이 없는 듯하다. 성장을 소원하는 모든 엔지니어들을 응원하며 이만 글을 줄인다.

 

 

 

 

댓글
공지사항