集成块设计:FPGA设计进阶1--XilineFPGA结构(UltraScale)

Reference:xilinx FPGA权威设计指南

1. UltraScale结构特点

        UltraScale结构能从20nm平面的FET结构扩展到16nm鳍式的FET晶体管,甚至更高的技术,同时还能够从单芯片扩展到3D IC。

        UltraScale架构不仅能够解决系统总吞吐量扩展和时延方面的局限性,而且还能解决直接应用先进工艺节点上的头号系统性能瓶颈,即互联问题。UltraScale新一代互联架构的推出体现了可编程逻辑布线技术的真正突破。

        Xilinx致力于满足从多吉字节智能包处理到多太字节数据路径等新一代应用需求,即必须支持海量数据流。在实现宽总线逻辑模块(将总线宽度扩展至512位,1024位甚至更高)的过程中,布线或互联拥塞问题一直是影响实现时序收敛和高质量结果的主要制约因素。过于拥塞的逻辑设计通常无法在早期器件架构中进行布线。即使工具能够对拥塞的设计进行布线,最终设计也经常需要在低于预期的时钟速率下运行。而UltraScale布线架构则能完全消除布线拥塞问题。结论很简单,即只要设计合理,就能够进行布线(翻译一下就是:布线资源多)。

2. 可配置逻辑块

        可配置的逻辑块(Configurable Logic Block, CLB)是主要的逻辑资源,用于实现时序和组合逻辑电路。其在Device中的表示为图1红框中的蓝色矩形所示。

图 1 CLB

2.1  可配置逻辑块的特点

        UltraScale结构的CLB提供了高性能和低功耗的可编程逻辑,每个CLB连接一个开关矩阵,用于访问通用的布线资源。一个CLB包含一个切片(Slice),每个切片提供8个6输入的查找表和16个触发器,切片中的查找表(Look up table, LUT)按列排列。UltraScale架构中包含两种类型的切片,即SliceL和SliceM,如图2所示为UltraScale中SLICEL(L表示逻辑)和SLICEM(M表示内存)的内部结构。

图 2 SliceL & SliceM

 图 3 SliceL

        图3所示为UltraScale中SLICEL(L表示逻辑)的内部结构,对于SLICEL有:

        (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表示。

        图2所示最左边一列为SLICEM(M表示存储器)的内部结构,其中的LUT能够配置为:

      (1)一个查找表

      (2)64位的分布式存储器

      (3)一个32位的移位寄存器

        此外,LUT可以配置为包含公共输入的两个5输入LUT。这样,就能够产生两个逻辑运算结果。如图4所示,给出了将一个6输入的LUT配置为两个5输入的LUT的结构图。

 图 4

        实现代码为:

module LUT_conf(a,c);input [4:0]a;output [5:0]c;assign c[0] = &a;assign c[1] = ~&a;assign c[2] = |a;assign c[3] = ~|a;assign c[4] = ^a;assign c[5] = ~^a;endmodule

        对该设计使用xczu7ev-ffvc1156-2-e器件后的综合结果如图5所示,由图可知,该设计由6个5输入查找表来实现。

                                              

图 5  

图 6

        图6所示为经过布局布线后,设计在具体器件上的实现,可以看到6个5输入的LUT,对于两个具有相同输入的5输入LUT可以使用一个6输入LUT实现,因此,具体器件实现上,只使用了3个6输入LUT.

 图 7

        图7所示为xilinx 7系列,器件型号为xc7a100tfgg676-2中的CLB,一个CLB由一个SLICE_L和一个SLICE_M成对组成,同时和UltraScale系列中相同类型SLICE的资源减少了一半。

2.2 多路复用器

        多功能多路复用器将LUT组合在一起,构成7,8或者9输入的任意函数功能,或者最多55个输入的一些函数功能。每个切片包含7个多路复用器,用于构建更多的函数功能。

1. F7MUX_AB, F7MUX_CD, F7MUX_EF和F7MUX_GH

        这些多路复用器用于组合相邻的LUT。其中,F7MUX的后缀AB,CD,EF,GH表示该类型多路复用器由SLICE外部输入的AX, BX, EX,GX控制信号对相应的F7MUX进行控制。其可以用作:

(1)实现辅助的7输入函数功能

(2)实现一个8:1的多路复用器

2. F8MUX_BOT和F8MUX_TOP

        用于组合两个相邻的F7MUX。其中,F8MUX的后缀BOT和TOP表示该类型多路复用器由SLICE外部输入的BX和FX控制信号对相应的F8MUX进行控制。其可以用作:

(1)实现辅助的8输入函数功能

(2)实现一个16:1的多路复用器

3. F9MUX

        用于组合两个F8MUX。该类型的多路复用器由SLICE外部输入的DX控制信号进行控制。其可以用作:

(1)实现辅助的8输入函数功能

(2)实现一个32:1的多路复用器

        实现代码为:

module Mux(a,b,sel,z);input [4:0]a,b;input sel;output z;wire x,y;assign x = &a;assign y = |b;assign z = sel ? x:y;endmodule

        对该设计使用xczu7ev-ffvc1156-2-e器件后的综合结果如图8所示,由图可知,该设计由2个5输入查找表来实现。              

图 8

图 9    

        图9所示为经过布局布线后,设计在具体器件上的实现,可以看到2个5输入的LUT,因为输入不相同,不能共享一个6输入的LUT。因此,具体器件实现上,使用了2个6输入LUT和一个相应的F7MUX

2.3 进位逻辑

        CLB内提供了一个专用的快速超前进位逻辑,用来执行快速的加法和减法运算。多个快速进位逻辑可以级联在一起,实现更宽位数的加法和减法运算。(这里没有细究它......)

3 存储元素

        每个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,CLB I输入用于Q2

      (4)进位的逻辑异或结果。

      (5)进位级联输出(CO)

      (6)多路复用器(FMUX)输出的一个(对于底部的LUTA,不可用)

        对于每个存储元素来说,可选择的初始化方式有:

      (1)SRLOW:当SR信号有效时,同步或者异步复位

      (2)SRHIGH:当SR信号有效时,同步或者异步复位

      (3)INIT0:当上电时,异步复位

      (4)INIT1:当上电时,异步置位

         实现代码为:

module Regs_conf(d1,d2,clk,rst,x,y,z);input d1;input d2;input clk;input rst;output reg x;output reg y;output reg z;/* 同步复位的触发器配置 */always@(posedge clk) begin if(rst) begin x <= 1'b0; end else begin x <= d1; end end/* 异步复位的触发器配置 */always@(posedge clk or posedge rst) begin if(rst) begin y <= 1'b0; end else begin y <= d1; end end /* 锁存器的配置 */always@(*) begin if(rst) begin z = 1'b0; end else if(clk) begin z = d1; end endendmodule

        对该设计使用xczu7ev-ffvc1156-2-e器件后的综合结果如图10所示,由图可知,该设计由3个reg存储单元来实现。

 图 10

        图11所示为经过布局布线后,设计在具体器件上的实现,可以看到使用了三个存储单元(FF)来实现,但是在资源报告中只有两个,因为还有一个锁存器,并不是触发器,但是同样会占用存储单元(FF).注意,这里存在的一个问题是,我在对三个存储单元进行了相应的布局约束,但是并没有出现按照布局约束出现的效果,这里我感觉很奇怪。

 图 11

        然后我改变尝试改变成如下设计重新进行实现:

module Regs_conf(d1,d2,clk,rst,x1,y1,z1,x2,y2,z2);input d1;input d2;input clk;input rst;output reg x1;output reg y1;output reg z1;output reg x2;output reg y2;output reg z2;/* 同步复位的触发器配置 */always@(posedge clk) begin if(rst) begin x1 <= 1'b0; x2 <= 1'b0; end else begin x1 <= d1; x2 <= d2; end end/* 异步复位的触发器配置 */always@(posedge clk or posedge rst) begin if(rst) begin y1 <= 1'b0; y2 <= 1'b0; end else begin y1 <= d1; y2 <= d2; end end /* 锁存器的配置 */always@(*) begin if(rst) begin z1 = 1'b0; z2 = 1'b0; end else if(clk) begin z1 = d1; z2 = d2; end endendmodule

        得到如图12和图13所示的实现结果。

                                                                      

   图 12  

   图 13

在布局约束后,工具并没有按照我想要的实现方式去放置存储单元。注意:这里有个问题:如何固定寄存器单元逻辑复制而不让工具自动优化的点?

4 分布式RAM

        SLICEM内的函数函数器(LUT)可以作为同步RAM资源,也称为分布式RAM. SLICEM内的多个LUT可组合构成最多512比特容量的RAM,其可以配置为:

     (1)单端口模式:包括32x(1-16)位,64x(1-8)位,128x(1-4)位,256x(1-2)位或者512x1位。

     (2)双端口模式:包括32x(1-4)位,64x(1-4)位,128x1位或者256x1位。

     (3)简单双端口模式:包括32x(1-14)位和64x(1-7)位。

     (4)四端口模式:包括32x(1-4)位,64x(1-2)位和128x1位。

     (5)八端口模式:包括64x1位。

        实现代码为:

module dram_con(clk,we,en,addr,di,do);input clk;input we;input en;input [3:0]addr;input [3:0]di;output reg [3:0]do;reg [3:0]RAM[15:0];always@(posedge clk) begin if(en) begin if(we) RAM[addr]<=di; else do <=RAM[addr]; end endendmodule

                                            

图 14 

   图 15

        同样的,工具并没有按照我的布局约束去实现我想要的器件位置摆放。开始我认为是pblock是针对instance的,然后使用xilinx 7系列的device进行了对寄存器进行了如下布局,工具按照我的布局约束去实现了我想要的器件位置摆放。

图 16 

5 只读存储器(ROM)

        SLICEM和SLICEL内的每个LUT都可以实现一个64x1位的ROM,提供了4种ROM的配置方式。

    (1)ROM64x1 (1个LUT) (2)ROM128x1 (2个LUT)  (3)ROM256x1 (4个LUT)  (4)ROM512x1 (8个LUT)

实现代码为:

module drom_con(en,addr,clk,data);input en;input [2:0]addr;input clk;output reg [7:0]data;always@(posedge clk) begin if(en) begin case(addr) 3'b000:data <= 8'h0A; 3'b001:data <= 8'h03; 3'b010:data <= 8'h04; 3'b011:data <= 8'h05; 3'b100:data <= 8'h06; 3'b101:data <= 8'h07; 3'b110:data <= 8'h08; 3'b111:data <= 8'h09; endcase end endendmodule

   图 17

   图 18

         如图17和图18所示,Data[2]和Data[3]具有相同的输入信号,因此,使用1个6输入的LUT中的独立的两个5输入LUT来实现。

6 移位寄存器

        在不使用触发器的情况下,可以将一个SLICEM函数发生器(LUT)配置为一个32位的移位寄存器。当用作移位寄存器时,每个LUT可以将串行数据延迟1-32个时钟。当移位输入D(LUT引脚SIN)和移位输出Q31(LUT引脚MC31)连接在一起时(多个LUT级联),就可以构成更大的移位寄存器。因此,当把一个SLICEM内的8个LUT级联在一起时,则可以产生最多256个时钟周期的延迟。在UltraScale结构中,可以跨越SLICEM将移位寄存器进行组合。因此,最终得到的可编程延迟,用于平衡数据流水线的时序。  

         移位寄存器的应用包括:

        (1)补偿时延或者延迟

        (2)同步FIFO和内容可寻址存储器(Content Addressable Memory, CAM)

        移位寄存器的功能包括:

        (1)写操作。通过时钟输入和一个可选的时钟使能进行同步

        (2)到Q31的固定读访问,用于级联到下面的LUT。最下面的LUT A的Q31连接到SLICEM的输出,用于直接使用或者级联到下一个SLICEM。

        (3)动态的读访问:

                1)通过5位地址线A[4:0]执行,没有使用LUT地址的LSB,软件工具自动将其拉高

                2)通过不同的地址,可以异步地读出任何32位数据。

          在创建小的(少于32位)移位寄存器时,这个功能非常有用。例如,当构建一个13位的移位寄存器时,简单地将地址设置为13位。

        (4)一个存储元素或者触发器可以用来实现一个同步读操作功能。时钟到触发器的输出决定了整个延迟,并且改善了性能。尽管增加了一个额外的延迟。

        (5)不支持移位寄存器的置位或者复位。但是,当配置完成后,可以初始化为任意的值。

        注意:对于SRL16而言,一个LUT等效于16个触发器;对于SRL32而言,一个LUT等效于32个触发器。使用SRL唯一的限制就是,不能对寄存器内的每个元素进行单独复位操作。

实现代码为:

module srl_con(clk,si,so);input clk;input si;output so;reg [15:0]tmp;integer i;assign so = tmp[15];always@(posedge clk) begin for(i=0;i<15;i=i+1) tmp[i+1]<=tmp[i]; tmp[0]<=si; endendmodule

图 19 

 图 20

7 时钟资源和时钟管理模块

        如下图所示为UltraScale结构的时钟结构。从图中可以看出,基本的结构是由表示分段时钟行和列的CR块构成的。CR(clock region?)以一个单元的方式排列,从而构造出行和列。每个CR包含Slice(L/M),DSP,32KB BRAM(2个18KB BRAM)。在每个CR中,所包含这些资源的数目在行方向上可能不同,但是在垂直方向上是一样的。每个CR的高度是60个CLB,24个DSP和12个BRAM,从而为器件构建了这些资源的列。

(1)在CR的中间插入I/O列和GT列。

(2)与I/O列相邻的是PHY块,包含时钟管理单元(CMT),全局时钟缓冲区,全局时钟复用结构和I/O逻辑管理功能。

(3)时钟结构存在一个单个的列,其包含配置逻辑,系统监控器和PCIe.

(4)一个水平时钟脊梁(Horizontal Clock Spine, HCS)穿过每行CR,I/O和GT的中间。HCS含有水平布线和分布引线,以及叶子时钟缓冲区,还有在水平/垂直布线和分配之间的时钟网络互联。

(5)垂直的布线连接通道和分配连接一列内所有的CR,而垂直布线跨越一个完整的I/O列。时钟结构包含24个水平布线连接通道和24个分布引线连接通道,以及24个垂直布线连接通道和24个分配引线连接通道。

(6)I/O由来自PHY的时钟直接驱动,或者通过布线引线由相邻的PHY驱动。

图 21

7.1  时钟资源

 UltraScale结构的时钟资源包括全局时钟输入,字节时钟输入,时钟缓冲和布线。

1,全局时钟输入(我没有在Device上找到具体的器件)

        每一个I/O组(Bank)上有4个全局时钟(Global Clock,GC)引脚,可以直接访问全局时钟缓冲区,MMCM和PLL。GC输入提供了高速访问全局和区域时钟资源的专用通道。每个I/O组位于一个单个时钟域内,包含52个I/O引脚。

2,字节时钟输入

        字节时钟(DBC和QBC)输入引脚是专用的时钟输入,直接驱动源同步的时钟到I/O块的比特切片。在存储器应用中,这些称为DQS.

3,时钟缓冲和布线

        PHY全局时钟包含BUFGCTRL,BUFGCE和BUFGCE_DIV,如图所示。它们中的每一个都可以被来自相邻Bank,MMCM,同一PHY的PLL和互联直接驱动。时钟缓冲区用于驱动整个芯片内的布线和分配资源。每个PHY包含24个BUFGCE,8个BUFGCTRL和4个BUFGCE_DIV。但是,在同一时刻,只能使用其中的24个缓冲区。

                                    

 图 22 BUFGCTRL 

图 23 BUFGCE_DIV 

图 24 BUFGCE

7.2 时钟管理模块

        UltraScale结构的每个I/O组包含一个时钟管理单元(Clock Management Tile, CMT),每个CMT包含下面的功能单元:

        (1) 一个混合模式的时钟管理器(Mixed-mode Clock Manager, MMCM)

        (2) 两个相位锁相环(Phase Lock Loop, PLL),其目的主要用于为I/O生成时钟。但是,它也包含了用于内部结构的MMCM的一些功能集。                                

 图 25 PLL 

图 26 MMCM

 图 27

        图27给出了MMCM的内部结构。MMCM用于宽范围频率的合成,内部或外部时钟的抖动过滤器。MMCM的核心是一个压控振荡器(Voltage Controlled Oscillator, VCO),根据来自相位频率检测器(Phase Frequency Detector, PFD)的电压,VCO增加或者降低频率。

        MMCM中有3个可编程的分频因子D,M和0。通过动态配置端口,可以在配置和正常的操作期间对其进行编程。预触发器D,用于降低输入时钟的频率,然后将其送入相位/频率比较器;反馈分频器M,由于在将它送给相位比较器之前,其将VCO的输出频率进行分频,所以其充当乘法器的角色。必须选择合适的D和M,以便VCO处于其指定的频率范围内。VCO有8个等间隔的输出相位(0,45,90,135,180,225,270,315),可以选择其中一个相位来驱动一个输出分频器。可以在配置时,对每个分频器进行编程,分频因子为1-128中的任意整数。MMCM有3个输入抖动过滤器选项:低带宽,高带宽和优化模式。其中:

        (1)低带宽模式有最好的抖动衰减

        (2)高带宽模式有最好的相位偏置

        (3)优化模式允许Vivado工具找到最好的设置

        MMCM也有一个小数计数器,它位于反馈路径(充当乘法器)或者输出路径。小数计数器允许非整数的1/8增量。因此,增加频率合成能力8倍。根据VCO的频率,MMCM也能够提供小幅度增量的固定相移或者动态相移。在1600MHz时,相位移动时间增量是11.2ps.PLL比MMCM的特性要少得多。在一个时钟管理单元内的两个PLL,其基本上是为专用的存储器接口电路提供必要的时钟的。在PLL中心的电路类似于MMCM,带有PFD和VCO,以及可编程的M,D和O计数器。每个PLL有两个到FPGA结构的分频输出,以及到存储器接口电路的一个时钟和一个使能信号。

        在实际使用时,通过在IP Catalog中提供的Clocking Wizard来选择并配置MMCM/PLL,如下图所示。

8 块存储器资源

        每个UltraScale结构的FPGA包含多个36KB(bit)容量的块存储器(Block RAM, BRAM),每个块存储器都有完全独立的端口,共享保存的数据。每个BRAM可以配置成1个36KB的RAM或者2个独立的18KB的RAM。由时钟控制每个存储器的访问(读或者写),通过连接每个BRAM列的使能信号,可以在垂直相邻的BRAM之间实现级联。这样,就提供了一种非常容易的方法,用于创建大容量,快速的存储阵列和FIFO,大大降低了系统功耗。

        将所有的输入,数据,地址,时钟使能和写使能寄存。输入地址总是被时钟驱动(除非关闭地址锁存),一直保留数据直到下一个操作为止。在以消耗一个额外时钟延迟的代价下,一个可选的输出数据流水线寄存器允许更高的时钟速率。在写操作期间,数据的输出能够反映出前面所保存的数据或者新写入的数据,或者其保持不变。当设计中没有包含使用得BRAM时,会自动断电,以降低功耗。每个BRAM中有一个额外得引脚,它用于控制动态功率得控制特性。

        1. 可编程得数据宽度

        每个端口可以配置成32Kx1, 16Kx2, 8Kx4, 4Kx9(8), 2Kx18(16), 1Kx36(32)或者512x72(64)模式。不管配置成一个RAM块还是FIFO,两个端口都可以有不同得宽度和深度比,并且没有任何限制。只有在简单双端口模式下,其数据宽度可以大于18位(18 KB RAM)或者36位(36 K BRAM)。在该模式下,一个端口专用于读操作,另一个端口专用于写操作。在简单双端口模式下,一侧(读或者写)得宽度是可以变化得,而另一个端口固定为32/36位或者64/72位。双端口36 KB RAM的所有侧都可以是可变的宽度。

        2.检错和纠错

        每个64位宽的BRAM能够产生,保存和利用8位额外的海明码。在读过程中,纠正单比特错误和检测两比特错误操作。在写或者读外部64/72位宽的存储器时,也可以使用ECC逻辑。

        3. FIFO控制器

        下图给出了UltraScale内建的FIFO结构。每个BRAM能够配置成一个36KB的FIFO或者一个18 KB的FIFO。内建的FIFO控制器用于单时钟(同步)或者双时钟(异步或者多数据率)操作,内部递增地址。此外,提供了4个握手信号,即满,空,可编程的满和可编程的空。可编程的标志允许设计者指定FIFO计数器的值,这个值用于控制标志变成激活状态。使用者可以对FIFO的宽度和深度进行编程,以支持在一个FIFO上使用不同宽度的读端口和写端口。一个专用的级联路径允许容易创建更深的FIFO。

         实现代码为:

module bram_con(clk,we,en,addr,di,do);input we;input clk;input en;input [3:0]addr;input [3:0]di;output reg [3:0]do;(* ram_style = "block" *)reg[3:0]RAM[15:0];always@(posedge clk) begin if(en) begin if(we) RAM[addr]<=di; do <= RAM[addr]; end endendmodule

对该设计使用xczu7ev-ffvc1156-2-e器件后的综合结果和布局布线后的结果如图28和图29所示                 

图 28   ​​

图 29

9 专用DSP

        数字信号处理使用大量的二进值乘法器和累加器,这些操作可以在专用的DSP切片内实现。如图30所示,UltraScale结构提供了大量专用的且低功耗的DSP48E2 Slice,每个DSP483包含:(1)一个专用的27x18位的二进制补码乘法器(2)一个48位的累加器

        应用时,可以动态旁路一个乘法器,两个48位的输入能够送到一个单指令多数据(SIMD)运算单元(2个24位加法/减法/累加或者4个12位加法/减法/累加),或者一个逻辑单元,该单元可以实现两个操作数的10种不同逻辑功能其中的任何一种。

图 30

        DSP48E2包含一个额外的预加法器。例如,用于对称滤波器。在一个高密度封装的设计中,这个预加法器改善了性能,同时将DSP切片的数量最多减少了50%。96位宽度的逻辑XOR功能可以编程为12,24,48或者96位宽度。这样,当执行向前纠错和循环冗余检查算法时,改善了实现性能。

        DSP48E2也包含一个48位宽度的模式检测器,它可以用于收敛或者对称的四舍五入。当和逻辑单元相结合时,模式检测器也可以实现96位宽度的逻辑功能。

        设计实现代码为:

(* use_dsp48 ="yes" *)module dsp_unit(a,b,c,x);input [3:0]a,b,c;output [8:0]x;assign x = a*b+c;endmodule

 对该设计使用xczu7ev-ffvc1156-2-e器件后的综合结果和布局布线后的结果如图31和图32所示。     

 图 31 

图 32

10 SelectIO资源

        根据元器件的封装,I/O引脚的数目不尽相同。每个I/O都是可配置的,并且能兼容大量的I/O标准。UltraScale器件提供了宽范围(High Range, HR)和高性能(High Performance, HP)两种类型的I/O组。HP I/O被优化用于最高性能操作(如高速存储器和其它芯片之间的接口),其电压最高为1.8V; HR I/O提供了对宽范围电压的支持,其电压最高为3.3V。HP I/O和HR I/O组中所支持的特性如下表所示。

         UltraScale架构FPGA的所有I/O引脚按组构成,每个I/O组包含52个SelectIO引脚,其中的48个引脚可以配置为单端或者差分I/O标准,其他4个引脚(包括多用途的VRP引脚)只能配置为单端模式。在一些器件中,有一些HR I/O最小组中包含26个SelectIO引脚,每个组由一个公共的Vcco输出缓冲区供电,它也为一些输入缓冲区供电。此外,HR组能分割为两个半组,每个由自己的Vcco供电。一些单端输入的缓冲区要求一个内部生成的或者外部供给的参考电压(Vref)。Vref引脚可以在PCB上直接驱动,或者使用出现在每个组内的内部Vref生成器产生。

        每个IOB直接连接到BITSLICE元件,它包含输入和输出资源,用于串行化(并行转串行),解串行化(串行转并行),信号延迟,时钟,数据和三态控制,以及用于IOB的寄存。BITSLICE元件可分别用于元件模式,作为IDELAY, ODELAY, ISERDES, OSERDES,以及输入和输出寄存器。它们也可以作为RX_BITSLICE(输入),TX_BITSLICE(输出)和RXTX_BITSLICE(双向)用在较低粒度级。

10.1 SelectIO电特性

        单端输出使用传统的CMOS下拉或者上拉结构,将逻辑高驱动为Vcco或者将逻辑低驱动为地,也能置为高阻状态。设计者可以指定抖动率和输出强度。输入总是活动的,但是当输出是活动时,常常忽略输入。每个引脚可以选择一个弱上拉或者一个弱下拉电阻。大部分的输入引脚对可以配置为差分输入对或者差分输出对。差分输入引脚可以选择使用100欧姆的内部电阻端接。SelectIO引脚可以配置为各种不同的I/O标准。包括单端和差分:

        (1)单端I/O标准(如LVCMOS, LVTTL, HSTL和SSTL)

        (2)差分I/O标准(如LVDS, Mini_LVDS, RSDS,PPDS,BLVDS, TMDS和差分HSTL和SSTL)

        一个三态的数字控制阻抗(T_DCI)能够控制输出驱动阻抗(串行端接)或者能够为输入信号提供到Vcco的并行端接,或者分割(Thevenin)端接到Vcco/2。这样,允许设计者不需要使用片外信号端接。除节约空间外,当处于输出模式或者三态时,自动关闭端接。与片外端接相比,降低了功耗。I/O为IBUF和IDELAY提供了更低的降低功耗的方式,特别是用于实现存储器接口。

10.2  ISERDES和OSERDES

        在很多应用中,组合高速的位串行I/O,以及元器件内的低速并行操作。因此,这就要求在I/O逻辑内有一个串行化器和一个解串行化器(SerDes)。每个带有IOSERDES(ISERDES和OSERDES)的I/O能执行2,4,8位的串行到并行,以及并行到串行的转换。这些I/O逻辑特性能执行高性能的接口,如Gigabit以太网/1000BaseX/SGMII.

10.3 SelectIO资源的引用

        当需要将LVDS的差分输入信号转为单端输入信号时,需要引用IBUFDS元件。

11 高速串行收发器

        详细可参考HDMI设计5--GT Transceiver的总体架构整理

12 PCI-E模块

        是个大知识点,目前没有用到过,后面再说吧

13 Interlaken集成块

        可扩展的片到片的互连协议,是个大知识点,目前没有用到过,后面再说吧

14 Ethernet模块

        以太网端口,也是个大知识点,目前没有用到过,后面再说吧

15 系统监控器模块

        如下图所示,通过片上供电传感器和温度传感器对环境的监控,UltraScale架构的FPGA内部所提供的系统监控器模块用于扩展系统的整体安全性和可靠性。此外,系统监控器还提供了最多17个设计者分配的外部模拟输入。系统监控器支持片上监控所有元器件的主要供电电压,如Vccint,Vccaux,Vccbram和Vcco.

        通过使用10位200kSPS的ADC,将传感器的输出和模拟输入数字化,测量的结果保存在寄存器中。通过内部FPGA,JTAG或者IIC接口,访问测量的结果。通过IIC接口,系统管理器/主机可以在配置前对片上监控进行访问。

16 配置模块

        对于UltraScale架构的FPGA来说(不仅仅是UltraScale),针对SRAM类型的内部锁存器保存它们定制的配置参数。由于配置保存是易失性的,所以当FPGA上电的时候,重新加载数据。在任何时候,通过将FPGA的PROGRAM_B拉低,就可以重新加载保存的配置数据。UltraScale架构的FPGA有3个模式引脚,用于确定加载配置数据的方法,其他专用的配置数据引脚用来简化配置的过程。

        SPI(串行NOR)接口(x1,x2,x4和双x4模式)和BPI(并行NOR)接口(x8和X16模式)是两种用于配置FPGA的常用方法。设计者能够将SPI或者BPI Flash直接连接到FPGA, FPGA的内部配置逻辑读取来自外部Flash的比特流,然后配置FPGA本身。在配置的过程中,FPGA自动检测总线的宽度,而无需使用外部控制或者开关进行识别。较大的数据宽度增加配置的速度,减少了配置FPGA需要花费的时间。

        在主模式下,通过FPGA内的一个内部生成时钟,FPGA能够驱动配置时钟;为了更高速度的配置,FPGA也可以使用一个外部的配置时钟源。这样,允许高速的配置并且容易使用主模式的特性。FPGA配置也支持从模式,其数据宽度最多到32位,这对于使用处理器驱动的配置非常有用。此外,新的媒体控制访问端口(MCAP)提供了在PCI-E集成模块和配置逻辑之间的直接连接。这样,简化了PCI-E的配置。

        使用SPI或者BPI Flash,FPGA可以使用不同的镜像重新配置自己。这样无需使用外部的控制器。当数据发送过程中出现错误时,FPGA能够重新加载最初的设计。

17 互联资源

        互联是信号传输路径的可编程网络,这些网络分布在FPGA的各个功能元素的输入和输出,这些功能单元包括I/O块,CLB切片,DSP切片和BRAM。FPGA内的互联也称为布线,这些布线资源是分段的,用于优化功能单元之间的连接。

        UltraScale结构内的CLB切片以规则的阵列布局。每个CLB切片连接到一个开关阵列,用于访问通用的布线资源。这些布线以垂直和水平方向分布在CLB切片的行和列之间。一个类似的开关阵列连接其他资源,如DSP和BRAM   

        在UltraScale架构的FPGA内,不同长度的垂直和水平布线资源可以跨越1,2,4,5,12或者16个CLB。这样,确保信号能够很容易地从源节点传输到目的节点。因此,提供了对下一代宽总线布线(甚至是最高密度的元器件)的支持。同时,也改善了结果和运行时间。在UltraScale架构的一些FPGA元器件中,采用了堆栈硅互联(Stacked Silicon Interconnect, SSI)技术。在这些元器件内的高级逻辑区域(Super Logic Regions, SLR)之间提供了特殊的互联资源,将多个SLR组合有效地增加了列的高度和元器件的整体容量。    

相关推荐

相关文章