Dirac源晶体管亚阈值摆幅推导

背景

亚阈值摆幅

亚阈值摆幅 (Subthrehold Swing) 是衡量晶体管开启与关断状态之间相互转换速率的性能指标,它代表源漏电流变化十倍所需要栅电压的变化量,又称为S因子,S越小意味着开启关断速率ON/OFF越快。 (来源: 百度百科)

SS=dVgsdlogIds=dVgsdVsdVsdlogIds=kBTln10qdVgsdVs

因为加在栅极的电压 Vgs 分别降落在栅氧化蹭和衬底硅上,所以 Vgs>=Vs, dVgsdVs>=1, 在室温下 (300K), SS 有最小值 kBT/qln1060mV. 因此,对于常规的 MOSFET 而言,亚阈值摆幅一般大于 60 mV/dec。但一些新型器件,如隧穿器件(Tunneling Transistor),可以获得低于此理论值的亚阈值摆幅。

Dirac 源晶体管

简介

2018年,北京大学刘飞老师等人提出用 Dirac 材料作为源端的晶体管,可以打破亚阈值摆幅 60 mV/dec 的下限,实现更低功耗的作用。本文主要是推导 IEEE TED 65,7 (2018)SS 值。

图来源自 Nano Lett. 21, 1758 (2021).


根据 Landauer-Buttiker 公式, 通过器件的电流为:

I=2qhD(E)T(E)[fSfD]dE

这里的 D(E) 是注入载流子的态密度,fS/fD 是源漏电极的费米能级,T(E) 是源端到漏端的隧穿概率。在常规的MOSFET中,源端是通过金属载流子注入,所以它的态密度是个常数,因此,SS 存在一个极限 kBT/qln10,然而当栅压减小时,态密度如果出现急剧下降的话,则SS 将打破热力学极限。

对于某种材料,带边附近的电子色散关系为:

E=Ec/v±cokm

这里的 Ec/v 分别表示导带价带的带边能量。当 m = 2 表示有质量,m=1 表示 Dirac 电子,因此,d-维材料的态密度有如下关系:

D(E)=D0|EEc/v|d/m1

dm1 的值为:

d/m-1 m=2 m=1
d=1 -1/2 0
d=2 0 1
d=3 1/2 2

详细推导

1. dm1=0 例子

态密度为 D(E)=D0|EEdirac|0=D0,电流值为:

Ithermal2qhD0ΦB+eE/kBTdE=kBTeΦB/kBT

SS=dVgsdlog10Ithermal=ln10dVgsdΦB/dlnIthermaldΦB=kBTln10q1C1

这里的 C1=ΦBqVgs0<C1<=1

2. dm1=1 例子

当源端是二维石墨烯 Dirac 材料时,d = 2,m =1, 那么 dm1=1。那么它的态密度为 D(E)=D0|EEdirac| 电流值为:

Ithermal=2qhD0ΦB+dET(E)|EEdirac|[fSfD]

2qhD0ΦB+dE|EEdirac|eE/kBT

这里假设T(E)=1, 源端费米能级为 EFS=0,当 ΦB 大于 Edirac 时,|EEdirac|=EEdirac,电流值为

Ithermal=2qhD0(kBTΦBkBTEdirac+(kBT)2)eΦB/kBT

=2qhD0kBT(ΦBEdirac+kBT)eΦB/kBT

因此 SS 值为:

SS=dVgsdlog10Ithermal=kBTln10q1C1(1+kBTΦBEdirac)

ΦB 小于 Edirac 时,|EEdirac| 分情况讨论, 电流值为

Ithermal==ΦB+dE=Edirac+dE+ΦBEdiracdE

==Edirac+(EEdirac)eE/kBTdE+ΦBEdirac(EdiracE)eE/kBTdE

=22qhD0(kBT)2eEdirac/kBT2qhD0(kBTΦBkBTEdirac+(kBT)2)eΦB/kBT

=2qhD0kBT(2kBTeEdirac/kBT+(EdiracΦBkBT)eΦB/kBT)

3. dm1=2 例子

态密度 |EEdirac|2=(EEdirac)2,电流值为

Ithermal2qhD0ΦB+dE|EEdirac|2eE/kBT

=2qhD0(aΦB2+(2a22ab)ΦB+ab22a2b+2a3)eΦB/kBT

其中 a=kBT,b=Edirac

4. dm1=1/2 例子

ΦB 大于 Edirac 时,|EEdirac|1/2=EEdirac,电流值为

Ithermal2qhD0ΦB+dEEEdiraceE/kBT

ΦB 小于 Edirac 时,|EEdirac|1/2=EdiracE,电流值为

Ithermal2qhD0ΦB+dEEdiracEeE/kBT

5. dm1=1/2 例子

ΦB 大于 Edirac 时,|EEdirac|1/2=(EEdirac)1/2,电流值为

Ithermal2qhD0ΦB+dE(EEdirac)1/2eE/kBT

=2qhD0π(kBT)1/2eEdirackBTerf(ΦBEdirackBT)

ΦB 小于 Edirac 时,|EEdirac|1/2 分情况讨论,电流值为

Ithermal==ΦB+dE=Edirac+dE+ΦBEdiracdE

==Edirac+(EEdirac)1/2eE/kBTdE+ΦBEdirac(EdiracE)1/2eE/kBTdE

附录积分公式 (参考链接)

  1. (xb)0ex/adx=aex/a

  2. (xb)ex/adx=(axab+a2)ex/a

(bx)ex/adx=(axab+a2)ex/a

  1. (xb)2ex/adx=(ax2+(2a22ab)x+ab22a2b+2a3)ex/a

  2. (xb)1/2ex/adx=12ex+ba(2aebaxbπa3/2exaerf(xba))

(bx)1/2ex/adx=12ex+ba(2aebabx+iπa3/2exaerf(ibxa))

这里的 erf 是误差函数:

erf(x)=2π0xey2dy.

所以 erf(0)=0,erf()=1ierf(ix)=erf(x).

  1. (xb)1/2ex/adx=πa1/2ebaerf(xba)

(bx)1/2ex/adx=iπa1/2ebaerf(ibxa)

Python 计算脚本

  1. D(E)=D0|EEdirac|0 例子
点击查看代码
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()
  1. D(E)=D0|EEdirac| 例子
点击查看代码
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()
  1. D(E)=D0|EEdirac|2 例子
点击查看代码
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()
  1. D(E)=D0|EEdirac|1/2 例子
点击查看代码
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()
  1. D(E)=D0|EEdirac|1/2 例子
点击查看代码
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()

部分推导笔记

posted @   ghzphy  阅读(3136)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示