最近在复习 COA 加法器的部分,发现对于加法器延迟的运算隐含了一些假设:
- 逻辑门输入的数量是无限制的
- 逻辑门输入的数量与逻辑门的延迟是无关的
这里逻辑门输入的数量即为扇入
也就是说,在给定的延迟下,无论加法器的位数是多少,全先行进位加法器的延迟是固定的。
这显然与实际是不一致的,逻辑门如果在物理上具有太多的扇入,由于输入级电路会增加器件等效的电容,整个逻辑门将产生一定的传输延迟。
课件中指出,引入部分先行进位加法器是为了在计算时间和硬件复杂度之间取得权衡。在这里,降低硬件复杂度本身就是减少逻辑门的扇入,而这在某种程度上,也减少了逻辑门的传输延迟。尽管这种效应可能不及硬件结构改变后计算时间的增加。
另一方面,在给定的扇入下,可以设计硬件结构,进一步优化部分先行进位加法器的延迟。
考虑如下的逻辑门属性:
- 与门延迟 → 1 ty
- 或门延迟 → 1 ty
- 异或门延迟 → 3 ty
- 逻辑门最大扇入为 8
这里的想法是让模块间的进位信号也能快速传递,基本思路是基于辅助函数 pi 和 gi,设计第二层超前进位电路。
这里是课件中的部分先行进位加法器的结构图:
我们需要让模块间的进位信号 C8,C16,C24,C32 能够快速传递,为此写出这些信号的原始表达式。
记 pi=xiyi,gi=xi+yi,则 C8=G0+P0C0,其中:
- G0=g7+p7g6+p7p6g5+⋯+p7p6p5p4p3p2p1g0
- P0=p7p6p5p4p3p2p1p0
类似的有 C8i+8=Gi+PiC8i,其中:
- Gi=g8i+7+p8i+7g8i+6+p8i+7p8i+6g8i+5+⋯+p8i+7p8i+6p8i+5p8i+4p8i+3p8i+2p8i+1g8i
- Pi=p8i+7p8i+6p8i+5p8i+4p8i+3p8i+2p8i+1p8i
在这种方案下,电路结构图如下:
我们可以使用 Gi 和 Pi,在电路复杂性和延迟之间进行进一步优化:
- pi 和 gi 的延迟为 1
- Pi 和 Gi 的延迟为 3=1+2
- Ci 的延迟为 5 或 7
- C8,C16,C24,C32 为 5=3+2
- 其余为 7=5+2
- Si 的延迟为 10=7+3
即最大延迟为 10ty,优于课件中的 12ty,并且,在加法器运算位数增加的情况下,这里的延迟不会发生变化(见最后的勘误),而课件中的延迟会相应的增大。
这里的关键是,充分利用逻辑门的最大扇入。实际上,这里的假定的最大扇入仍然有点多,我们可以进一步减少扇入为 4,于是相应的将 CLA 和第二层超前进位电路设计为 4 位即可。
参考资料:
勘误:
- 在加法器运算位数增加的情况下,优化后的结构要想延迟不发生变化,需要满足
模块数 ≤ 最大扇入 - 1
的条件,否则会超出最大扇入的限制。
- 可以将条件弱化为
模块数 ≤ 最大扇入
,此时最高位的进位通过模块中的第一层超前进位电路得到,而非通过第二层超前进位电路得到。