浅谈XILINX FPGA CLB单元 之 进位逻辑链-FPGA常见问题社区-FPGA CPLD-ChipDebug

浅谈XILINX FPGA CLB单元 之 进位逻辑链

浅谈XILINX FPGA CLB单元 之 进位逻辑链(CARRY4原理分析,超前快速进位逻辑结构)

一、可配置逻辑块(Configurable Logic Block, CLB)简介

CLB可配置逻辑块是指实现各种逻辑功能的电路,是xilinx基本逻辑单元。下图给出了一个 SLICEM 的内部结构。

其中包含4个6输入LUT、进位链、多路复用器和8个寄存器

图片[1]-浅谈XILINX FPGA CLB单元 之 进位逻辑链-FPGA常见问题社区-FPGA CPLD-ChipDebug

在Xilinx FPGA中,每个可配置逻辑块(CLB)包含2个Slice。每个Slice 包含查找表、寄存器、进位链和多个多数选择器构成。而Slice又有两种不同的逻辑片:SLICEM和SLICEL。SLICEM有多功能的LUT,可配置成移位寄存器,或者ROM和RAM。逻辑片中的每个寄存器可以配置为锁存器使用。今天写这篇文章的目的主要是为了让我们搞清楚FPGA重要资源CLB、Slice、LUT。

二、进位逻辑链

CLB进位模块

在CLB中,除了函数发生器之外,还提供了专用的快速超前进位逻辑,以slice片中执行快速算术加法和减法。7系列FPGA CLB具有两个独立的进位链,如下图所示。进位链可级联以形成更宽的加/减逻辑。

图片[2]-浅谈XILINX FPGA CLB单元 之 进位逻辑链-FPGA常见问题社区-FPGA CPLD-ChipDebug

进位逻辑链的结构(CARRY4)

7系列FPGA 每个 SLICE有 4bit 的进位链。进位链向上延伸,每个slice的高度为四位。对于每个位,都有一个进位多路复用器(MUXCY) 和专用的XOR门,用于用选定的进位位加/减操作数。专用的进位路径和进位多路复用器(MUXCY)也可以用于级联函数发生器,以实现广泛的逻辑功能。

图片[3]-浅谈XILINX FPGA CLB单元 之 进位逻辑链-FPGA常见问题社区-FPGA CPLD-ChipDebug

CARRY4模块

CARRY4原语实例化每个slice中可用的快速进位逻辑。该原语与LUT结合使用以构建加法器和乘法器。下图显示了CARRY4原语。综合工具通常会从算术HDL代码中推断出此逻辑,从而自动正确连接此功能。

图片[4]-浅谈XILINX FPGA CLB单元 之 进位逻辑链-FPGA常见问题社区-FPGA CPLD-ChipDebug

端口信号

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选择器作为向下一级输出标志的选择端口;

对于一个全加器

具体的原理可以参考之前的一篇博客: 数字电路基础知识(四) 加法器-半加器、全加器与超前进位加法器

基本的进位标志和输出如下。

图片[5]-浅谈XILINX FPGA CLB单元 之 进位逻辑链-FPGA常见问题社区-FPGA CPLD-ChipDebug

对于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结构能够实现快速超前进位加法器。

 

请登录后发表评论

    没有回复内容