本篇为2022年秋国科大雁栖湖校区齐洪钢老师的超大规模集成电路基础课程的仿真大作业题目及参考答案,仅供参考。 为方便读者阅读仿真结果,题目涉及的仿真代码放至文末,按需取用。1. 两个用相同工艺实现且具有相同 W/L 比的 NMOS 器件,一个 L=10um,一个 L=0.25um,请仿真这两个不同沟长的 NMOS 器件的 I-V 特性曲线,仿真结果参 考下图所示。 1.1 仿真思路使用TSMC0.18工艺库的nmos器件。 L=0.25um时,固定Vgs扫描Ids和Vds的变化,随后改变Vgs重复上一步,得到短沟道NMOS器件的I-V曲线; 将L改变为10um,重复L=0.25um的操作,得到长沟道NMOS器件的I-V曲线。 1.2 结果分析短沟道和长沟道I-V曲线分别如图(a)和图(b)所示:(电流向上为正,实际为漏端的Vdd流向gnd向下,所以为负) 图(a)短沟道I-V曲线 图(b)长沟道I-V曲线 为方便比较不同,将两组曲线放在同一坐标中: 图(c)对比I-V曲线 速度饱和: V_{DSAT}\leq V_M-V_T 显然,在VDD都是1.8V的情况下,短沟道由于速度饱和效应的存在,相比长沟道器件,饱和电压出现的更早。 2. 仿真 CMOS 反相器的静态特性,(1)画出不同 Wn/Wp(自己选定 3 组有区分度 的比例)的 VTC 曲线,根据 VTC 曲线的位置,观察不同 Wn/Wp 对阈值电压 VM 的影响,并用教科书式(5.2)-(5.4)计算 VM,比较理论计算与仿真结果的 差异。(仿真结果参考下图)(2)对不同的 Wn/Wp 反相器进行瞬态仿真,给出他们的门电路延时。 2.1 不同Wn/Wp的CMOS反相器VTC曲线仿真思路由于VM大致随Wn/Wp的对数呈线性变化,所以想要得到明显的VTC曲线差异,不同CMOS的Wn/Wp差距可设置在100倍。即每次仿真前改变Wn的值,为原Wn的100倍。 结果分析![](data:image/svg+xml;utf8,svg%20xmlns='http://www.w3.org/2000/svg'%20width='2221'%20height='1406'/svg) 计算分析: 假设电源电压足够高,已经达到速度饱和,且阈值电压和饱和电压相对于电源电压均可忽略不计,则Vm的估计公式如下: V_M=\frac{rV_{DD}}{1+r}\space\space\space\space\space\space\space\space\space\space\space\space\space\space\space\space\space\space\space\space\space\space\space\space\space\space\space\space\space\space\space\space\space\space\space\space\space\space\space\space\space\space其中:r=\frac{k_pV_{DSATp}}{k_nV_{DSATn}}=\frac{v_{satp}W_p}{v_{satn}W_n} 进一步假设电仪和空穴的饱和速度大致相同,均为10^5m/s,则估算的Vm和实际Vm的值如下表所示 仿真曲线颜色Wn/Wpr估算的Vm仿真的Vm蓝色6/30.50.60.653紫色100/30.030.05240.486粉色1000/30.0030.005380.387由估算和仿真的Vm对比可见,仅Wn/Wp为6/3时二者的结果才相仿,其他时刻有着严重的差别。这是因为估算公式的假设前提是速度饱和,而随着Wn的显著增加,NMOS器件中电子发生碰撞的概率降低,使得不存在速度饱和效应,需要用未达速度饱和的Vm估算公式进行修正。 2.2 对应反相器的门电路仿真仿真思路与2.1类似,只是在stimulus阶段将dc扫描换成瞬态记录,对Vin输入方波。 结果分析输出仿真波形如下: ![](data:image/svg+xml;utf8,svg%20xmlns='http://www.w3.org/2000/svg'%20width='2040'%20height='1374'/svg) 对应的tphl、tplh、tpd分别为: Wn/Wptphl(ps)tplh(ps)tpd=(tphl+tplh)/2(ps)6/310.0746.0728.07100/39.192351.3180.2461000/39.281>700>365显然可见,在Wp不变时,随着Wn的增大,tphl略微减少,tplh显著增加。这是因为随着Wn的增大使得GND的通路电阻减小,从而使得tphl减小,但由于GND通路电阻与Wn的关系是反函数,Wn的减少对电阻减少的影响较小;而随着Wn的增大,NMOS的固有电容呈Wn倍数增加,根据Elmore延时,所有电容的充电延时是累加的,使得VDD对NMOS的固有电容充电时间显著增加。 3. 搭建 CMOS 反相器,PMOS 和 NMOS 的沟道长 L=0.25um,确定 PMOS 和 NMOS 的尺寸 W,使反相器在一阶 RC 网络条件下,本征延时 tp=(tpLH+tpHL)/2 速度尽可能的快。3.1 基本原理设β为CMOS反相器的PMOS宽长比和NMOS宽长比之比,即 \beta={(W/L)}p/{(W/L)}_n 则CMOS反相器的延时可以经过如下推导: t_p=0.69C_LR_{eq} \ t_p=0.69((C{dp1}+C_{dn1})+(C_{gp2}+C_{gn2})+C_w) 其中, C_{dp1}=\beta C_{dn1}, C_{gp2}=\beta C_{gn2},所以: t_p=0.69/2((1+\beta)(C_{dn1}+C_{gn2})+C_w)(R_{eqn}+R_{eqp}/\beta) 其中,R_{eqn}和R_{eqp}是相同尺寸的NMOS和PMOS等效电阻 t_p=0.69/2((1+\beta)(C_{dn1}+C_{gn2})+C_w)R_{eqn}(1+r/\beta) 其中,r=(R_{eqp}/R_{eqn})。此时,令\frac{\partial t_p}{\partial \beta}=0可得: \beta_{opt}=\sqrt{r(1+\frac{C_w}{C_{dn1}+C_{gn2}})} 当(C_{dn1}+C_{gn2})>>C_w时,\beta_{opt}的值为 \beta_{opt}=\sqrt{r} 由此可见,当器件的尺寸越小,反相器的速度就会越快,所付出的代价是对称性和噪声容限。当线网电容难以忽略时, \beta 的值就会变大 3.2 仿真设计由于相同尺寸相同开启条件下的PMOS和NMOS等效电阻之比接近1但又大于1,对应的β值在1到2之间,所以仿真的过程中,将Wn的值固定在0.5um,然后将Wp的值从0.5um每隔0.1um仿真一次,直到1.5um,对比所得tp。 3.3 仿真分析所得仿真波形如下所示,从tr0~tr10分别表示当Wn=0.5um时,Wp=0.5um、0.6um、0.7um、0.8um、0.9um、1um、1.1um、1.2um、1.3um、1.4um、1.5um时的vout曲线。 ![](data:image/svg+xml;utf8,svg%20xmlns='http://www.w3.org/2000/svg'%20width='2487'%20height='1394'/svg) 对应的传输延时如下表所示: β=(W/N)p/(W/N)ntPHLtPLHtP=(tPHL+tPLH)/21.012.1744.9228.5451.212.7841.7127.2451.413.4139.7326.571.614.8638.0726.4651.814.8737.3726.122.015.2136.4925.852.216.8635.3926.1252.417.6734.6726.172.618.0234.1726.0952.818.7733.1325.953.019.6932.2825.985由数据可知,tp最小时β的取值约为1.8-2.0之间,即当L=0.25um、Wn=0.50um时,Wp的取值在0.9um至1um之间。 拟合出对应的趋势曲线: 4. 对四输入动态与非门的瞬态响应进行仿真。 4.1 仿真思路首先,搭建如上图所示的四输入电路每次仿真前改变输入信号,遍历in1in2in3in4为0000~1111的所有情况(其中0表示gnd,1表示vdd)观察每次输出的vout信号4.2 结果分析![](data:image/svg+xml;utf8,svg%20xmlns='http://www.w3.org/2000/svg'%20width='2224'%20height='1379'/svg) 当CLK等于0时,CLK控制的PMOS管导通,对vout节点进行预充电至VDD;当CLK=1时,CLK控制的NMOS管导通,四输入信号有效,可传递到vout信号端。但要注意的是,四输入信号在CLK=1时要保持不变,因为vout节点在CLK=0时预充电,CLK=1时靠暂存在寄生电容上的电荷来维持高电平。当CLK从0->1变化前,输入为“1111”,CLK=1时vout节点的电荷将释放到gnd从而变成“逻辑零”;此后若输入变成其他组合,则由于vout节点的电荷已不存在,无法表示“逻辑1”。综上,四输入信号在CLK=1时要保持不变。 5. 搭建下图(a)的寄存器电路,仿真各节点(如下图(b)所示)的瞬态响应,大概确定所搭建的寄存器的建立时间。![](data:image/svg+xml;utf8,svg%20xmlns='http://www.w3.org/2000/svg'%20width='1153'%20height='386'/svg) 5.1 仿真思路先搭建反相器和传输门,然后用反相器和传输门连接成所要求的拓扑结构。输入D从0->1变化,延迟一定时间后CLK从0->1变化,采样后观察Q是否为1;若是则减小延迟时间间隔,若不是则增大延迟时间间隔,直至找到Q正确和错误的临界点,此时的延时间隔即为建立时间。 5.2 结果分析首先取延时间隔为80ps、130ps、180ps、230ps、280ps。仿真如下,发现当延时间隔为130ps时,Qm点(图中黄线部分)出现了亚稳态;当延时间隔为180ps时,Qm点(图中绿线部分)正常,二者的Q点均正常。 由上一步可以锁定建立时间为130~180ps之间,以10ps为一步长细化估计建立时间。所得仿真波形如下所示,通过观察发现,当延时间隔为140ps时,Qm点(图中浅蓝线)正确采样,对应的Q点变化正常,所以该触发器的建立时间约为140ps。 附件代码第一题* SPICE INPUT FILE: nmos_iv.sp Ids-Vds with different L
*----------------------------------------------------------------------------
*Parameters and models
*----------------------------------------------------------------------------
.param Supply=1.8 $ Set value of Vdd
.param LEN=25
.param WIDTH=LEN*2
.lib 'D:\Download\Hspice_vL-2016.03-2\Hspice_L-2016.03-2\lib\tsmc018\mm018.l' TT $ Set 0.18um library
.option scale=0.01u $ Set lambda
.option post=2
*----------------------------------------------------------------------------
*Subcircuits
*----------------------------------------------------------------------------
* .model nch NMOS level=49 version=3.1
*----------------------------------------------------------------------------
*Simulation netlist
*----------------------------------------------------------------------------
Mn drainn in gnd gnd nch l='LEN' w='WIDTH'
Vds drainn gnd dc
Vin in gnd dc
*----------------------------------------------------------------------------
*Stimulus
*----------------------------------------------------------------------------
.dc Vds 0 'Supply' 'Supply/20' Vin 0 'Supply' 'Supply/8'
.alter LEN=1000
.param LEN=1000
.end第二题(1)* SPICE INPUT FILE: cmos_vtc.sp Vds-Vgs
*----------------------------------------------------------------------------
*Parameters and models
*----------------------------------------------------------------------------
.param Supply=1.8 $ Set value of Vdd
.param WN=6
.param WP=3
.lib 'D:\Download\Hspice_vL-2016.03-2\Hspice_L-2016.03-2\lib\tsmc018\mm018.l' TT $ Set 0.18um library
.option scale=0.1u $ Set lambda
.option post=2
*----------------------------------------------------------------------------
*Subcircuits
*----------------------------------------------------------------------------
* .model pch PMOS level=49 version=3.1
* .model nch NMOS level=49 version=3.1
.global vdd gnd
.subckt inv vout vin WN='WN' WP='WP'
Mn vout vin gnd gnd nch l=2 w='WN'
Mp vout vin vdd vdd pch l=2 w='WP'
.ends
*----------------------------------------------------------------------------
*Simulation netlist
*----------------------------------------------------------------------------
Vdd vdd gnd 'Supply'
Vin vin gnd dc
Vm vin gnd dc
X1 vout vin inv WN='WN' WP='WP'
*----------------------------------------------------------------------------
*Stimulus
*----------------------------------------------------------------------------
.dc vin 0 'Supply' 0.01
.alter WN=100
.param WN=100
.alter WN=1000
.param WN=1000
.end(2)* SPICE INPUT FILE: cmos_tran.sp Vout-t
*----------------------------------------------------------------------------
*Parameters and models
*----------------------------------------------------------------------------
.param Supply=1.8 $ Set value of Vdd
.param WN=6
.param WP=3
.lib 'D:\Download\Hspice_vL-2016.03-2\Hspice_L-2016.03-2\lib\tsmc018\mm018.l' TT $ Set 0.18um library
.option scale=0.1u $ Set lambda
.option post=2
*----------------------------------------------------------------------------
*Subcircuits
*----------------------------------------------------------------------------
* .model pch PMOS level=49 version=3.1
* .model nch NMOS level=49 version=3.1
.global vdd gnd
.subckt inv vout vin WN='WN' WP='WP'
Mn vout vin gnd gnd nch l=2 w='WN'
Mp vout vin vdd vdd pch l=2 w='WP'
.ends
*----------------------------------------------------------------------------
*Simulation netlist
*----------------------------------------------------------------------------
Vdd vdd gnd 'Supply'
Vin vin gnd PULSE 0 'Supply' 0ps 20ps 20ps 200ps 1000ps
X1 vout vin inv WN='WN' WP='WP'
*----------------------------------------------------------------------------
*Stimulus
*----------------------------------------------------------------------------
.tran 0.1ps 1000ps
.measure tphl
+TRIG v(vout) VAL='Supply*0.9' FALL=1
+TARG v(vout) VAL='Supply*0.1' FALL=1
.measure tplh
+TRIG v(vout) VAL='Supply*0.1' RISE=1
+TARG v(vout) VAL='Supply*0.9' RISE=1
.alter WN=100
.param WN=100
.alter WN=1000
.param WN=1000
.end第三题* SPICE INPUT FILE: cmos_speed.sp Vout-t
*----------------------------------------------------------------------------
*Parameters and models
*----------------------------------------------------------------------------
.param Supply=1.8 $ Set value of Vdd
.param WN=50
.param WP=50
.lib 'D:\Download\Hspice_vL-2016.03-2\Hspice_L-2016.03-2\lib\tsmc018\mm018.l' TT $ Set 0.18um library
.option scale=0.01u $ Set lambda
.option post=2
*----------------------------------------------------------------------------
*Subcircuits
*----------------------------------------------------------------------------
* .model pch PMOS level=49 version=3.1
* .model nch NMOS level=49 version=3.1
.global vdd gnd
.subckt inv vout vin WN='WN' WP='WP'
Mn vout vin gnd gnd nch l=25 w='WN'
Mp vout vin vdd vdd pch l=25 w='WP'
.ends
*----------------------------------------------------------------------------
*Simulation netlist
*----------------------------------------------------------------------------
Vdd vdd gnd 'Supply'
Vin vin gnd PULSE 0 'Supply' 0ps 20ps 20ps 200ps 440ps
X1 vout vin inv WN='WN' WP='WP'
*----------------------------------------------------------------------------
*Stimulus
*----------------------------------------------------------------------------
.tran 0.1ps 440ps
.measure tphl
+TRIG v(vout) VAL='Supply*0.9' FALL=1
+TARG v(vout) VAL='Supply*0.1' FALL=1
.measure tplh
+TRIG v(vout) VAL='Supply*0.1' RISE=1
+TARG v(vout) VAL='Supply*0.9' RISE=1
.alter WP=60
.param WP=60
.alter WP=70
.param WP=70
.alter WP=80
.param WP=80
.alter WP=90
.param WP=90
.alter WP=100
.param WP=100
.end第四题* SPICE INPUT FILE: nand_in4_tran.sp Vout-t
*----------------------------------------------------------------------------
*Parameters and models
*----------------------------------------------------------------------------
.param Supply=1.8 $ Set value of Vdd
.param VIN1=0
.param VIN2=0
.param VIN3=0
.param VIN4=0
.lib 'D:\Download\Hspice_vL-2016.03-2\Hspice_L-2016.03-2\lib\tsmc018\mm018.l' TT $ Set 0.18um library
.option scale=0.01u $ Set lambda
.option post=2
*----------------------------------------------------------------------------
*Subcircuits
*----------------------------------------------------------------------------
* .model pch PMOS level=49 version=3.1
* .model nch NMOS level=49 version=3.1
*----------------------------------------------------------------------------
*Simulation netlist
*----------------------------------------------------------------------------
Mp vout clk vdd vdd pch l=25 w=100
Mn1 vout vin1 vout2 vout2 nch l=25 w=50
Mn2 vout2 vin2 vout3 vout3 nch l=25 w=50
Mn3 vout3 vin3 vout4 vout4 nch l=25 w=50
Mn4 vout4 vin4 vout5 vout5 nch l=25 w=50
Mn5 vout5 clk gnd gnd nch l=25 w=50
Vdd vdd gnd 'Supply'
Vin1 vin1 gnd 'VIN1'
Vin2 vin2 gnd 'VIN2'
Vin3 vin3 gnd 'VIN3'
Vin4 vin4 gnd 'VIN4'
Vclk clk gnd PULSE 0 'Supply' 20ps 20ps 20ps 200ps 440ps
*----------------------------------------------------------------------------
*Stimulus
*----------------------------------------------------------------------------
.tran 0.1ps 440ps
.alter vin_1111
.param VIN1='Supply' VIN2='Supply' VIN3='Supply' VIN4='Supply'
.end第五题* SPICE INPUT FILE: diff_su.sp Vout-t
*----------------------------------------------------------------------------
*Parameters and models
*----------------------------------------------------------------------------
.param Supply=1.8 $ Set value of Vdd
.param TR0=100ps
.param TR1=TR0+20ps
.lib 'D:\Download\Hspice_vL-2016.03-2\Hspice_L-2016.03-2\lib\tsmc018\mm018.l' TT $ Set 0.18um library
.option scale=0.01u $ Set lambda
.option post=2
*----------------------------------------------------------------------------
*Subcircuits
*----------------------------------------------------------------------------
* .model pch PMOS level=49 version=3.1
* .model nch NMOS level=49 version=3.1
.global vdd gnd
.subckt inv vout vin
Mn vout vin gnd gnd nch l=25 w=50
Mp vout vin vdd vdd pch l=25 w=100
.ends
.subckt trans_gate vout vin vgate vgaten
Mn vin vgate vout gnd nch l=25 w=50
Mp vout vgaten vin vdd pch l=25 w=100
.ends
*----------------------------------------------------------------------------
*Simulation netlist
*----------------------------------------------------------------------------
Vdd vdd gnd 'Supply'
Xinv0 nd1 clk inv
Xinv1 nd2 d inv
Xinv2 nd4 nd5 inv
Xinv3 nd5 nd3 inv
Xinv4 nd6 nd5 inv
Xinv5 nd8 q inv
Xinv6 q nd7 inv
Xtg1 nd3 nd2 nd1 clk trans_gate
Xtg2 nd3 nd4 clk nd1 trans_gate
Xtg3 nd7 nd6 clk nd1 trans_gate
Xtg4 nd7 nd8 nd1 clk trans_gate
Vin d gnd PWL 0ps 0 20ps 0 40ps 'Supply'
Vclk clk gnd PWL 0ps 0 'TR0' 0 'TR1' 'Supply'
*----------------------------------------------------------------------------
*Stimulus
*----------------------------------------------------------------------------
.tran 0.1ps 600ps
.alter TR0=150ps
.param TR0=150ps
.alter TR0=160ps
.param TR0=160ps
.alter TR0=170ps
.param TR0=170ps
.alter TR0=180ps
.param TR0=180ps
.alter TR0=190ps
.param TR0=190ps
.alter TR0=200ps
.param TR0=200ps
.end
|