HSPICE实现环形振荡器【内附代码】
**写在前面:笔者还是正在学习的研究生,在这里主要想记录一些在课程、科研中解决的一些问题,以便回顾。若有错误的地方,也希望大家指出呀~欢迎大家讨论!
振荡器
振荡器是将直流电转变为交流电的过程,用来产生一定频率的交流信号,是有源器件,多用于锁相环中。
环形振荡器
环形振荡器,是由三个非门或更多奇数个非门输出端和输入端首尾相接,构成环状的机器。
图中所展示的是一种频率可调的环形振荡器,通过增加控制晶体管,控制充放电速度,改变振荡器频率。
HSPICE仿真
我首先仿真了三级反相器首尾相接形成的环形振荡器。振荡周期为200ps。因为没有增加控制器件,所以充放电波形比较对称。
注意!环振的起振是通过在电源初增加小的扰动即可实现,而不是给某个节点加初始电压,因为环振没有输入输出!(这个问题困扰了我好久
接下来,我在第二级反相器上,给nmos串联了4个同样尺寸的nmos,用于调节振荡频率。开始我只串联了1个nmos,但仿真波形差异不大。所以多串了几个。。后面思考:应该也可以通过在节点接电容来改变频率。
通过波形可以发现充放电所需时间不同,放电明显比充电时间要长。这就是因为多串了几个nmos,相当于加长了沟道。同时,节点的输出幅度不是全摆幅(从0到Vdd)。周期在260ps左右。
HSPICE代码
我使用的是TSMC 0.18um的工艺库,2019版HSPICE。
注意!第一行*标题行一定要加!记得修改库地址哦
【三级反相器环振】
**buffer
.param Supply = 1.8
.lib ‘C:\synopsys\Hspice_L-2016.03-2\mm018.L’ TT * Set 0.18um library
.opt scale=0.1u
mp0 out0 in Vdd Vdd pch l=2 w=6 ad=30 pd=6 as=30 ps=6
mn0 out0 in Gnd GND nch l=2 w=3 ad=15 pd=3 as=15 ps=3
mp1 out1 out0 Vdd Vdd pch l=2 w=6 ad=30 pd=6 as=30 ps=6
mn1 out1 out0 Gnd GND nch l=2 w=3 ad=15 pd=3 as=15 ps=3
mp2 in out1 Vdd Vdd pch l=2 w=6 ad=30 pd=6 as=30 ps=6
mn2 in out1 Gnd GND nch l=2 w=3 ad=15 pd=3 as=15 ps=3
c in gnd 0.1f
vdd vdd gnd pwl(10P 0 100P 1.8)
.tran 0.01n 5u
.op
.option captab = 1
.OPTION POST=2 TNOM=27 NOMOD LIST METHOD=GEAR
.end
【频率可调环振】
*buffer_2
.param Supply = 1.8
.lib ‘C:\synopsys\Hspice_L-2016.03-2\mm018.L’ TT * Set 0.18um library
.opt scale=0.1u
mp0 out0 in Vdd Vdd pch l=2 w=6 ad=30 pd=6 as=30 ps=6
mn0 out0 in Gnd GND nch l=2 w=3 ad=15 pd=3 as=15 ps=3
mp1 out1 out0 Vdd Vdd pch l=2 w=6 ad=30 pd=6 as=30 ps=6
mn1 out1 out0 n1 GND nch l=2 w=3 ad=15 pd=3 as=15 ps=3
mn12 n1 vctrl n2 gnd nch l=2 w=3 ad=15 pd=3 as=15 ps=3
mn13 n2 vctrl n3 gnd nch l=2 w=3 ad=15 pd=3 as=15 ps=3
mn14 n3 vctrl n4 gnd nch l=2 w=3 ad=15 pd=3 as=15 ps=3
mn15 n4 vctrl gnd gnd nch l=2 w=3 ad=15 pd=3 as=15 ps=3
mp2 in out1 Vdd Vdd pch l=2 w=6 ad=30 pd=6 as=30 ps=6
mn2 in out1 Gnd GND nch l=2 w=3 ad=15 pd=3 as=15 ps=3
c in gnd 0.1f
vdd vdd gnd pwl(10P 0 100P 1.8)
vctrl vctrl gnd 1.1
.tran 0.01n 5u
.op
.option captab = 1
.OPTION POST=2 TNOM=27 NOMOD LIST METHOD=GEAR
.end
结语
debug的过程终是痛苦的,但当波形跑出来的那一刻,还是很有成就感的!希望大家都有所收获!
欢迎讨论!