LATTICE(莱迪思)DDR/DDR2/DDR3分立存储器设计规则(20170801更新)

1. DDR/DDR2/DDR3 SDRAM接口概述

DDR SDRAM接口通过时钟上升沿、下降沿传输数据。DDR2是DDR2 SDRAM的第二代,DDR3就是第三代。
DDR/DDR2/DDR3接口通过DQS(Data Strobe Signal)实现高速数据采样。比较典型的应用是每个DQS组包括8bit DQ数据线。实现一个16bit DQ接口就需要2个DQS,每个DQS对应8个DQ。 DQ、DQS都是双向信号,完成对memory存储器的读写操作。同样的,DDR/DDR2/DDR3 SDRAM在写操作时还需要一个数据掩码信号DM,当DM为高时表示当前周期写入的数据是无效的。DM对应一组8bit DQ,是单向的,读操作时不需要这个信号。

LATTICE(莱迪思)DDR/DDR2/DDR3分立存储器设计规则(20170801更新)图1
LATTICE(莱迪思)DDR/DDR2/DDR3分立存储器设计规则(20170801更新)图2

FPGA读取memory数据时,读数据与DQS是边沿对齐的。DQS移相90°后就可以采样DQ数据了。写memory操作时,DQS与DQ是中间对齐的。FPGA提供一对差分时钟给memory器件。读操作时,memory内部的DLL利用这个时钟产生了读DQS。下图描述了DQ与DQS的读写操作关系。

LATTICE(莱迪思)DDR/DDR2/DDR3分立存储器设计规则(20170801更新)图3

在读操作开始时DQS有效前,有一个前导期,就是从三态到低电平的这段时间。相对应的,读操作结束时,DQS从低电平跳变到三态的这段时间被称为后导期。这些都是为了保证读数据的正确采样。

LATTICE(莱迪思)DDR/DDR2/DDR3分立存储器设计规则(20170801更新)图4

DDR/DDR2/DDR3 SDRAM采用不同的电平标准。DDR接口采用单端DQS。DDR2采用单端或者差分DQS信号,当线速率比较大时建议使用差分信号,当线速率大于533Mbps时就必须使用差分信号。而DDR3是采用差分DQS。如下图所示。
另外,由于DDR3采用了穿越(fly-by)拓扑结构,DDR3 控制器需要支持读写调平(write/read leveling)功能以调整读写操作过程中由于穿越结构所导致的延迟。

LATTICE(莱迪思)DDR/DDR2/DDR3分立存储器设计规则(20170801更新)图5

2. DDR/DDR2/DDR3 SDRAM设计规则

对于使用莱迪思器件设计实现DDR/DDR2/DDR3 SDRAM需要遵循一些设计规则,这是由DDR/DDR2/DDR3 SDRAM器件以及FPGA特定结构决定的。比方说输入参考时钟,DQS、DQ、 DM、 CK、地址、命令管脚位置的选择,电平标准,匹配方式等等。我们还会介绍一些PCB layout方面的注意事项。这些规则有些是可选的,有些是一定要遵循,不可违背的。
需要说明的是,如果DDR2运行在533Mbps以下则参照DDR的设计规则,如果运行在533Mbps以上达到800Mbps则参照DDR3的设计规则。无论是那种速率标准DDR2的电平依然是LVTTL18。

2.1 Pinout设计规则

对于莱迪思器件为了保证DDR/DDR2/DDR3 SDRAM接口的最佳特性,使用专用管脚来实现。因此以下设计规则是必须满足的。
强烈推荐客户在完成PIN脚锁定后在画原理图之前使用lattice的软件进行评估是否满足要求。
当完成PCB LAYOUT后确保管脚锁定跟软件评估前没有变化,如有变化请更新管脚锁定重新采用软件评估。

2.1.1 DDR Pinout设计规则

  • DQ(通常为8bit)、DQS必须在同一个DQS组内。
  • DM必须与DQ、DQS在同一个组内,且DM[0]对应DQ[7:0],DQS[0],依次类推。
  • DQS必须使用专用引脚,对于DDR2如果采用差分DQS则DQS#管脚会被使用。第一,硬件上需要做相应连接,第二在源码端口信号列表里不需要指定这个信号,只要指定P端即可。软件会根据约束属性(SSTL18D)自动分配DQS#。这也就意味着DQS#不可以用作其他用途。
  • 由于兼容性问题,DQS/DQS#不可以用作其他DDR功能。
  • PLL输入时钟必须使用专用时钟资源(PLL 专用输入,PCLK),输入时钟必须是差分的。ECP5必须要遵守这个规则。ECP3可以使用其他时钟资源(serdes时钟等)、甚至是单端时钟资源。
  • 数据信号(DQ/DQS/DM)可以位于芯片左侧,右侧以及上部。
  • 在芯片下部的bank6和bank3也可以实现地址、命令以及其他控制信号。这样可以节省出比较多的管脚资源实现DDR功能。
  • 对于使用了DQ数据的bank, VREF1不能用作其他用途。VREF2(ECP3)是可以用作普通引脚的,但是不能将VREF1和VREF2进行连接。
  • 对于DDR,需要在memory一侧对DQ/DQS/DM加匹配电阻上拉到VTT。推荐仿真来确定阻值。如果不具备仿真条件,可以使用75欧姆的并联匹配电阻。
  • 对于DDR/DDR2,需要对命令,地址以及其他全部控制线(包括ODT在内)在靠近FPGA侧加串阻匹配,以增强信号完整性,降低对memory的过冲影响。如果不具备仿真条件,一般采用33欧姆的电阻。
  • XRES不可以用作其他用途,连接时尽量靠近FPGA。
  • 如果条件允许,推荐在靠近FPGA(ECP3)侧对DQ以及DQS加上拉到VTT的匹配电阻。因为FPGA并不支持内部匹配。但对于ECP5器件内部是集成了这些端接电阻的,并不需要外部匹配电阻。

2.1.2 DDR3 Pinout设计规则

  • DQ(通常为8bit)、DQS必须在同一个DQS组内。
  • DM必须与DQ、DQS在同一个组内,且DM[0]对应DQ[7:0],DQS[0],依次类推。
  • DQS必须使用专用引脚,对于DDR2如果采用差分DQS则DQS#管脚会被使用。第一,硬件上需要做相应连接,第二在源码端口信号列表里不需要指定这个信号,只要指定P端即可。软件会根据约束属性(SSTL15D)自动分配DQS#。这也就意味着DQS#不可以用作其他用途。
  • 由于兼容性问题,ECP3 DQS/DQS#不可以用作其他非DQS的DDR功能。当单端使用时可以用作RST#。如果DDR功能不被使用,可以用作其他用途。ECP5 的DQS组内信号如果除了DQ、DM外还有剩余是可以被共享的,也就说可以用来做地址、控制命令信号,或者说可以用来做其他信号,只要电平匹配,但是原则上我们为了确保DDR3的信号完整性、EMI等,只有在不得已情况下才进行DDR3相关引脚的共享。
  • PLL输入时钟必须使用专用时钟资源(PLL 专用输入,PCLK),必须是差分可以是LVDS25D也可以是LVTTL15D电平。
  • 数据信号(DQ/DQS/DM)只能位于芯片左侧,右侧。因为top side不含有2x的变速箱。
  • 地址,命令,控制信号(包括ODT在内)以及CK必须使用含有ODDRXD功能的管脚,可以放置在左右两侧以及上侧,不能位于下侧,因为下侧不含有通用DDR管脚。CK/CK#需要跟DQ/DQS在同一 侧。如果频率大于300Mhz则CK/CK#不能放在上侧。
  • RST#是DDR3设计中唯一的SDR信号,可以放置任何位置,但必须满足LVCOM15电平要求。
  • PLL输入必须使用专用引脚,当然PCLK也是可以的,但并不推荐使用PCLK。这里要注意的是,FPGA(ECP3)的每一侧有2个PLLL可以直接连接到ECLK用于实现DDR3功能。而对于ECP3-17EA每侧仅有一个PLL支持DDR3。
  • 对于使用了DQ/DQS/DM数据的bank, VREF1不能用作其他用途。VREF2(仅ECP3拥有VREF2)是可以用作普通引脚的,但是不能将VREF1和VREF2进行连接。
  • 如果使用外部VTT匹配,则FPGA(ECP3)的VTT管脚不需要连接到VTT电源上。一般情况下,FPGA(ECP3)内部匹配是不推荐使用的。ECP5器件推荐使用FPGA内部匹配电阻。
  • 对于DDR3,不能在memory一侧对DQ/DQS/DM加匹配电阻,因为memory内部有动态控制的ODT来改善信号完整性。但是在靠近FPGA(ECP3)侧则需要对DQ/DQS上拉到VTT的外部匹配,用以改善读操作时的信号完整性,该终端匹配电阻值一般推荐为100-120欧姆。两侧的VTT电源是同一个。有DM写单向的,此时不需要对DM进行任何匹配。需要强调的是不需要在FPGA源端做串联匹配。ECP5有片上ODT,不同于ECP3.
  • 对于DDR3,需要对命令,地址以及其他控制线(包括ODT在内)在靠近FPGA侧加串阻匹配,以增强信号完整性,降低对memory的过冲影响。如果不具备仿真条件,一般采用20或者15欧姆的串阻。如果DDR3 memory靠近FPGA那么串阻是可以不加的。在靠近memory侧需要加终端并联匹配电阻上拉到VTT(REST#可以不加上拉匹配),阻值为50欧姆。如果使用了穿越结构,则只需要在最末端memory加终端匹配。对于该终端上拉匹配如果PCB实现困难的情况下也是可以省略的,但是在Memory与FPGA相隔比较远的情况下源端串阻不可缺少。
  • 对于输出给memory的CK必须是差分时钟,电平为SSTL15D。通常都是在靠近memory一侧跨接100欧姆的电阻。如果采用fly-by结构,则在末端memory添加该匹配。不可以在CK/CK#上添加任何的串阻匹配。
  • XRES不可以用作其他用途,连接时尽量靠近FPGA。且附近避免高翻转信号。
  • FPGA与DDR3的VREF之间需要做0欧姆的隔离。
  • FPGA的VCCIO 1.5v供电与DDR3 memory VDD供电1.5v需要隔离。
  • FPGA侧DQ\DQS的VTT与DDR3 memory侧的控制、地址线上的VTT是同一个电源。
  • VTT与VREF建议使用不同的电源。VTT负荷比较大,建议使用专用电源模块。VREF基本没有负载,1.5v电阻分压即可。
  • 如果FPGA左右两边有不同的Memory组,建议采用VTT,Vref隔离,而不要统一采用一个VTT或者Vref。
  • 隔离后的电源附近最好用2个电容进行滤波,比如一个1uf, 一个22uf。

2.1.3 DDR3 PCB设计规则

  • PCB走线应该满足50欧姆的阻抗
  • DQ、DM和DQS需要采取相同的布线原则,包括相匹配的过孔数量。每条信号线从FPGA到Memory过孔的数量尽量不要超过3个。
  • 每个DQS组内的DQ、DM之间的布线长度差异最大为±50mil。
  • 所有的数据线都要参考同一个地平面
  • FPGA与Memory参考电源或者地平面应该是连续的,不应该出现线宽突变等情况。
  • 在数据线与其他不相关信号之间采用3 W原则以避免不必要的串扰。
  • 同一个DQS组内的数据信号DQ和DM是可以相互替换的,以满足布局布线的要求,DQS的P/N脚不可以交换。但是DQS组之间不可以交换任何管脚位置。
  • LDQS/LDQS_N与UDQS/UDQS_N之间的布线长度误差在±100mil范围内。
  • 差分DQS与DQS_N之间的布线长度差异在±10mil范围内。
  • 地址和控制线相对于时钟走线的误差需要在±100mil范围内。
  • 差分CK与CK_N之间的布线长度差异在±10mil范围内。
  • CK/CK_N、命令,地址控制线与DQS/DQ之间的规则为:若为非flyby结构,16bit为前者长于后者1500mil;32bit为第一组16bit长于后者1500mil,第二组长于后者2000mil;64bit分别为1500,2000,2500,3000mil。若为flyby结构,时钟、地址和命令等控制线要长于DQS/DQ至少2000mil。16bit情况下为长2000mil;32bit为2000mil,3000mil;64bit为2000mil,3000mil,2000mil,3000mil。虽然ECP5的PLL带有双向移相功能,但是IP在实现write leverling时仅做了delay(后向)方向,所以这一点是跟ECP3一样的,也就是说,CK/CK_N、命令、地址控制线也要长于DQS/DQ。关于上述距离,根据实际PCB布线情况,可能很难达到2000mil这样的要求,但最小距离差要500-600mil(针对16bit情况)。针对32bit情况,要满足600mil,1200mil。
  • 地址以及控制线的最佳参考平面是地。当然如果没有地平面参考电源平面也是可以的。但最好不要参考不同的平面。
  • 地址与控制线最好与DQ、DQS和DM在不同的层走线,以减少串扰的发生。
  • CLK/CLKN差分时钟的匹配电阻尽量靠近Memory。
  • FPGA的DDR3输入参考时钟ref_clk的匹配电阻尽量靠近FPGA
  • 如果存在多组DDR3控制器,推荐多组之间的地址和命令在Memory之后采用穿越结构,匹配距离Memory要小于600mil。
  • 对于FPGA侧DQ、DQS的终端匹配电阻,推荐采用穿越结构(匹配电阻位于memory与FPGA之间靠近FPGA,相当于匹配电阻与FPGA之间采用了flyby拓扑结构,经过匹配电阻终结于FPGA)。不推荐stub拓扑结构,如果采用stub拓扑结构(从Memory到FPGA之间没有匹配而是从FPGA管脚再拉一根线到匹配电阻),那么距离FPGA最远的距离不要超过600mil。
  • 避免相邻层之间并行走线,特别是避免上层走线直接位于下层走线上侧。也就是说两层之间交叉走线。可以避免不必要的串扰产生。
  • 同层不同组信号之间的走线也要避免平行,如不能避免尽量增加组间线间距。

    需要强调的是这里我们只是针对分立的DDR memory进行的说明。DIMM DDR memory相对分立器件来说不同点在于DIMM上自身带有诸多的匹配电阻,因此在Memory一侧不需要加任何匹配,只需要在FPGA侧加源端串阻以及终端并阻即可。详细请参见TN1180。

如遇IP更新等情况,本规则有些条目可能不再试用,恕不能及时更新本规则。 请及时联系当地的Lattice技术支持已获得最新信息。

编辑 重设标签(回车键确认) 标为违禁 关闭 合并 删除
匿名用户

匿名