为什么要介绍FPGA板子的资源问题,其实了解这个很有必要,并不是无用的理论知识,在我工作中发现,如果你不了解FPGA板子的构成,在Vivado的Pr过程中报出来的错误,你就根本就不能理解,更无从解决。
这里介绍的19P是Xilinx公司下Virtex UltraScale+系列,具体芯片型号是XCVU19P-FSVA3824,具体这个名字是什么含义,可以自行去查。只要是板子用到的这个芯片,不管你是什么公司的什么板子,都可以叫VU19P,简称19P的板子。
Virtex UltraScale+是Xilinx在2016年推出的16nm的工艺制程,2019年8月22日,赛灵思公司(Xilinx, Inc.)宣布推出全球最大容量的 FPGA-Virtex UltraScale+VU19P,从而进一步扩展了旗下 16 纳米 (nm) Virtex UltraScale+产品系列, 宣称VU19P拥有 350 亿个晶体管,有史以来单颗芯片最高逻辑密度和最大I/O 数量,用以支持未来最先进 ASIC 和 SoC 技术的仿真与原型设计。VU19P的真正上市使用是在2020年秋季。
19P采用的是SSI(Stacked Silicon Interconnet,堆叠硅片互联)技术,整个芯片包括4个SLR(super Logic Region,又称为die),分别是SLR0~3,可以用如下命令:
get_slrs 或者加上芯片的型号
get_property SLRS [get_parts xcvu19p-fsva824-2-e]
获得这个板子的SLR信息如下图:
这4个SLR被并行放置在1个硅中介板上面,注意在19P中这4个SLR的内部结构是不一样的,其中有SLR1是Master SLR(这个是不定的),它用于配置FPGA电路,DNA_port和EFUSE_USER只存在master SLR中。可以用命令:
get_slrs –filter IS_MASTER
获取谁是master SLR,如下图:
每个SLR又是由5x9=45个CR(Clock Region时钟区域)构成,可以用如下命令查询:
get_clocks_regions –of [get_slrs SLR0] 如下图:
每个CR又是由很多tile构成,每个tile是由一个或多个同类型的site构成或者SLICE构成,tile还包括可编程互连的资源,SLICE的内部资源主要是LUT和FF(也被称为bel),site是指SP48,BlockRAM和UltraRAM等。这部分太细的东西一般用不上,就不再赘述,可以仿照上面的命令去研究。
每个SLR之间是通过SLL(Super Long Line)连接的,SLL是SLR之间专用的也是唯一的布线资源。可以用命令查看die之间的SLL
get_property NUM_TOP_SLLS [get_slrs SLR0]
可以看到,在19P的SLR之间的SLL有23040根线,这就要注意如果SLR之间的连线超过了这个数据,在Vivado PR的过程中就会报错,之前的bug中有讲过。
在19P中LUT的资源是408W,DSP的资源是3840个,I/O的资源有2072,BUFG有1936,Blockrom有2170,Buffer有1936。你可以报告资源的利用率去查看。根据我的FPGA的经验来看,LUT、DSP和BROM任意一个超过80%,就会出现拥塞的危险,假如有一个超过了80%一点,另外的也要低于80%,平均要低于80%,才有可能走得下去。当然这是在代码优化的很好的情况下。如果不是都是代码优化高手,最好都保持在70%以下的资源利用率,如果超出可以看前面的文章用约束去平衡各个资源的占比。