CMOS VLSI Design 学习笔记 - 组合电路设计(一)
1. 静态CMOS逻辑
1.1逻辑转换
在对电路逻辑的设计中,我们往往习惯于使用与、或、非等直接的逻辑,但CMOS逻辑提供的门是反相的,因此我们要设法把与、或门组成的逻辑转化为与非、或非门组成的逻辑,这里引入一种“推气泡”(即门电路中代表非的小圆圈)的方法。
这个过程比较简单,反复在最靠前一层的逻辑门输出端加入一对反向逻辑,然后将多余反向逻辑合并至下一级逻辑门即可。最后若有多余的“气泡”,全部使用反相器替换。
如下图,1中为一个简单的由与门和或门组成的逻辑,我们可以在与门的输出端加入两个“气泡”(非标志),将与门变成与非门,如2所示,然后将多出的气泡组合到下一级的门中,成为一个与非门,如3、4所示。
1.2 延时的分析与优化
本节参照CMOS VLSI Design使用延时努力模型进行分析
1.2.1 复合门的逻辑努力与寄生延时
如下图所示,对于简单的逻辑门,各输入端的栅电容通常是一致的,因而各输入端的逻辑努力也是一致的。但在复合门中,为了保证各支路的驱动能力一致,往往会使得各输入端的栅电容有所差异。不过,在此情况下,逻辑努力与寄生延时的分析与简单的逻辑门是一致的。
以上图为例,AOI21的逻辑表达式为
¬
(
A
⋅
B
+
C
)
\lnot(A \cdot B+C)
¬(A⋅B+C)
在驱动能力与单位反相器一致的情况下,记单位反相器栅电容为3,则A、B、C输出端栅电容分别为4+2、4+2、4+1,逻辑努力为
g
A
=
(
4
+
2
)
/
3
=
2
g
B
=
(
4
+
2
)
/
3
=
2
g
C
=
(
4
+
1
)
/
3
=
5
3
g_A=(4+2)/3=2\\ g_B=(4+2)/3=2\\ g_C=(4+1)/3={5\over3}
gA=(4+2)/3=2gB=(4+2)/3=2gC=(4+1)/3=35
AOI21的寄生延时为
(
4
+
2
+
1
)
/
3
=
7
3
(4+2+1)/3={7\over3}
(4+2+1)/3=37
复合门对逻辑努力的分析难点不在上述计算,而是要确定满足规定驱动能力的各晶体管尺寸。例如下图中的复杂AOI,各条可能的驱动支路已标出,设计晶体管宽度时,应注意使各支路的单独驱动能力均与单位反相器一致。
1.2.2 不对称门
前文所述的内容中,我们在设计时尽可能使各晶体管的尺寸一致,这是为了尽可能使各输入端的栅电容相等,从而有接近的逻辑努力。如果各输出端的使用情况相似,这当然是合理的,但现实情况不一定如此。某些输入端的逻辑变化频率可能较快,另一些则较慢,输入端电路延时主要来源于这些变化频繁的输入端,我们不妨把这些输入端称为关键输入,对应的晶体管称为关键晶体管(我自己取的名字)。那么,在保证现有总的驱动能力不变的前提下,提升逻辑变化频繁的输入端的延时性能就可以比较有效的改善整个逻辑电路的延时性能。
这一设计思想可以提供不对称门实现。在设计晶体管尺寸时,通过减小关键晶体管的尺寸从而减小关键晶体管栅电容就可以实现。相应的,为了维持原有的驱动能力,其他的晶体管尺寸要相应地增大,当然,这会导致非关键的输入端逻辑努力增大。
也就是说,不对称门是为了优化某些输入端,而在保证总驱动能力不变的情况下,调整晶体管尺寸。
举个栗子,比如上图中的逻辑电路,假如A端的使用率为reset端的9倍,g_wavg为加权的平均逻辑努力,(1)中是对称的情况,此时的逻辑努力为:
g
A
=
(
2
+
2
)
/
3
=
4
3
g
r
e
s
e
t
=
(
1
+
2
)
/
3
=
1
g
a
v
g
=
(
g
A
+
g
r
e
s
e
t
)
/
2
=
7
6
≈
1.17
g
w
a
v
g
=
g
A
∗
0.9
+
g
r
e
s
e
t
∗
0.1
=
1.3
g_A=(2+2)/3={4\over3}\\ g_{reset}=(1+2)/3=1\\ g_{avg}=(g_A+g_{reset})/2={7\over6}\approx1.17\\ g_{wavg}=g_A*0.9+g_{reset}*0.1=1.3
gA=(2+2)/3=34greset=(1+2)/3=1gavg=(gA+greset)/2=67≈1.17gwavg=gA∗0.9+greset∗0.1=1.3
假如A输入端变化比较频繁,那这个时候优化一下,减小A输入端对应晶体管的尺寸,得到(2)。则有:
g
A
=
(
2
+
4
3
)
/
3
=
10
9
g
r
e
s
e
t
=
(
1
+
4
)
/
3
=
5
3
g
a
v
g
=
(
g
A
+
g
r
e
s
e
t
)
/
2
=
25
18
≈
1.39
>
1.17
g
w
a
v
g
=
g
A
∗
0.9
+
g
r
e
s
e
t
∗
0.1
=
7
6
≈
1.17
<
1.3
g_A=(2+{4\over3})/3={10\over9}\\ g_{reset}=(1+4)/3={5\over3}\\ g_{avg}=(g_A+g_{reset})/2={25\over18}\approx1.39>1.17\\ g_{wavg}=g_A*0.9+g_{reset}*0.1={7\over6}\approx1.17<1.3
gA=(2+34)/3=910greset=(1+4)/3=35gavg=(gA+greset)/2=1825≈1.39>1.17gwavg=gA∗0.9+greset∗0.1=67≈1.17<1.3
可见,虽然总的逻辑努力增加了,但考虑输入使用率的延时减小了。
1.2.3 偏斜门
类似的,实际应用中,也可能出现各个输入端同等重要,但是上拉(或者下拉)的发生更频繁,那么通过减小下拉(上拉)网络的寄生电容,即减小下拉(上拉)网络的晶体管尺寸,就可以实现比较有效的延时优化。当然,这会导致下拉(上拉)网络的驱动能力下降从而增大下拉(上拉)跳变的延时。
也就是说,偏斜门是为了优化上拉或者下拉网络的性能,调整晶体管尺寸,降低下拉或者上拉网络的性能。
优化上升沿的性能为高偏斜,优化下降沿的性能为低偏斜
偏斜门逻辑努力的计算与不对称门类似,但参照的反相器不再是单位反相器,而是与上升(下降)沿驱动能力相同的反相器。
例如,上图所示为一个单位反相器,一个无偏斜的与非门,一个高偏斜的与非门,一个低偏斜的与非门,两种偏斜计算逻辑努力时各自参照的反相器。