前言
搁置很久,最近才开始学习相关理论基础。为完整阐述相关内容,部分图文来自参考文献,所有引用的参考博文附录在文章最后。
本文从半加器、全加器、CARRY4电路结构开始介绍;在了解进位连的硬件电路结构之后,再对TDC相关理论进行阐述。
1、半加器/全加器
半加器(half adder)的功能是将两个一位二进制数相加。它具有两个输入和两个输出,两个输入分别为 A、B,代表着等待相加的两个数,输出为 Sum、Carry;Sum代表加的结果,Carry 代表进位逻辑;
半加器的真值表为:
A | B | Sum(加的结果) | Carry(进位) |
---|---|---|---|
0 | 0 | 0 | 0 |
1 | 0 | 1 | 0 |
0 | 1 | 1 | 0 |
1 | 1 | 0 | 1 |
加法器电路主要的构成元件由 XOR(异或门)构成;一个半加器可以由一个异或门和一个与门组成
半加器的简化图为:
全加器(full adder)将两个一位二进制数相加,并根据接收到的低位进位信号,输出和、进位输出。全加器的三个输入信号为两个加数 A、B 和低位进位 Cin
全加器真值表为:
A | B | Cin | Sum(输出和) | Cout(进位) |
---|---|---|---|---|
0 | 0 | 0 | 0 | 0 |
1 | 0 | 0 | 1 | 0 |
0 | 1 | 0 | 1 | 0 |
1 | 1 | 0 | 0 | 1 |
0 | 0 | 1 | 1 | 0 |
1 | 0 | 1 | 0 | 1 |
0 | 1 | 1 | 0 | 1 |
1 | 1 | 1 | 1 | 1 |
全加器的逻辑电路为:
全加器的简化图为:
2、XILINX Carry4结构介绍
XILINX 7 系列提供的 CLB 中的 SLICE 资源,每个 SLICE 包含了一个 CARRY4 进位逻辑。举例说明MUXCY的作用,下图中的MUXCY,当S1=0时,选择DI1作为进位CO1的输出;S1=1时,选择CO0作为进位CO1的输出。
整理出输入输出,如下所示
端口信号定义如下:
CI | 是上一个 CARRY4 的进位输出,位宽为1; |
CYINT | 是进位的初始化值,位宽为1; |
DI [3:0] | 是数据的输入(两个加数的任意一个),位宽为4; |
SI [3:0] | 是两个加数的异或,位宽为4;当SI=4'b1111时,CYINT的值会从CO0逐步传递到CO3。 |
O [3:0] | 是加法结果输出,位宽为4; |
CO[3:0] | 是进位输出,位宽为4; |
TDC主要利用CYINT、SI、CO端口,因此需要着重理解该端口定义及功能作用。
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;
在上面的计算中可以看到,只有当SIn=1的时候,COn=COn-1,也就是下一级的进位才等于上一级的进位值。
当SI=4'b1111的时候,进位结果会从CO0一级一级传递到CO3,表示如下:
CO3=CO2=CO1=CO0
当SI=4'b1111时,进位会从CO0传递到CO3,TDC也正是利用基于这种进位的传输来计算时间相关参数。
加法最终的输出结果为:
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
3、进位链在TDC中的应用
参考文献
作者 | 博客 |
1weivid_wang | 浅谈XILINX FPGA CLB单元 之 进位逻辑链(CARRY4原理分析,超前快速进位逻辑结构) |
2 | 一种基于FPGA进位链的Vernier型TDC电路的制作方法 |
3 | XILINX FPGA 7系之 Carry Chains |
4、Jasper兰 | FPGA从入门到精通(5) - 进位链 |