EDA/Open Source Circuit Design Tutorial

#3 Xschem을 이용한 Inverter 설계

돌머리 돌돌 2026. 2. 4. 19:40

이제 본격적으로 실습을 시작하기 위해 디렉토리 작업을 해보겠습니다.

Git_Download 내 다운받았던 PDK를 편하게 쓰고자 심볼릭 링크로 만들어놓겠습니다.

cd /home
mkdir pdk
cd pdk
ln -s home/Git_download/ETRI-0.5um-CMOS-MPW-Std-Cell-DK /home/pdk/ETRI050_DesignKit

 

실습을 진행할 디렉토리도 생성해봅시다.

cd /home
mkdir Tutorial_inverter
cd Tutorial_inverter
mkdir 1-1_Inverter_XSchem
cd 1-1_Inverter_XSchem

이제 Xschem을 실행해주세요.

 

Xschem의 간단한 조작법을 알려드리면
마우스 휠을 눌러서 도면의 상하 좌우를 움직일 수 있으며 휠을 굴리면 확대 및 축소가 가능합니다.

그러면 인버터 설계를 위해 nmospmos를 각각 하나씩 삽입해 봅시다.

Insert키를 눌러주세요 (혹은 우 클릭 후 Insert symbol)
Home 버튼을 누르고 XSchem 기본 라이브러리에서 제공하는 라이브러리에 들어갑니다.

/usr/local/xschem/xschem_library/devices

 

이제 nmos-sub.sympmos-sub.sym을 각각 하나씩 삽입해주세요.

소자마다 parameter가 총 3개가 있을 겁니다.
순서대로 소자의 width(, w) / length(길이, l) / multiplier (개수, m) 입니다.

저희가 사용하는 공정은 ETRI 500nm 공정입니다.
최소 length 0.5u, 최소 width1.8u 정도 됩니다.

소자를 좌 클릭 한 후 q를 누르면 특성을 수정할 수 있습니다.
nmoswidth3u, length0.6u
pmoswidth6u, length0.6u로 변경해줍시다.

 model은 각각 nmos, pmos로 되어있을 텐데 nfet, pfet으로 변경해주세요.
수정이 완료되면 OK 버튼을 눌러주세요.

 

W 키를 누르면 wire (배선)을 깔 수 있습니다. 우리가 알고 있는 인버터 처럼 배선을 깔아줍시다.

다음으로는 총 4개의 Pin을 붙이겠습니다. (VDD, VSS, Vin, Vout)

다시 Insert 키를 누른 후
Vin – ipin.sym (입력 핀)
Voutopin.sym (출력 핀)
VDD, VSS – iopin.sym (입출력 핀) 을 각각 가져와 붙여줍니다.

Pin을 누른 후 Q를 눌러서 핀의 이름을 붙여줄 수 있습니다.
다음으로는 Pin을 누르고 Shift + S를 눌러 핀 번호를 설정해 줍니다.
Vin0, Vout1, VDD2, VSS3으로 정하겠습니다.

회로가 완성됐다면 파일 명을 Inverter로 정하고 Save 버튼을 눌러 저장하겠습니다.

그리고 Netlist 버튼을 눌러주세요.

 

 

이제 저희가 만든 인버터의 심볼을 그리겠습니다.
상단의 툴바에서 File -> Clear Symbol을 눌러주세요. (여기서는 New가 아니라 Clear입니다)

빈 창이 뜹니다.


여기서는 선, , 문자 등 다양한 그림 도구를 사용하여 심볼을 그릴 수 있습니다.
저는 간단하게 그리긴 했습니다만 편하신 대로 그리시면 됩니다.

설정에 들어가면 글자 크기도 조절할 수 있습니다.

이제 핀을 붙여봅시다.
Symbol -> Place symbol pin 을 누르면 빨간색 점이 생깁니다.
필요한 곳에 붙인 후 Q를 눌러 이름과 방향을 맞춰주세요.

다음으로는 핀의 순서를 정해야 합니다.
아까 Schematic에서 한 것과 동일하게 하면 됩니다.

이제 심볼에 속성을 정의해 봅시다.
심볼 밖의 바탕을 더블 클릭 한 후 다음 글자를 넣어주세요

type=subcircuit
format="@name @pinlist @symname"
template="name=X1"

이는 해당 데이터가 인스턴스 명과 핀 목록 심볼 세 가지를 갖고 있으며 가져와서 사용시 자동으로 이름이 붙게 됩니다.

다음 장에서는 해당 회로를 Ngspice를 이용하여 시뮬레이션 돌려보도록 하겠습니다.