找回密码
 注册
关于网站域名变更的通知
查看: 8890|回复: 34
打印 上一主题 下一主题

求教,FPGA引出来的DDR4读写错误,帮忙分析一下!

[复制链接]
  • TA的每日心情
    慵懒
    2022-4-7 15:32
  • 签到天数: 27 天

    [LV.4]偶尔看看III

    跳转到指定楼层
    1#
    发表于 2019-3-26 15:04 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

    EDA365欢迎您登录!

    您需要 登录 才可以下载或查看,没有帐号?注册

    x
    总体情况:我们用FPGA挂了2通道的DDR4,读写出错,具体情况如下:% d+ V' ]! b8 C
    ! u8 D5 \" `% r( D1 E( O9 Z: X- o
    1、使用的是Xilinx的KU040,引出来了2个通道的DDR4,每个通道位宽是32位,每个通道由2颗x16的DDR4颗粒组成,fly-by拓扑,设计的运行频率是2133;& \; |& B4 j. r5 r9 Y* G/ `
    2、bank47、48组成CH0,bank67、68组成CH1,PCB图中,右边的两个颗粒是CH0,左边的两个颗粒是CH1;! U8 c4 \( e1 Y% q
    3、现在出现的问题是读写出错,往DDR颗粒中写满数据,再读出来,与写入的进行对比,发现错误;) _7 u) j: O3 M
    4、测试的情况是,测了3块板子,3块板子的CH0都出错,有1块板子的CH1出错,2块没有错(这些测试结果,每个CH都是基于32位位宽进行测试);" ]( F2 u2 l% ^2 e& {8 n
    5、重点来了,我们在逻辑程序里,把每个通道高16位的颗粒的DQ/DQS/DM信号禁掉,因为是fly-by,ADDR/CMD/CTRL禁不了,这种情况下,测试所有的板子、通道都没问题;
    ; o& G2 h( O4 H6、我们反过来把低16位的颗粒数据信号禁掉,只保留高16位的颗粒,测试有错,错误的现象、错误个数的数量级跟之前32位都测的时候基本一致;
    1 U# S( u- q  t
    # J5 I+ @" f/ |# _+ F, {综上,帮忙分析一下可能的原因?谢谢了!
    , E6 `$ J$ S9 M& _; A' y
    & ?' l( q2 w7 O4 {& @( b! s7 L1、我们曾经很怀疑逻辑程序的问题,但是说不通的是,CH1没错啊,而且我们试了用极为简单的语句去调用IP核,也会出错,而且用16位程序没出错;
    ) u* z$ j1 U2 W' S* H, u" {0 L2、我按照FPGA的资料,仔细检查了硬件设计,也没发现什么错误;
    ! F; u9 [, q, Q
    # h4 T8 A6 B& ^4 z- D
    ! v, i8 C( t1 q, y; |+ f
    0 ^% N& ^* N3 b9 y! m5 K+ E 3 i+ J6 S) v& m( t# N  r) S

    : i/ ?) V$ o5 S# N2 A/ X
    3 v* E: P" [" @" b2 W* C9 z/ o( `8 ~' J/ y, W) @
    . f% K; ~) k) D3 K% \
    * S9 Y$ K' g4 @: n) s  \

    5 X2 k' J9 }! ~6 S/ `  G. j6 p7 j$ v0 A# i+ s
    # K' y; t# Z! v6 x
    3 P0 n: ?/ b/ u' Z
  • TA的每日心情
    慵懒
    2022-4-7 15:32
  • 签到天数: 27 天

    [LV.4]偶尔看看III

    来自 22#
     楼主| 发表于 2019-3-29 18:10 | 只看该作者
    xbin 发表于 2019-3-29 17:09
    : o! `0 x" \7 e* }尴尬了,第三点,看来还是硬件的问题呀。这锅你要背了。

    $ Y+ g: s  n8 H6 J+ d! e* Z; n是啊,早就基本上指向硬件了,但是就是找不到硬件的问题点。3 h" @7 V# K* H* P

    & A  s: C# B0 _7 V3 A2 g' e% V最新消息:( I' U- A5 J# o0 Y6 {7 F
    1、请看以下图一官方推荐的拓扑,地址/命令/控制线在外部有端接电阻上拉到0.6V-VTT,今天在其中一块板子上试了一种办法,就是把地址/命令/控制信号的外部端接电阻从39.2欧换成了49.9欧,然后这块板子没出问题了!!!!
    * v# L7 w3 u1 O1 v  p- `$ m+ c2、图二是官方对于图一拓扑上各个走线区域的走线要求;+ [& Z% S. Y2 l
    3、我想不通:
    6 I% B. I( I9 L' I3.1)、官方推荐的端接电阻是39.2,我就是按这个阻值做的,这个端接电阻怎么至于影响这么大,从来没见过DDR需要换这个端接电阻的;2 Y$ A8 _7 @4 x( i. z; F, {* d' a
    3.2)、唯一比较合理地解释是,我主走线(控36欧姆)的区域,占总长的比例太小了,因为这个板子上,DDR颗粒距离主控芯片实在太近,除了两头BGA的fanout区域,能够正常控阻抗的区域实在太短了,现在从FPGA到第一个颗粒的长度,总长也就1700mil左右,两个颗粒之间的距离大概450mil,能控36欧姆的走线长度,有的信号上只有两三百mil,难道是这个原因,所以50欧姆的端接更匹配?  l% E2 M  e+ p6 L* g
    . t9 j' Z+ p' X5 z# ^
    $ Y- P0 l0 g* k5 h, ^8 E
    6 [" D( @/ a$ F

    点评

    您好 我的板卡也遇到了一样的问题,终端匹配换成50欧后无错误的最高速率有提升,但是跑不到最高速,请问您找到问题原因了吗?  详情 回复 发表于 2020-10-20 18:23
    https://forums.xilinx.com/t5/Memory-Interfaces/Fly-by-ddr3-termination-value/td-p/809007 官方有个提问,说RTT影响DDR3使用频率。  详情 回复 发表于 2019-3-29 19:10
    参考设计用5个DDR,你这个用2个而已,是不是也和这个有差异。有没有高速示波器,可以看看Addr在RTT的信号怎么样,说不定之前过冲下冲严重导致异常?  详情 回复 发表于 2019-3-29 18:56
  • TA的每日心情
    慵懒
    2022-4-7 15:32
  • 签到天数: 27 天

    [LV.4]偶尔看看III

    推荐
     楼主| 发表于 2019-3-29 10:52 | 只看该作者
    本帖最后由 gavinhuang 于 2019-3-29 11:02 编辑
    ( t: O5 E% F2 ^( D  T) `6 d. G
    xbin 发表于 2019-3-28 13:24
    5 h: O% a6 j* W6 V1 G! W7 u+ v7 C% U降到1600有改善,不是说明和信号完整性有关吗?FPGA和DDR芯片底下电源正常吗
    $ C, v5 f% y" H) \( m
    1、本来FPGA内部就能自动调整DQ、DQ是的读写时序,能够调整的幅度多达75ps,再看下面的第一张图,从2133降到,1600,时序的裕量又多了78ps,这两个裕量加起来,至少150ps;  N, d5 k3 ^7 [; E: @/ c# @& E
    - |. |1 o! l* P4 k4 M1 i% t
    2、看下面的第二张图,地址控制线这些信号,从2133降到1600的情况下,时间裕量多了124ps;
    : x. K0 ]9 X- M* V4 j" h
    3 |  k$ y) \& G0 v5 ]1 z# o4 E* {6 T我以前做过3年多的SI,后来转行做硬件,现在原理图、PCB都是自己画的,虽然SI方面的知识也很有限,但是我画PCB的时候已经尽量按照我的SI方面的知识去画了,我自认为一般需要关注的点我都注意到了,我实在不相信我画的这个板子连1600都跑不了,而且用的这颗FPGA,IP核配置的时候,最低也只能配到1600了。3 @8 ?5 c, x' M0 x' ~! ?$ O
    还有,禁掉高位颗粒,只留低位颗粒的情况下,跑2133完全没问题。
    3 g0 c' H: h, l" d( e
    4 ?' N( Z; `1 Q! n. j* P& S2 c: { / n) B8 i7 ?  w; d8 e2 ?6 `: I/ p
    0 R8 b; k! w( r+ c. H+ H2 e2 d) Q

    . e3 e8 |: Z$ T7 V2 [
    / z- j. ]4 D+ r! H7 N$ h# h
  • TA的每日心情
    慵懒
    2022-4-7 15:32
  • 签到天数: 27 天

    [LV.4]偶尔看看III

    推荐
     楼主| 发表于 2019-3-27 21:35 | 只看该作者
    gabbana0529 发表于 2019-3-27 11:13
    + |# O( s* y$ i' |& g) ^1 m看layout高速线换参考层有没有补电容或是打via孔. 等线长检查. 用频谱看2.5G附近有无干扰. 确认公板有无一 ...
    1 S, B* Z1 Z" }6 j. g( v
    谢谢回答。
    8 Q5 v; p) k7 S5 U% D没有换参考层,数据和地址都参考的是GND;$ z( Q- W# j$ r$ q+ ], G' |* q
    等长检查了没问题;
    " R7 H% S# o0 ~6 U8 o/ e  |; L5 S2.5G的频谱暂时没办法看;1 |% c. e9 g# ]
    我们这个PCB跟xilinx的开发板差异大,不太具有对比性,不过原理方面确实是参考了开发板,开发板肯定没问题啊;
    $ e; f! c( }/ P2 p从2133降频至1600有改善,但是还是有错,我觉得降到1600了,时序、信号质量方面的余量应该很充足了,不应该再出错了才对,所以我倾向于不是信号完整性方面的问题。
    & R# a/ `8 t  N4 e6 P  J; v6 \5 D. e# i
  • TA的每日心情
    奋斗
    2021-3-10 15:58
  • 签到天数: 11 天

    [LV.3]偶尔看看II

    2#
    发表于 2019-3-26 18:53 | 只看该作者
    能否降频使用,降频低16位有没有出错

    该用户从未签到

    4#
    发表于 2019-3-27 11:13 | 只看该作者
    看layout高速线换参考层有没有补电容或是打via孔. 等线长检查. 用频谱看2.5G附近有无干扰. 确认公板有无一样问题. 改bootstrap降外频测试.

    该用户从未签到

    5#
    发表于 2019-3-27 11:30 | 只看该作者
    还是降频看看能稳定不,不能稳定的话基本也不太可能是layout的问题。

    该用户从未签到

    6#
    发表于 2019-3-27 13:47 | 只看该作者
    楼主有做过FPGA的DRAM Training吗?
    . i" O5 n4 e  f- \2 ?2 ^' }
  • TA的每日心情
    慵懒
    2022-4-7 15:32
  • 签到天数: 27 天

    [LV.4]偶尔看看III

    7#
     楼主| 发表于 2019-3-27 21:16 | 只看该作者
    本帖最后由 gavinhuang 于 2019-3-27 21:26 编辑
    * ?! j2 J9 o6 [( L, [( Q' b
    xbin 发表于 2019-3-26 18:53
    - r# e3 K: I$ R. t, n6 {1 v能否降频使用,降频低16位有没有出错
    : u; P% D5 s5 y1 V% R4 D5 ~
    谢谢回答。8 i) P2 x0 p3 u5 @1 k9 R5 O
    从2133降频至1600有改善,但是还是有错,我觉得降到1600了,时序、信号质量方面的余量应该很充足了,不应该再出错了才对,所以我倾向于不是信号完整性方面的问题。
    1 I2 W0 d% Q. o
    . ?# _" `8 U, q- x
      T/ F7 o- N; ^/ k如题目所说,禁掉高16位颗粒,只留低16位的颗粒的时候,完全没错,运行频率是2133都没错;
    & d0 o6 ]' Y4 }! y* w! c6 o然而反过来,禁掉低16位颗粒,只留高16位颗粒的时候,依然有错,错误数量跟32位运行的时候是同一个数量级的。$ Y& _( \1 i9 S2 c, y
  • TA的每日心情
    慵懒
    2022-4-7 15:32
  • 签到天数: 27 天

    [LV.4]偶尔看看III

    9#
     楼主| 发表于 2019-3-27 21:36 | 只看该作者
    bluskly 发表于 2019-3-27 11:303 _1 j% U2 x( j# |
    还是降频看看能稳定不,不能稳定的话基本也不太可能是layout的问题。

    ; T' @: O& c+ h. x6 g( P1 Q2 L1 e, U谢谢回答。/ Y8 y2 K/ Q$ `  [5 k
    从2133降频至1600有改善,但是还是有错,我觉得降到1600了,时序、信号质量方面的余量应该很充足了,不应该再出错了才对,所以我倾向于不是信号完整性方面的问题。1 ?9 P5 L- i4 X. F+ a
  • TA的每日心情
    慵懒
    2022-4-7 15:32
  • 签到天数: 27 天

    [LV.4]偶尔看看III

    10#
     楼主| 发表于 2019-3-27 21:38 | 只看该作者
    Frank9523 发表于 2019-3-27 13:47
    " o) {. U! D( C楼主有做过FPGA的DRAM Training吗?

    * @0 H* e. L: }谢谢回答。* `# x5 B  J) r
    我不知道您说的FPGA DRAM Training是啥意思?我们应该没做过,您能更加详细地说一下吗,谢谢了。" [  @5 O: p5 V" {, B% z% }7 V$ g

    该用户从未签到

    11#
    发表于 2019-3-28 08:54 | 只看该作者
    gavinhuang 发表于 2019-3-27 21:38
    # j% I% ?$ F0 S谢谢回答。
    & R# g: w& N' I我不知道您说的FPGA DRAM Training是啥意思?我们应该没做过,您能更加详细地说一下吗,谢谢 ...

    : M! ^" \" c' `) Y( @+ ?就是根据你布板的走线长度,计算出板间延时参数。xilinx可以进行training algorithms。之前在zynq平台遇到过类似的问题,就通过修改板间延时参数解决的。你可以看下下面这个链接。https://www.xilinx.com/support/answers/46778.html' Y) A5 B7 v0 W$ m
    2 Z* M( k: u# h% ~/ M2 y) |" u5 b
    ! K# s' m2 H! I+ ]
    * l' U6 T# T$ [+ l0 z5 n$ V

    - }. y* w, M1 n" k! j* ?
  • TA的每日心情
    慵懒
    2022-4-7 15:32
  • 签到天数: 27 天

    [LV.4]偶尔看看III

    12#
     楼主| 发表于 2019-3-28 09:59 | 只看该作者
    Frank9523 发表于 2019-3-28 08:54" J6 r* k2 {3 R3 l5 ]7 M
    就是根据你布板的走线长度,计算出板间延时参数。xilinx可以进行training algorithms。之前在zynq平台遇 ...
    - C- B/ `2 C8 q5 }0 r
    谢谢。我们布板的时候已经考虑封装的延时进行等长了,等长方面应该没问题。你发的那个链接,我看了一下,只针对于Zynq系列的器件,我们用的KU系列,没有这个东西。
    # w: {9 |$ s) c( B4 B
  • TA的每日心情
    奋斗
    2021-3-10 15:58
  • 签到天数: 11 天

    [LV.3]偶尔看看II

    13#
    发表于 2019-3-28 13:24 | 只看该作者
    gavinhuang 发表于 2019-3-27 21:163 G* o  Z- l6 d& a+ ^9 N
    谢谢回答。
    " l4 P7 u! @1 Y' R从2133降频至1600有改善,但是还是有错,我觉得降到1600了,时序、信号质量方面的余量应该很 ...
    7 j% F% j7 K# {8 C+ T* R
    降到1600有改善,不是说明和信号完整性有关吗?FPGA和DDR芯片底下电源正常吗6 G3 `8 R+ m# B

    该用户从未签到

    14#
    发表于 2019-3-28 17:32 | 只看该作者
    低位没问题,高位没问题,是不是因为fly-by要不同颗粒DQ要对齐?FPGA不知道是怎么玩的,CPU类的是自动校准,计算到每个颗粒的延时然后自己设置好寄存器。你问下FPGA的看看。
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    关闭

    推荐内容上一条 /1 下一条

    EDA365公众号

    关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

    GMT+8, 2025-7-17 09:58 , Processed in 0.156250 second(s), 35 queries , Gzip On.

    深圳市墨知创新科技有限公司

    地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

    快速回复 返回顶部 返回列表