当前位置:   article > 正文

用大白话从底层理解FPGA——进位链CARRY4_fpga carry4

fpga carry4

讲完FPGA中的LUT6和FF后,接下来讲FPGA底层中进位链CARRY4,话不多说上干货,记重点,CARRY4本质用来实现FPGA运算中的加减法

看完这篇文章,你能收获到:

1. 理解我们经常在FPGA使用的加法减法,在FPGA底层中是如何实现的?引出半加器、全加器的概念

2. 在第一步基础上,理解FPGA中CARRY4的结构及功能

一、半加器

举个例子,在二进制中,两个1bit数相加只有4种情况:

0+0=0(结果位)

0+1=1(结果位)

1+0=1(结果位)

1+1=10(进位+结果位)

答案非常明显:

结果位=两个输入数字的异或(^)

进位=两各输入数字的相与(&)

假设两个加数为A+B,相加后当前位结果为S,产生进位用C表示,则

S=A^B

C=A&B

这个就是半加器的原理,半加器:两个输入数据位相加,输出一个结果位和进位,没有进位输入的加法器电路。映射到电路就是一个异或门+一个与门。

半加器门电路结构

二、全加器

再举例子:两个2bit数相加(逻辑有点多,可以多看几次)

最右边为最低位

对于最低位:用上面所述的半加器可知,结果位S为0,进位C为1。

对于第二位:需要接受由低位产生的进位,才能计算当前结果位,结果位=1^1^1=1。

假设两个加数为A+B,相加后当前位结果为S,产生进位用Cout表示,输入的进位用CIN表示

对于第二位,我们得出:S2=A2^B2^CIN2=1^1^1=1。

Cout2=A2&B2 | A2^B2&CIN2(保证A2,B2,CIN2中有两个或两个以上的1)

对于第三位,我们得出:S3=A3^B3^CIN3=0^0^1=1。

Cout3=A3&B3 | A3^B3&CIN3 = 0。(产生进位的条件是A,B,CIN中有两个或两个以上的1)

由于Cout3=0,因此最终结果位{S3,S2,S1}=110。

在数电中,我们用全加器来实现上述中第二位,第三位的带进位的加法操作。

全加器的概念如下:

全加器:可以理解成半加器的升级版,除了半加器的功能外,再加上前一级传进来的进位信号。

假设两个加数为A+B,相加后当前位结果为S,是否产生进位用C表示,上一级进位输入用Cin表示

S=A^B^Cin

C=(A&B)|(Cin&(A^B))

那这里问题来了,是不是每次做多位加法计算时,最低位都要用半加器?

答案是否定的,因为从半加器和全加器区别就知道,全加器只是比半加器多了个来自低位进位的功能而已,我们只需要将全加器CIN置0,可将全加器当作半加器来用,再与全加器级联即可做成多位加法器。

那问题又来了,如果我是两个8bit数相加,两个16bit数相加呢?一个全加器够用吗?

这里需要通过级联全加器的方法,实现多bit数的相加。

三、进位链CARRY4

那FPGA内部,是不是也用全加器,实现加减法呢?我们看CARRY4结构(是不是很复杂,没关系,看我圈红部分)

CARRY4结构

红圈部分本质上理解成一个全加器,一个CARRY4由4个全加器组成。其中

CIN:上一级进位输入,当在最低位时。

CYINIT:置0表示加法,置1表示减法。

S0=A0^B0(两个加数做异或)。

O0=S0^CIN(全加器中的S)。

DI0=A或者B。

还有MUX逻辑,当S=0,输出位左侧输入,S=1,右侧输出。

再举个例子

两个7bit数相加

综合后原理图

我们得到如下结论(靠左CARRY4称为进位链1,靠右CARRY4称为进位链2):

一、进位链1的CO[3:0]连到进位链2的CI[3:0],两者级联产生更大位宽的进位链。(若相加减数位宽越大,级联CARRY4越多,一个CARRY4能处理4bit数的加减。)

二、我们看LUT2原语INIT为6可知道,LUT2作用就是做异或操作,因此,蓝线意思代表两个加数的低四位异或后连入进位链1的S[3:0],两个加数的高四位异或后连入进位链2的S[3:0]。

LUT2原语

三、进位链1 O[3:0]连到输出的低4位,进位链2的O[3:0]连到输出的高4位。

这里注意下,进位链级联数越多,路径延迟就会越大,逻辑级数越高。所以在使用进位链时要综合考虑级联数与整个系统时钟的关系。特别在设计位宽较大计数器,最好选择用DSP替换。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/weixin_40725706/article/detail/684424
推荐阅读
相关标签
  

闽ICP备14008679号