最近的一个项目需要同时采集多个传感器的数据并实时分析成像,很显然使用常规的CPU无法满足要求,这种并行实时采集处理大量数据的需求在大部分情况下都需要FPGA来实现。结合项目需求和市场调研,最后公司决定使用赛灵思的XC7A200T,确立芯片型号后就开始学习该系列FPGA的硬件设计了。
-
FPGA中BANK的概念
可编程输入/输出单元简称I/O单元,是芯片与外界电路的接口部分,完成不同电气特性下对输入/输出信号的驱动与匹配要求。FPGA内的 I/O 按组分类,每组都能够独立地支持不同的I/O标准。通过软件的灵活配置,可适配不同的电气标准与I/O物理特性,可以调整驱动电流的大小,可以改变上、下拉电阻。
为了便于管理和适应多种电器标准,FPGA的IO被划分为若干个组(bank),每个bank的接口标准由其接口电压VCCO决定,一个bank只能有一种VCCO,但不同bank的VCCO可以不同,只有相同电气标准的端口才能连接在一起。在进行I/O资源分配时首先要知道这款FPGA芯片的bank个数及分布,不同的BANK支持的电压范围也不一样。
Xilinx 7系列每个用户Bank包括50个I/O管脚或者24个差分对管脚(48个差分信号),顶端和底端各一个单端管脚。
在上图中,绿色圈住的_CC时钟引脚不用作时钟输入时可作为用户I/O来使用;当该Bank I/O作为DDR内存接口时,蓝色标记的VREF管脚需要提供伪差分所需的阈值电压,此时_VREF_管脚需要接DDR外设要求的参考电压。
Bank0专用于配置芯片功能配置。
GTX(GTP、GTH、GTZ)::这四个是Xilinx 7系列FPGA全系所支持的GT,GT的意思是Gigabyte Transceiver,G比特收发器。通常称呼为Serdes、高速收发器,GT,或者用具体型号(例如GTX)来称呼。可以把它们理解为高速并串转换器(串行速率可达几十G),把你给它的并行数据,转换为串行输出,或者给它串行数据,它会给你转换为并行数据。它可以单独作为发送装置或接收装置,也可以一起运行。它们也经常用来配合其他IP核,实现协议通信。GTx主要负责物理层(Physical Layer)数据的发送和接收,包括一系列的物理层任务,如信号的串行化和解串行化、编码和解码、时钟恢复等。它还支持以下的协议:
7系列中,按支持的最高线速率排序,GTP是最低的,GTZ是最高的。GTP被用于A7系列,GTZ被用于少数V7系列。从K7到V7,最常见的是GTX和GTH。GTH的最高线速率比GTX稍微高一点点。GTX和GTH的文档都是UG476。
7系列FPGA通常按照bank来分,对于GTX的bank,一般称为一个Quad,原因是一个bank中有4个独立的GTX通道,如上图。每个通道称呼为Channel。所以在GTX的代码中可以看到Channel这个底层原语。每个Quad拥有两个参考时钟Pin。
-
FPGA的电源设计
-
VCCINT为FPGA内核供电引脚,接1.0V;
VCCBRAM为FPGA Block RAM的供电引脚,接1.0V;
VCCAUX为FPGA辅助供电引脚, 接1.8V;
VCCO为FPGA的各个BANK的电压,包含BANK0,BANK13~16, BANK34~35,电压根据外设而定;
VMGTAVCC为FPGA内部GTP收发器的供电电压,接1.0V;
VMGTAVTT为GTP收发器的端接电压,接1.2V。
-
FPGA的时钟
时钟输入管脚:用户时钟必须通过专用时钟的差分引脚输入FPGA,专用时钟引脚输入的信号可以对FPGA内部全局、区域时钟资源进行专用高速访问,时钟信号不能通过通用IO进入FPGA。每个I/O bank包括50个I/O引脚,在每个I/O bank的50个I/O引脚中,有四个支持时钟的输入引脚对CC (总共8个引脚),2对MRCC和2对SRCC时钟管脚。
每个支持时钟的输入管脚可以连接到PCB上的差分或单端时钟,单端时钟输入必须分配给支持时钟的输入差分引脚对的P端。如果单端时钟连接到差分时钟引脚对的P端,则N端不能用作另一个单端时钟引脚,只能用作用户I/O。时钟输入管脚也可以被用作任何I/O标准(包括差分I/O标准)的通用IO使用。
SRCC可访问一个局部时钟和全局时钟树,以及同一列的CMT,SRCC可以驱动同一个时钟区域内的局部时钟线BUFR,BUFH,BUFIO,同一个或相邻时钟区的CMT,BUFG。MRCC可以访问多个时钟区和全局时钟树,MRCC可以驱动多个时钟区缓冲器来访问多达3个时钟区。
FPGA的配置
FPGA配置在BANK0,主要配置上电时的启动方式,比如从主机接收配置数据或者读取外部存储器的配置数据,主流方案是外挂SPI Nor Flash。
FPGA的上电启动过程:
最后贴上我画的FPGA系统框图和电源树。
系统框图
电源树