今天想和大家一起聊聊FPGA的IO,先说说笔者当年的入门经历吧——
国内的大学拥有FPGA开发条件的实验室并不多,当年的那帮大学同学,有的做ARM,有的做linux,但很少有人做FPGA。
当时学FPGA仅仅是出于好奇心,于是在淘宝上买了一块开发板,便开始了自己的FPGA之路。
大部分开发板的内容,主要是教学员怎样写Verilog代码,很少会对FPGA的芯片架构做出详细的说明和解读。所以,当年笔者面试的时候就碰到了一个很尴尬的事情,面试官提出的第一个问题就是“用的哪颗FPGA,内核电压是多少”。
当时笔者就懵了,虽然做了快一年FPGA,但却没有关注过芯片的内核电压……其实,熟悉FPGA的基本架构、了解FPGA的芯片内部资源真的很重要!
虽然很多FPGA工程师都是写代码的,但作为硬件编程工程师,如果不熟悉FPGA的底层资源和架构,是很难写出高质量的代码,至少很难写出复杂逻辑的高质量代码,也很难站在系统的层面去考虑芯片的选型等问题。
然而,熟悉FPGA架构,首先最主要的一点就是了解FPGA的IO。
一、FPGA的IO命名方式
FPGA芯片IO命名方式太多了,而管脚也多,这让人感觉很乱。究其原因,FPGA可以兼容多种不同的电压标准,因此也有丰富的IO。
首先,FPGA的IO物理命名规则,也就是做管脚约束时候的命名,芯片通常是长方体或者正方体,所以命名通常采用字母+数字组合的方式,从上到下是字母,从左到右是数字,所以诸如A13,如下图所示:
这是xilinx的一颗芯片示意图,其它厂商的FPGA芯片也类似。
其次,FPGA的功能命名规则。事实上,每个厂家都有自己的一套规则,但都大同小异,下面将重点讲一下xilinx的命名(xilinx的文档是行业标杆,其它FPGA厂家的资料多多少少会参考xilinx)。
通常情况下,xilinx的功能命名格式为IO_LXXY#/IO_XX。其中,IO代表用户IO,L代表差分,XX代表在当前BANK下的唯一标识号,Y=[P|N]表示LVDS信号的P或者N,#表示Bank号。
比如,在原理图中有一个IO的名字为IO_L13P_T2_MRCC_12,那么通过功能命名的规则就可以知道,这是一个用户IO,支持差分信号,是BANK12的第13对差分的P端口。与此同时,它也是全局时钟网络输入管脚(MRCC是全局时钟网络)。
再次,什么是Bank?Bank是一组物理位置和特性相近的IO的总称,同一BANK的电压的基准是一致的。因此,通常如果我们需要各种不同标准的电压,可以通过给到BANK的电压基准不同的方式来实现多种电平标准的输入输出。通常封装越大,BANK数量越多,可以支持电压标准也就越多。
如下图就是ZYNQ 7030的一个IO BANK分布图:
除了FPGA的用户IO之外,还有很多其他的功能IO,比如下载接口、模式选择接口,还有MRCC,也是前文讲到的全局时钟网络和局部时钟网路等。
而最值得关注的是FPGA的电源引脚,其中ZYNQ器件包含两套完全独立的供电系统,一套是嵌入式端的电源(PS),另一套是逻辑端的电源(PL)。这两套供电系统完全独立,因此也没有先后上电的时序需求。
通常包含的电压有:
(1)内核电压,Vccpint和Vccint分别为PS的内核电压和PL的内容电压,内核电压的大小通常和工艺相关,比如48nm XILINX器件的内核电压为1.2V,28nm的ZYNQ器件的内核电源为1.0V(通常电压都有一个范围,范围也和速度等级相关)。
当然,电压越低,在同样逻辑规模和主频下对应的功耗也会越低。
(2)Vccpaux和Vccaux分别为PS和PL的辅助电压,在ZYNQ器件中为1.8V。
(3)Vccpll为内部锁相环供电电压。
(4)Vcc_mio0为PS的MIO0 BANK的基准电压,VCCO_DDR为PS端的DDR的电压。
(5)Vccon这部分就如前面讲到的PL端的Bank基准。
对于纯逻辑的FPGA器件,由于没有PS端,因此相应的PS端供电就没有,只有PL端的供电,实现更为简单。
二、FPGA的上电时序
最后再来聊聊FPGA的上电,和所有的器件一样,FPGA的上电遵循一定的上电逻辑。
通常情况下,SRAM结构(XILINX、Altera等都属于SRAM结构)的上电时间会比FLASH结构的(Microm、Actel等)上电时间要长。有些国产FPGA为了简化BOM成本(如安路半导体),不需要用户特别关注上电时序,用单电源供电,芯片内部控制上电时序。虽然不合理的上电时序有时候也能让FPGA正常工作,但不正常的上电或掉电过程,则有可能造成瞬时电流过大,无法保证上电期间FPGAIO为三态,甚至损坏芯片,因此需要设计者特别关注上电时序。
针对XILINX FPGA的上电,通常需要遵循以下规则:
(1)在PS端,Vccpint、Vccpaux、Vccpll一起上电,后启动PS的Vcco电源(Vcco_mio0、Vcco_mio1、Vcco_ddr)。其中,PS_POR_B在上电期间应保持低电平,直到内核,辅助电压,PLL电压和BANK的电压达到相应阈值;掉电的顺序和上电顺序保持一致。
(2)在PL端,推荐的上电顺序依次为Vccint、Vccbram、Vccaux、Vccaux_io、Vcco。其中,如果Vccint和Vccbram是相同的电压,则可以采用同一电源供电,同时启动。Vccaux、Vccaux_io和Vcco为同一电压,则亦可以采用同一电源,同时启动。
除此之外,在设计FPGA的原理图中,还需特别关注Serdes的供电(不同的厂家,甚至同一厂家,不同的器件对Serdes都有不同的名称,如GTH、GTX等,但实质都是自同步的高速串行收发器,支持的速率有所差别),不使用的情况下,需要相应的悬空或者接地。
**来源:MYMINIEYE
免责声明:本文系网络转载,版权归原作者所有。如有问题,请联系删帖,谢谢!
↑↑ 扫码关注更多精彩内容
|