加法器原理(16位先行进位)
加法器原理(16位先行进位)
这个加法器写的是一波三折啊,昨天晚上花了两三个小时好不容易写完编译通过了,之后modelsim莫名其妙弹出一个对话框,我没看清就那么不小心一点,结果代码没了,惨痛啊。害的我今天早上又花了一上午的时间重写,结果又遇到了搞不清楚的编译问题。不过在重写的过程中,我还是发现昨天写的一些地方有问题,通过这次重写,我把verilog的语句并行理解的更加深刻了。下面总结一下原理和具体的实现。
原理
进位的传递
ci+1 = ai*bi+ai*ci+bi*ci
= ai*bi+(ai+bi)*ci
= gi+pi*ci
gi=ai*bi称为进位生成因子, 只要gi为1, 就有进位
pi=ai+bi称为进位传递因子, 只要pi为1, 就有把低位的进位向前传递
四位进位传递为例
c1 = g0+(p0*c0)
c2 = g1+(p1*g0)+(p1*p0*c0)
c3 = g2+(p2*g1)+(p2*p1*g0)+(p2*p1*p0*c0)
c4 = g3+(p3*g2)+(p3*p2*g1)+(p3*p2*p1*g0)+(p3*p2*p1*p0*c0)
只要低位有一个进位生成, 而且被传递, 则进位输出为1.
对于16位先行加法器,采用4个4位先行进位加法器组成,块内并行,由于高位的块需要用到低位块的进位,快间仍然并行计算进位。方法是产生每块的进位传递因子和进位产生因子。
块间进位传递因子: 每一位的传递因子都为1时才能传递
P0 = p0*p1*p2*p3
块间进位产生因子: 块内产生进位, 不考虑进位输入
G0 = g3+(p3*g2)+(p3*p2*g1)+(p3*p2*p1*g0)
块间进位的计算方法同上(只需要将p,g换成P,G就可以了)。
16位加法器相当与16个半加器同时工作,而每个半加器输入的进位cin都有传递因子和生产因子通过最低进位c0得到,而这16歌进位也是同时得到的。这大大提高了加法器的速度,设一个与非门的延迟为T,先行进位加法器总的延迟11T=2T(产生组内p g)+2T(产生组间P G)+2T(产生组内进位)+2T(产生组间进位)+3T(计算全加)。注意依赖关系,组内p g依赖于操作数a b,组内进位依赖于p g,组间的PG依赖于组内的p g,组间的进位依赖于P G,而全加依赖于组内和组间的进位。
非常好我支持^.^
(26) 9.4%
不好我反对
(251) 90.6%
相关阅读:
- [电子说] 反相加法器原理图与电路图 2019-09-22
- [电子说] 加法器原理 2019-06-19
- [电子说] 4位二进制加法器原理 4位二进制加法器设计 2018-07-25
- [电子说] 反相加法器原理图与电路图 2018-03-16
- [电子常识] 加法器电路原理_二进制加法器原理_与非门二进制加法器 2017-08-16
( 发表人:admin )