CMOS八输入与非门
- 格式:docx
- 大小:846.16 KB
- 文档页数:12
1
静态cmos8输入与非门的性能优化
实验目的:
1、通过对8输入与非门的性能优化掌握大扇入组合逻辑电路的设计优化方法;
2、掌握HSPICE等EDA软件的基本操作;
实验原理:
1、大扇入时的设计技术:
①调整晶体管尺寸;
②逐级加大晶体管尺寸;
③重新安排输入;
④重组逻辑结构;
2、8输入与非门的电路图:
图1 八输入与非门电路图
实验内容:
实验采用的软件为HSPICE C-2009.09,工艺库文件为MM180_LVT18_V113.LIB(0.18um)。
首先我们以Wp/Wn=2/1的参考反相器为基准确定八输入与非门的Wp/Wn=2/8。这里我们取Wp/L=2,L=0.18um,Wn/L=8。
由书上的结论可以得到:“互补CMOS门的传播延时与输入模式是相关的。”如果考虑8输入与非门的输出由低至高的翻转,则有28-1种情形。显然要对它们都进行模拟是十分繁琐的。因此我们仅仅考虑引起最坏情况的输入组合(A=B=C=D=E=F=G=1,H=1→0,至于选该情形的理由将在3中进行解释,以下所讨论的tpLH如果不特别说明均指的是在该情形下)。而对于输出由高到低翻转的情形输入模式类似的也有28-1种情形,但是如果考虑内部节点(图1中的节点1~7)电容的初始状态时,估计延时就变得相当复杂。这时最坏情形发生在内部节点都被充电至VDD-VTH时,然后通过下拉网络对负载电容及各节点电容进行放电。
下面我们对书上提到的四种设计技术进行逐一的验证:
1、调整晶体管尺寸:
根据书上结论:”如果负载电容主要是门自身的本征电容,则加宽器件只会增加‘自载’效应,对传播延时将不产生影响。只有当负载以扇出为主是放大尺寸才会起作用。”
①负载电容主要是门自身的本征电容:
我们考虑极端情形,即负载电容就是门自身的本征电容时:
这里我们取L=0.18um, Wp/L=2、3、4三种情况,对应的Wn/L=8、12、16。
编写的HSPICE网表代码如下:
nand
.lib 'C:\avanti\MM180_LVT18_V113.LIB' TT
.print v(out) v(a) .param wn='4*wp' 2
mp1 out a vdd vdd P_LV_18_MM w=wp l=0.18um
mp2 out a vdd vdd P_LV_18_MM w=wp l=0.18um
mp3 out a vdd vdd P_LV_18_MM w=wp l=0.18um
mp4 out a vdd vdd P_LV_18_MM w=wp l=0.18um
mp5 out a vdd vdd P_LV_18_MM w=wp l=0.18um
mp6 out a vdd vdd P_LV_18_MM w=wp l=0.18um
mp7 out a vdd vdd P_LV_18_MM w=wp l=0.18um
mp8 out h vdd vdd P_LV_18_MM w=wp l=0.18um
mn1 out a 1 gnd N_LV_18_MM w=wn l=0.18um
mn2 1 a 2 gnd N_LV_18_MM w=wn l=0.18um
mn3 2 a 3 gnd N_LV_18_MM w=wn l=0.18um
mn4 3 a 4 gnd N_LV_18_MM w=wn l=0.18um
mn5 4 a 5 gnd N_LV_18_MM w=wn l=0.18um
mn6 5 a 6 gnd N_LV_18_MM w=wn l=0.18um
mn7 6 a 7 gnd N_LV_18_MM w=wn l=0.18um
mn8 7 h gnd gnd N_LV_18_MM w=wn l=0.18um
vdd vdd gnd dc 1.8
va a gnd dc 1.8
vh h gnd pulse 0v 1.8v 500ps 100ps 100ps 2ns 4ns
.data wp_table
wp
0.36um
0.54um
0.72um
.enddata
.tran 1ps 4.5ns sweep data=wp_table
.end
图2不同尺寸下8输入nand内部节点随输入电压变化曲线
通过对上面波形(图2)的分析我们可以得到: 3
a.利用输入为A=B=C=D=E=F=G=1,H=0→1来近似等效tpHL的最坏情形是可行的。因为我们可以看到在此情形下节点1~7的电压近似都等于VDD-VTH。之后的讨论在没有特地说明的情况下我们均用该输入情形来近似tpHL的最坏情形。
b.当我们以参考反相器为标准设计8输入与非门时,最坏情形下的tpLH大于tpHL,这时设计的主要矛盾在于减小tpHL。
图3负载电容为门自身本征电容时不同尺寸nand的瞬态响应波形图
分析上面波形(图3)我们可以得到:
当负载电容为门自身本征电容时,增加晶体管的尺寸tpHL是没有减少的。由图2得到的结论我们可以近似认为此时是内部节点全部被充电到VDD-VTH时的最坏情形。简单作一个半定量解释:对于晶体管导通时的等效电阻Req随着晶体管尺寸增大近似线性减小,而节点电容却近似线性增大,所以电阻和电容的乘积基本不变,延时也就不随尺寸变化。这个结论其实与在反相器实验中的“本征延时与反相器的尺寸无关”类似。而对于tpLH我们可以看到,它随尺寸增大不但没有减少反而略有增加,这可以解释为:在此情形下8个pmos并联构成的上拉网络只有一个导通,对于电阻的变化只有一个晶体管“贡献”,但是对于电容变化却是8个晶体管漏端寄生电容共同“贡献”,这种结果使得tPLH随着尺寸增加而略有增大。这样我们可以得到:当负载电容为门自身的本征电容时,增加晶体管尺寸不仅不能改善延时,反而“晶体管尺寸的增加会产生较大的寄生电容,这不仅会增加该门的传播延时,还会对前一级的门产生较大的负载。”
②负载电容与扇出电容为主时:
这里我们只需对①中的代码进行稍稍的修改,即在输出端加一个相对于门自身本征电容大的多的负载电容CL。这里我们取CL=50fF。
修改完的HSPICE网表代码如下:
nand
.lib 'C:\avanti\MM180_LVT18_V113.LIB' TT
.print v(out) v(a)
.param wn='4*wp'
mp1 out a vdd vdd P_LV_18_MM w=wp l=0.18um
mp2 out a vdd vdd P_LV_18_MM w=wp l=0.18um mp3 out a vdd vdd P_LV_18_MM w=wp l=0.18um 4
mp4 out a vdd vdd P_LV_18_MM w=wp l=0.18um
mp5 out a vdd vdd P_LV_18_MM w=wp l=0.18um
mp6 out a vdd vdd P_LV_18_MM w=wp l=0.18um
mp7 out a vdd vdd P_LV_18_MM w=wp l=0.18um
mp8 out h vdd vdd P_LV_18_MM w=wp l=0.18um
mn1 out a 1 gnd N_LV_18_MM w=wn l=0.18um
mn2 1 a 2 gnd N_LV_18_MM w=wn l=0.18um
mn3 2 a 3 gnd N_LV_18_MM w=wn l=0.18um
mn4 3 a 4 gnd N_LV_18_MM w=wn l=0.18um
mn5 4 a 5 gnd N_LV_18_MM w=wn l=0.18um
mn6 5 a 6 gnd N_LV_18_MM w=wn l=0.18um
mn7 6 a 7 gnd N_LV_18_MM w=wn l=0.18um
mn8 7 h gnd gnd N_LV_18_MM w=wn l=0.18um
cl out gnd 50ff
vdd vdd gnd dc 1.8
va a gnd dc 1.8
vh h gnd pulse 0v 1.8v 500ps 100ps 100ps 2ns 4ns
.data wp_table
wp
0.36um
0.54um
0.72um
.enddata
.tran 1ps 4.5ns sweep data=wp_table
.end
图4负载电容以扇出电容为主时不同尺寸nand的瞬态响应波形图
通过对上面波形(图4)的分析我们可以得到:当负载电容以扇出电容为主时,放大晶体管尺寸能使晶体管具有更大的充放电电流从而能够减小时间常数。这个结论其实与反相器链的结论是类似的,而更为一般的方法应该是在输出端与负载间接一个缓冲器链(或反相器链),5
使得门自身的本征电容,缓冲器(或反相器)的本征电容,扇出电容按4的比例递增,选择适当的级数,可以使得门的延时得到优化。
2、逐级加大晶体管尺寸:
根据书上结论“逐级加大晶体管尺寸可以改善tpHL”,显然只有在tpHL为制约8输入与非门的瓶颈时,这种改善才是有意义的。而我们在1中看到的按照参考反相器设计的8输入与非门延时的限制在于tpLH而不是tpHL,所以这里我们抛开按照参考反相器设计的8输入与非门而采用最小尺寸的nmos下拉网络对比逐级增大的nmos下拉网络,看看这种设计能够给tpHL带来的改善程度,同时看看它对tpLH有何影响。此处我们不考虑扇出电容CL。
HSPICE网表代码如下所示:
nand
.lib 'C:\avanti\MM180_LVT18_V113.LIB' TT
.print v(out) v(a) v(h)
.param wn1='0.18um*(1+1*n)'
.param wn2='0.18um*(1+2*n)'
.param wn3='0.18um*(1+3*n)'
.param wn4='0.18um*(1+4*n)'
.param wn5='0.18um*(1+5*n)'
.param wn6='0.18um*(1+6*n)'
.param wn7='0.18um*(1+7*n)'
.param wn8='0.18um*(1+8*n)'
mp1 out a vdd vdd P_LV_18_MM w=0.36um l=0.18um
mp2 out a vdd vdd P_LV_18_MM w=0.36um l=0.18um
mp3 out a vdd vdd P_LV_18_MM w=0.36um l=0.18um
mp4 out a vdd vdd P_LV_18_MM w=0.36um l=0.18um
mp5 out a vdd vdd P_LV_18_MM w=0.36um l=0.18um
mp6 out a vdd vdd P_LV_18_MM w=0.36um l=0.18um
mp7 out a vdd vdd P_LV_18_MM w=0.36um l=0.18um
mp8 out h vdd vdd P_LV_18_MM w=0.36um l=0.18um