浅谈XILINX FPGA CLB单元 之 进位逻辑链(CARRY4原理分析,超前快速进位逻辑结构)
一、可配置逻辑块(Configurable Logic Block, CLB)简介
CLB可配置逻辑块是指实现各种逻辑功能的电路,是xilinx基本逻辑单元。下图给出了一个 SLICEM 的内部结构。
其中包含4个6输入LUT、进位链、多路复用器和8个寄存器
在Xilinx FPGA中,每个可配置逻辑块(CLB)包含2个Slice。每个Slice 包含查找表、寄存器、进位链和多个多数选择器构成。而Slice又有两种不同的逻辑片:SLICEM和SLICEL。SLICEM有多功能的LUT,可配置成移位寄存器,或者ROM和RAM。逻辑片中的每个寄存器可以配置为锁存器使用。今天写这篇文章的目的主要是为了让我们搞清楚FPGA重要资源CLB、Slice、LUT。
二、进位逻辑链
CLB进位模块
在CLB中,除了函数发生器之外,还提供了专用的快速超前进位逻辑,以slice片中执行快速算术加法和减法。7系列FPGA CLB具有两个独立的进位链,如下图所示。进位链可级联以形成更宽的加/减逻辑。
进位逻辑链的结构(CARRY4)
7系列FPGA 每个 SLICE有 4bit 的进位链。进位链向上延伸,每个slice的高度为四位。对于每个位,都有一个进位多路复用器(MUXCY) 和专用的XOR门,用于用选定的进位位加/减操作数。专用的进位路径和进位多路复用器(MUXCY)也可以用于级联函数发生器,以实现广泛的逻辑功能。
CARRY4模块
CARRY4原语实例化每个slice中可用的快速进位逻辑。该原语与LUT结合使用以构建加法器和乘法器。下图显示了CARRY4原语。综合工具通常会从算术HDL代码中推断出此逻辑,从而自动正确连接此功能。
端口信号
1)总输出-O [3:0] 总和输出提供加/减的最终结果。它们连接到slice AMUX / BMUX / CMUX / DMUX输出。
2)进位输出-CO [3:0] 进位输出提供每个位的进位。CO [3]等效于COUT。如果通过COUT将CO [3]连接到另一个CARRY4原语的CI输入,则可以创建更长的进位链,并且专用路由将进位链连接到一排片上。
3)进位输出还可以选择连接至sliceAMUX / BMUX / CMUX / DMUX输出。
三、CARRY4结构能实现快速超前加法的原理
CARRY4的原理过程:
1)端口S[3:0]是要求数据的异或输入;
2)端口DI[3:0]是数据的输入(a,b都可以),通过选择器判断是否是进位标志;
3)MUXCY选择器作为向下一级输出标志的选择端口;
对于一个全加器
具体的原理可以参考之前的一篇博客: 数字电路基础知识(四) 加法器-半加器、全加器与超前进位加法器
基本的进位标志和输出如下。
对于CARRY4,端口S端其实是已经做过亦或处理的输入了。
即:
S=a@b //(@表示异或)
端口D可以任选a、b输入当中的一个,如选择b
输出端:
那么O端即表示输出端:O = S@cin = a@b@cin
进位端:
CO=(a@b)'b +(a@b)cin //利用多路复用器:y=s’b+scin
=(a’b+ab’)‘b+(a@b)cin
=(a’b)’(ab’)‘b+(a@b)cin
=(a+b’)(a’+b)b+(a@b)cin
=(ab+b’b)(a’+b)+(a@b)cin
=ab(a’+b)+(a@b)cin
=(a@b)cin+ab
所以此CARRY4结构能够实现快速超前进位加法器。