大多数数字功能可分为:数据通道、储存器、控制单元、I/O。加法器和乘法器属于数据通道部分。
一般对数据通道有如下要求:首先是规整性以优化版图,其次是局域性(时间、空间,算子相邻布置)以使版图紧凑,正交性(数据流、控制流)以便规整布线,另外还需要层次化和模块化。
- 简单加法器
简单加法器是一个3输入2输出的逻辑单元,输入是两个相加位和一个前级进位,输出是和,以及本级进位。功能就是实现带进位的1位加法。逻辑表达式是:
SUM=A xor B xor Cin (异或的符号我不知道怎么弄出来,只好用xor代替了。)
Carry=AB+Cin(A+B)用组合逻辑来实现的话有下面几种方法
一是普通方法,将上面的逻辑表达式转换成只有与或非的形式(便于电路实现)
SUM=ABC+A(not B)(not C)+(not A)(not B)C+(not A)B(not C) 需要16个管子
Carry=AB+BC+AC 需要10个管子
另外A、B、C都需要反相信号(每个反相器2个管子)所以还需要6个。
总共32个管子。上面计算管子的时候,逻辑是按管子串联算的,这样省管子,但是因为串联也会带来问题(阈值电压损失?)。另外一种稍微使用了一点技巧,它利用输出的进位产生“和”位
SUM=ABC+(A+B+C)(not Carry)
Carry=AB+(A+B)C
这样总共需要28个管子。这种形式的电路重复利用Carry-out信号来产生 SUM,不需要异或门,节省了管子。但是它也有缺点:SUM信号比Carry迟产生。不过话又说回来,这未尝不是一个优点,因为在加法器链中,关键路径是进位信号的传递,也就是说通常加法器链的延时取决于每个加法器进位信号的产生时间(下面将要讨论这方面的问题),而不是“和”信号的延时。所以这种电路的这个特点不会对速度造成太大的影响。对组合逻辑加法器可以进行如下的优化:
- 加大Carry Stage中管子的尺寸以提高Carry out的驱动能力。
- 减小Carry out信号驱动的管子的尺寸(在Sum Stage中),以减小Carry out信号的负载。
- 尽量使Carry out的线短,并少用扩散层作为布线层。
- 把Carry in信号驱动的管子放在靠近输出端(减少Body Effect)。
- 通过仔细模拟决定管子尺寸。
除了使用组合逻辑以外,还可以使用传输门逻辑来实现简单加法器。这里就不细谈了。传输门加法器共需24个管子。它的特点是:输出既有SUM、Carry,又有它们的反信号; SUM和Carry的延时时间相同;无阈值损失。当然,它的速度不如组合逻辑。
- 串行进位加法器
串行进位加法器可以说是最简单的一种多位加法器,它是由n个一位加法器(也就是上面分析的简单加法器)串联而成,第i级的Carry-out用来产生第i+1级的 SUM和Carry。
这种加法器结构简单,但是速度慢,n位加法器的延时=n * (一位延时)。这种加法器可以通过同时利用正信号和反信号来达到优化进位链的效果。(这种方法很巧妙,不过空口说好像不大容易说清楚,以后把图画出来就清楚了,:-P)
- 超前进位加法器
- 曼彻斯特进位链
- 条件求和加法器
- 进位选择加法器
- 其他加法器
- 加法器小结
参考资料
本文基本上是参考清华大学周润德老师《数字VLSI设计》的讲义写成的。