当前位置 博文首页 > 摆渡沧桑:浅谈XILINX FPGA CLB单元 之 进位逻辑链(CARRY4原理

    摆渡沧桑:浅谈XILINX FPGA CLB单元 之 进位逻辑链(CARRY4原理

    作者:[db:作者] 时间:2021-09-06 16:10

    浅谈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。

    学习的主线是根据XILINX 官方文档“ug474_7Series_CLB.pdf”,官方下载地址

    关于具体的CLB中各模块,如查找表(LUT)、存储单元、Distributed RAM、移位寄存器、Multiplexers、进位逻辑(Carry Logic)、可以参考这边博客:

    本节主要针对进位逻辑(Carry Logic)部分进行详细的介绍。

    二、进位逻辑链
    1. CLB进位模块
      在CLB中,除了函数发生器之外,还提供了专用的快速超前进位逻辑,以slice片中执行快速算术加法和减法。 7系列FPGA CLB具有两个独立的进位链,如下图所示。 进位链可级联以形成更宽的加/减逻辑。
      在这里插入图片描述
    2. 进位逻辑链的结构(CARRY4)
      7系列FPGA 每个 SLICE有 4bit 的进位链。进位链向上延伸,每个slice的高度为四位。 对于每个位,都有一个进位多路复用器(MUXCY) 和专用的XOR门,用于用选定的进位位加/减操作数。 专用的进位路径和进位多路复用器(MUXCY)也可以用于级联函数发生器,以实现广泛的逻辑功能。
      在这里插入图片描述
    3. 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结构能实现快速超前加法的原理
    1. CARRY4的原理过程:
      1)端口S[3:0]是要求数据的异或输入;
      2)端口DI[3:0]是数据的输入(a,b都可以),通过选择器判断是否是进位标志;
      3)MUXCY选择器作为向下一级输出标志的选择端口;

    2. 对于一个全加器
      具体的原理可以参考之前的一篇博客: 数字电路基础知识(四) 加法器-半加器、全加器与超前进位加法器
      基本的进位标志和输出如下。
      在这里插入图片描述
      对于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结构能够实现快速超前进位加法器。
    如下面的一个例子,两个加数分别为0100,0101:
    在这里插入图片描述

    cs