先行进位加法器教材
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验四32 位先行进位加法器
一、功能概述
串行进位加法器延时很大,每级的输出结果都要等上一级的进位到来才可以求和算出结果,这次实验对普通全加器进行改良,改良为先行
进位加法器。
先行进位加法器,各级的进位彼此是独立产生,只与输入数据A, B 和C_in 有关,将各级间的进位级联传播给去掉了,这样就可以减小进位产生的延时。每个等式与只有三级延迟的电路对应,第一级延迟对应进位产生信号和进位传递信号,后两级延迟对应上面的积之和。通过这种进位方式实现的加法器称为超前进位加法器。因为各个进位是并行产生的,所以是一种并行进位加法器。
二、实验原理
1、设二进制加法器第i位为A i, B i,输出为S,进位输入为C i, 进位输
出为C i+i,则有:
S=A i ㊉B i ㊉C i
(1-1)
C i+1 =A i * B i+ A i *C i+ B i*C i =A i * B i+(A i+B i)* C i
(1-2)令G i = A i * B i , P i = A i+B i,贝y C i+1= G i+ P i *C i
当A i和B i都为1时,G i = 1 ,产生进位C i+i = 1
当A i和B i有一个为1时,P i = 1,传递进位C i+i= C i
因此G i定义为进位产生信号,P i定义为进位传递信号。G i的优先级比P i 高,也就是说:当G i = 1时(当然此时也有P i = 1),无条件产生进位,而不管C i 是多少;当G i=0 而P i=1 时,进位输出为C i,跟C i之前的逻辑有关。
下面推导 4 位超前进位加法器。设 4 位加数和被加数为 A 和B,进位输入为C in,进位输出为C out,对于第i位的进位产生G i = A i •B i,进位传递P i=A i+B i , i=0,1,2,3。于是这各级进位输出,递归的展开Ci,有:
C0 = C in
G=G o + P o •C o
C2=G 1 + P1 •C 1 = G 1 + P1 •G 0 + P1 •P o ?C o
C3=G 2 + P
2 •C 2 = G2 + P
2, G 1 + P2 •P1 •G o +
P2 •P1 •P o •C o
C4=G 3 + P3 •C 3 = G3 + P3, G 2 + P3 •P2 •G 1 +
P3 •P 2 •P1 •G o + P 3 P2 •P1
•
P o •C o (1-3)
C out=C4
由此可以看出,各级的进位彼此独立产生,只与输入数据Ai、Bi 和Cin 有关。
2、接口说明
序号 接口信号名称
方向
说明
备注
1 A[31:0] I 输入数据
2 B[31:0] I 输入数据
3 S[31:0] O 加法结果
4
count
O
最高位进位
3、结构框图
三、实验方案
方案一:分为两个模块:1个4位add_4和1个add_32,其中add_32 调用4个add_4.
首先设计4位超前进位加法器:
框图如下:
设计好四位的之后,开始调用四位的实现
32位的
方案二:分为五个模块:(1)计算传播值和产生值模块:
|
L —
7 \
4位 ^28 4
位
C^4 4位 - 4位
CLA
CLA
A
15~12 B 15~12 A
11~8 B
11~8 A
7~4 B 7-4 A
3~o B 3~0
1
4位L CLA
C 12 4位 CLA
4位 CLA
C4
<-l 4位 CLA
1 F 1 r
卄* g x1 p x1 C 16
g x1
g x0 P
x0
C s2
4位 BCLA
pg
r 5 CLA CLA 9~16
g m4 P m4
g m7 P m7
P m6 g
m5 p
m5
4位 BCLA
A
31~28 B 31~28 A
27~24 B 27~24 A
23~20 B
23~20 A
19~16 B 19~16
1~8
g
m0 P mO
16 位
1 f f S
7~4
gm2Pm2
4位 BCLA
mlPm1
* * S
i5~i2 g m3
P m3
1 T S3~0
模块
(2)超前进位模块:cla 模块
(3)加法求和模块:sum 模块
(4)求和并按输出a,b,c_in 分组:bit_slice 模块
(5)32 位超前进位加法器总模块:cla_32 总框图:
四、验证方案:
对32 位的两个输入赋值:
当a=32'b1000_0001_0111_1011_1101_1001_1101_1000;
b=32'b0111_1000_ 0001_ 1000_ 1100_ 0111_ 0101_ 0001;
c_in=1'b0;
结果:s=32'b1111
1001;
_1001 _1001 _0100 _1010 _0001 _0010_
当a=32'b1000_0001_
1000;
0111_ 1011_ 1101_ 1001_ 1101_
0001;
b=32'b0111_1000_
0001_ 1000_ 1100_ 0111_ 0101_
c_in=1'b1;
结果:s=32'b1111 _1001 _1001 _0100 _1010 _0001 _0010_ 1010; 来对波形进行观察,看波形是否正确。
五、实验代码:
方案一:(1)add_32 模块顶层模块:
(2) 4位add_4模块
方案二:(1) cla_32顶层模块:
module cla_32(a,b,c_in,s,count ); input [31:0] a,b;
input c_in;