FETの説明図
Behzad Razavi本のシンボル
バックゲート(B)は省略される
動作点はドレインソース間電圧の負荷直線を引くことで求めることができる
線形領域と飽和領域の区別をつけよう
CMOS基板の上にNMOSとPMOS両方製造できる
大信号と小信号に分解できる
入力の交流波形から小信号等価回路を作成するとき
コンデンサは短絡、直流電圧源は短絡、直流電流源は開放
チャネル変調効果とVGS入力、ID出力特性の式
def calculate_current(W, L, VGS, Vth, VDS, mobility, oxide_capacitance, lambda_param):
electron_mobility = mobility
gate_oxide_capacitance = oxide_capacitance
voltage = 0.5 * electron_mobility * gate_oxide_capacitance * (W/L) * (VGS - Vth)**2
current = voltage * (1 + lambda_param * VDS)
return current
# 入力値の設定
W = 10 # チャネル幅(Width)
L = 5 # チャネル長(Length)
VGS = 3 # ゲートからソースへの電圧(Gate-to-Source Voltage)
Vth = 1 # 閾値電圧(Threshold Voltage)
VDS = 4 # ドレインからソースへの電圧(Drain-to-Source Voltage)
mobility = 100 # 電子の移動度(Electron Mobility)
oxide_capacitance = 1.5 # 単位あたりのゲート酸化膜容量(Gate Oxide Capacitance)
lambda_param = 0.01 # ラムダパラメータ(Lambda Parameter)
# 電流の計算
ID = calculate_current(W, L, VGS, Vth, VDS, mobility, oxide_capacitance, lambda_param)
print("ID =", ID)
線形領域 三極管領域
def calculate_triode_region(mu, Cox, W_L, VGS, Vth, VDS):
term1 = mu * Cox * W_L
term2 = (VGS - Vth) * VDS - ((VDS)**2) / 2
return term1 * term2
# パラメータを設定
mu = 100e-4 # 電子の移動度(例として100e-4を使用)
Cox = 1e-6 # 単位あたりのゲート酸化膜容量(例として1e-6を使用)
W_L = 10 # W/L比(例として10を使用)
VGS = 5 # ゲート-ソース電圧(例として5を使用)
Vth = 1 # 閾値電圧(例として1を使用)
VDS = 3 # ドレイン-ソース電圧(例として3を使用)
# 三極管の領域を計算
triode_region = calculate_triode_region(mu, Cox, W_L, VGS, Vth, VDS)
print("三極管の領域:", triode_region)
基板バイアス効果とミラー回路
import math
def calculate_VGS(ID, electron_mobility, gate_oxide_capacitance_per_unit_area, W_over_L, Vth):
VGS = math.sqrt(ID / (0.5 * electron_mobility * gate_oxide_capacitance_per_unit_area * (W_over_L))) + Vth
return VGS
# 例として値を代入して計算する
ID = 0.1 # IDの値
electron_mobility = 0.1 # 電子の移動度
gate_oxide_capacitance_per_unit_area = 0.5 # 単位あたりのゲート酸化膜容量
W_over_L = 2 # W/L
Vth = 0.5 # 閾値電圧
result = calculate_VGS(ID, electron_mobility, gate_oxide_capacitance_per_unit_area, W_over_L, Vth)
print("VGS =", result)
相互コンダクタンスgm=IDをVGSで微分した式
# 電子の移動度 (μ)
mobility = 0.1 # 例として 0.1 とします (適切な値に置き換えてください)
# 単位あたりのゲート酸化膜容量 (Cox)
gate_capacitance_per_unit_area = 1.5e-6 # 例として 1.5e-6 F/m^2 とします (適切な値に置き換えてください)
# W/L
w_over_l = 5 # 例として 5 とします (適切な値に置き換えてください)
# VGS - Vth
vgs_minus_vth = 0.8 # 例として 0.8 V とします (適切な値に置き換えてください)
# 電子の移動度 × 単位あたりのゲート酸化膜容量 × (W/L) × (VGS - Vth)
gm = mobility * gate_capacitance_per_unit_area * w_over_l * vgs_minus_vth
print("計算結果 (gm):", gm)
チャネル変調効果がある場合のVGSとID
import numpy as np
import matplotlib.pyplot as plt
# パラメータの設定
mu_n = 100e-4 # 電子の移動度 [m^2/Vs]
C_ox = 10e-6 # 酸化膜容量 [F/m^2]
W = 10e-6 # チャネルの幅 [m]
L = 1e-6 # チャネルの長さ [m]
V_TH = 0.5 # しきい値電圧 [V]
lambda_ = 0.02 # チャネル長変調係数 [1/V]
# VGSの設定
VGS = 1.0 # ゲート-ソース電圧 [V]
# VDSの範囲を設定
VDS_values = np.linspace(0, 2, 100) # VDSの範囲 [V]
# チャネル変調効果がある場合のIDを計算
ID_with_channel_modulation = 0.5 * mu_n * C_ox * W/L * (VGS - V_TH)**2 * (1 + lambda_ * VDS_values)
# グラフの描画
plt.plot(VDS_values, ID_with_channel_modulation, label='With Channel Modulation', color='blue')
plt.xlabel('VDS [V]')
plt.ylabel('ID [A]')
plt.title('ID vs VDS with Channel Modulation')
plt.legend()
plt.grid(True)
plt.show()
コンデンサを入れたソース接地増幅回路
(1/(1+sC1R1))×(-gm×抵抗)× (1/(1+sC2R2))
import numpy as np
import matplotlib.pyplot as plt
from scipy import signal
# パラメータの設定
gm = 0.1 # トランジスタのトランスコンダクタンス
R1 = 10e3 # 抵抗1
C1 = 100e-9 # コンデンサ1
R2 = 5e3 # 抵抗2
C2 = 50e-9 # コンデンサ2
# 伝達関数の分子と分母の係数を計算
numerator = [1]
denominator = [1, (1/(C1*R1)), -gm*R1, (gm*R1/(C2*R2)), 0]
# 伝達関数を作成
sys = signal.TransferFunction(numerator, denominator)
# 周波数応答を計算
w, mag, phase = signal.bode(sys)
# グラフのプロット
plt.figure()
plt.semilogx(w, mag) # ゲインのプロット
plt.title('Frequency Response')
plt.xlabel('Frequency [rad/s]')
plt.ylabel('Gain [dB]')
plt.grid(True)
plt.figure()
plt.semilogx(w, phase) # 位相のプロット
plt.title('Phase Response')
plt.xlabel('Frequency [rad/s]')
plt.ylabel('Phase [degrees]')
plt.grid(True)
plt.show()