EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
可配置逻辑块是所有可编程数字电子系统的基本构建块。自从赛灵思公司在 80 年代发明 FPGA 以来,可配置逻辑(以查找表和寄存器的形式)一直是所有市场和应用数字电子系统的重要组成部分。
7 h% O+ i: T2 W: w* m; k) t) h4 \9 r9 e3 [$ T: [, _# `
本白皮书介绍了 28 nm 工艺的Xilinx 7 系列 FPGA 中可配置逻辑块的特性,重点介绍了与以前的 Xilinx FPGA 相比的优势以及这些变化为数字设计工程师带来的好处。 多功能逻辑结构允许在单一资源中实现大量逻辑和存储器功能,从而在性能、功耗和成本方面提供更高的效率。" E: K% C$ D3 R% q7 u
; }2 S; O! X" H" Y7 _/ I6 b! `$ q( N
这篇文章主要是通过介绍7系列与之前产品的对比,来展示7系列产品的基本逻辑单元的优点。% G6 q! F0 Q ^: U& I3 R" T
- b4 D5 d* h2 \4 o& T/ o
7 s0 o8 R/ z. J* e 可配置逻辑块 (CLB) 是 Xilinx FPGA 逻辑结构的核心。在 CLB 中存在由查找表(LUT)、进位链和寄存器组成的Slice。这些Slice可以通过配置来实现逻辑功能、算术功能、存储器功能和移位寄存器功能。多年来,CLB 内的资源数量不断发展,以适当的成本不断提供最佳效能。最初的 Virtex® 和 Spartan®-II 架构在世纪之交推出,提供了一个由两个 Slice组成的 CLB,其中一个 Slice包含两个四输入 LUT 和两个寄存器。从那以后,Slice发生了显着变化——在 7 系列 FPGA 中,Slice由四个六输入 LUT (LUT6) 和八个寄存器组成,如图 1 所示。
. V) X$ e# r7 n5 n( {
( J1 X/ ]/ H: M$ _ CLB = 2×Slice =2 ×(4×LUT + 8×FF + 3×MUX + 1×CARRY4)。
: G, t3 ^. ~9 u
2 w+ k- P; R) |9 j
& x) Y3 L+ o- P
9 u2 W* D- f/ e5 L/ ~4 c7 |' f4 \5 m+ Z* [
7系列 FPGA 中的Slice架构# q& ?. F$ \8 d: J/ |" {
所有 7 系列 FPGA 系列(Artix™-7、Kintex™-7 和 Virtex-7 器件)都使用相同的逻辑架构:CLB 由两个 Slice 组成。 7 系列 FPGA 架构中的 Slice 有两种类型:一种能够在 LUT 中实现逻辑、移位寄存器和存储器功能,称为 SLICEM;另一种只能在 LUT 中实现逻辑功能,称为 SLICEL。采用这种全功能 SLICEM 与减少功能SLICEL 相结合的策略可实现最佳功能和性能,同时保持低成本和低功耗。
% r0 d# v; h7 i4 W/ d, }( q1 ]7 D, C J% Z6 X3 Z V
7 系列FPGA Slice架构紧密基于 Virtex-6 和 Spartan-6 系列中引入的Slice架构。 Virtex- 6、Spartan-6 和 7 系列 FPGA Slice架构之间的相似性为现有设计和 IP 迁移到 7 系列 FPGA 提供了一条简单的路径。设计师可以以最小的重新设计工作量,将他们的设计获得到最新的功能和最高的性能。此外,所有 7 系列 FPGA 使用相同的可扩展、优化架构允许最初针对一个 7 系列 FPGA 系列的设计轻松移植到另一个 7 系列 FPGA 系列。& E; J) B/ q( D. @7 n4 g* _: h
0 n3 M- _7 x$ M5 u Slice由两个 SLICEL 或一个 SLICEL 与一个 SLICEM 成对组合在 CLB 中。 7 系列FPGA 构建在基于列的 ASMBL™ 架构之上,允许在设计人员需要的地方轻松放置资源。在这种情况下,具有存储器功能的 Slice 在 DSP Slice 的列附近最为普遍,为设计人员提供接近所需位置的系数存储。 Xilinx 设计工具全面了解资源的相对布局,并以最有效的方式智能、自动地将设计映射到资源,同时遵守用户指定的任何约束。. }0 I! b9 @* m; z* f
% Z' Q8 P: `& e6 a" }
图 2 显示了 LUT 和寄存器是如何相互排列的。图 2 仅包括一个 LUT 及其相关的两个寄存器,并省略了进位链。在一个完整的 Slice 中,有四个 LUT 和八个寄存器。! S! c* ^/ I% z% _+ l0 G
9 x; e4 e; F2 Q0 R! p) x% A$ _* d' ^& U
' V* W; j }1 H. K0 i1 b7 B
" r* d& o* m' K1 h* ~/ U3 L9 v# P! ^/ D* q) B5 g! |
6 输入 LUT 能够实现任何布尔逻辑函数,该函数是 6 个输入信号的乘积,但也可以拆分为两个 5 输入 LUT——只要这两个函数共享公共输入。此外,SLICEM 中的 LUT 也可配置为 64 位分布式 RAM 或最多支持32 位的移位寄存器逻辑 (SRL) 功能。有关详细信息, 请参阅UG474。2 {+ i8 j; p6 q2 w9 Z! G' z
# N' e4 h$ w& e( K" e
6输入的LUT是由2个LUT5 + MUX2组成的。
2 T: K* ^. v* Z8 U
E$ u- J% {! E ?+ N6 F
- ?1 W5 x/ S0 r# r- [& J! Q常见的Slice资源用法
' D) Z8 |, M4 J. F X8 s( a. U/ p9 T; ]! ~
多功能性是可编程逻辑的基础,设计人员可以根据他们的目标以多种方式使用 FPGA 的Slice资源。; S& [8 `$ b" B2 D
( ~# C! q; q: N, K5 E' I2 h3 D: @
该架构允许独立于寄存器使用 LUT。 Slice 的 Bypass (AX/BX/CX/DX) 输入允许在不通过 LUT 的情况下访问寄存器的 D 输入,并且组合逻辑信号可以接到 Slice 的输出(图3)。
4 ^! {* q7 w7 D9 D
9 d5 g" T$ {* p2 C! S' F
: T/ C" r2 l' P2 a g; e
$ G7 `$ F" F- @3 ]3 E8 \7 `2 b) _2 a! q; K
8 l( w z0 F+ n8 |3 L/ n, D4 }5 r 除了直接驱动寄存器外,Bypass 输入还可用于驱动进位链。
" l9 R1 d2 g2 B, H- n' ~: T% M e3 V
LUT 输出可以使用触发器多路复用器直接接入相关寄存器的 D 输入(图 4)。 O5 LUT 输出可以连接到任一寄存器的输入(图 4),而 O6 LUT 输出只能连接到其中一个寄存器(图 2)。
; p$ J* C' u' x3 Y
! G% s- H6 H, ^6 \5 N3 J: q) d6 j/ H3 b8 W& H' E% |/ u0 `3 B/ z- d& l$ \
b) I# d* @7 p* E3 i- d7 U& Z! w# p2 A. v6 A7 g6 z
1 l* G) V5 n8 Y/ e& L0 c 可以在单个 LUT 中创建不共享输入的逻辑函数。 LUT 的 A6 输入连接到高电平以启用双 LUT 模式,而 LUT 的其余五个输入可用于独立的逻辑功能。例如,一个不共享输入的二输入函数和三输入函数可以打包在同一个 LUT 中(图 5)。如果寄存逻辑输出,寄存器必须共享相同的控制信号。
! g+ ~9 |# a6 H/ L/ H9 H
. h. [. U; \$ k# J2 v9 O) Y$ j+ {
, H$ V3 k6 o9 ]; p$ K# V
: {% |5 E7 h& o& K/ z
% ^5 ]5 u) S; |% i7 b& \; R z5 ]8 d* V
- ^6 c' y* V/ k7 V1 g7 L6 B
5 R' V% R; J7 J6 @" L 多路复用器 F7 和 F8 使用bypass输入在两个 LUT6 输出之间切换,提供了一种在单级 CLB 中实现比六个输入更宽的功能的方法。 LUT6+MUX2的组合可以通过分时复用的方式来实现更大位宽的函数发生功能。
- B G7 L n" |! e C6 F
控制信号 7 系列 FPGA 中的所有触发器都可以使用设置/复位、时钟和时钟使能信号进行控制, 通常称为一组控制信号或控制集。每个 Slice 可以使用不同的控制集,但如果 slice 中的一个触发器使用了某种控制信号,例如同步复位,则该 Slice 中的所有其他触发器必须使用相同的信号作为它们的复位 - 或者不使用复位。如果 LUT 有可用输入,则可以将控制信号折叠到数据路径(即 LUT)中,从而允许在同一片内使用多个复位信号(图7)。
9 ?+ u6 q4 K, R
9 {0 @/ M( |' i4 {+ a& k Xilinx 建议避免在设计中使用许多低扇出控制信号,以避免因控制集过多而遇到设计限制。综合工具自动避免生成使用大量低扇出时钟使能信号的电路。在赛灵思 XST 综合工具中,选项“-reduce_control_sets”可用于控制此功能。UG429,提供了有关控制集的良好设计实践的进一步指导。
) y( x0 m7 r! R9 I" \ m+ U. F 在设备上电时,可以使用初始化值 INIT 将所有寄存器初始化为已知值。如果设计只需要在上电时进行初始化,使用这种方法可以消除在每个触发器上设置和复位信号的需要。这也允许将移位寄存器折叠到可用的 SRL 逻辑中,而不是使用触发器。
: [6 ~2 [* X$ X. _1 G% ^& ?: x+ P 除了实现用户指定的使能外,寄存器上的时钟使能端口也被智能时钟门控优化所使用。有关这如何帮助将设计的动态功耗降低多达 30% 的更多信息,请参阅WP370。 ( ~6 @/ ?8 {4 ~) P& \
控制集尽量不要搞得太多,因为同一Slice中的控制集只支持一类,如果种类过多,则会造成大量的资源浪费。 0 W$ D6 t6 A! Z! c2 x
额外资源的好处
) j+ B1 I( U6 [, R8 o1 f- m
Xilinx CLB 架构的最新变化之一是向 Slice 添加了第二个寄存器。在 Virtex-6 和Spartan-6 FPGA 之前,高端 Xilinx FPGA 中的 CLB 架构由四个六输入 LUT 和四个寄存器组成。添加第二个寄存器,它首先在 Virtex-6 和 Spartan-6 FPGA 中实现, 也出现在 7 系列 FPGA CLB 架构中,增加了显着的好处,但它的成本增长却很小。
* e, X- R+ v' v6 K7 v, L 如图 8 所示,当将 LUT 配置为两个五输入 LUT 时,两个 LUT 的输出可以寄存在同一个 slice 中。这提供了一致的逻辑来寄存时序和寄存每个逻辑功能的能力,从而通过流水线提高性能。
$ E8 L: p) y o* G, R$ [& }- V5 Y% X1 d# v
+ }5 N( m/ G/ A5 T" w, z c3 N8 c0 z
此外,当在单个 Slice 中实现分布式 RAM 中的已寄存 32 x 8 RAM 时,所有八个寄存器都驻留在 sSice 内。这消除了在设备其他地方使用四个寄存器的要求,并提供了从RAM到寄存器的快速、一致的路径(图 9)。
# e- b. [7 F+ |5 ]
/ n0 I- A9 D/ N R% K7 C3 T 在单个 Slice 中使用所有八个寄存器可显着提高性能,并具有不耗尽其寄存器的相邻slice 的额外好处资源。与每个 LUT 相邻的第二个寄存器的存在意味着可以将共享控制集的更多寄存器打包到单个Slice中,从而释放以前跨越多个Slice的资源。对一组不同大小和复杂性的设计的分析表明,这导致用作寄存器的Slice平均减少 15%,从而为用户腾出资源以在其 7 系列FPGA 设计中构建额外的功能。将每个 LUT 的第二个寄存器保持在同一个控制集上,并取消将该寄存器配置为锁存器的能力,这意味着它已经实现并且可以非常经济高效地在FPGA 架构中使用。虽然设计人员在编写设计代码时可以从了解逻辑架构中受益,但赛灵思工具套件可以了解不同系列的架构布局,并自动利用架构中存在的资源。
* `7 r. p5 [. Q2 o$ a 简而言之,寄存器的增加,是的更大位宽的功能实现不再需要跨越Slice,而是可以在一个Slice内完成,这使得各个信号的走线长度基本一致,有利于布线和时序收敛。 结论 Xilinx 7 系列 FPGA 中的可配置逻辑块是 Virtex-6 FPGA 和 Spartan-6 FPGA 中 CLB 的演进,为设计迁移到 7 系列 FPGA 提供了一条简单的途径。借助四个六输入 LUT 和八个寄存器,灵活的 Slice 逻辑结构可用于执行组合逻辑功能、算术功能、移位寄存器功能和存储器功能等多种不同功能。与以前的架构相比,四个 LUT 与八个寄存器的组合提供了性能优势和资源减少,而第二个寄存器的低成本实现几乎不会影响设备的整体成本。
3 t- D5 s- P! v( y1 v |