CMOS2段階アンプ

![62B05991-2034-4845-B623-9FF6D9579A3B.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3759109/3036b6db-1433-46af-9a4a-540f737860b4.jpeg)
```
import math

# 定数の設定（更新後の値）
gm1 = 94.25e-6  # gm1 の値 (S)
gm6 = 942.5e-6  # gm6 の値 (S)
VA2 = 20   # VA2 の値 (V)
VA4 = 30   # VA4 の値 (V)
VA6 = 20   # VA6 の値 (V)
VA7 = 30   # VA7 の値 (V)
I5 = 25e-6   # I5 の値 (A)
I6 = 242e-6  # I6 の値 (A)
VDD = 1.8   # 電源電圧 (V)
VGS8 = 0.7  # ゲート-ソース電圧 (V)
I = 100e-6  # 電流 (A)
VIC_min = 0.35  # 最小 VIC (V)
VIC_max = 0.95  # 最大 VIC (V)
VSS = -1.5  # 負電源電圧 (V)
Veff = 0.2  # 有効電圧 (V)
Cc = 1e-12  # 補償コンデンサ (F) (仮値)
CL = 1e-12  # 負荷容量 (F) (仮値)
ID = 100e-6 # ドレイン電流 (A)
VDS = 0.7   # ドレイン-ソース電圧 (V)
μCox = 50e-6 # しきい値電圧係数 (A/V^2) (仮値)

# 利得 A1 と A2 の計算
A1 = (-2 * gm1) / ((1 / VA2 + 1 / VA4) * I5)
A2 = (-2 * gm6) / ((1 / VA6 + 1 / VA7) * I6)

# A1 * A2 の計算
A_product = A1 * A2

# デシベルへの変換
A_product_dB = 20 * math.log10(abs(A_product))

# 抵抗 R の計算
R = (VDD - VGS8) / I

# W/L の計算
W_L = (2 * I) / (μCox * Veff**2)

# 電流2 の計算
I2 = (gm1**2) / (2 * μCox * W_L)

# スルーレート (SR) の計算
SR = I5 / Cc

# ゲイン帯域幅 (GB) の計算
GB = gm1 / Cc

# gd の計算
gd = ID / (VA2 + VDS)

# β の計算
beta = μCox * W_L

# 2×電流 ÷ β の計算
value_2I_div_beta = (2 * I) / beta

# z1 の計算
z1 = gm1 / Cc

# gds1 と gds2 の計算
gds1 = (1 / VA2) + (1 / VA4)
gds2 = (1 / VA6) + (1 / VA7)

# P1 と P2 の計算
P1 = (-gds1 * gds2) / (gm6 * Cc)
P2 = (-gm6) / CL

# 計算結果の表示
print("A1 =", A1)
print("A2 =", A2)
print("A1 * A2 =", A_product)
print("A1 * A2 in dB =", A_product_dB)
print("R =", R)
print("W/L =", W_L)
print("I2 =", I2)
print("SR =", SR)
print("GB =", GB)
print("gd =", gd)
print("β =", beta)
print("2×電流 ÷ β =", value_2I_div_beta)
print("z1 =", z1)
print("gds1 =", gds1)
print("gds2 =", gds2)
print("P1 =", P1)
print("P2 =", P2)


```
```

# 定数の設定
L = 0.18e-6  # チャネル長 (m)
VA = 20  # アーリー電圧 (V)
ID = 100e-6  # ドレイン電流 (A)
VDS = 1.2  # ドレイン-ソース電圧 (V)

# チャネル長変調係数の計算
lambda_value = 1 / VA
ro = (VA + VDS) / ID  # 出力インピーダンス

# 結果の表示
print("チャネル長変調係数 λ =", lambda_value)
print("出力インピーダンス ro =", ro)
```

```
import math

# 定数の設定
ID = 100e-6  # ドレイン電流 (A)
Veff = 0.2   # 有効電圧 V_eff (V)
μCox = 50e-6 # しきい値電圧係数 (A/V^2)
W_L = 100    # W/L 比

# 相互コンダクタンス gm の計算
gm1 = (2 * ID) / Veff  # 基本式 g_m = 2 * I_D / Veff
gm2 = math.sqrt(2 * μCox * W_L * ID)  # g_m = sqrt(2 * μCox * W/L * I_D)

# 結果の表示
print("gm1 (2*ID/Veff) =", gm1)
print("gm2 (sqrt(2μCox(W/L)ID)) =", gm2)
```

https://www.youtube.com/watch?v=GQowMsb5pD0
```
import math

# Given values
GBW = 30e6  # Gain-Bandwidth in Hz (30 MHz)
C_C = 0.8e-12  # Capacitance in Farads (0.8 pF)
SR = 20e6  # Slew rate in V/s (20 x 10^6 V/s)

# g_m1 calculation (Transconductance)
g_m1 = GBW * C_C * 2 * math.pi
print(f"g_m1 = {g_m1:.2e} S")  # Transconductance in Siemens

# I_5 calculation (Current)
I_5 = SR * C_C
print(f"I_5 = {I_5:.2e} A")  # Current in Amperes


```

```


import math

# 定数の設定
w = 1e-6  # w = 1μ (1 μm) 変換後の値（メートル単位）
l = 0.2e-6  # l = 0.2μ (0.2 μm) 変換後の値（メートル単位）
I = 20e-6  # I = 20μA (20 μA) 変換後の値（アンペア単位）
Vds = 0.5  # Vds = 0.5V
Veff = 0.1  # Veff = 0.1V
gds = 5.77e-6  # gds = 5.77μS (5.77 μS) 変換後の値（S単位）
gm = 0.4e-3  # gm = 0.4mS (0.4 mS) 変換後の値（S単位）

# 電源電圧の設定
Vdd = 3.0  # Vdd = 3.0V

# 望まれる20dBの電圧増幅
dB = 20  # 20 dB
voltage_gain = 10 ** (dB / 20)  # dBから電圧増幅に変換

# その倍の増幅
double_voltage_gain = 2 * voltage_gain

# 入力信号（例：0.1Vを入力と仮定）
Vin = 0.1  # 入力信号（仮定）

# 出力電圧の計算
Vout = Vin * voltage_gain

# 出力電圧が電源電圧を超えないように制限
if Vout > Vdd:
    Vout = Vdd  # 出力電圧は電源電圧に制限

# その倍の出力電圧（同様に制限）
Vout_double = Vin * double_voltage_gain
if Vout_double > Vdd:
    Vout_double = Vdd  # 出力電圧は電源電圧に制限

# ダミーデータ: スルーレート(SR)、利得帯域幅(GBW)、負荷容量(C_L)、マルチ、フィンガー
SR = 1e6  # スルーレート (V/秒)
GBW = 10e6  # 利得帯域幅 (Hz)
CL = 2e-12  # 負荷容量 (F)
multi = 2  # マルチ（トランジスタの数）
finger = 2  # フィンガー（フィンガー数）

# スルーレート、利得帯域幅、負荷容量、マルチ、フィンガーを表示
print(f"20dBに対応する電圧増幅: {voltage_gain:.3f}")
print(f"その倍に変換した電圧増幅: {double_voltage_gain:.3f}")
print(f"入力信号 {Vin}V の出力電圧: {Vout:.3f}V (電源電圧 {Vdd}V を超えないように制限)")
print(f"入力信号 {Vin}V のその倍の出力電圧: {Vout_double:.3f}V (電源電圧 {Vdd}V を超えないように制限)")

# スルーレート、利得帯域幅、負荷容量、マルチ、フィンガーのダミーデータを表示
print(f"スルーレート (SR): {SR} V/秒")
print(f"利得帯域幅 (GBW): {GBW} Hz")
print(f"負荷容量 (C_L): {CL} F")
print(f"マルチ (Multi): {multi}")
print(f"フィンガー (Finger): {finger}")

```

```
# 与えられた値
mu_Cox = 8.65e-5  # μCox (A/V^2)
I_D = 0.5e-6  # ドレイン電流 (A)
V_ov = 0.1  # オーバードライブ電圧 (V)
L = 2.6e-6  # 最小長さ L (m)

# アスペクト比 W/L の計算
aspect_ratio = (2 * I_D) / (mu_Cox * V_ov**2)

# アスペクト比 W/L の自然数化
aspect_ratio_rounded = round(aspect_ratio)

# W を計算
W = aspect_ratio_rounded * L  # W (m)

# 結果を表示
print("アスペクト比 (W/L) の計算結果:", aspect_ratio)
print("アスペクト比 (W/L) の自然数:", aspect_ratio_rounded)
print("W の値 (m):", W)
print("W の値 (μm):", W * 1e6)  # μm単位で表示

```
実験メモに使えるテンプレート


=============================

**Date**: 2025/02/19  
**Time**: 14:30  
**Title**: Two-Stage Amplifier Parameters  
**File Name**: Two-Stage Amplifier Experiment Results  

=============================

---

**Input Parameters**  

---

### **PMOS Transistor M1**  
This section describes the electrical characteristics of the PMOS transistor M1 used in the two-stage amplifier.

- **Width (w)** = 1μm (1e-6 m)  
  - The width of a **single transistor finger**. Determines the current-driving capability.  
- **Length (l)** = 0.2μm (0.2e-6 m)  
  - The channel length, which affects gain, speed, and short-channel effects.  
- **Multi (M)** = 1  
  - The number of parallel transistor groups. Since \( M = 1 \), no additional parallel instances exist.  
- **Finger (Nf)** = 2  
  - The number of fingers used in the layout. Increasing \( N_f \) helps reduce parasitic effects and improves current distribution.  
- **Total Effective Width (\( W_{\text{eff}} \))** = \( M \times N_f \times w \) = \( 1 \times 2 \times 1\mu m = 2\mu m \)  
  - The total effective width of the transistor, impacting transconductance (\( g_m \)) and current capability.  
- **Current (\( I_D \))** = 20μA (20e-6 A)  
  - The drain current flowing through the transistor during operation.  
- **Drain-Source Voltage (\( V_{DS} \))** = 0.5V  
  - The voltage difference between the drain and source terminals, determining the operating region.  
- **Effective Voltage (\( V_{\text{eff}} \))** = 0.1V  
  - Also known as the overdrive voltage (\(V_{GS} - V_{TH}\)), which controls transconductance efficiency.  
- **Output Conductance (\( g_{ds} \))** = 5.77μS (5.77e-6 S)  
  - Represents the small-signal output conductance, affecting gain and stability.  
- **Transconductance (\( g_m \))** = 0.4mS (0.4e-3 S)  
  - A key parameter indicating how effectively the gate voltage controls the drain current, crucial for amplifier gain.  

(*Additional supplementary information regarding the used parameters is separately provided.*)  

---

---

**Output Results**  

---

---

**Considerations on Simulation Results and Next Steps**  

---

- **Point 1**:  
- **Point 2**:  
- **Point 3**:  

- **Issues and Improvement Measures**  

---

**Fixed Parameters**  

---

(*Additional supplementary information regarding the used parameters is separately provided.*)  

---

---




https://kobaweb.ei.st.gunma-u.ac.jp/news/pdf/2015/150310FLCkuwasawa.pdf

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3759109/3bd298a2-9a60-400b-852b-98384521a724.png)

```
import math

# 定数の設定
Cc = 0.3e-12  # キャパシタンス Cc (ファラッド単位)
SR = 150e-6  # スルーレート SR (V/s)
omega = 2 * math.pi * 1e6  # ω (角周波数) 例: 1MHzと仮定
beta_n = 2e-4  # n型のβ
ID = 1e-3  # ドレイン電流 (A)
Veff = 0.7  # 有効電圧 (V)

# I5の計算
I5 = Cc * SR

# gm1の計算
gm1 = omega * Cc

# gm6の計算
gm6 = 10 * gm1

# gmと電流とVeffからアスペクト比(W/L)の計算
aspect_ratio = (gm1**2) / (2 * beta_n * ID)

# 結果を表示
print(f"I5 (差動テイル電流): {I5:.3e} A")
print(f"gm1: {gm1:.3e} S")
print(f"gm6: {gm6:.3e} S")
print(f"アスペクト比 (W/L): {aspect_ratio:.3e}")
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3759109/6886fbce-bcaa-4ee4-9dba-2a282e87b7ad.png)



```


def print_equation_results(ID, Veff, λn=None, λp=None, λ=None):
    # Equation 1: gm = 2ID / Veff
    gm = 2 * ID / Veff
    print(f"gm = 2ID / Veff = {gm:.3f}")
    
    # Equation 2: 2 / (Veff * (1/λn + 1/λp)) (only if λn and λp are provided)
    if λn is not None and λp is not None:
        result2 = 2 / (Veff * (1 / λn + 1 / λp))
        print(f"2 / (Veff * (1 / λn + 1 / λp)) = {result2:.3f}")
    else:
        print("λn and λp must be provided for Equation 2.")
    
    # Equation 3: 2 * (1 / (Veff * λ)) (only if λ is provided)
    if λ is not None:
        result3 = 2 * (1 / (Veff * λ))
        print(f"2 * (1 / (Veff * λ)) = {result3:.3f}")
    else:
        print("λ must be provided for Equation 3.")

# Example usage:
ID = 0.5  # Example current ID in Amps
Veff = 1.0  # Example Veff in Volts
λn = 0.01  # Example λn
λp = 0.01  # Example λp
λ = 0.01  # Example λ

print_equation_results(ID, Veff, λn, λp, λ)
```

https://kitagawa.merl.jp/edu/ec1/pdf/10.pdf


![IMG_8253.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3759109/34e2aa88-5b21-4495-b5b9-dbb2449fe4fc.jpeg)

```
# パラメータの定義
C = 0.3e-12  # 容量 (F)
slew_rate = 150e-6  # スルーレート (V/s)
I5 = C * slew_rate  # I5の計算

channel_modulation_lambda = 0.1  # チャネル変調 λ
gm1 = 380e-6  # トランスコンダクタンス (S)

# カレントミラーの比率より
I7 = 20 * I5  # I7の計算

# 最終式の計算
result = 10 * ((gm1) ** 2) / ((I5 / 2) * (0.1 + 0.1) * I7 * (0.1 + 0.1))

# 結果を表示
print("I5 =", I5)
print("I7 =", I7)
print("Result =", result)
```