1.V6芯片管脚类型
以Virtex-6 LXT系列FPGA为例,V6芯片的用户管脚可以分为普通IO和高速SERDES IO。每个V6 LXT系列的FPGA至少包含三列普通IO和一列高速SERDES IO,某些大芯片会有最多四列普通IO。本文主要总结普通用户IO的排布。普通IO以BANK为单位分布在芯片内,每个BANK包含40个IO,芯片大小不同,包含的BANK数也不相同。三列(最多四列)普通IO根据相对于芯片中间列(时钟管理模块与FPGA 配置模块)的位置,分为左中间列、右中间列、左外侧列、右外侧列。由于V6特殊的时钟结构的缘故,左中间列和右中间列的IO BANK能跑到的时钟频率要比左外侧列以及右外侧列高。另外,在一个BANK内,40个IO组成20个差分IO对。在普通用户IO中,有一部分IO是多用途的。在每个BANK中有两个VREF、一组VRP和VRN、四个区域时钟输入管脚等多用途IO,在不作为特殊功能管脚使用时,可以用作普通用户IO。另外,在24BANK和34BANK有一些管脚是配置相关的,使用受限。整个芯片还有8对全局时钟输入管脚。
2.全局信号管脚的选择
对于芯片内的一些全局性质的信号,如全局时钟输入、复位信号输入、重加载SPI FLASH接口、LED指示灯以及一些零散的低速信号,其特点是管脚数量少,彼此相关的一组总线IO个数不多,排布比较灵活。而且此类信号的电平都是2.5V,可以集中在同一个BANK。而对于V6芯片,由于BANK24和BANK34拥有不少多用途管脚,特别是BANK24,包括一些配置管脚,即使不作为配置管脚用,使用也是受限的,不适合排布一组很宽的总线。因此BANK24比较适合放置此类全局信号。
3.SDRAM接口类IO的排布
当芯片内使用DDR3以及QDRII+之类的高速接口时,管脚必须严格按照相应手册来排布。如果管脚比较充裕,尽量使用CORE Generator给出的排布结果;如果管脚比较紧张,可以通过使用DCI级联之类的手段,省出管脚,然后按照排布规则,部分管脚进行调整位置。如对于DDR3,可以将数据总线以8比特为一组,再结合DQS和掩码位,作为一个整体进行移动,移动的过程要保证区域时钟输入要从专用的区域时钟输入管脚输入。并且要按照手册的要求,保留若干必要的区域时钟输入管脚供内部使用。如果不同的器件接口电平标准一致,也是可以放在同一个BANK之内的,只要每个器件的各种总线之间满足对应的要求。对于使用DCI级联的BANK,BANK之间必须是连续的。由于中间两列IO的时钟性能要比外侧的IO列好,所以优先使用中间列的IO作为DDR3以及QDRII+的管脚;如果必须使用外侧IO作为此类高速接口的管脚,CORE Generator给出的一些最基本的原则要满足,然后在降频使用。外侧IO列的时钟性能在300M以下是可以保证没有问题的。因此,对于TCAM之类的SDR接口,工作时钟小于300M,完全可以排布在外侧IO列中。
无论是何种外挂高速芯片,基本的排布原则是:时钟控制类的作为一组,最好放置在中间列,其余总线内部尽量放在同一BANK或者同一列,且在同一个区域时钟BUFR的覆盖范围内。
3.从硬件布局上的考虑
如果芯片外接DDR3、QDRII+之类的大面积芯片,管脚布局除了要保证芯片内部走线顺畅满足时序之外,还要保证外挂芯片在外部的合理布局。以博主曾经做过的一个项目为例,FPGA的外挂芯片包括两片DDR3 SODIMM,三片QDRII+和一片TCAM,由于DDR3 SODIMM面积较大,所以必须将两片DDR3 SODIMM分布在FPGA的上下侧。在内部分配管脚的时候,就是将两者的管脚分布排在FPGA的上下两个区域,从FPGA的封装上看,分布在芯片内部上半部分的BANK的PAD也分布在芯片外部的上半部分。同样,也需要将三片QDRII+的管脚分布在芯片内部的左右IO列,这样子在板卡上三片QDRII+芯片就也分布在FPGA的左右两侧了。 |