본문 바로가기
# Semiconductor/- Semicon Academy

[Harman 세미콘 아카데미] 67일차 - Full Custom IC(반도체 이론 / Initial Setting / NOT & NAND Sechmatic, Symbol 생성, Simulation)

by Graffitio 2023. 10. 4.
[Harman 세미콘 아카데미] 67일차 - Full Custom IC(반도체 이론 / Initial Setting / NOT & NAND Sechmatic, Symbol 생성, Simulation)
728x90
반응형
[반도체 이론]

 

📌 반도체란?

 

반도체가 뭐냐? 물어보면

대부분은 도체와 부도체의 중간적인 성질을 가진 물질입니다~ 라고 대답하는데

한 70%정도의 답변이라고 보면 된다.

 

반도체는 Si, Ge 등으로 구성되어 있고

어떠한 조건이 충족되면 Si가 도체 또는 부도체로 변환된다.

이 때, 그 기준은 Vt(문턱전압) : 0.7V

 


 

📌 수동 소자와 능동 소자

 

수동소자

      : R, L, C

        → +와 -의 구분이 없다.

능동 소자

      : Diode, BJT, MOSFET, OP-Amp

        → +와 -의 구분이 있다.(ex : Anode/Cathode)

 

1. Diode - PN Junction

일반적으로 원소는 1족부터 8족으로 구분되고, 우리가 다루게될 반도체에 사용되는 원소는 3족, 4족, 5족 원소이며,
n족은 전자의 갯수가 n개라 생각하면 되고, 반도체의 대부분을 구성하는 Si는 4족 원소이다.

4족 원소는 쉽게 말하자면, 전자가 4개, 정공이 4개로 수가 같은 원소를 의미하는데,

여기서 짚고 넘어가야될 이론이 두 가지가 있다.

 

첫 번째는 전자의 전기량과 정공의 전기량 중 어느 것이 더 크냐? 의 문제로,

전자와 정공이 결합하여 중성이 되려면 서로의 전기량은 같아야 하며,

실제로 전자의 전기량은 -1.6x10^-19, 정공의 전기량은 +1.6x10^-19으로 부호만 다르지 절대값은 같다.

 

두 번째로 이동도(모빌리티)에 관한 내용인데,

똑같이 몸무게가 60kg이 나가는 남성과 여성이 있다.

반례가 있긴 하겠지만, 100m 달리기를 한다면 거의 대부분의 경우 남성이 훨씬 빠를 것이다.

이를 식으로 표시하면, μ남 = μ여 x 2 로 나타낼 수 있고

위 예시와 유사하게, 모빌리티 μ는 전자가 정공보다 약 2~3배정도 빠르다.

 

Si 원자들은 4족 원소로서,

서로 간의 전자를 공유하여 8개의 전자가 충족되고 안정된 상태가 된다.

이를 공유결합이라하며, 안정된 상태이므로 전자가 쉽게 빠지지 않는다

→ 부도체이며 여기서 진성 반도체는 부도체이다.

 

 

이러한 4족 원소들 사이에 3족 또는 5족의 원소들을 첨가(도핑)하면,

전자가 하나 부족하거나(N-type) 하나 남는(P-type) 현상이 발생한다.

이때, P-type의 다수캐리어는 정공, 소수캐리어는 전자가 되고

N-type의 다수캐리어는 전자, 소수캐리어는 정공이 된다.

 

cf) 반도체의 실리콘과 공사장에서 쓰는 실리콘은 같은 실리콘일까?

    정답 : No

    해설 : 공사장에서 사용하는 실리콘은 Silicon과 같이 단어에 e가 붙어 있다. 

              위와 같이 구분한 이유는 탄소 등 불순물들이 많이 섞인 실리콘이라는 뜻이며,

              반도체에 사용되는 실리콘은 Si 함량 99.9999999999%의

              순도 높은 진성 실리콘이다.  

 

2. BJT

 

BJT는 Bipolar Junction Transistor의 약자로,

반도체 3개를 합쳐놓은 반도체 소자이다.

Emitter - Base - Collector로 총 3개의 다리를 가지고 있고, 고주파 특성이 좋다는 장점이 있다.

저 화살표 방향때문에 맨날 헷갈리는데,

베이스에 화살맞은쪽이 피가 많이 나니까 PNP 형이라 외우면 됨.

 

3. FET

FET은 일단 MOSFET만 알면 90%는 먹고 들어간다고 보면 된다.

MOSFET은 Metal-Oxide-Semoconductor Field-Effect-Transistor 의 약자로,

MOS와 FET을 결합한 반도체 소자이다.

먼저 MOS는 금속과 반도체 사이에 부도체가 들어있는 적층 구조라는 의미이며,

Oxide의 유전률이 MOS의 특성을 결정짓는다.

FET는 전계효과를 활용하여 전압을 증폭시키는 트랜지스터를 의미하는데,

개념만 들으면 솔직히 잘 이해가 되지 않는다.

 

n-channel MOSFET

위 MOSFET을 예시로 들어보자.

여기서 전계는 Field를 의미하고 Source-Drain / Gate-Body 각각 사이에

전압을 걸어주면, 전위차에 의해 전계가 형성되고

문턱전압(Vt)을 넘게 되어 전기가 흐를 수 있는 형태가 된다.

이때문에 전계효과를 사용한다는 말을 쓰는 것이고, 낮은 전압을 Gate에 걸어줘도 도체로 변하여

Source-Drain 사이에 전압이 흐를 수 있기 때문에 전압 증폭 효과를 가진다

 

 

 

좀 더 자세히 설명하자면,
Gate에 문턱전압인 0.7V 이상의 전압을 인가하면, Field가 만들어지면서

P형 반도체에 있는 전자들을 끌어오고(Effect), 여기에 N형 반도체의 자유전자로 인해

채널이 형성된다. 이 채널을 통해 전류가 흐르게 되며, 이때를 Tr On 상태라고 부른다.

 

 

반대로 pMOS는 Gate측에 -전압을 걸어주면, 정공들이 가운데로 배치되면서 채널이 형성된다.

이로 인해 전기가 흐를 수 있는 상태가 되고 이 때를 Tr On 상태라고 한다.

 

 

위 심볼은 nMOS와 pMOS를 쉽게 표현한 그림이며, Source와 Drain의 위치는 바뀔 수 있다.

 

 


 

[Initial Setting]

 

 

MobaXterm 아이콘을 클릭하여 실행한다.

 

 

Session을 추가하여 Host Server에 접속한다.

 

 

패스워드를 입력하고 접속하면 아래와 같은 창이 출력된다.

 

 

 

// list에서 라이브러리의 경로를 확인
$ ls

// 해당 라이브러리의 디렉토리로 이동
$ cd gpdk090_4.6

// Virtuoso실행
$ virtuoso &

// 이렇게 한 줄씩 작성하면, Virtuoso를 실행할 수 있다.

 

Tip) gpk까지만 치고 Tab을 누르면, 나머지 부분은 자동완성된다.

 

 

우리가 사용할 라이브러리인 gpdk090이 있는지 체크해준다.

 

 

만약 라이브러리가 없다면, path editor를 통해 gpdk090을 추가해주면 된다.

 

gpdk090이 뭐냐?

90나노짜리를 쓴다는 의미

교육용이라 싸게 나온 거지, 기업에서 사면 툴 라이센스 하나에 아파트 한 채 급

툴이 망가지면 그냥 주겠니? 또 돈 내야지.

그러니 라이브러리 수정하거나 손상시키지 말 것.

 


 

[Library 생성]

 

 

라이브러리 매니저에서 새로운 라이브러리를 추가한다.

 

.

라이브러리명은 가능하면 대문자로 만들어줄 것.

 

 

서버에 라이브러리가 있고,

그 라이브러리를 내 라이브러리(JWS)에 얹어서 사용할 것이다. 라는 의미

초기에 한 번만 설정하면 됨.

 

 

gpdk090 선택하고 Ok

 

 

생성된 나만의 라이브러리에 NOT gate라는 File을 추가할 것이다.

 

 


 

 

 

위와 같이 설계에 용이하게 화면 구성을 설정할 수 있다.

 


 

[Not gate 구현]

 

📌 NOT gate 동작 원리

      Schematic을 그리기에 앞서 원리부터 알아보자.

      

NOT gate

      위 그림처럼 Vin에 논리 1(1V)을 준다면,

      pMOS에서는 VDD(5V)보다 작기 때문에 채널이 형성되지 않고

      nMOS에서는 VSS(0V)보다 크기 떄문에 채널이 형성되어 VSS인 0V(논리 0)이 출력되며,

      위와 같은 원리로 입력과 반대되는 출력이 나오게 된다.

 

      cf) 왜 pMOS가 위에 배치되느냐?

           nMOS는 기준 전압이 0V, pMOS는 기준 전압이 5V이므로

           단자 연결을 편하게 하기 위해서 pMOS를 VDD에 가깝게 배치한다.

 


 

📌 NOT gate 구현

 

Virtuoso에서는 단축키를 사용하면 상당히 쉽고 빠르게 작업을 수행할 수 있으니, 반드시 숙지할 것.

 

 

단축키 I 를 눌러서 Add Instance를 열고

원하는 Cell을 선택하면,

아래 그림처럼 Schematic에 추가할 수 있다.

 

 

 

마우스 우클릭 + 드래그를 활용하면, Cell을 원하는 만큼 확대할 수도 있다.

 

 

Properties를 변경하고 싶은 Cell을 한 번 클릭하고 단축키 Q를 누르면, 위와 같이 속성 창이 뜬다.

여기서 내가 원하는 수치로 변경할 수 있다.

 

변경 이후의 PMOS Cell(100n & 2u)

 

 

이런 식으로 작성하면, 한 번에 여러 개의 라벨을 달아줄 수 있으며,

Input/Output Pin을 설정할 때에도 해당 기능이 적용된다.

 

 

완성된 Not gate (Invertor)

 

 

오류없이 정상적으로 디자인이 완성되었다면, no errors 메세지와 함께 이상없이 저장된다.

하지만, 단선이 되어 있는 등 오류가 발생한 상태라면,

아래 그림들과 같이 Warning 메시지와 해당 오류에 대한 내용이 Log에 출력된다.

 

 


 

Net highlght를 설정해주면 어디에 Pin이 묶여있는지 보기 편해진다.

 


 

[Symbol 만들기]

 

나중에 해당 Cell을 인스턴스 해서 써야 되는데,

스키마틱을 그대로 가져올 수는 없다.

따라서 해당 Cell에 맞는 Symbol을 그려줘야 한다.

 

해당 경로의 From Cellview 클릭

 

 

잡다한 거 다 지우고, 위와 같은 상태로 만든다.

 

그리기 도구

상단 메뉴바를 보면,

위 그림과 같은 그리기 도구가 있는데

이 것들을 사용하여 심볼을 그려주면 된다.

 

단축키 L을 눌러 심볼명을 설정해준다.

 

심볼이 완성되었고, 라이브러리에도 생성된 것을 확인할 수 있다.

 


 

[Simulation]

 

📌 NOT gate 동작 원리

 

입력이 0~1V로 0.01의 step size를 가지고 증가한다 할 때,

NOT gate를 통한 출력은 이론적으로 0.5V 지점에서 반전되어야 한다.

하지만 MOSFET 간의 특성 차이로 인해 다른 지점에서 반전이 이루어질 수 있다.

위 그림과 같이 0.5V 이전에 반전이 일어난다면,

pMOS 전류를 더 크게 만들어줘야 하는데, 이에 해당하는 공식은 다음과 같다.

전류를 조정해야 할 때 어떤 값을 조절해줘야 할까?

일단 µ(모빌리티, 이동도)는 원소의 특성이니 건들 수 없다.

Cox(산화물이 가지는 Capacitance)와 Vgs-Vth는 공정팀에서 한 번 세팅하면 바꾸기 힘들다.

웨이퍼를 한 번 만들 때, 동일하게 만들어야 하기 때문이다.

왜냐? 똑같은 공정에서 만들기 때문에 한 놈만 특별히 커스텀해줄 수는 없다.

따라서 Cox 값도 바꿀 수 없음.

즉, 반도체 하나때문에 공정을 뜯어 고칠 수는 없으므로 그냥 바꿀 수 없다고 보면 된다. 

그렇다면 W/L밖에 안 남는데, 이 것은 위 그림처럼 MOSFET의 채널 길이와 폭을 의미한다.

따라서 우리는 W와 L을 조절하여 MOSFET 전류를 조절할 수 있으며,전송속도나 전력 효율등에 따라 W와 L을 적절하게 조절하게 된다.

 


 

📌 NOT gate Simulation

우리가 만든 Not gate를 시뮬레이션하여 제대로 만들어졌는지 확인해볼 것이다.

위에서 배운 동작 원리를 바탕으로 최적화된 동작 전류를 찾아보자.

 

새로운 Cell file 생성

 

NOT_TEST로 만들어준 뒤 실행한다.

 

 

위와 같이 내 라이브러리JWS에서 NOT gate를,

anallogLib에서 vdc/gnd를 Instance하여 아래처럼 배치해준다.

 

 

VDD, VSS는 1V로, VIN은 0~1까지 가변해서 사용할 것이므로 VIN으로 셋팅

 


 

Tip

 

심볼 누른 상태로 단축키 E를 누르고 Ok를 누르면,

 

해당 심볼의 스키마틱으로 이동한다.

그리고 Ctrl + e 를 누르면, 다시 NOT_TEST File로 복귀한다.

 


 

인가할 값들도 설정했고, 이제 시뮬레이션을 돌려보자.

 

Lauch → ADE L 클릭

 

Variables에서 Copy From Cellview 클릭

 

Analyses → Choose

 

DC Sweep이라 생각하면 된다.

VIN에다가 0V~1V까지 0.01V마다 한 번씩 Linear하게 시뮬레이션할 것이라는 의미이다.

 

 

만약 변수명을 잘못 입력하면, 위와 같이 Error 메세지가 발생하며

Error part는 분홍색 레이어처리된다.

 

Netlist & Run

 

 

위와 같이 Error가 뜨는 경우가 있는데, Check and Save를 안 해줘서 그런 것이다.

 

 

테스트하는 스키마틱과 심볼, TEST를 다시 세이브하고 돌리면 정상적으로 잘 진행된다.

 

Main From 출력

 

 

VIN이 500mV인 지점에서 만나야 하는데, 지금은 430mV에서 만난다.

따라서 W값의 범위를 지정하여 시뮬레이션하고 알맞는 지점을 찾아볼 것이다.

 

Total Width를 WIDTH 변수로 지정

 

다시 NOT_TEST의 ADE L을 실행시키면 변수가 두 개로 바뀐 것을 볼 수 있다.

이제부터 각 변수를 따로따로 설정해줄 것이다.

 

DC Sweep이라 생각하면 된다.

변수 셋팅, Analyses - choose

여기서는 VIN 변수만 설정

 

 

여기에서는 WIDTH의 변수 설정
Run

 

 

만약 중간에 멈추면, 몇 달이 지나도 안 되는 거니까 어디서 문제인지 찾아서 고쳐야 한다.

 

 

Main Form을 켜주고,

NOT_TEST의 VIN, VOUT을 클릭해주면, 위와 같이 그래프로 변화하는 값을 볼 수 있다.

 

 

2~3u 사이인 것은 알았으니까, 범위를 좀 더 좁혀서 시뮬레이션

 

 

좀 더 범위 좁히고 또 돌려

 

 

여기서부터 더 돌리는 것은 의미가 없다

왜냐하면 그렇게 상세히 해도 공정팀에서 못 만들어

따라서 소수 둘째 짜리까지만 하고

좀 더 가까운 2.91u로 설정하면 된다.

 

NOT 스키마틱에 들어가서 바꿔준다.

 


 

[NAND 구현]

 

📌 NAND와 NOR의 기본 원리

 

일반적으로 F =  X̄ 일 때,

if x = AND((A+B)')pMOS block : 병렬  / nMOS block : 직렬

      = OR((AxB)')   → pMOS block : 직렬  / nMOS block : 병렬

 

NAND를 하나 그려보면 다음과 같으며,

위와 같이 MOSFET을 배치하면 NAND 연산의 결과를 출력해낼 수 있다.

 

cf) F = (AxB + C)' 의 Schematic을 그리는 방법은 여러 가지가 있다.

    대표적인 것 두 가지를 그려보면 아래와 같은데, 둘 중에서 어떤 회로가 좋은 회로일까?

    정답 : 왼쪽이 더 성능이 좋은 회로이다.

    먼저 회로의 좋고 나쁨의 기준은 다음과 같다.

    i) Performance

    ii) Cost

    iii) Power(저전력일수록 좋음)

    출력 측에 연결된 갯수를 보면, 좌측은 3개 / 우측은 4개이다.

    MOSFET도 결국에는 PN접합으로 이루어진 소자이기 때문에

    PN접합 사이에 발생한 공핍층이 커패시터(C) 역할을 한다.

    따라서 좌측은 3C / 우측은 4C 로 볼 수 있고, τ = r x C이며,

    이 때 τ 는 딜레이이므로 결국 C값이 큰 쪽이 전송속도가 느릴 수 밖에 없다.

 


 

📌 Schematic 생성

 

 

 

2NAND니까, pMOS는 병렬/ nMOS는 직렬로 배치하고 

nMOS의 W = 1u, pMOS의 W =WIDTH로 설정

.

 

Tip) Shift 키를 누르고 part를 클릭하면 여러 part를 동시에 클릭할 수 있다.

또한 그 상태에서 단축키 Q를 누르고, all selected 설정해주면

여러 part에 동시에 변경된 속성을 적용시킬 수 있다.

 

완성된 2NAND Schematic

 


 

📌 Symbol 생성

 

해당 경로로 가서 심볼을 만들어 주자.

 

필요없는 것은 지우고, 심볼을 그려보자

 

심볼 완성

 


 

📌 Simulation

 

A B NAND
0 0 1
0 1 1
1 0 1
1 1 0

NAND 연산의 결과를 나타낸 표이다.

똑같은 결과가 나오는 부분은 상관없고, 출력값이 변환되는 부분만 짤라서 보면 된다.

 

A B NAND
1 0 1
1 1 0

위 표를 보면, A는 1로 값을 고정시켜놓고 B만 바꿔가면서 Not gate처럼 Simul돌리면 될 것 같다.

 

 

2NAND_TEST 생성

 

 

1~10u를 0.1u size로 돌리면 안 되냐?

되긴 된다.

하지만, 시간을 엄청 잡아먹을 뿐더러 실수가 발생했을 경우에 그 시간 다 날림.

그러니까 짧게 여러 번 나눠서 하는 것을 추천한다.

 

 

VINB와 VOUT의 교점은 2~3u 사이에 위치하므로 범위를 좁혀서 다시 시뮬레이션

 

 

 

2.5~2.6 사이에 교점 발생,

범위 좁혀서 다시 또 돌리자.

 

 

 

2.53u에 좀 더 가까우므로 W = 2.53u를 채택

 

 


 

 

728x90
반응형