XILINX FPGA 7系之 Carry Chains

本文深入探讨了进位逻辑的基本概念,包括半加器和全加器的工作原理及其真值表。进一步,详细解析了XILINX7系列FPGA中的CARRY4进位逻辑资源,阐述其输入输出特性及如何利用CarryChain实现高效加法运算。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

0、绪论

0.1、半加器

0.2、全加器

1、XILINX CARRY4


 

0、绪论

在聊进位逻辑之前,先准备一些预备知识关于加法器(半加器和全加器)电路;

0.1、半加器

半加器(half adder)的功能是将两个一位二进制数相加。它具有两个输入和两个输出,两个输入分别为 A、B,代表着等待相加的两个数,输出为 Sum、Carry;Sum代表加的结果,Carry 代表进位逻辑;

半加器的真值表为:

ABCarrySum
0000
1001
0101
1110

加法器电路主要的构成元件由 XOR(异或门)构成,XOR 的真值表为:

所以一个半加器可以由一个异或门和一个与门组成:

半加器的简化图为:

 

0.2、全加器

全加器(full adder)将两个一位二进制数相加,并根据接收到的低位进位信号,输出和、进位输出。全加器的三个输入信号为两个加数 A、B 和低位进位 Cin

全加器真值表为:

ABCinCoutSum
00000
10001
01001
11010
00101
10110
01110
11111

全加器的逻辑电路为:

全加器的简化图为:

 

1、XILINX CARRY4

XILINX 7 系列提供的 CLB 中的 SLICE 资源,每个 SLICE 包含了一个 CARRY4 进位逻辑:

先整理出输入输出,如下所示:

image

其中,

  • 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

https://blog.csdn.net/bbs165198646/article/details/76895919

https://blog.csdn.net/vivid117/article/details/102725318

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值