This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] AM3351:DDR2 JEDEC 合规性问题

Guru**** 1758495 points
Other Parts Discussed in Thread: AM3351
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/847975/am3351-ddr2-jedec-compliance-issues

器件型号:AM3351

你好!

在 DDR2主题上已经有一段时间了、在我们的设备不好之前、深入分析的时间也有限、但最近我们有时间测量 DDR2的完整性和时序。 前面有关 Vswing 的问题不再适用、我们使用时钟差分和串联端接上的并联端接解决了振幅。 (不确定为什么不在数据表中将其添加为 DDR2器件差分时钟的要求。)

现在、我们几乎成功地完成了资格认证、但我们遇到了一些还不好的问题。 (在测量值下方、我将分享有关设计的详细信息)。

 测量读取突发时、时序失败:

- TAC-Diff、CK、DQ、需要+/- 500ps。 测量结果显示介于-628.75ps 和-282.71ps 之间。

Histogram hits tAC-Diff

其中信号为(所有测量值都在靠近 CPU 的位置):

- c1 -> CK_p/n

- C2 -> DQS1_p/n

- C3 -> DQ8

2.对读取突发进行第二次测量、其中时序失败:

- tDQSQ-Diff、DQ、DQS、需要小于+300PS。 测量结果显示+396.45ps (平均为288.93ps、低为-387.77ps)。

信号与之前的测量相同。

第三次测量是不符合 JEDEC 标准的信号完整性测量:

- Vox (AC) DQS、DQS、DQS#、其中低限为775mV、高限为1.025V。 从测量结果可以看出、未达到下限、结果为421.89mV。

如直方图中所示、我们不符合 JEDEC 规范。

您能就这些测量提出建议并失败吗?

该设计包含一个连接到 CPU (AM3351)的 DDR2 (ISSI)器件(IS43DR16640C-25DBLI)。

Sitara CPU 中的 DDR2设置如下:

arch/arm/include/asm/arch-am33xx/DDR_defs.h:28:# define IS43DR16640C25DBLI_EMIF_READ_DERAT延迟   0x100306
arch/arm/include/asm/arch-am33xx/DDR_defs.h:29:# define IS43DR16640C25DBLI_EMIF_SDCFG                0x43845732
arch/arm/include/asm/arch-am33xx/DDR_defs.h:30:# define IS43DR16640C25DBLI_EMIF_SDREF                0x2000040d
arch/arm/include/asm/arch-am33xx/DDR_defs.h:31:# define IS43DR16640C25DBLI_EMIF_TIM1                   0x0666a392
arch/arm/include/asm/arch-am33xx/DDR_defs.h:32:# define IS43DR16640C25DBLI_EMIF_TIT2                   0x142431ca
arch/arm/include/asm/arch-am33xx/DDR_defs.h:33:# define IS43DR16640C25DBLI_EMIF_TIM3                   0x0000021f
arch/arm/include/asm/arch-am33xx/DDR_defs.h:34:# define IS43DR16640C25DBLI_INVER_CLKOUT       0x0
arch/arm/include/asm/arch-am33xx/DDR_defs.h:35:# define IS43DR16640C25DBLI_IOCTRL_Value            0x373
arch/arm/include/asm/arch-am33xx/DDR_defs.h:36:# define IS43DR16640C25DBLI_PHY_FIFO_WE             0x5d
arch/arm/include/asm/arch-am33xx/DDR_defs.h:37:# define IS43DR16640C25DBLI_PHY_WR_DATA             0x40
arch/arm/include/asm/arch-am33xx/DDR_defs.h:38:# define IS43DR16640C25DBLI_Ratio                    0x80
arch/arm/include/asm/arch-am33xx/DDR_defs.h:39:# define IS43DR16640C25DBLI_RD_DQS                      0x40
arch/arm/include/asm/arch-am33xx/DDR_defs.h:40:# define IS43DR16640C25DBLI_WR_DQS                     0x6

CPU (U2000)和 DDR2 (U4001)之间的 PCB 布线长度如下:

网络 长度 时间
DDR2_ADD0 30.654
U2000.F3:U4001.M8 30.654 0.18765
DDR2_ADD1 29.890
U2000/J2:U4001.M3 29.889 0.18297
DDR2_ADD2 30.391.
U2000.D1:U4001.M7 30.391. 0.18604
DDR2_ADD3 29.966
U2000/B3:U4001.N2 29.966 0.18344
DDR2_ADD4 30.377
U2000.E5:U4001.N8 30.377 0.18596
DDR2_ADD5 30.258.
U2000.A2:U4001.N3 30.258. 0.18523
DDR2_ADD6 30.559
U2000/B1:U4001.N7 30.559 0.18707
DDR2_ADD7 30.033
U2000.D2:U4001.P2 30.032. 0.18385
DDR2_ADD8 30.570
U2000.C3:U4001.P8 30.570 0.18714
DDR2_ADD9 30.016.
U2000/B2:U4001.P3 30.016. 0.18375
DDR2_ADD10 30.270
U2000.E2:U4001.M2 30.270 0.1853
DDR2_ADD11 29.976
U2000/G4:U4001.P7 29.976 0.1835.
DDR2_ADD12 29.727.
U2000.F4:U4001.R2 29.727. 0.18198
DDR2_ADD13 30.044
U2000.H1:U4001.R8 30.044 0.18392
DDR2_BA0 29.997.
U2000/A3:U4001.L2 29.997. 0.18363
DDR2_BA1 30.262
U2000/E1:U4001.L3 30.262 0.18525
DDR2_BA2 30.175.
U2000/B4:U4001.L1 30.175. 0.18472
DDR2_CAS_N 30.260
U2000.F1:U4001.L7 30.260 0.18524
DDR2_CKE 30.046
U2000.G3:U4001.K2 30.046 0.18394
DDR2_CK_N 29.028
U2000.C1:U4001.K8 29.029. 0.1774
DDR2_CK_P 30.298
U2000.C2:U4001.J8 30.298 0.18515
DDR2_CS0_N 30.306.
U2000.H2:U4001.L8 30.306. 0.18552
DDR2_ODT 29.862
U2000/G1:U4001.K9 29.862 0.18281.
DDR2_RAS_N 30.384
U2000.F2:U4001.K7 30.384 0.186.
DDR2_WE_N 30.282.
U2000.A4:U4001.K3 30.283. 0.18538
DDR2_BYTE0 (11)
DDR2_DAT0 17.647
U2000.N4:U4001.C8 17.647 0.10803
DDR2_DAT1 16.709.
U2000.P4:U4001.C2 16.709. 0.10229
DDR2_DAT2 16.851.
U2000.P2:U4001.D7 16.851. 0.10316
DDR2_DAT3 17.329
U2000.P1:U4001.D3 17.329 0.10608
DDR2_DAT4 16.085.
U4001.D1:U2000.P3 16.085. 0.09847
DDR2_DAT5 17.386
U2000/T1:U4001.D9 17.386 0.10643
DDR2_DAT6 15.816
U2000.T2:U4001.B1 15.816 0.09682
DDR2_DAT7 18.325
U2000.R3:U4001.B9 18.325 0.11218
DDR2_DQM0 16.827
U2000.N3:U4001.B3 16.827 0.10301
DDR2_DQS0_N 15.926
U2000/R2:U4001.A8 15.926 0.09733
DDR2_DQS0_P 15.876
U2000.R1:U4001.B7 15.876 0.0703
DDR2_BYTE1 (11)
DDR2_DAT8 16.606
U2000.K2:U4001.G8 16.606 0.10166
DDR2_DAT9 15.269.
U2000.K1:U4001.G2 15.269. 0.09347
DDR2_DAT10 16.170
U2000/M3:U4001.H7 16.170 0.09899
DDR2_DAT11 15.871.
U2000/M4:U4001.H3 15.871. 0.09716
DDR2_DAT12 14.279.
U2000.M2:U4001.H1 14.279. 0.08741
DDR2_DAT13 16.648.
U2000/M1:U4001.H9 16.648. 0.10192
DDR2_DAT14 14.158.
U2000.N2:U4001.F1 14.158. 0.08667
DDR2_DAT15 16.420.
U2000.N1:U4001.F9 16.420. 0.10052
DDR2_DQM1 16.364.
U2000.K3:U4001.F3 16.364. 0.10017
DDR2_DQS1_N 15.674
U2000/L2:U4001.E8 15.674 0.0958
DDR2_DQS1_P 15.727.
U2000.L1:U4001.F7 15.727. 0.09612

提前感谢您!

Francois。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Francois、请务必仔细检查 DDR2数据表中的布局指南。  我看到差分时钟有一个严重违反、有些违反非常接近、这可能会导致您的合规性问题:

     数据表: CK 差分对偏差长度不匹配25密耳(0.635mm)

    电路板: CK_P - CK_N 长度= 30.298 - 29.028 = 1.27mm

    数据表:DQ[x]至 DQS[x]偏移长度不匹配100密耳(2.54mm)

    板:DAT7 - DQS0_N = 18.325 - 15.876 = 2.45mm (在技术上不违反、但与其他数据信号相比非常接近限值)  

    3.DQ[x] 至 DQ[x]偏移长度不匹配100mil (2.54mm)

    板:DAT13 - DAT14 = 16.648 - 14.158 = 2.49mm (在技术上不违反、但接近)  

    板:DAT7 - DAT6 = 18.325 - 15.816 = 2.509 (在技术上不违反、但非常接近)

     

    我只提到那些接近的规格、因为可能还有其他规格(例如中心到中心间距或其他偏差不匹配)、这些规格也可能违反、这可能会影响您的结果。

    此致、

    James  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 James:

    感谢您指出这一点、我们将在发言时更新设计。 当我们有新电路板时、我将告诉您这是否解决了问题。

    在鉴定期间、我还需要调整时钟以符合 JEDEC 标准。 为了符合要求、我在 p 和 n 信号中的 p 和 n 和10R 串联端接之间添加了一个100R 并联端接。 从测量结果来看、这已经通过、但数据表或参考设计中没有提到过、我添加的这一端接应该被添加。 您能就此发表评论吗?

    我们发现、我们在差分 DQS 和 CK 上的实现为90um 布线宽度和210um 气隙、以获得100R 差分。 在查看数据表后、我们现在正在考虑将其更新为100-100um 的差异。 在本例中、我们还符合数据表2W 间距和阻抗。 您也能对此发表评论吗?

    提前感谢您!

    此致、

    Francois

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Francois、  

    所有读取时序都是由 DDR 存储器而不是 AM335x 生成的信号。   最可能的时序失真是由 PCB 布局和端接阻抗问题引起的。  JEDEC 信号电平和要求在 DDR 存储器的引脚上定义。  将这些测量值靠近 CPU 将会产生误导性结果。  您应该在 DDR 引脚处或附近进行这些测量。

    此外、请务必遵循数据表中有关层叠、放置、布线宽度等的所有指导。  分离接地平面或不相邻接地平面的布线等可能会导致阻抗不匹配、从而使信号失真。  这可能是您需要添加串联和/或并联端接的原因。  

    此致、

    James

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    James、

    很抱歉、我之前的回答可能有点不清楚。

    添加并联和串联端接的问题与上述测量值无关(从我的第一篇帖子中)、而是另一个问题。

    我在其中添加端接的差分信号仅发送到 CK_p/n、我认为这只是 AM335x 侧的输出。 我们将在 DDR2器件侧测量该信号。 在 DDR2器件中、没有片上终端(我可以找到)、因此 DDR2器件的信号强。 添加了端接后、我能够获得符合 JEDEC 要求的信号。 我想知道这一点、因为 DDR2器件内部没有端接、Sitara 的数据表中是否应该说明这一点?

    关于差分信号实现的另一个问题是、我们遇到了与数据表中所述要求有关的问题(我很想念负责绘制 PCB 的同事)。

    我们的实现方案为90-210-90um、可获得100R 阻抗差分。 我们使用100um 来获得50R 的单端阻抗。 这违反了数据表的中心到中心(2W)要求。

    如果我们确实希望遵循数据表、我们可以实现100-100um 等差速器、以满足中心到中心的要求。 借助我们的堆叠、我们可以满足50R 单端信号布线的阻抗要求。 但差分阻抗将低于100R、这违反了数据表中规定的2x Zo 要求。 您认为实施差异的最佳方式是什么?

    此致、

    François μ A

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Francois:如果 CK 信号太强、您是否尝试从 AM335x 侧调整其驱动强度?  您的驱动强度设置是什么?  如果您具有 JTAG 访问权限、请运行下面的脚本并发回生成的文件:

    git.ti.com/.../am335x-ddr-analysis.dss  

    运行该文件的说明可在以下位置找到:  http://git.ti.com/sitara-dss-files/am335x-dss-files/blobs/master/README

    至于您的差分阻抗、CK 和 CKn 是如何布线的?  理想情况下、它们应在外层布线、而不进行任何层转换。  这将使您能够更轻松地控制阻抗不匹配。  我相信、如果需要、您可以稍微加宽2W 的范围、以实现2倍 Zo。

    此致、

    James   

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 James:

    我在板上运行了该脚本、并打印了以下输出: e2e.ti.com/.../am335x_2D00_ddr_2D00_analysis_5F00_2019_2D00_11_2D00_21_5F00_165540.txt

    从这个输出中、我看到我们的时钟设置为:

    -压摆最慢
    -驱动强度8mA

    那么、您是否建议减小时钟信号的驱动强度? (DQSx 使用相同的设置、该信号接近1V - VSWING (max)参数、仅在不用于时钟的地方存在 ODT。) 如果时钟差分上没有我添加的并联和串联端接、VSWING (最大值)几乎为1.8V。

    此外、为了了解您的信息、我们更新了电路板上指出的违规情况、并重新检查了电路板。 几周内、我将更新电路板以进行测试。

    谢谢你。

    此致、

    François μ A

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Francois、是的、您可以尝试降低时钟驱动强度并查看效果。  此外、我注意到您正在混合信号的压摆率并使其匹配。  我想我至少会匹配 addr/Clk 压摆率、然后匹配 data/DQS/DM 压摆率。   

    此致、

    James

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 James:

    我们收到了电路板并更新了设置、因此我们要重新测量 DDR2。

    当我使用 AM335x-DDR-analysis.dss 通过 JTAG 读取设置时、我们注意到、u-boot 和 Linux 之间存在不同的设置。 当我们引导至 u-boot 时、我们设置的设置是正确的、但当引导继续并加载 Linux 时、它会将 DDR2设置设置设置设置设置为不同的设置。

    我不是软件工程师、希望这不是一个小问题、但 Linux 是否使用自己的 DDR2设置? 或者、我是否会忽略 JTAG 脚本中的某些内容、因为寄存器被阻止读取? 我确实从寄存器返回了很多0x00、但系统确实可以正常工作。

    感谢您的支持!

    此致、

    François μ A

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    [引用 user="Francois Veger">当我使用 AM335x-DDR-analysis.dss 通过 JTAG 读取设置时、我们注意到的一件事是 u-boot 和 Linux 之间存在不同的设置。 当我们引导至 u-boot 时、我们设置的设置是正确的、但当引导继续并加载 Linux 时、它会将 DDR2设置设置设置设置设置为不同的设置。

    这是意外的。  您能否按照 u-boot 和 Linux 期间观察到的那样压缩脚本的输出?  我想更准确地了解正在发生的变化、例如、它是几个隔离式寄存器、还是看起来完全重新配置了?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    e2e.ti.com/.../JTAG_5F00_read.zip

    在添加的 zip 2日志中存在。 首先、当我在 U-boot 阶段暂停引导时、我通过 JTAG 读取设置。 第二次读取是在整个引导序列之后进行的。

    我检查了读取操作、但在引导 Linux 时、我似乎 JTAG 无法再读取设置。 也许 Linux 会阻止 JTAG 读取?  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    在运行脚本之前从 Linux 控制台执行此命令:

    devmem2 0x44e00414 w 0x12500002