
一、什么是CLB1、CLB简介CLB (Configurable Logic Block)可配置逻辑块是xilinx系列FPGA的基本逻辑单元。CLB是用于实现时序逻辑电路和组合逻辑电路的主要逻辑资源。CLB的作用主要使用实现组合逻辑和时序逻辑如果我们的代码没有调用硬核资源那么代码就会被综合成DFF(D flip-flop)和LUT(Look-Up Table)。2、CLB的组成每个CLB被划分成两个Slice并引出逻辑连线至开关矩阵(Switch Matrix作为布线资源)同时还包含着算术进位逻辑功能(CIN,COUT进位输入和输出)。如下图所示:Slice是构成CLB的基本单元Slice有两种类型分别是SliceM和SliceL。一个CLB可以由两个SliceL组成或者由一个SliceL和一个SliceM组成但是不会由两个SliceM组成。SliceL和SliceM内部都包含4个6输入查找表(LUT6)、3个数据选择器(MUX)、1个进位链(Carry Chain)和8个触发器(Flip-Flop)。只有SLICEM可以将其LUT用作分布式RAM或SRL。3、SLICEM与SLICEL的区别下面是官方手册提供的SLICEM和SLICEL的内部结构示意图。从图中可以看到SLICEM和SLICEL的LUT不同。SLICEM(M:Memory):其内部的LUT可以读也可以写可以实现32bit移位寄存器和64bit的分布式RAM(DRAM)等存储功能还可以实现基本的查找表逻辑。SLICEL(L:Logic):其内部的LUT只可以读只能实现基本的查找表逻辑。大部分情况下FPGA中SLICEL和SLICEM的数量比例为SLICEL:SLICEM2:1.由ug474手册可知大约三分之二的切片是 SLICEL 逻辑切片其余是 SLICEM这些切片也可以将它们的 LUT 用作分布式 64 位 RAM 或 32 位移位寄存器SRL32或两个 SRL16。设备容量通常以逻辑单元的数量来衡量。7系列FPGA的逻辑单元与六输入LUT的比例为1.6:1。4、官方推荐的设计流程我们学习硬件底层有时候最终还是为了优化我们的代码设计基于此官方在手册中也给出了几条推荐的HDL设计:(1)CLB中的触发器有一个置位(set)和一个复位(reset),设计者禁止同时使用这两者(2)硬件中有着大量的触发器所以推荐使用流水线的方式来提高效率。(3)控制类输入信号在一个slice或者CLB中是被共享的所以设计中的唯一控制类输入信号的数量应该减少。控制类输入信号包括时钟信号时钟使能信号使能信号置位复位信号。(4)6输入LUT可以被设计成32位移位寄存器来提高布线效率。(5)6输入LUT 可以被设计成64*1的DRAM来完成小规模存储需求,(6)专用进位逻辑有效地实现了算术函数。经典操作1串转并 2并转串3乒乓操作4流水线操作二、CLB在FPGA中的分布CLB在xilinx 7系类FPGA芯片中按列分布的。三、Look-Up Table查找表查找表LUT主要用于实现组合逻辑。传统的门电路与或非门等延时是比较长的。而对于LUT查找表来说就是一个“映射表”。它通过预先存储“输入”与“输出”的对应关系当输入到来时直接就可以“查”出结果而不必临时重新计算或进行复杂逻辑判断所以时延小。LUT是CLB的重要组成部分其本质就是一个RAM用来实现数字电路中逻辑门的功能把输入映射成存储地址再输出对应地址(输入)存储的值作为输出来实现所需的逻辑功能。7系类的FPGA中使用6-LUT它通过2个5-LUT组成也可以通过三个选择器进行级联6-LUT来实现7/8输入。我们知道slice有SLICEM和SLICEL两种其区别就在于他们的LUT不同SLICEM的LUT既可以读又可以写;SLICEL的LUT只能读。由于SLICEM的LUT具有可以读写的特性所以它还可以被配置成DRAM或者移位寄存器来使用。四、多路选择器MUXmultiplexer我们知道除了基本的LUT外Slice还包含三个多路选择器(F7AMUXF7BMUX和F8MUX)。这三个选择器的作用如下F7AMUX:用于从LUTA和B生成7个输入函数F7BMUX:用于从LUTC和D生成7个输入函数F8MUX:用于组合所有LUT生成8个输入函数五、触发器FFflip-flop在CLB中主要有2种类型的存储单元一种只能被配置成触发器(FF)另一种既可以被配置成触发器(FF)也可以被配置成锁存器(Latch),然后他们根据复位方式的不同复位后输出结果的不同可以被配置成不同类型的触发器/锁存器。每个LUT的输出通常直接连接到一个专用的D触发器DFF。其作用就是用于存储状态(单bit数据)实现同步时序逻辑。它的内部结构如下图复位是将DFF内部寄存器清0置位可将DFF内部寄存器置为1/0.六、进位链(Carry Chain)进位逻辑在FPGA中有着非常广泛的应用其功能主要是实现二进制的加减法运算。在CLB中以slice中执行快速算术加法和减法进位链还可级联以形成更宽的加/减逻辑。(痛点)如果用普通LUT级联来实现加法器进位信号需要逐级经过LUT和布线延迟极大速度极慢。(方案)CLB内部设计了专用的硬连线进位链。进位信号不需要经过通用布线资源而是直接在相邻的LUT/FF之间通过专用的高速通路传递。使得FPGA能够实现极高速度几百MHz甚至GHz的加法、减法、计数器和比较器运算。这是DSP应用的基础。七、Distributed RAM / Shift RegisterSLICEM中的LUT可以实现分布式RAM。SLICEM中的多个LUT也可以以多种方式组合也就是说可以将多个CLB串联起来形成较大的存储器分布式RAM以存储更大数量的数据。适合小深度、大宽度的缓存。SLICEM中的LUT还可以实现32位移位寄存器而无需使用SLICEM中可用的触发器。