728x90

독립 바이어스 PMOS 전류원 부하 · DC Sweep · AC Gain · MATLAB 후처리

용어에 대한 주의
본 문서에서는 사용자가 정한 ‘수동소자가 있는 차동쌍’이라는 프로젝트 표현을 유지한다. 다만 물리적으로 M3/M4는 PMOS 능동소자다. 또한 이 회로는 M1 전류를 M3/M4가 출력으로 복사하는 전형적인 능동 전류미러 부하가 아니라, I2가 M3에 기준전류를 강제해 M4의 게이트 바이어스를 독립적으로 만드는 current-source load 구조다.

1. NET 설정값부터 이해하기

회로를 설명할 때는 그래프보다 먼저 NET의 각 줄이 어떤 물리적 의미를 갖는지 확인해야 한다. 현재 회로는 VDD=5 V, tail current I1=100 µA, PMOS 기준전류 I2=100 µA, VIN2=2 V를 기준으로 하고 VIN1을 DC sweep 또는 AC 입력으로 사용한다.

 LTspice NET


I1 N003 0 50µ
V1 N001 0 1.8v
V2 V_in1 0 1.2 AC 0.5 0
V3 V_in2 0 1.2 AC 0.5 180
I2 N002 0 10µ
M1 N001 V_in1 N003 0 MY_NMOS l=1u w=20u ad=100p as=100p pd=30u ps=30u
M2 V_out V_in2 N003 0 MY_NMOS l=1u w=20u ad=100p as=100p pd=30u ps=30u
M3 N002 N002 N001 N001 MY_PMOS l=1u w=40u ad=200p as=200p pd=50u ps=50u
M4 V_out N002 N001 N001 MY_PMOS l=1u w=40u ad=200p as=200p pd=50u ps=50u
.model NMOS NMOS
.model PMOS PMOS
.lib C:\Users\ddrs4\AppData\Local\LTspice\lib\cmp\standard.mos
* .ac dec 100 1 100meg
* .dc V2 0 3 0.001
.op
.model MY_NMOS nmos(vto=0.7 kp=100u lambda=0.02)
.model MY_PMOS pmos(vto=-0.7 kp=40u lambda=0.02)
.backanno
.end


항목 설정값 회로에서의 의미
V1 1.8 V 공급전압 VDD
V2 / V_in1 DC 1.2 V, AC 0.5V 0(위상) AC 입력. DC에서는 V2를 0~3 V로 sweep
V3 / V_in2 DC 1.2 V, AC 0.5V 180(위상) AC 입력.
I1 100 µA M1+M2의 전체 tail current
I2 100 µA M3 reference branch 전류
M1/M2 W=20 µm, L=1 µm NMOS source-coupled pair
M3/M4 W=40 µm, L=1 µm PMOS bias/reference와 출력 current-source load
.ac .ac dec 100 1 100meg 1 Hz~100 MHz, decade당 100 point
.dc .dc V2 0 3 0.001 VIN1을 0~3 V, 1 mV step으로 sweep

1.1 사용자 정의 MOS 모델

실제로 M1~M4가 참조하는 모델


.model MY_NMOS nmos(vto=0.7 kp=100u lambda=0.02).model MY_PMOS pmos(vto=-0.7 kp=40u lambda=0.02)

 

파라미터 NMOS PMOS 의미
VTO +0.7 V -0.7 V 문턱전압
KP 100 µA/V² 40 µA/V² Level-1 공정 transconductance parameter
λ 0.02 V⁻¹ 0.02 V⁻¹ 채널 길이 변조 → 유한한 ro
W/L 20 40 β=KP·W/L에 반영
β 2.0 mA/V² 1.6 mA/V² 포화전류와 gm을 정하는 계수

 

모델 선택 확인
NET에는 standard.mos와 '.model NMOS NMOS', '.model PMOS PMOS'도 남아 있지만 M1~M4의 model name은 MY_NMOS/MY_PMOS다. 따라서 핵심 해석에는 사용자 정의 Level-1 모델이 사용된다.

2. 회로의 목적과 각 소자의 역할

목적은 VIN1과 VIN2의 전압 차이를 M1/M2의 전류 분배(current steering)로 바꾸고, M2와 M4가 만나는 V_out에서 그 전류 변화를 전압 변화로 변환하는 것이다. 즉 differential input을 single-ended output으로 바꾸는 학습용 증폭기다.

소자 역할 동작
M1 VIN1 입력 NMOS VIN1↑ → ID1↑
M2 VIN2 입력 NMOS + 출력 branch ID2 변화가 VOUT에 직접 반영
I1 Tail current sink ID1+ID2≈100 µA
M3 Diode-connected PMOS I2가 요구하는 VSG를 생성
I2 PMOS 기준전류 M3에 100 µA를 강제
M4 출력 PMOS current-source load M3와 같은 gate/source bias로 VOUT에 전류 공급

 

전형적인 능동 전류미러 부하와 다름
M3는 M1 drain과 연결되어 있지 않다. 즉 M1의 신호전류가 M3→M4로 복사되는 구조가 아니다. M3/M4는 1:1 mirror 관계지만 reference는 M1이 아니라 독립 current source I2다.

 3. DC 동작 순서와 전류 흐름

3.1 I2 → M3 → N002 → M4 순서

M3는 gate와 drain이 N002에 묶인 diode-connected PMOS다. I2가 100 µA를 아래로 당기므로 M3는 그 전류를 흘릴 수 있을 때까지 N002를 자동으로 조정한다.

 

3.2 I1이 M1/M2의 합전류를 고정

I1=100 µA이므로 두 NMOS가 정상영역에 있을 때 ID1+ID2≈100 µA다. VIN1이 올라가 ID1이 증가하면 같은 만큼 ID2가 감소한다.

직관적으로 외우기
VIN1↑ → M1 전류↑ → M2 전류↓ → M4 공급전류가 상대적으로 더 커짐 → VOUT↑. VIN1이 매우 낮으면 M1≈OFF, M2≈100 µA, VOUT≈3.95 V.

 4. 전압이득을 구하는 세 가지 방법

4.1 DC transfer curve의 접선 기울기

DC local gain
A_v,Q≈dVOUT/dVIN1. Q-point 근처의 아주 작은 구간에서 계산해야 small-signal gain과 대응한다.

 

그래프에 표시된 두 점 (1.694 V, 3.95098 V)와 (1.735 V, 4.66378 V)를 연결한 평균 기울기는 17.385 V/V = 24.80 dB다. 이것은 41 mV 구간의 secant gain이지 특정 Q-point의 AC gain이 아니다.

4.2 AC analysis

V2의 AC amplitude가 1 V이고 V3의 AC=0이라면, 올바르게 VOUT을 export했을 때 |VOUT|=|VOUT/VIN1|이 된다. LTspice에서 가장 안전한 표현은 dB(V(v_out)/V(v_in1))이다.

진짜 차동이득 권장 설정
VIN1에 AC 0.5∠0°, VIN2에 AC 0.5∠180°를 넣고 dB(V(v_out)/V(v_in1,v_in2))를 사용하면 differential input amplitude가 정확히 1 V가 되어 정의가 명확하다.

 

4.3 소신호 근사식

VIN1≈VIN2이고 ID1≈ID2≈I1/2인 균형점 근처에서는 M4가 독립 current-source load로 동작하므로 single-ended differential gain을 대략 A_v,d≈+(gm/2)(ro2∥ro4)로 볼 수 있다. VIN1이 증가하면 VOUT가 증가하므로 VIN1→VOUT 경로의 부호는 +다.

 

5. DC Sweep 그래프: 두 번 꺾이는 이유

그림 2. DC Sweep Analysis: VIN1=0~3 V, VOUT 약 3.95~5 V

영역 VIN1 상태 출력
I 0 ~ 약 1.694 V M1 거의 OFF, M2≈100 µA VOUT≈3.95098 V
II 1.694 ~ 1.735 V M1 turn-on, current steering VOUT 급상승
III 1.735 V 이상 M4 saturation→triode 곡선 완만, VOUT→5 V

5.1 첫 번째 꺾임: VIN1≈1.694 V

M1이 OFF인 동안 M2가 100 µA를 담당한다. VOUT≈3.95098 V에서 NMOS Level-1 식을 풀면 공통 source 전압은 약 0.99273 V다. M1 turn-on 조건 VGS1≈VTH=0.7 V를 적용하면 VIN1≈0.99273+0.7=1.69273 V다.

항목 이론 그래프 차이
첫 knee VIN1 1.69273 V 1.694 V 1.27 mV
하단 VOUT 3.95010 V 3.95098 V 0.88 mV

 

즉 첫 번째 꺾임은 M1이 threshold를 넘으면서 tail current를 처음 가져가기 시작하는 물리적 turn-on 지점이다.

5.2 1.694~1.735 V가 매우 가파른 이유

M1이 µA보다도 작은 전류부터 가져가기 시작하면 M2 전류는 100 µA에서 감소한다. M4는 I2/M3로 정한 bias에 의해 여전히 거의 100 µA를 공급하려고 하므로, VOUT가 크게 변해 M4의 drain current가 M2 전류와 다시 같아지는 지점을 찾아야 한다. λ=0.02 V⁻¹로 출력저항이 크기 때문에 아주 작은 전류 차이가 큰 전압 변화로 바뀐다.

VIN1 계산 VOUT ID1 ID2
1.694 V 3.950985 V 0.00173 µA 99.99827 µA
1.721 V 4.324853 V 0.73409 µA 99.26591 µA
1.735 V 4.663763 V 1.54828 µA 98.45172 µA

 

VIN1이 41 mV 증가하는 동안 M1 전류는 약 1.55 µA만 증가했는데 VOUT는 약 0.713 V 증가한다. 이것이 그래프가 거의 수직처럼 보이는 이유다.

5.3 두 번째 꺾임: VOUT≈4.65 V

M4의 VSG≈1.04990 V이므로 overdrive VOV4≈0.34990 V다. PMOS 포화조건 VSD4≥VOV4에서 경계 출력은 VOUT≈5−0.34990=4.65010 V이다.

항목 이론 경계 그래프 표시 해석
M4 saturation→triode 4.65010 V 4.66378 V 표시점은 이론 경계를 약 13.68 mV 지난 위치
대표 VIN1 - 1.735 V 두 번째 굴곡 구간의 표시값

 

이 지점 이후 M4는 VOUT가 VDD에 가까워질수록 VSD가 작아져 공급전류가 감소한다. 그래서 출력은 더 이상 수직에 가깝게 오르지 않고 완만하게 5 V로 수렴한다.

 

6. AC 그래프 분석

이전에 함께 분석했던 질문자님 회로의 이론적 전압 이득 공식(\(A_v \approx g_{m1,2} \times (r_{o2} \parallel r_{o4})\))을 통해 계산된 실제 배수(V/V) 값이 있을 것입니다.
그 전압 배수 값에 로그를 취해 아래 공식으로 변환했을 때, 방금 구한 27.82 dB와 거의 일치하는지 확인해 보세요!
\(\text{Gain\ (dB)}=20\log _{10}(|{}A_{v}|{})\)
역으로 계산하면, 현재 회로는 입력 신호를 약 24.6배 증폭하고 있는 상태입니다.

 


7. MATLAB DC 코드 분석

업로드된 DC MATLAB 코드

 1. CSV 파일 데이터 불러오기
% 파일명이 data.csv가 아니라면 파일 경로와 이름을 맞게 수정해주세요.
data = readmatrix('\IC_Process_Passive_Current_Source_Load_DiffAmp.csv');
% 2. X축(입력 전압)과 Y축(출력 전압) 데이터 분리
voltage_in = data(:, 1); % 1번째 열: 0.0V ~ 3.0V
voltage_out = data(:, 2); % 2번째 열: 3.9V ~ 5.0V
% 3. 그래프 생성 및 스타일 설정
figure('Color', [0.1 0.1 0.1]); % 이미지와 유사하게 어두운 배경 설정 (선택사항)
plot(voltage_in, voltage_out, 'b-', 'LineWidth', 2); % 파란색 실선 그래프
% 4. 축 범위 및 라벨 설정 (이미지 그래프 기준 반영)
xlim([0.0, 3.0]); % X축: 0.0V ~ 3.0V
ylim([3.9, 5.0]); % Y축: 3.9V ~ 5.0V
set(gca, 'XTick', 0.0:0.3:3.0); % X축 간격 0.3V 설정
set(gca, 'YTick', 3.9:0.1:5.0); % Y축 간격 0.1V 설정
% 5. 그래프 내부 디자인 꾸미기 (이미지 그리드 느낌 재현)
xlabel('Input Voltage (V)', 'Color', 'w');
ylabel('Output Voltage (V)', 'Color', 'w');
title('DC Sweep Analysis: V(v_in, v_out)', 'Color', 'w');
grid on;
set(gca, 'GridColor', [0.3 0.3 0.3], 'GridAlpha', 0.5); % 점선 형태의 그리드
set(gca, 'Color', [0 0 0], 'XColor', 'w', 'YColor', 'w'); % 검은 배경 화면 설정

 

단계 기능 주의점
readmatrix CSV를 숫자 행렬로 읽음 CSV가 숫자 2열이라는 전제
1열 VIN1 X축
2열 VOUT Y축
plot DC transfer curve 작성 선형 축이 적절
xlim/ylim 관심구간 고정 범위 밖 값은 보이지 않음
grid/style 포트폴리오 시각화 회로 계산에는 영향 없음

 

현재 코드는 그래프 재현용이다. local gain과 knee를 자동 계산하지 않으므로 gradient를 추가하면 교육용 분석의 수준을 높일 수 있다.

 

8. MATLAB AC 코드 분석

업로드된 AC MATLAB 코드

% 1. CSV 파일 데이터 불러오기 (텍스트 파싱을 위해 readtable 사용)
opts = detectImportOptions('\IC_Process_Passive_Current_Source_Load_DiffAmp_ac.csv');
opts.VariableNamingRule = 'preserve';
db_table = readtable('\IC_Process_Passive_Current_Source_Load_DiffAmp_ac.csv', opts);
% 2. X축(주파수 Frequency) 추출
frequency = db_table{:, 1};
% 3. Y축 데이터 파싱 (LTspice 특유의 지수 표기법 텍스트 포맷 완벽 분리)
raw_ac_string = db_table{:, 2};
% [수정 포인트] e+01, e-02 같은 과학적 지수 표현식까지 모두 포함하여 매칭하도록 패턴을 확장했습니다.
gain_tokens = regexp(raw_ac_string, '^\((-?[0-9.]+e[+-][0-9]+|[0-9.]+)', 'tokens');
gain_db = zeros(size(frequency));
for i = 1:length(gain_tokens)
if ~isempty(gain_tokens{i})
gain_db(i) = str2double(gain_tokens{i}{1}{1});
end
end
% 4. 그래프 생성 및 스타일 설정 (Bode Plot 이득 특성용 다크 모드)
figure('Color', [0.1 0.1 0.1]);
% AC 주파수 축 로그 스케일 플롯
semilogx(frequency, gain_db, 'b-', 'LineWidth', 2.5);
% 5. 축 범위 및 간격 설정 (데이터 누락이나 잘림 방지를 위해 마진 최적화)
xlim([min(frequency), max(frequency)]);
% 지수 변환이 완료되었으므로 복원된 값의 최솟값/최댓값을 기준으로 Y축 범위를 자동 조정합니다.
ylim([min(gain_db)-3, max(gain_db)+3]);
% 6. 그래프 내부 디자인 꾸미기 (기존 스타일 계승)
xlabel('Frequency (Hz)', 'Color', 'w', 'FontSize', 11);
ylabel('Magnitude (dB)', 'Color', 'w', 'FontSize', 11);
title('AC Analysis: Voltage Gain (dB)', 'Color', 'w', 'FontSize', 13, 'FontWeight', 'bold');
grid on;
set(gca, 'XMinorGrid', 'on', 'YMinorGrid', 'on'); % 주파수 축 조밀한 로그 그리드 추가
set(gca, 'GridColor', [0.4 0.4 0.4], 'GridAlpha', 0.4);
set(gca, 'MinorGridColor', [0.2 0.2 0.2], 'MinorGridAlpha', 0.3);
set(gca, 'Color', [0 0 0], 'XColor', 'w', 'YColor', 'w');

 

단계 기능 핵심
detectImportOptions/readtable AC CSV를 table로 읽음 문자열 열 처리
frequency 1열 주파수 로그 X축
regexp '(XdB, phase)'에서 X만 추출 gain 계산이 아니라 파싱
semilogx Bode 형태의 로그 주파수 축 1~100 MHz 표시
ylim gain 주위 ±5 dB 평탄한 데이터에서도 가독성 확보
MinorGrid decade 내부 눈금 포트폴리오 시각화

 

728x90
반응형

+ Recent posts