先行进位加法器课件

上传人:好** 文档编号:99523908 上传时间:2019-09-19 格式:DOC 页数:11 大小:325.51KB
返回 下载 相关 举报
先行进位加法器课件_第1页
第1页 / 共11页
先行进位加法器课件_第2页
第2页 / 共11页
先行进位加法器课件_第3页
第3页 / 共11页
先行进位加法器课件_第4页
第4页 / 共11页
先行进位加法器课件_第5页
第5页 / 共11页
点击查看更多>>
资源描述

《先行进位加法器课件》由会员分享,可在线阅读,更多相关《先行进位加法器课件(11页珍藏版)》请在金锄头文库上搜索。

1、实验四 32位先行进位加法器一、 功能概述串行进位加法器延时很大,每级的输出结果都要等上一级的进位到来才可以求和算出结果,这次实验对普通全加器进行改良,改良为先行进位加法器。 先行进位加法器,各级的进位彼此是独立产生,只与输入数据A,B和C_in有关,将各级间的进位级联传播给去掉了,这样就可以减小进位产生的延时。每个等式与只有三级延迟的电路对应,第一级延迟对应进位产生信号和进位传递信号,后两级延迟对应上面的积之和。通过这种进位方式实现的加法器称为超前进位加法器。因为各个进位是并行产生的,所以是一种并行进位加法器。二、 实验原理1、设二进制加法器第i位为Ai,Bi,输出为Si,进位输入为Ci,进

2、位输出为Ci+1,则有: Si=AiBiCi (1-1) Ci+1=Ai *Bi+ Ai *Ci+ Bi*Ci=Ai *Bi+(Ai+Bi)* Ci (1-2)令Gi= Ai* Bi, Pi= Ai+Bi,则Ci+1= Gi+ Pi *Ci当Ai和Bi都为1时,Gi= 1, 产生进位Ci+1= 1当Ai和Bi有一个为1时,Pi= 1,传递进位Ci+1= Ci因此Gi定义为进位产生信号,Pi定义为进位传递信号。Gi的优先级比Pi高,也就是说:当Gi = 1时(当然此时也有Pi = 1),无条件产生进位,而不管Ci是多少;当Gi=0而Pi=1时,进位输出为Ci,跟Ci之前的逻辑有关。 下面推导4位

3、超前进位加法器。设4位加数和被加数为A和B,进位输入为Cin,进位输出为Cout,对于第i位的进位产生Gi = AiBi ,进位传递Pi=Ai+Bi , i=0,1,2,3。于是这各级进位输出,递归的展开Ci,有:C0 = CinC1=G0 + P0C0C2=G1 + P1C1 = G1 + P1G0 + P1P0 C0C3=G2 + P2C2 = G2 + P2G1 + P2P1G0 + P2P1P0C0C4=G3 + P3C3 = G3 + P3G2 + P3P2G1 + P3P2P1G0 + P3P2P1P0C0 (1-3)Cout=C4由此可以看出,各级的进位彼此独立产生,只与输入数据

4、Ai、Bi和Cin有关。2、接口说明表1: 32位超前进位加法器接口信号说明表序号接口信号名称方向说明备注1A31:0I输入数据2B31:0I输入数据3S31:0O加法结果4countO最高位进位3、结构框图三、 实验方案方案一:分为两个模块:1个4位add_4和1个add_32,其中add_32调用4个add_4.首先设计4位超前进位加法器:框图如下:设计好四位的之后,开始调用四位的实现32位的。方案二:分为五个模块:(1)计算传播值和产生值模块:pg模块(2)超前进位模块:cla模块 (3)加法求和模块:sum模块(4)求和并按输出a,b,c_in分组:bit_slice模块(5)32位超

5、前进位加法器总模块:cla_32总框图:四、 验证方案:对32位的两个输入赋值:当a=32b1000_0001_0111_1011_1101_1001_1101_1000;b=32b0111_1000_0001_1000_1100_0111_0101_0001;c_in=1b0;结果:s=32b1111_1001_1001_0100_1010_0001_0010_1001;当 a=32b1000_0001_0111_1011_1101_1001_1101_1000;b=32b0111_1000_0001_1000_1100_0111_0101_0001;c_in=1b1;结果:s=32b111

6、1_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; output 31:0 s; output count; wire 7:0 gg,gp,gc; wire 3:0 ggg,ggp,ggc; wire gggg,gggp; bit_slice b1(.a(a3:0),.b(b3:0),.c_in(gc0

7、),.s(s3:0),.gp(gp0),.gg(gg0); bit_slice b2(.a(a7:4),.b(b7:4),.c_in(gc1),.s(s7:4),.gp(gp1),.gg(gg1); bit_slice b3(.a(a11:8),.b(b11:8),.c_in(gc2),.s(s11:8),.gp(gp2),.gg(gg2); bit_slice b4(.a(a15:12),.b(b15:12),.c_in(gc3),.s(s15:12),.gp(gp3),.gg(gg3); bit_slice b5(.a(a19:16),.b(b19:16),.c_in(gc4),.s(s1

8、9:16),.gp(gp4),.gg(gg4); bit_slice b6(.a(a23:20),.b(b23:20),.c_in(gc5),.s(s23:20),.gp(gp5),.gg(gg5); bit_slice b7(.a(a27:24),.b(b27:24),.c_in(gc6),.s(s27:24),.gp(gp6),.gg(gg6); bit_slice b8(.a(a31:28),.b(b31:28),.c_in(gc7),.s(s31:28),.gp(gp7),.gg(gg7); clac0(.p(gp3:0),.g(gg3:0),.c_in(ggc0),.c(gc3:0)

9、,.gp(ggp0),.gg(ggg0);cla c1(.p(gp7:4),.g(gg7:4),.c_in(ggc1),.c(gc7:4),.gp(ggp1),.gg(ggg1);assign ggp3:2=2b11;assign ggg3:2=2b00;cla c2(.p(ggp),.g(ggg),.c_in(c_in),.c(ggc),.gp(gggp),.gg(gggg);assign count=gggg|(gggp&c_in);endmodule(2)pg模块:module pg(a,b,p,g);input 3:0 a,b;output 3:0 p,g;assign p=ab;as

10、sign g=a&b;endmodule(3)cla模块:module cla(p,g,c_in,c,gp,gg);input 3:0 p,g;input c_in;output 3:0 c;output gp,gg;function 99:0 do_cla; input 3:0 p,g; input c_in; begin:label integer i; reg gp,gg; reg 3:0 c; gp=p0; gg=g0; c0=c_in; for(i=1;i4;i=i+1) begin gp=gpπgg=(gg&pi)|gi;ci=(ci-1&pi-1)|gi-1; enddo_

11、cla=c,gp,gg;end endfunctionassign c,gp,gg=do_cla(p,g,c_in);endmodule(4)sum模块:module sum(a,b,c,s );input 3:0 a,b,c;output 3:0 s;wire 3:0 t=ab;assign s=tc;endmodule(5)bit_slice模块:module bit_slice(a,b,c_in,s,gp,gg );input 3:0 a,b;input c_in;output 3:0 s;output gp,gg;wire 3:0p,g,c;pg i1(a,b,p,g);cla i2(

12、p,g,c_in,c,gp,gg);sum i3(a,b,c,s);endmodule(6)激励代码:module cla32_tb;/ Inputsreg 31:0 a;reg 31:0 b;reg c_in;/ Outputswire 31:0 s;wire count;/ Instantiate the Unit Under Test (UUT)cla_32 uut (.a(a), .b(b), .c_in(c_in), .s(s), .count(count);initial begin/ Initialize Inputsa = 0;b = 0;c_in = 0;/ Wait 100

13、 ns for global reset to finish#10 a=32b1000_0001_0111_1011_1101_1001_1101_1000;b=32b0111_1000_0001_1000_1100_0111_0101_0001;c_in=1b0;#10 a=32b1000_0001_0111_1011_1101_1001_1101_1000;b=32b0111_1000_0001_1000_1100_0111_0101_0001;c_in=1b1; / Add stimulus hereend endmodule六、波形图说明1、仿真波形2、结果说明对于三个输入: a=32b1000_0001_0111_1011_1101_1001_1101_1000; b=32b0111_1000_0001_1000_1100_0111_0101_0001; c_in=1b0;结果与实验方案的相同,结果仿真正确.七、 实验总结 对于这次实验,自己在老师布置完,努力做了几个下午,不断调试才得到正确结果波形,是非常有收获的。同时我也采用了两种方案来设计,真正的对先行进位加法器有了全新的认识

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > 事务文书

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号