简单加法器
简单加法器是一个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的延时时间相同;无阈值损失。当然,它的速度不如组合逻辑。