1.2 可配置逻辑块 |
|
可配置的逻辑块(Configurable Logic Block,CLB)是主要的逻辑资源,用于实现时序和组合逻辑电路。
UltraScale结构的CLB提供了高性能和低功耗的可编程逻辑,每个CLB连接到一个开关矩阵,用于访问通用的布线资源。一个CLB包含一个切片(Slice),每个切片提供8个6输入的查找表,16个触发器,切片中的查找表(Look Up Table,LUT)按列排列。UltraScale架构中包含两种类型的切片,即SliceL和SliceM。如图1.1所示,给出了SLICEL(L表示逻辑)的内部结构,其中:
(1)图中左侧为8个6输入的LUT,从下到上依次用A、B、C、D、E、F、G、H标记。
(2)图中右侧为16个锁存/触发器资源。
(3)图中包含F7、F8和F9类型的多路复用器。
(4)图中在LUT右侧的部件为一个8位的进位链。
(5)图中进位链后的第一列为F7类型的多路复用开关。从下到上依次用F7MUX_AB、F7MUX_CD、F7MUX_EF和F7MUX_GH表示。
(6)图中F7类型多路复用开关后,为上下两个F8类型的多路复用开关,从下到上依次用F8MUX_BOT和F8MUX_TOP表示。
(7)图中F8类型多路复用开关后,为一个F9 类型的多路复用开关,用F9MUX表示。
读者可打开器件结构图,查看这些设计资源。
图1.1 Kintex UltraScale SLICEL内部结构图
如图1.2所示,给出了SLICEM(M表示存储器)的内部结构,其中LUT能配置为:
(1)一个查找表。
(2)64位的分布式存储器。
(3)一个32位的移位寄存器。
此外,LUT可以配置为包含公共输入的两个5输入LUT。这样,就能产生两个逻辑运算结果。图1.3给出了将6输入LUT配置为2个5输入LUT的结构图。
多功能多路复用器将LUT组合在一起,构成7、8或者9输入的任意函数功能,或者最多55个输入的一些函数功能。每个切片包含7个多路复用器,用于构建更多的函数功能。不同多路复用器的功能包括:
用于组合两个相邻的LUT。其中,F7MUX的后缀AB、CD、EF、GH表示该类型多路复用器由SLICE外部输入的AX、BX、EX和GX控制信号对相应的F7MUX进行控制。其可以用作:
图1.2 Kintex UltraScale SLICEM内部结构图
图1.3 包含公共输入的2个LUT的结构图
(1)实现辅助的7输入函数功能。
(2)实现一个8:1的多路复用器。
用于组合两个相邻的F7MUX。其中,F8MUX的后缀BOT和TOP表示该类型多路复用器由SLICE外部输入的BX和FX控制信号对相应的F8MUX进行控制。其可以用作:
(1)实现辅助的8输入函数功能。
(2)实现一个16:1的多路复用器。图1.4给出了16:1多路复用器的实现结构。
图1.4 16:1多路复用器的实现结构
用于组合两个F8MUX。该类型的多路复用器由SLICE外部输入的DX控制信号进行控制。其可以用作:
(1)实现辅助的8输入函数功能。
(2)实现一个32:1的多路复用器。
CLB内提供了一个专用的快速超前看进位逻辑,用来执行快速的加法和减法运算。多个快速进位逻辑可以级联在一起,实现更宽位数的加法和减法运算。图1.5给出了UltraScale架构内超前快速进位逻辑的结构。
图1.5 超前快速进位逻辑结构
每个CLB的切片内有16个存储元素,其中的每一个存储元素都可以配置为边沿触发的D触发器,或者电平触发的锁存器。在UltraScale结构中,将16个存储元素分成上半部分和下半部分两组,每组内包含有8个存储元素;每个LUT的输入与两个存储元素连接。因此,每两个存储元素构成一对存储元素,分别用FF和FF2表示。
基于上面的结构特点,上半部分存储元素和下半部分存储元素各自包含4对存储元素,分别用A~D、E~H表示。
UltraScale结构中,为每个CLB内提供了两个时钟输入和两个置位/复位(SR)输入。它们分别分配到上半部分和下半部分的存储元素。而对于置位/复位,提供同步或者异步两种方式。
在UltraScale结构中,每个存储元素的输入可以来自:
(1)LUT的O6输出。
(2)LUT的O5输出。
(3)CLB的输入信号,该信号直接旁路LUT(BYP)。CLB X输入用于Q1,CLBI输入用于Q2。
(4)进位的逻辑异或结果。
(5)进位级联输出(CO)。
(6)多路复用器(FMUX)输出的一个(对于底部的LUT A,不可用)。
对于每个存储元素来说,可选择的初始化方式有:
当SR信号有效时,同步或者异步复位。
当SR信号有效时,同步或者异步置位。
当上电时,异步复位。
当上电时,异步置位。
SLICEM内的函数发生器(LUT)可以作为同步RAM资源,也称为分布式RAM。SLICEM内的多个LUT可组合构成最多512比特容量的RAM。其可以配置成:
包括:32×(1~16)位、64×(1~8)位、128×(1~4)位、256×(1~2)位或者512×1位。图1.6给出了64×1位单端口分布式RAM的结构。
图1.6 64×1位单端口分布式RAM的结构
包括:32×(1~4)位、64×(1~4)位、128×1位或者256×1位。图1.7给出了64×1位双端口分布式RAM的结构。
图1.7 64×1位双端口分布式RAM的结构
包括:32×(1~14)位、64×(1~7)位。
包括:32×(1~4)位、64×(1~2)位、128×1位。
包括:64×1位。
SLICEM和SLICEL内的每个LUT都可以实现一个64×1位ROM。提供了4种ROM的配置方式:
(1)ROM64×1(1个LUT)。
(2)ROM128×1(2个LUT)。
(3)ROM256×1(4个LUT)。
(4)ROM512×1(8个LUT)。
在不使用触发器的情况下,可以将一个SLICEM函数发生器配置为一个32位的移位寄存器。当用作移位寄存器时,每个LUT可以将串行数据延迟1~32个时钟。当移位输入D(LUT引脚SIN)和移位输出Q31(LUT引脚MC31)连接在一起时,就可以构成更大的移位寄存器。因此,当把一个SLICEM内的8个LUT级联在一起时,则可以产生最多256个时钟周期的延迟。在UltraScale结构中,可以跨越SLICEM将移位寄存器进行组合。因此,最终得到的可编程延迟,用于平衡数据流水线的时序。图1.8给出了32位移位寄存器的配置。
图1.8 32位移位寄存器的配置
移位寄存器的应用包括:
(1)补偿时延或者延迟。
(2)同步FIFO和内容可寻址存储器(Content Addressable Memory,CAM)。
移位寄存器的功能包括:
(1)写操作。
通过时钟输入和一个可选的时钟使能进行同步。
(2)到Q31的固定读访问,用于级联到下面的LUT。
最下面LUT A的Q31连接到SLICEM的输出,用于直接使用或者级联到下一个SLICEM。
(3)动态地读访问。
① 通过5位地址线A[4:0]执行,没有使用LUT地址的LSB,软件工具自动地将其拉高。
② 通过不同的地址,可以异步的读出任何32位数据。
在创建小的(少于32位)移位寄存器时,这个功能非常有用。例如,当构建一个13位的移位寄存器时,简单地将地址设置为第13位。
(4)一个存储元素或者触发器可以用来实现一个同步读操作功能。
时钟到触发器的输出决定了整个延迟,并且改善了性能。因此,增加了一个额外的延迟。
(5)不支持移位寄存器的置位或者复位。但是,当配置完成后,可以初始化为任意的值。
图1.9给出了一个移位寄存器配置的例子,该例子的实现占用了一个函数发生器。
图1.932位移位寄存器