Dirac源晶体管亚阈值摆幅推导
背景
亚阈值摆幅
亚阈值摆幅 (Subthrehold Swing) 是衡量晶体管开启与关断状态之间相互转换速率的性能指标,它代表源漏电流变化十倍所需要栅电压的变化量,又称为S因子,S越小意味着开启关断速率ON/OFF越快。 (来源: 百度百科)
因为加在栅极的电压 分别降落在栅氧化蹭和衬底硅上,所以 , , 在室温下 (300K), SS 有最小值 . 因此,对于常规的 MOSFET 而言,亚阈值摆幅一般大于 60 mV/dec。但一些新型器件,如隧穿器件(Tunneling Transistor),可以获得低于此理论值的亚阈值摆幅。
Dirac 源晶体管
简介
2018年,北京大学刘飞老师等人提出用 Dirac 材料作为源端的晶体管,可以打破亚阈值摆幅 60 的下限,实现更低功耗的作用。本文主要是推导 IEEE TED 65,7 (2018) 的 值。

根据 Landauer-Buttiker 公式, 通过器件的电流为:
这里的 是注入载流子的态密度, 是源漏电极的费米能级, 是源端到漏端的隧穿概率。在常规的MOSFET中,源端是通过金属载流子注入,所以它的态密度是个常数,因此, 存在一个极限 ,然而当栅压减小时,态密度如果出现急剧下降的话,则 将打破热力学极限。
对于某种材料,带边附近的电子色散关系为:
这里的 分别表示导带价带的带边能量。当 m = 2 表示有质量,m=1 表示 Dirac 电子,因此,-维材料的态密度有如下关系:
的值为:
d/m-1 | m=2 | m=1 |
---|---|---|
d=1 | -1/2 | 0 |
d=2 | 0 | 1 |
d=3 | 1/2 | 2 |
详细推导
1. 例子
态密度为 ,电流值为:
这里的
2. 例子
当源端是二维石墨烯 Dirac 材料时,d = 2,m =1, 那么 。那么它的态密度为 电流值为:
这里假设, 源端费米能级为 ,当 大于 时,,电流值为
因此 SS 值为:
当 小于 时, 分情况讨论, 电流值为
3. 例子
态密度 ,电流值为
其中
4. 例子
当 大于 时,,电流值为
当 小于 时,,电流值为
5. 例子
当 大于 时,,电流值为
当 小于 时, 分情况讨论,电流值为
附录积分公式 (参考链接)
这里的 是误差函数:
所以 且 .
Python 计算脚本
- 例子
点击查看代码
import numpy as np
import matplotlib.pyplot as plt
import math
def current1(phi_b):
tmp = math.exp(-phi_b/KT)
return math.log(KT*tmp)
def current2(phi_b):
tmp = math.exp(-phi_b/KT)
return math.log(KT*tmp)
def derivative(f,x,deltax=0.1**10):
return (f(x+deltax)-f(x))/deltax
def main():
phiB = np.linspace(0,0.6,2000)
phi_B, SS = [], []
for i in phiB:
if i > E_dirac:
phi_B.append(i)
SS.append(-60/(KT*derivative(current1,i)))
elif i < E_dirac:
phi_B.append(i)
SS.append(-60/(KT*derivative(current2,i)))
plt.plot(phi_B,SS)
plt.xlim([0,0.6])
plt.ylim([0,200])
plt.title('$D(E) \\approx |E-E_{dirac}|^0$')
plt.show()
if __name__ == '__main__':
KT = 0.026
E_dirac = 0.3
main()
- 例子
点击查看代码
import numpy as np
import matplotlib.pyplot as plt
import math
def current1(phi_b):
tmp = (phi_b + KT -E_dirac)*math.exp(-phi_b/KT)
return math.log(KT*tmp)
def current2(phi_b):
tmp = 2*KT*math.exp(-E_dirac/KT) + (-phi_b - KT +E_dirac)*math.exp(-phi_b/KT)
return math.log(KT*tmp)
def derivative(f,x,deltax=0.1**10):
return (f(x+deltax)-f(x))/deltax
def main():
phiB = np.linspace(0,0.6,2000)
phi_B,SS = [],[]
for i in phiB:
if i > E_dirac:
phi_B.append(i)
SS.append(-60/(KT*derivative(current1,i)))
elif i < E_dirac:
phi_B.append(i)
SS.append(-60/(KT*derivative(current2,i)))
plt.plot(phi_B,SS)
plt.xlim([0,0.6])
plt.ylim([0,200])
plt.title('$D(E) \\approx |E-E_{dirac}|$')
plt.show()
if __name__ == '__main__':
KT = 0.026
E_dirac = 0.3
main()
- 例子
点击查看代码
import numpy as np
import matplotlib.pyplot as plt
import math
def current(x):
# tmp = (2*(phi_b-E_dirac)*(KT)**2 + 2*(KT)**3 + KT*(phi_b-E_dirac)**2)*math.exp(-phi_b/KT)
tmp = (a*x**2+(2*a**2-2*a*b)*x+a*b**2-2*a**2*b+2*a**3)*math.exp(-x/a)
return math.log(tmp)
def derivative(f,x,deltax=0.1**10):
return (f(x+deltax)-f(x))/deltax
def main():
phiB = np.linspace(0,0.6,2000)
phi_B,SS = [],[]
for i in phiB:
phi_B.append(i)
SS.append(-60/(KT*derivative(current,i)))
with open('dat.txt','w') as f:
for i in range(len(phi_B)):
f.write('{} {}\n'.format(phi_B[i],SS[i]))
plt.plot(phi_B,SS)
plt.xlim([0,0.6])
plt.ylim([0,200])
plt.title('$D(E) \\approx |E-E_{dirac}|^2$')
plt.show()
if __name__ == '__main__':
KT = 0.026
E_dirac = 0.3
a = KT
b = E_dirac
main()
- 例子
点击查看代码
import numpy as np
import matplotlib.pyplot as plt
import math
def current1(phi_b):
tmp1 = math.exp(-(phi_b+b)/a)
tmp2 = ((phi_b-b)/a)**0.5
tmp = math.pi**0.5*a**1.5*math.exp(-b/a) +tmp1*(2*a*math.exp(b/a)*(phi_b-b)**0.5 - math.pi**0.5*a**1.5*math.exp(phi_b/a)*math.erf(tmp2))
return math.log(tmp/2)
def current2(phi_b):
tmp1 = math.exp(-(phi_b+b)/a)
tmp2 = ((b-phi_b)/a)**0.5
tmp = math.pi**0.5*a**1.5*math.exp(-b/a) +tmp1*(2*a*math.exp(b/a)*(b-phi_b)**0.5 - math.pi**0.5*a**1.5*math.exp(phi_b/a)*math.erf(tmp2))
return math.log(tmp/2)
def derivative(f,x,deltax=0.1**10):
return (f(x+deltax)-f(x))/deltax
def main():
phiB = np.linspace(0,0.6,2000)
phi_B,SS = [],[]
for i in phiB:
if i > E_dirac:
phi_B.append(i)
SS.append(-60/(KT*derivative(current1,i)))
elif i < E_dirac:
phi_B.append(i)
SS.append(-60/(KT*derivative(current2,i)))
plt.figure()
plt.plot(phi_B,SS)
plt.ylim([0,200])
plt.title('$D(E) \\approx |E-E_{dirac}|^{1/2}$')
plt.xlim([0,0.6])
plt.show()
if __name__ == '__main__':
KT = 0.026
E_dirac = 0.3
b = E_dirac
a = KT
main()
- 例子
点击查看代码
import numpy as np
import matplotlib.pyplot as plt
import math
def current1(phi_b):
tmp1 = (a*math.pi)**0.5*math.exp(-b/a)
tmp2 = ((phi_b-b)/a)**0.5
tmp = tmp1-tmp1*math.erf(tmp2)
return math.log(tmp)
def current2(phi_b):
tmp1 = (a*math.pi)**0.5*math.exp(-b/a)
tmp2 = ((b-phi_b)/a)**0.5
tmp = tmp1+tmp1*math.erf(tmp2)
return math.log(tmp)
def derivative(f,x,deltax=0.1**10):
return (f(x+deltax)-f(x))/deltax
def main():
phiB = np.linspace(0,0.6,2000)
phi_B,SS = [],[]
for i in phiB:
if i > E_dirac:
phi_B.append(i)
SS.append(-60/(KT*derivative(current1,i)))
elif i < E_dirac:
phi_B.append(i)
SS.append(-60/(KT*derivative(current2,i)))
plt.figure()
plt.plot(phi_B,SS)
plt.xlim([0,0.6])
plt.ylim([0,200])
plt.title('$D(E) \\approx |E-E_{dirac}|^{-1/2}$')
plt.show()
if __name__ == '__main__':
KT = 0.026
E_dirac = 0.3
b = E_dirac
a = KT
main()

部分推导笔记
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现