FPGA底层学习-可配置逻辑块(Configurable Logic Block,CLB)

文章目录

一、CLB概述

可配置逻辑块(Configurable Logic Block,CLB)是FPGA芯片的底层元件之一。如果把FPGA比作一个人体,那么CLB就是细胞,连接起来构造成身体。 但细胞也不是最小的单元,而是由细胞核,细胞质等组成。CLB是由slice组成,不同架构的CLB所包含的slice数量不一样,例如XILINX 7架构的CLB包含两个slice,而UltraScale架构中一个CLB只包含一个slice。slice是四种基本元素的集合,分别为查找表LUT,进位链CARRY8,多路选择器Multiplexer以及存储单元FF。而slice根据其LUT6能实现的功能可以分为以下两种:

  • SLICEL
    L代表逻辑,其内部的LUT只可以读,只能实现基本的查找表逻辑、进位链以及宽功能多路复用器。
  • SLICEM
    M代表内存,其内部的LUT可以配置为查找表、64位分布式RAM或32位移位寄存器。
    表1-1 一个slice中的逻辑资源
    下图是一个slice的大体结构图。
    slice结构

二、CLB架构细节

2.1 查找表

函数生成器实现为六输入查找表(Look-up Table,LUT),即LUT6。其本质上就是1个6输入,64深度的ROM。将逻辑结果保存在其内部,通过由输入构建的地址线进行查找,从而实现6输入的函数逻辑。对于CLB切片中的八个函数生成器,每个都有六个独立的输入(1到6)和两个独立的输出(O5和O6),如图2-1。
图2-1
可以看出一个LUT6是由两个LUT5构成的,两个LUT5的输入是共享的,O6输出是由I5输入控制MUX来选择LUT5的输出。如果想将其作为两个LUT5来使用,需要将I5置高。

2.2 Storage Elements

每个CLB片有16个存储单元(每个LUT有两个)。所有这些都可以配置为边缘触发的触发器或锁存器。锁存选项位于设备的上半部分或下半部分(A到D, E到H)。如果在一个存储元件上选择了锁存选项,这一半的所有8个存储元件必须要么用作锁存,要么不使用。
在这里插入图片描述

2.3 Multiplexers

UltraScale架构slice中的LUT可以配置成一个4:1的MUX,和相关多路复用器可以实现:

  • 提供8个4:1复用器
  • 提供4个8:1复用器
  • 提供2个16:1复用器
  • 提供1个32:1复用器
    一个slice提供7个专用多路复用器,见表2-1。
    Multiplexer Primitives
    其中MUXF7如图2-2所示。
    MUXF7
    Data In I0和I1输入两个O6的输出,通过S来控制输出O,从而将两个4:1Mux组成一个8:1Mux。
    在这里插入图片描述

2.4 Carry Logic

除了LUT,还提供了专用的快速超前进位逻辑来执行快速的算术加减运算。CLB切片只有一个carry链。进位链级联形成更宽的加/减逻辑。进位链向上运行,每个slice的高度为8位。进位初始化输入CYINIT用于选择进位链中的第一位。这个输入的值要么是0(用于加),要么是1(用于减),要么是AX输入(用于动态第一个进位)。进位初始化函数在CLB片底部的链的开始处和中点都可用,用于将片分成两个4位进位块。专用连接从一个切片的COUT引脚级联到上面切片的CIN引脚。对于每一位,都有一个进位多路复用器(MUXCY)和一个专用的异或门,用于对具有选定进位的操作数进行加/减。专用载波路径和载波多路复用器(MUXCY)也可用于级联函数发生器,实现广泛的逻辑功能。
在这里插入图片描述
Carry8原语如图所示。
在这里插入图片描述

2.5 Distributed RAM (SLICEM Only)

SLICEM中的LUT可以作为同步RAM资源实现,也称为分布式RAM(Distributed RAM,DRAM)。可以组合一个SLICEM中的多个LUT,以存储更大的数据量,每个SLICEM最多可存储512位。DRAM配置包括:

  • 单端口
    用于同步写和异步读的通用地址端口
  • 双端口
    一个用于同步写和异步读的端口
    一个端口用于异步读取
  • 简单双端口
    一个用于同步写的端口
    一个端口用于异步读取
    如图就是一个LUT配置成的64×1分布式RAM。
    在这里插入图片描述
    如果构建8个单端口64 × 1位模块,并且8个模块共享相同的时钟、写启用、共享读写端口地址输入,那么8个RAM64X1S可以占用一个SLICEM。这个配置相当于一个64 x 8bit单端口分布式RAM。
    下图是一个双端口64 × 1bit模块。
    在这里插入图片描述
    双端口的配置可以扩展到八端口64x1内存。
    在这里插入图片描述

或者,简单双端口配置可以扩展到64x7内存,有1个专用的写端口和7个读端口。
在这里插入图片描述
实现深度大于64的分布式RAM配置需要使用宽功能复用器,如图所示。如果按照图所示构建4个单端口128 x 1bit模块,那么4个RAM128X1S原语可以占用一个SLICEM,只要它们共享相同的时钟和共享读写端口地址输入即可。此配置相当于128 x 4位单端口分布式RAM。

在这里插入图片描述

2.6 Shift Registers (SLICEM Only)

也可以将SLICEM函数生成器配置为32位移位寄存器,而无需使用触发器。当以这种方式使用时,每个LUT可以将串行数据延迟1到32个时钟周期。移位D (DI1 LUT引脚)和移位Q31 (MC31 LUT引脚)线串联LUT以形成更大的移位寄存器。一个SLICEM中的8个LUT级联,可产生多达256个时钟周期的延迟。也可以跨多个SLICEM组合移位寄存器。
在这里插入图片描述
MC31输出和移位寄存器之间的专用连接允许将一个移位寄存器的最后一位连接到下一个寄存器的第一个位,而无需使用LUT O6输出。更长的移位寄存器可以建立动态访问链中的任何位。移位寄存器链和宽多路复用器允许在一个SLICEM中实现最多256位移位寄存器和可寻址访问。如图说明了128位移位寄存器可以占用一个SLICEM的一半。
在这里插入图片描述

  • 1
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值