zynq7030参数


今天想和大家聊聊 FPGA的IO。

回想起我入门的经历,当时国内拥有FPGA开发条件的实验室并不多见。那时,我的同学们有的专注于ARM,有的钻研linux,而FPGA对我来说只是一种强烈的好奇心驱使下的探索。于是,我在淘宝购买了一块开发板,开始了我的FPGA之旅。

在大多数开发板的教学中,主要关注如何编写Verilog代码,而对于FPGA的芯片架构则鲜有详细说明。我在面试时曾遭遇尴尬,面试官询问关于FPGA的型号和内压,我瞬间懵圈。尽管已从事FPGA工作近一年,我从未关注过芯片的内压。

熟悉FPGA的基本架构,了解FPGA的芯片内部资源是至关重要的。

尽管许多FPGA工程师主要编写代码,但作为硬件编程工程师,如果不熟悉FPGA的底层资源和架构,很难编写出高质量的代码,尤其是复杂逻辑的高质量代码。在系统层面考虑芯片选型等问题也会变得困难。那么,熟悉FPGA架构的首要一步就是了解其IO。

FPGA的IO命名方式多样,引脚众多,容易让人感到混乱。以我的经验为例,经常能听到诸如A13、B14、BANK34、BANK12、MIO0、EMIO等命名。但这就是FPGA的特点,它兼容多种电压标准,拥有丰富的IO。

我们来谈谈FPGA的IO物理命名规则,即进行引脚约束时的命名。芯片通常呈长方体或正方体,因此命名通常采用字母加数字组合的方式。从上到下是字母(A、B、C、D等),从左到右是数字(1、2、3等)。以A13为例(如图所示),这是xilinx的一颗芯片示意图,其他厂商的FPGA芯片也有类似命名方式。

接着是FPGA的功能命名规则。每个厂商都有自己的一套规则,但大体相似。这里重点讲述xilinx的命名规则(xilinx的文档是行业标杆,其他FPGA厂家的资料或多或少都会参考它)。xilinx的功能命名格式通常为IO_LXXY/IO_XX。其中:

(1)IO代表用户IO;

(2)L代表差分,XX代表当前BANK下的唯一标识号,Y=[P|N]表示LVDS信号的P或N;

(3)表示Bank号。

例如,原理图中有一个IO的名字为IO_L13P_T2_MRCC_12,通过功能命名规则我们可以知道,这是一个支持差分信号的用户IO,属于BANK12的第13对差分的P端口,同时也是全局时钟网络输入管脚(MRCC是全局时钟网络)。

再来谈谈什么是Bank。Bank是一组物理位置和特性相近的IO的总称。同一BANK的电压基准是一致的。通常如果我们需要不同标准的电压,可以通过调整BANK的电压基准来实现多种电平标准的输入输出。通常封装越大,BANK数量越多,支持的电压标准也越多。如图所示为ZYNQ 7030的IO BANK分布图。

除了用户IO外,FPGA还有其他功能IO,如下载接口、模式选择接口等。其中最值得关注的是FPGA的电源引脚。例如ZYNQ器件包含两套完全独立的供电系统:嵌入式端的电源(PS)和逻辑端的电源(PL)。两套供电系统完全独立,因此没有上电时序需求。具体来说,通常包含的电压有:内压(与工艺相关),辅助电压(如PS和PL的辅助电压),内部锁相环供电电压等。针对XILINX FPGA的上电通常需要遵循一些规则。在设计FPGA原理图中还需要特别关注Serdes的供电问题以及其他细节问题。