XILINX FPGA 7系之 Carry Chains
目录0、绪论0.1、半加器0.2、全加器1、XILINX CARRY40、绪论在聊进位逻辑之前,先准备一些预备知识关于加法器(半加器和全加器)电路;0.1、半加器半加器(half adder)的功能是将两个一位二进制数相加。它具有两个输入和两个输出,两个输入分别为 A、B,代表着等待相加的两个数,输出为 Sum、Carry;Sum代表加的结果,Carry 代...
目录
0、绪论
在聊进位逻辑之前,先准备一些预备知识关于加法器(半加器和全加器)电路;
0.1、半加器
半加器(half adder)的功能是将两个一位二进制数相加。它具有两个输入和两个输出,两个输入分别为 A、B,代表着等待相加的两个数,输出为 Sum、Carry;Sum代表加的结果,Carry 代表进位逻辑;
半加器的真值表为:
A | B | Carry | Sum |
---|---|---|---|
0 | 0 | 0 | 0 |
1 | 0 | 0 | 1 |
0 | 1 | 0 | 1 |
1 | 1 | 1 | 0 |
加法器电路主要的构成元件由 XOR(异或门)构成,XOR 的真值表为:
所以一个半加器可以由一个异或门和一个与门组成:
半加器的简化图为:
0.2、全加器
全加器(full adder)将两个一位二进制数相加,并根据接收到的低位进位信号,输出和、进位输出。全加器的三个输入信号为两个加数 A、B 和低位进位 Cin
全加器真值表为:
A | B | Cin | Cout | Sum |
---|---|---|---|---|
0 | 0 | 0 | 0 | 0 |
1 | 0 | 0 | 0 | 1 |
0 | 1 | 0 | 0 | 1 |
1 | 1 | 0 | 1 | 0 |
0 | 0 | 1 | 0 | 1 |
1 | 0 | 1 | 1 | 0 |
0 | 1 | 1 | 1 | 0 |
1 | 1 | 1 | 1 | 1 |
全加器的逻辑电路为:
全加器的简化图为:
1、XILINX CARRY4
XILINX 7 系列提供的 CLB 中的 SLICE 资源,每个 SLICE 包含了一个 CARRY4 进位逻辑:
先整理出输入输出,如下所示:
其中,
- CI:是上一个 CARRY4 的进位输出,位宽为1;
- CYINT:是进位的初始化值,位宽为1;
- DI:是数据的输入(两个加数的任意一个),位宽为4;
- SI:是两个加数的异或,位宽为4;
- O:是加法结果输出,位宽为4;
- CO:是进位输出,位宽为4;(为什么进位输出是4bit?后面有解释)
这里我们要先解释一下FPGA中利用Carry Chain实现加法的原理,比如两个加数分别为 a = 4'b1000
和 b=4'b1100
,其结果应该是 8+12=20
。
a = 4'b1000;
b = 4'b1100;
S = a ^ b = 4'b0100;
D = b = 4'b1100; //D取a也可以
CIN = 0; //没有上一级的进位输入
CYINIT = 0; //初始值为0
// 下面为CARRY4的计算过程,具体的算法跟上图中过程一样
S0 = 0; //S的第0位
O0 = S0 ^ 0 = 0 ^ 0 = 0;
CO0 = DI0 = 0; //上图中的MUXCY,S0为0时,选择1,也就是DI0,S0为1是选择2
S1 = 0;
O1 = S1 ^ CO0 = 0 ^ 0 = 0;
CO1 = DI1 = 0;
S2 = 1;
O2 = S2 ^ CO1 = 0 ^ 1 = 1;
CO2 = CO1 = 0;
S3 = 0;
O3 = S3 ^ CO2 = 0 ^ 0 = 0;
CO3 = DI3 = 1;
加法最终的输出结果为:
a = 4'b1000;
b = 4'b1100;
{O3,O2,O1,O0}=4’b0100
{CO3,CO2,CO1,CO0}=4’b1000
最终结果:{CO3,O3,O2,O1,O0} = 5’b10100 = 20
可以看出 {O3,O2,O1,O0} 是 a+b 的半加器结果,而 {CO3,CO2,CO1,CO0} 是 a+b 的进位结果;
输出给下一级的 COUT 只是CO[3]。
参考文献:
https://blog.csdn.net/zhanghaijun2013/article/details/103122927
https://blog.csdn.net/qq_16184883/article/details/82918184
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)