一天一个设计实例-FPGA器件结构
3.2.3.1 逻辑块结构
逻辑模块CLB包含用于实现逻辑功能的组合逻辑电路和时序逻辑电路。目前,商用FPGA的逻辑模块主要基于下面的一种或几种结构:①晶体管对;②像二输入与非门和异或门之类的基本门电路;③多选一电路;④查找表;⑤多扇入与或结构。一般 CLB 的输入端只有几个,触发器的数目为2。LUT 是一个 K 输入 2K ×1 位静态存储器 SRAM,CLB的输入是存储器的地址线,存储器的一位输出是LUT 的输出。通过直接往存储器编写逻辑函数的真值表,可以实现 K 变量的任意组合函数。CLB 的三个4 输入真值表的布局使 CLB 能实现2 变量 、5 变量或者 9 变量的任意组合函数, 即可实现 22 ×1 、25 ×1或者 29 ×1 的 SRAM 查找表,从而使单个 CLB 就可实现较复杂的逻辑函数。
图3‑7 由逻辑模块 、输入输出模块和布线资源组成的对称逻辑模块阵列
我们发现,实际的查找表包含一个用来存储数据位的移位寄存器链和一个用来选择输出的 n 沟传输管MUX 树形结构,图3‑8描述了查找表的一部分。在移位寄存器链的输出端加上一个倒相器可以防止电荷共享(charge sharing),电荷共享会扰乱 SRAM 单元的状态。这种结构也可以通过传输管提供特大的驱动。MUX 树形结构的输出能够被倒相器检测到。通过调整倒相器晶体管的宽长比可以降低开关的阈值电压 ,并且补偿衰减的高频信号。也可以利用一道额外的掩摸工序来调节倒相器中 p 管的阈值电压。
图3‑8 查找表电路示意图
CLB 中,触发器的时钟、时钟使能、配位和复位均可被独立设置,各触发器可独立工作,彼此之间没有约束关系,从而为实现不同功能时序电路提供可能性。在 CLB 不同应用场合、不同构造时,信号变换电路可将 CLB 的四个输入信号变换为相应的内部所需数据、地址或者控制信号。可配置逻辑模块CLB 本身就是较复杂的逻辑电路,包含多种逻辑功能部件,从而使得单个 FPGA 即可实现各种复杂的数字电路 。
根据图3‑7的描述,把一个逻辑块、一个开关块和两个接线块作为FPGA 的一个重复单元(one tile),然后对这个重复单元进行研究是很有必要的,因为这是一项关系全局的工作。
3.2.3.2 布线结构
无论逻辑单元怎么选取和设计,都必须配有把各个阵列或各个单元连接起来的可编程布线资源,这些布线资源的特性直接关系到逻辑资源的互连灵活性和时延。布线资源是由垂直线道 、水平线道以及它们的交错区域组成,垂直线道和水平线道相交错的地方就是开关矩阵,在开关矩阵里,一个接点可以改变电路的连接方向,因为在开关矩阵中至少包含一个可编程开关。在垂直线道和水平线道中间,还有一些与相邻逻辑模块连接的连接矩阵。FPGA采用的是统计型连线结构。这类器件具有较复杂的可编程布线资源,内部包含多种长度的金属连线,从而使片内互连十分灵活。因此每次编程后的连线可不尽相同。另一方面,由于连线的灵活性,使同一设计对象可由不同的连线方式实现,导致延迟时间的不确定。设计者应使用开发软件检查实际的延迟时间是否满足设计要求。
最新研究表明,FPGA 设计的可行性更多地受到布线资源的限制,而不是传统意义上的逻辑资源的限制。同时布线延迟在决定 FPGA 的性能方面起主要作用,而开关模块是布线资源中最主要的部分。在FPGA 设计中我们发现,开关模块的布线能力越高,实现完全布线所需的通道数就越少。所以,提高开关模块的布线能力也有利于提高路由器的面积性能。可见,研究开关模块的设计是至关重要的。利用目前的技术,FPGA 的可编程开关通常要消耗整个芯片很大一部分面积,据统计,FPGA 中的 SRAM 单元要占据 FPGA 总面积的 40 %左右。这个问题在多连接(multi-context)FPGA 中尤为突出。由于受面积的限制,在开关模块中设计的开关数是受到限制的,这意味着布线能力也是受到限制的。所以,要设计一个好的 FPGA 就应该权衡布线能力和开关模块的结构面积。我们在 FPGA 设计中采用了准通用开关矩阵,从而在减小开关模块结构面积的同时有效地提高了布线能力。
图3‑9所示的是一个用 SRAM 控制的开关电路,这里用 SRAM 单元主要有两种功能:一是控制传输管开关的栅电压,二是控制多选一电路(MUX)选择连线。这里的多选一电路是用来驱动逻辑块输入的。图3‑9给出了逻辑块(如图3‑9左上角的“与门”)间的连接关系,这种连接先是通过两个传输管开关,然后通过一个多选一电路,其中的传输管开关和多选一电路都由SRAM 单元控制。在FPGA 中,是否用传输管或者多选一电路, 还是两者都用,取决于 FPGA所要实现的特殊功能。
图3‑9 SRAM 控制的可编程开关
除了开关模块外,互连资源中的连线段设计也需要加以优化。如果可以使用的连线段不足,那么只有一小部分逻辑块能够加以利用,从而降低 FPGA功能电路的密度;相反,如果所用的连线段过多,那么有一部分连线段将得不到利用, 从而浪费整个FPGA 的面积。另一方面,互连线,特别是各种长度的连线段(见图3‑10c),支配着 FPGA 功率预算的配置。对于一个具有较强的功能实现能力的传统 FPGA,90 %以上的功耗与互连有关。因为,功耗与电压的平方成正比,我们在较长互连线的两端设置了低压摆电路以降低 FPGA 的功耗,试验证明,这种结构可以大大降低FPGA 的功耗。
基于 SRAM 单元的 FPGA 主要有三种不同长度的布线资源,根据线段长度分为:通用单长度线、通用双长度线、长线和三态缓冲器。单长线是贯穿于CLB 间隙的水平线和垂直线,由可编程开关矩阵把它们联系起来,可编程开关矩阵的示意图如图3‑10 (a)所示。水平线和垂直线的交叉点处有 6 只开关(晶体管),通过 SRAM 编程决定连接关系,如图 5(b)所示。这种结构的连线长度总是两个开关矩阵之间的距离,它提供了相邻功能块之间的快速布线,适合于一定区域内的信号传输和网络间的分支。但单长度线的长度较小,信号每通过一次开关矩阵就要增加一次时延,随着阵列中 CLB 的增加以及互连关系复杂性的提高,信号通过开关的数量急剧增加,从而影响电路的工作速度。通用双长度线的长度双倍于单长度线,双长度线可经过较少的开关矩阵实现不相邻的各 CLB 之间的连接,以减小由于连线引入的延迟 。单长度线和双长度线因连线长度较小, 若用作时钟、寄存器控制或其它多扇出信号的连线时,会产生显著的偏移现象(又称扭曲现象),长线和三态缓冲器就是为解决此类连接而配置的。长线和三态缓冲器的垂直长线由专门的驱动器驱动,用以连接时钟信号。水平长线通过三态缓冲器连接,可提供三态总线。每根长线的中心处都有一个可编程开关,可使长线分成两个独立的连线通道。FPGA 连线的多种长度结构使片内互连十分灵活,且可人为干预,使某些信号的传递特别快。
每条通道包含几种连线段(wire segment),短连线段横跨一个 CLB,较长连线段横跨两个 CLB,超长连线段(长线)横跨整个门阵列,如图3‑10 (c)所示。值得注意的是, CLB 的信号只有经过开关作用才能传到另一个 CLB 中,各种横跨的开关总数取决于所采用的连线段的特殊配置。所以,一个用 FPGA 实现的电路,其速度特性部分地取决于如何用 CAD 工具针对独立信号分配连线段。线道中各连线段与逻辑块的连接是通过由 SRAM 单元控制的 MUX 阵列来实现的,图3‑10 (d)描述了接线块到逻辑块的连接电路。
(a) 开关矩阵示意图
(b)水平线和垂直线交叉点处的 6 只开关
(c) 通道中包含的几种线段
(d)接线块到逻辑块的连接电路
图3‑10 布线资源的相关示意图
3.2.3.2 输入输出结构
输入/输出模块是器件内部信号和引脚之间的接口电路,该接口电路的设计使有关引脚均可通过编程成为输入线、输出线或 I/O 线,且具有较强的负载能力。
如图3‑11所示,I/O 模块作为一个 MUX,连接着配位孔和线道上的 8 根传输线。在开关模块里,用一个 n 沟器件连接配位孔就足够了,而不必在配位孔前加输出缓冲器。这样,所需的面积更小,但增加了一个复杂 FPGA 的布线结构通过模块的延时。采用输入缓冲器可加强对线道传输线的驱动能力,同时提供一种在器件配置时中断对总线驱动的方法。
图3‑11 输入输出模块结构示意图