网站大量收购独家精品文档,联系QQ:2885784924

先行进位加法器精要.doc

  1. 1、本文档共11页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
先行进位加法器精要

实验四 32位先行进位加法器 功能概述 串行进位加法器延时很大,每级的输出结果都要等上一级的进位到来才可以求和算出结果,这次实验对普通全加器进行改良,改良为先行进位加法器。 先行进位加法器,各级的进位彼此是独立产生,只与输入数据A,B和C_in有关,将各级间的进位级联传播给去掉了,这样就可以减小进位产生的延时。每个等式与只有三级延迟的电路对应,第一级延迟对应进位产生信号和进位传递信号,后两级延迟对应上面的积之和。设二进制加法器第i位为Ai,Bi,输出为Si,进位输入为Ci,进位输出为Ci+1则有: Si=Ai⊕Bi⊕Ci (1-1) Ci+1?=Ai *?Bi+ Ai *Ci+ Bi*Ci?=Ai *?Bi+(Ai+Bi)* Ci 令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位超前进位加法器。设4位加数和被加数为A和B,进位输入为Cin进位输出为Cout,对于第i位的进位产生Gi = Ai·Bi ,进位传递Pi=Ai+Bi , i=0,1,2,3于是这各级进位输出,递归的展开Ci,有: C0 = Cin C1=G0 + P0·C0 C2=G1 + P1·C1 = G1 + P1·G0 + P1·P0 ?C0 C3=G2 + P2·C2 = G2 + P2·G1 + P2·P1·G0 + P2·P1·P0·C0 C4=G3 + P3·C3 = G3 + P3·G2 + P3·P2·G1 + P3·P2·P1·G0 + P3·P2·P1·P0·C0 Cout=C4 由此可以看出,各级的进位彼此独立产生,只与输入数据和Cin有关 实验方案 方案一:分为两个模块: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位超前进位加法器总模块: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=32b1111_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(a[3:0]),.b(b[3:0]),.c_in(gc[0]),.s(s[3:0]),.gp(gp[0]),.gg(gg[0])); bit_slice b2(.a(a[7:4]),.b(b[7:4]),.c_in(gc[1]),.s(s[7:4]),.gp(gp[1]),.gg(gg[1])); bit_slice b3(.a(a[11:8]),.b(b[11:8]),.c_in(gc[2]),.s(s[11:8]),.gp(gp[2]),.gg(gg[2])); bit_slice b4(.a(a

文档评论(0)

shuwkb + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档