树形加法器(Brent-Kung加法器)

  • 并行前缀加法器
    • 块g,p信号与并行前缀运算
      • 块g,p信号对、合并操作与区间合并
    • 进位计算的并行前缀表示
      • 并行前缀加法器的一个完整示例
    • 不同的并行前缀进位网络设计
      • Kogge-Stone(KS)结构
      • Brent-Kung(BK)结构
      • 混合并行前缀网络与其它的并行前缀网络设计(Han-Carlson结构)
      • 改进版Han-Carlson结构
      • 三种结构的复杂度比较
  • 参考连接:


g[i,i+3]g_{[i, i+3]}g[i,i+3]​ 和 p[i,i+3]p_{[i, i+3]}p[i,i+3]​ 分别叫做“块 ggg 信号”和“块 ppp 信号”,代表了这个加法器从第iii bit到第 i+3i+3i+3 bit这个块的进位信息。它们的具体形式如:


一般的 gi,i+ng_{i, i+n}gi,i+n​ 和 pi,i+np_{i,i+n}pi,i+n​ 的一般形式同理,第i+ni+ni+n位进位信号可以通过下式生成:

块ggg, ppp信号的合并:

对于 i0<i1<i2i_0 < i_1 < i_2i0​<i1​<i2​ 有:

对于i0≤i1−1≤j0<j1i_0 \leq i_1-1 \leq j_0 < j_1i0​≤i1​−1≤j0​<j1​有:

并行前缀加法器

块g,p信号与并行前缀运算

我们定义了所谓的“块 p,gp, gp,g信号”,它们基本上是成对出现的,因此不妨让我们将这两个信号拼为一个信号二元对:

那么根据上面的公式 (2.3.1) 和 (2.3.2) ,我们可以将两个相邻或重叠块的块 p,gp, gp,g 信号 (g‘,p‘)(g^`, p^`)(g‘,p‘) 和 (g",p")(g^", p^")(g",p") 合并为一个新的块信号 (g,p)(g, p)(g,p) ,代表这两个块合并后新块的块 (g,p)(g, p)(g,p) 信号对,如图所示,

现在可以把这种合并操作记为“ UUU ”),念作“并”。则图中的合并过程可写为:


为了让符号更加简洁,在下文中不妨让我们记:

然后,可以证明这个运算操作 [公式] 对可合并的块g,pg,pg,p信号是满足结合律的,即对三个相邻或重叠的 QA,QB,QCQ_A, Q_B, Q_CQA​,QB​,QC​ 有:

但是交换律就不行。

块g,p信号对、合并操作与区间合并

前文定义了所谓的块g,pg,pg,p信号对 (g,p)(g,p)(g,p) 与它们之间的合并操作 UUU ,这里我想插入一个小节,以说明它们在代数结构上和区间,以及区间合并操作之间的关系。

前面我们讨论过,两个相邻或者重叠的块信号 Q[a,b]Q_{[a, b]}Q[a,b]​ Q[c,d]Q_{[c, d]}Q[c,d]​是可以通过 UUU 操作合并为一个大块信号的:

将上式中的所有“ Q[i,j]Q_{[i, j]}Q[i,j]​ ”替换为“ [i,j][i, j][i,j] ”后,就能发现所谓的块g,pg, pg,p信号其实就相当于一个(整数)区间,而 UUU 则相当于区间的并,可以将两个相邻或重叠的区间并为一个大区间:

进位计算的并行前缀表示

于是,我们就可以用 UUU 将进位计算问题表述为:

给定加法器每bit的 g,pg, pg,p 信号对(通过式 (1.4.2) 获得):

通过 UUU 操作求以下每个块信号对:

可以直接通过将每个给定g,pg, pg,p信号合并:

上解 (Sol,1)(Sol,1)(Sol,1) 直接生成的电路就相当于标准的超前进位链,用图来表示就是:


(Sol,1)(Sol,1)(Sol,1) 中存在着非常多相同的中间变量,每个块信号都是下个块信号的一部分,具体地:

所以也可以:

上解 (Sol,1)(Sol,1)(Sol,1) 直接生成的电路就相当于标准的行波进位链,用图来表示就是:

其最大程度地减少了计算量,但是关键路径也最长,如上图一共需要k级节点。

除此之外, UUU 还满足结合律( (3.1.4)(3.1.4)(3.1.4) ),因此我们可以将 (Sol.1) 中 Q[0,k]Q_{[0, k]}Q[0,k]​ 的计算部分拆成多个个可并行的部分,例如将它的前半段和后半段拆成两个可并行计算的子部分(下图左):

或者每两个相邻项结合一次(下图右):

等等,怎么拆都可以。拆完后我们还可以将不同待求块信号中的相同部分共用,例如如果 Q[0,7]Q_{[0, 7]}Q[0,7]​ 和 Q0,15Q_{0, 15}Q0,15​ 如果都是像上式那样每两项都结合一次的话,那么其中的大部分中间变量都是可以共用的。

以上就是“并行前缀加法器”中的核心要点:

  1. 利用计算步骤的结合律并行地求解问题,以减少电路延迟(latency)。
  2. 发现计算步骤中的重复部分并共用计算结果,以减少电路面积(area)。

需要注意的是,有的重复部分是需要以延迟为代价来进行共用的,因为可能会增加计算步骤。事实上,并行前缀加法器往往也需要在延迟与面积间进行权衡(trade-off),但这也为并行前缀加法器设计带来了非常大的灵活性:可以根据实际情况中对延迟与面积的需求,对并行前缀加法器结构进行特定的平衡调整,以达到延迟与面积间的平衡点。

除此之外,不同设计之间的扇入扇出情况也可能有所不同,这会在下一节的讨论中体现。

并行前缀加法器的一个完整示例

现在让我们来看一个简单的完整示例。

这里举一个4bit加法器的例子,记它的两个4bit输入分别为


那么它每bit的 g,pg, pg,p 信号对分别为

于是

我们可以选择直接分别并行地计算上面的每行公式,这样所得到的设计就是标准的超前进位链条。但是也可以选择,比如先计算:

然后:

这样,就避免了一些不必要的重复计算,从而减少了电路面积。 有上面了这些块 p,gp, gp,g 信号对后,就能直接获得加法器每位的输出 sis_isi​ 了:

如果不需要最低位进位输入 c−1c_{-1}c−1​ ,可以直接在上式中去掉相应的部分。

或者,也可以将 c−1c_{-1}c−1​ 表示为 g−1,p−1g_{-1}, p_{-1}g−1​,p−1​ ,然后加入到每个待求块信号的计算当中:

1、c−1=0c_{-1}=0c−1​=0时,(g−1,p−1)=(0,0)(g_{-1}, p_{-1})=(0,0)(g−1​,p−1​)=(0,0)
2、c−1=1c_{-1}=1c−1​=1时,(g−1,p−1)=(1,0)(g_{-1}, p_{-1})=(1,0)(g−1​,p−1​)=(1,0)

相当于将整数加法器的最低位进位看作是小数位个位的进位输出。

上例方案的结构如下图所示:

我们把上图这种图叫做并行前缀图(Parallel Prefix Network),可以通过这种图表示法来直观地表示各种不同并行前缀进位网络的设计。例如4bits的并行前缀进位链还可以设计成这样:

就相当于一个行波进位加法器。

下一节中,我们就会通过这种图表示法来了解各种不同的并行前缀进位网络结构,它们在延迟与面积、扇入扇出、布线结构等方面上各有不同的权衡(trade-off)。

不同的并行前缀进位网络设计

介绍几种不同的并行前缀进位网络设计,它们的一般公式表示都相对麻烦,但是用“并行前缀图”来表示的话就非常直观。

Kogge-Stone(KS)结构


KS结构的并行前缀网络如上图所示。它的特点是,逻辑级数和扇出都非常小,但节点数量非常高,且因此到了后面长距互联导线会有些多。

它的构造思路大概是,从图中最上面的输入开始,第1层将所有线上信号转发给它左边第1个线并合并、第2层将所有线上信号转发给它左边第2个线、第3层转发给左边第4根线… 以此类推直至合成出所有待求信号。

KS结构增加了大量的节点,并且将扇出平均地分布到了每个节点上,而不是像LF结构那样,让少量节点承担大量扇出。

Brent-Kung(BK)结构

BK结构的并行前缀网络如上图所示。它的特点是扇出非常小,节点也较少,但逻辑级数更多。BK结构是通过增加额外的逻辑级数来缓解扇出压力的。

混合并行前缀网络与其它的并行前缀网络设计(Han-Carlson结构)


并行前缀网络也可以是多种“纯”方案的混合,例如上图就展示了一种混合方案,将KS结构的头尾替换为了BK结构,它与前面所介绍的3种结构相比表现又有所不同,介于纯BK结构与纯KS结构之间。

改进版Han-Carlson结构


优化方案:第一步计算奇数位的进位,第一级保持不变,第二级开始每一级都减少二分之一的pg 单元,这样就得出了奇数位的进位; 第二步是再使用一级将奇数位的进位传递到偶数位. 优化后Han-Carlson结构的级数是log2N+2log_2N+2log2​N+2,其中NNN 是操作位数. 如上图是优化后的Han-Carlson 结构的并行前缀计算图.(参考文献:基于 Han-Carlson 结构的加法器优化设计)

三种结构的复杂度比较

并行结构 Level 所需UUU操作个数
Brent-Kung 2logN - 2 2N - logN - 2
Kogge-Stone logN Nlog(N/2) + 1 OR NlogN - N + 1
Han-Carlson logN +1 N/2 * logN
Han-Carlson advanced logN+2 3N/4 - 1 + N/4 * logN

其中所有的logN均为log2Nlog_2Nlog2​N

参考连接:

https://zhuanlan.zhihu.com/p/387639241

树形加法器(Brent-Kung加法器)相关推荐

  1. 两个运放制作加法器_同相加法器电路图_反相加法器电路图_运放加法器电路图解析...

    在电子学中,加法器是一种数位电路,其可进行数字的加法计算.加法器是产生数的和的装置.加数和被加数为输入,和数与进位为输出的装置为半加器.若加数.被加数与低位的进位数为输入,而和数与进位为输出则为全加器 ...

  2. Matlab中加法器是什么,加法器,加法器是什么意思

    加法器,加法器是什么意思 加法器 : 加法器是为了实现加法的. 即是产生数的和的装置.加数和被加数为输入,和数与进位为输出的装置为半加器.若加数.被加数与低位的进位数为输入,而和数与进位为输出则为全加 ...

  3. 超前进位加法器实验报告_干货 | 加法器与反相加法器原理解析

    什么是加法器 加法器是为了实现加法的,即是产生数的和的装置. 加数和被加数为输入,和数与进位为输出的装置为半加器.若加数.被加数与低位的进位数为输入,而和数与进位为输出则为全加器.常用作计算机算术逻辑 ...

  4. C语言4位BCD码加法器,bcd码加法器

    BCD码(Binary-Coded Decimal‎)亦称二进码十进数或二-十进制代码.用4位二进制数来表示1位十进制数中的0~9这10个数码.是一种二进制的数字编码形式,用二进制编码的十进制代码.B ...

  5. 加法器的实现(半加器,全加器,行波进位加法器,超前进位加法器,流水线加法器)

    一.半加器和全加器 二.行波进位加法器 三.超前进位加法器(Carry-Lookahead Adder,CLA) https://www.jianshu.com/p/6ce9cad8b467 四.流水 ...

  6. Matlab中加法器是什么,知识贴!什么是加法器与反相加法器?

    一.什么是加法器 加法器是为了实现加法的. 即是产生数的和的装置.加数和被加数为输入,和数与进位为输出的装置为半加器.若加数.被加数与低位的进位数为输入,而和数与进位为输出则为全加器.常用作计算机算术 ...

  7. 四位行波进位加法器_【HDL系列】硬件加法器原理与设计小结

    硬件加法器种类繁多,对于不同的设计,加法器的需求也不一样.在前端设计中,使用符号"+"便可轻而易举地实现加法器.只是在特殊的情况下,指定选择加法器类型,或许可以用到.其他情况,可以 ...

  8. 四位行波进位加法器_【HDL系列】Sklansky加法器原理与设计

    Sklansky加法器是另一种并行高速的树形加法器,由Sklansky于1959年发表,该加法器对比特位进位层级分组,根据对不同比特组所有可能的进位计算所有可选的和与进位,所以也叫Conditiona ...

  9. 《数字逻辑设计与计算机组成》一3.3 加法器

    3.3 加法器 n位整数加法器输入两个n位数值和一个可选的输入进位(cin)来产生一个n位的和及最后进位输出(cout).如图3-3所示,从右(例如最低有效位)开始,两位和先前的进位相加产生一个和及一 ...

  10. 【 FPGA/IC 】常考加法器总结

    早在某发科提前批中就考到过加法器,如果没有记错的话,当时的加法器是串行加法器. 今天就谈谈这几种加法器. 1.等波纹进位加法器(Ripple carry adder circuit) 如下图为一个4位 ...

最新文章

  1. malloc calloc realloc的对比
  2. [BZOJ1015] [JSOI2008] 星球大战starwar (并查集)
  3. ACL 2020 | 基于多级排序学习的层次化实体标注
  4. wingdows安装psutil_psutil模块安装指南(win与linux)
  5. html表单提交后显示,javascript – 在表单提交后在页面上显示消息
  6. 使用kafka解决zookeeper is not a recognized option when executing kafka-console-consumer.sh报错
  7. Java基础学习总结(142)——以正确的姿势使用Java 8 Optional
  8. 红旗系统 oracle,红旗linux的Asianux 3.0安装oracle10.2
  9. iOS中控制器的实践和学习(2)-认识XCode4模版(A1,A3,B2简易图)
  10. 推荐的Python电子书资源
  11. 【解决方法】Windows7 任务计划程序 “任务计划程序服务不可用。任务计划程序将尝试重新与其建立连接。”
  12. 酷睿7代cpu安装win7
  13. Qt控件之toggle()、triggered()、clicked()——triggered发射信号无响应
  14. 逍遥书生服务器啥时候维护完毕,《逍遥西游2》12月8日服务器维护公告
  15. 基于Android的微信主界面
  16. 埃里克贝里奇_未来公司客服的标配?苹果Watch智能手表开启新时代
  17. 更新!又一批阿里网盘扩充码!亲测有效!数量较少,抓紧!
  18. Nginx服务器安装
  19. python以图搜图api_Python深度学习,手把手教你实现「以图搜图」
  20. 分享到新浪微博/QQ空间/开心网/人人网/豆瓣网/QQ书签/百度搜藏/美味书签 代码...

热门文章

  1. 大主宰PHP文章,大主宰:沈苍生让李玄通放弃洛璃?牧尘受到眷顾!北溟再出手相助...
  2. Android ImageView视图的七种图片缩放类型
  3. September 2006
  4. 720全景制作 - 微信、PC、移动web
  5. table组件抽离封装
  6. 我用前世的五百次回眸换今生与你一次擦肩而过
  7. DataV实现大屏滚动含后端代码
  8. 做硬件,真的没前途吗?看看资深工程师是怎么说的
  9. Linux之用户和组账户管理命令
  10. 线段树--暴力修改专题浅谈