我从之前就关注一个工程师分享有关于FPGA的资料,陆陆续续也记录收藏了不少,这次分享给大家共同学习和进步吧
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
引言:本文我们介绍Xilinx 7系列FPGA DDR3硬件设计规则及约束,包括Bank选择、管脚位置约束、管脚分配、端接、I/O标准和走线长度。
01
—
设计规则
存储器类型、存储器数量和数据宽度受限于所选FPGA器件家族、FPGA速度等级和设计频率,频率范围取决于器件电气特性。
02
—
Bank和管脚选择
图1、DDR3 数据组连接(DCI级联从Bank)
图2、DDR3地址组连接(DCI级联主Bank)
图3、DDR3 地址/控制组连接(DCI级联从Bank)
MIG工具根据物理层规则为内存接口生成管脚分配。Xilinx7系列FPGA是为非常高性能的内存接口而设计的,使用DDR3 SDRAM物理层必须遵循某些规则。Xilinx7系列FPGA为每个DQS字节组提供专用逻辑。每个50管脚bank中有四个DQ字节组。每个字节组包括一个支持时钟输入/输出DQS对和10个相关的DQ数据I/O。在典型的DDR3数据总线配置中,这10个I/O中有8个用于DQ,一个用于数据掩码(DM),另一个用于内存接口中的其他信号。推荐用MIG工具为7系列DDR3接口生成管脚输出。MIG工具遵循以下规则:
系统时钟输入必须与内存接口位于同一列。如果可能,建议将系统时钟输入置于地址/控制组中。
CK必须连接到其中一个控制字节组中的p-n差分对。组中的任何p-n对都是可接受的,包括SRCC、MRCC和DQS引脚。
如果使用多个CK输出,例如dual rank,则所有CK输出必须来自同一字节通道。
由于DDR2和DDR3 SDRAM的专用选通连接,字节组的DQS信号必须连接到Bank中指定的DQS对。
DQ和DM(如果使用)信号必须连接到与相应DQ相关联的字节组引脚。
VRN和VRP用于支持DCI的组的数字控制阻抗(DCI)参考。
如果满足以下条件,则非字节组引脚(即HP Bank中的VRN/VRP引脚和HR Bank中的顶部/底部引脚)可用于地址/控制引脚:
--对于HP Bank,使用DCI级联,或Bank不需要VRN/VRP引脚,仅用于输出;
--相邻字节组(T0/T3)用作地址/控制字节组;
--相邻字节组(T0/T3)中存在未使用的引脚,或CK输出包含在相邻字节组中。
从die角度来看,单个接口最多可使用三个垂直Banks。
地址/控制必须位于跨三个I/O Banks的接口中间I/O bank中。所有地址/控件必须位于同一个I/O Bank中。地址/控制不能在Bank之间分割。
控制线(RAS_N、CAS_N、WE_N、CS_N、CKE、ODT)和地址线必须连接到不用于数据字节组的字节组。
复位RESET_N可连接到器件内的任何可用引脚,包括VRN/VRP引脚(如果使用DCI级联),只要满足时序和使用适当的I/O电压标准。
GUI将此管脚限制为接口所用的Bank,以优化时序,但这不是必需的。
注意:DCI级联设置详见:Xilinx FPGA时钟及I/O接口规划(二)相关章节介绍。
03
—
管脚交换(Pin Swapping)
管脚可在每个字节组(数据和地址/控制)内自由交换,但DQS对必须在支持时钟的DQS对上,CK必须在p-n对上。
字节组(数据和地址/控制)可相互自由交换。
地址/控制字节组中的管脚可在其字节组内和字节组之间自由交换。
不允许进行其他引脚交换。
04
—
控制器之间的Bank共享
内存接口中使用的Bank中的未使用部分管脚不允许与另一个内存接口共享。控制Bank中所有FIFO和相位器的专用逻辑设计为仅使用单个内存接口运行,不能与其他内存接口共享。除了MIG核心支持的双控制器中的共享地址和控制。
05
—
系统时钟、PLL和MMCM分配和约束
强烈建议PLL和MMCM时钟位于存储器接口Bank中,以满足指定的接口性能。MIG工具尽可能遵循这两条规则。唯一的例外是一个16位接口,其中可能没有多余的管脚用于时钟输入。在这种情况下,时钟输入需要从相邻的一个bank通过频率主干线(frequency backbone)到PLL。PLL的系统时钟输入必须来专用时钟I/O。
图4、系统时钟连接
系统时钟输入只能用于同一列中的接口。如果时钟来自另一列,则额外的PLL或MMCM和时钟路由将导致过多的额外抖动。
来自PLL的未使用的输出可以用作时钟输出。只能更改这些输出的设置。与整体PLL行为和所用输出相关的设置不得受到干扰。
PLL不能在接口之间共享。
06
—
DDR3 PCB布线
时钟、地址和控制线需要按照Fly-by拓扑结构布线。Fly-by是指这组线路以菊花链的方式布线,并在线路末端适当地端接。组内每个信号到给定组件的走线长度必须匹配。每个DDR的数据总线布线应尽可能的短。每个信号应尽量在单个PCB层上布线,以尽量减少由额外过孔引起的阻抗不连续性。
VREF布线
在利用MIG工具例化IP核时,会选择内部VREF或者外部VREF。
内部VREF:只用于当数据速率不超过800Mb/s的情况。
外部VREF:对于给定FPGA速度等级下的最大指定数据速率,外部VREF必须跟踪提供给DRAM和地面的VDD电压的中点。VREF跟踪可以用电阻分压器或稳压器来完成。在这些数据速率下,不应使用提供固定参考电压而不考虑VDD电压的稳压器。VREF走线需要大于最小间距,以减少与其他干扰信号的耦合。
VCCAUX_IO
VCCAUX_IO依据存储器的性能可以设置为1.8V或者2.0V。如果需要进行不同的存储器或者FPGA器件迁移,此时,VCCAUX_IO供电可以考虑设置为可调整的。
端接
图5、DDR3地址/控制信号端接
强烈建议进行信号模拟仿真(IBIS或其他)。地址(A,BA)命令(RAS_N、CAS_N、WE_N)和控制(CS_N,ODT)信号的加载取决于各种因素,例如速度要求、终端拓扑、无缓冲DIMM的使用和多列DIMM,并且可能是达到性能目标的一个限制因素。
在1333Mb/s及更高速度下运行,单端走线需要控制在40Ω,并且需要进行端接处理。低于1333Mb/s时,50Ω是可接受的。图6和图7适用于1333 Mb/s及更高速率的情况。
图6、40Ω端接到VTT
图7、80Ω分立端接到VTT
在1333Mb/s及更高速度下运行时,差分信号走线阻抗需要控制在80Ω,并且进行端接处理。低于1333Mb/s时,100Ω是可接受的。图8适用于1333Mb/s及更高速率。
图8、80Ω差分端接
对于CK_P/CLK_N差分时钟,推荐端接方案如图9所示。
图9、CK时钟端接
使用VTT电源时,必须小心管理来自端接的高频电流。建议每四个端接使用一个1μF旁路电容,每25个端接使用一个100μF旁路电容。
地址和控制信号(A、BA、RAS、CAS、WE、CS、CKE、ODT)将通过板载DIMM终端终止。如果不存在DIMM终端或正在使用组件,则应在线路远端使用40Ω的上拉至VTT(图6)。除了需要差分端接的CK/CK_N,如图1-93所示。
可以使用VCCO的80Ω分立式端接和GND的80Ω端接(图7),但需要更多的功耗。对于双向信号,需要在信号的两端端接。
ODT应该在内存端使用。为了在HP bank中获得最佳性能,应该使用DCI。为了在HR banks中获得最佳性能,IN_TERM(内部端接)需要使用。
差分信号
应使用存储设备内部终端或负载处的80Ω差分终端进行端接(图8)。对于双向信号,需要在信号的两端端接。
ODT应该在内存端使用。为了在HP bank中获得最佳性能,应该使用DCI。为了在HR banks中获得最佳性能,IN_TERM(内部端接)需要使用。
所有端接必须尽可能靠近负载。端接可以放置在负载之前或之后,前提是终端放置在负载引脚的小距离内。可通过模拟确定允许距离。在FPGA上需要DCI(HP bank)或IN_TERM(HR bank),以满足指定的性能。
复位信号不需要端接。在内存初始化过程中,该信号应被拉低,并将一个4.7 kΩ的电阻器连接到GND(如图5所示)。
ODT端接是必需的,它在存储器内部进行端接。应使用MIG工具指定存储器系统的配置,以便正确设置模式寄存器。
如果DM不是由FPGA驱动的(未使用数据掩码或禁用数据掩码的情况),则应将DM拉至GND。在这种情况下,用于DM的下拉电阻器的值不应大于
ODT值的四倍。
走线长度
该部分描述的走线长度要求主要用于高速操作。当决定有效走线长度时应考
封装延迟,同一封装内的不同部分会有不同的内部走线偏移(延迟)。
使用Vivado Design Suite生成封装长度。以下命令生成一个csv文件,其中包含所考虑器件的每个管脚的封装迟值。
link_design -part
write_csv
例如,要获取7系列FPGA xc7z035ffg676-2的封装延迟信息,在Vivado Tcl控制台依次输入以下命令:
link_design -part xc7z035ffg676-2
write_csv flight_time
这将生成一个名为flight_time.csv在当前目录中包含每个pin的封装走线延迟信息。在对DDR3 SDRAM接口应用特定的走线匹配准则时,对于整个电气传播延迟,应该考虑这个额外的封装延迟时间。
图10、封装走线延迟文件flight_time.csv
当在同一封装中不同尺寸的芯片之间迁移时,同一封装管脚可能会有不同的延迟。每个器件的延迟值都必须考虑在内,并且每个引脚都应该使用延迟中值。否则,可能会降低目标器件的最大性能。
DDR3 SDRAM信号之间最大电气延迟如下:
任何DQ或DM与其相关DQS/DQS之间的最大电气延迟必须≤±5ps。
任何地址和控制信号与相应的CK/CK#之间的最大电延迟必须≤±25ps,8ps是最佳目标。
CK/CK信号必须在DQS/DQS信号之后到达每个存储器件。CK/CK与DQS/DQS之间允许的偏差范围必须在0到1600ps之间。对于组件/UDIMM,CK/CK和DQS/DQS之间的建议偏差为150ps到1600ps,RDIMM为450ps到750ps,根据此要求进行设计时,必须考虑从FPGA到DIMM上的内存组件的总CK/CK和DQS/DQS传播延迟。
CK/CK必须在DQS/DQS之后到达每个内存组件,以确保校准可以将DQS/DQS与正确的CK/CK时钟周期对齐。如果违反此规范,则会发现写入校准失败。
如果存储器接口未在最大频率下运行,则可以增加指定的DQ到DQS偏移限制。表1显示了这些情况下的最大余量值(±)。纵轴是以Mb/s为单位的比特率。
表1、DQ和DQS走线最大偏移
例如,如果FPGA -3等级速度器件,DDR3速率可达1866Mbps,当使用DDR3存储器以1600Mbps速度运行时,则根据表,DQ和DQS的偏差极限值为±31.3ps,如果接口以1066Mbp速率运行,则偏差极限值为±150ps。
类似地,如果存储器接口没有以最大频率操作,则可以增加指定的CK到地址/控制时序偏差限制。表2显示了这些情况下的余量极限(±)。
表2、CK和地址/控制信号走线最大偏移
例如,如果FPGA -3等级速度器件,DDR3速率可达1866Mbps,当使用DDR3存储器以1600Mbps速度运行时,则根据表,CK和地址/控制信号的偏差极限值为±94.1ps,如果接口以1066Mbp速率运行,则偏差极限值为±150ps。
另外,I/O Bank内不同字节组内偏移应≤1ns。
06
—
I/O标准配置
XDC约束文件包含时序、管脚和I/O标准信息。系统时钟约束设置接口的工作频率,并通过MIG GUI进行设置。如果需要更改,则必须重新运行它,因为其他内部参数会受到影响。例如:
create_clock -period 1.875 [get_ports sys_clk_p]
clk_ref约束设置IDELAY参考时钟的频率,通常为200 MHz。例如:
create_clock -period 5 [get_ports clk_ref_p]
图11、DDR3 I/O约束
MIG工具根据所选的数据速率和电压输入设置VCAUX_IO约束,如图11所示。
这些规则适用于DDR3 SDRAM的I/O标准选择:
MIG工具生成的设计使用SSTL15_T_DCI和DIFF_SSTL15_T_DCI标准,用于HP Bank中的所有双向I/O(DQ、DQ)。在HR Bank中,该工具使用SSTL15和DIFF_SSTL15标准,并在GUI中选择内部终端(IN_TERM)属性.
SSTL15和DIFF_SSTL15标准用于单向输出,如控制/地址等;
LVCMOS15用于驱动至DDR3存储器的复位信号RESET_N。
07
—
存储器通用布线规则
在确定信号走线长度时,在布线约束中包括封装延迟。当封装延迟的最小值和最大值可用时,使用最小值和最大值之间的中值。
同一字节(Byte)中的DQ和DQS信号应在同一层从FPGA布线至DRAM,扇出区域除外。
对于Fly-by布线,地址、命令、控制和时钟信号可以在不同的层上布线任何信号层交换过孔都需要在50mil周长范围内有一个接地过孔。
确保存储器ODT设置与传输线阻抗匹配。
系统时钟推荐设计如图12所示。
图12、系统时钟推荐设计
信号线必须参考连续参考平面布线,避免跨分割层布线(图13)。
图13、信号跨分割层布线
使布线至少与参考平面保持30mil的距离,并离板边一定距离。
在扇出区域中,通路空隙孔中间的布线信号线。避免在通孔空隙边缘布线。
图14、扇出区域布线
使用V字形布线,以允许使用地缝过孔。
图15、地缝过孔
在器件边缘和器件内部尽可能多地添加接地过孔,为信号和电源提供更好的接地回路,尤其是角落。
11.对于ADDR/CMD/CTRL VTT终端,每四个终端电阻器应配备一个1.0μF电容器,在电阻器之间物理交错。
图16、ADD/CMD端接布局
为了优化信号路由,图17中给出了一个组件布局的建议。
图17、DDR优化布局
图18、5片DDR优化布局
文章评论(0条评论)
登录后参与讨论