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

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

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

    [LV.4]偶尔看看III

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

    EDA365欢迎您登录!

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

    x
    总体情况:我们用FPGA挂了2通道的DDR4,读写出错,具体情况如下:
    5 W* O' O: ?# l% C/ u* k
    " K) x; z* J, G9 y: K; B* w1、使用的是Xilinx的KU040,引出来了2个通道的DDR4,每个通道位宽是32位,每个通道由2颗x16的DDR4颗粒组成,fly-by拓扑,设计的运行频率是2133;
    1 m, A; @1 F  l6 h/ s7 \2、bank47、48组成CH0,bank67、68组成CH1,PCB图中,右边的两个颗粒是CH0,左边的两个颗粒是CH1;5 A$ h, m; z' |7 i& n
    3、现在出现的问题是读写出错,往DDR颗粒中写满数据,再读出来,与写入的进行对比,发现错误;- ^9 Z7 }+ m9 p. S
    4、测试的情况是,测了3块板子,3块板子的CH0都出错,有1块板子的CH1出错,2块没有错(这些测试结果,每个CH都是基于32位位宽进行测试);: y9 p2 q8 V, K
    5、重点来了,我们在逻辑程序里,把每个通道高16位的颗粒的DQ/DQS/DM信号禁掉,因为是fly-by,ADDR/CMD/CTRL禁不了,这种情况下,测试所有的板子、通道都没问题;
    : F( J% N5 R; t7 \0 m6、我们反过来把低16位的颗粒数据信号禁掉,只保留高16位的颗粒,测试有错,错误的现象、错误个数的数量级跟之前32位都测的时候基本一致;
    " `- o; A  L0 r/ K3 P6 B, u9 ~
    % S1 d# J7 \; y* i8 T) ?+ \$ {* h综上,帮忙分析一下可能的原因?谢谢了!
    # z3 d7 e; p1 Z* ?1 j% s. I) j; J! ]6 A- B
    1、我们曾经很怀疑逻辑程序的问题,但是说不通的是,CH1没错啊,而且我们试了用极为简单的语句去调用IP核,也会出错,而且用16位程序没出错;
    $ g' p1 h- K; O0 D2 Q+ `) Q2、我按照FPGA的资料,仔细检查了硬件设计,也没发现什么错误;4 S! A! p) E# O. P/ p

      B5 k/ R3 [) b
    0 ~. Q" ]5 P* ^6 W6 y
    & y: V* `( M0 b+ z, }* k
    2 q! c: v  _7 s0 H' I. I2 {% x- @
    " k6 M* v) c( e) r- |8 u# E2 }* j, s
    0 [5 _, k# p" S( a& ^4 U# l) T
    5 J4 U0 D4 t1 p: ?6 j3 L4 c
    2 @3 O( u% E8 F* r: e- B: A7 {. X; ]4 _1 Y% v* y

    * ]; W. `1 t' j0 y! V0 ]
    0 n6 y. W3 v- Y' H
    ! Y9 N5 Q+ X  I3 L+ c) O1 L/ ]' a) k& Y$ }2 M2 U; i2 `# D- b
  • TA的每日心情
    慵懒
    2022-4-7 15:32
  • 签到天数: 27 天

    [LV.4]偶尔看看III

    来自 22#
     楼主| 发表于 2019-3-29 18:10 | 只看该作者
    xbin 发表于 2019-3-29 17:09
    " L9 K4 T8 k1 L7 {  [- h尴尬了,第三点,看来还是硬件的问题呀。这锅你要背了。

    ; O. A8 D$ `/ c3 U( k7 Q是啊,早就基本上指向硬件了,但是就是找不到硬件的问题点。( w! P9 Q( v8 k1 w( J/ E. V( o& B3 N, r7 Y3 y
    ) F+ ~. d5 t6 L2 A  |
    最新消息:
    0 t* O/ w- v- }! p; L9 A' n! p1、请看以下图一官方推荐的拓扑,地址/命令/控制线在外部有端接电阻上拉到0.6V-VTT,今天在其中一块板子上试了一种办法,就是把地址/命令/控制信号的外部端接电阻从39.2欧换成了49.9欧,然后这块板子没出问题了!!!!! @4 k1 l8 {$ |9 v; y
    2、图二是官方对于图一拓扑上各个走线区域的走线要求;: p7 X4 Z+ K4 f8 K2 Y
    3、我想不通:2 {7 L  T7 k5 [) |2 x
    3.1)、官方推荐的端接电阻是39.2,我就是按这个阻值做的,这个端接电阻怎么至于影响这么大,从来没见过DDR需要换这个端接电阻的;1 L! u- Z$ s# B2 l
    3.2)、唯一比较合理地解释是,我主走线(控36欧姆)的区域,占总长的比例太小了,因为这个板子上,DDR颗粒距离主控芯片实在太近,除了两头BGA的fanout区域,能够正常控阻抗的区域实在太短了,现在从FPGA到第一个颗粒的长度,总长也就1700mil左右,两个颗粒之间的距离大概450mil,能控36欧姆的走线长度,有的信号上只有两三百mil,难道是这个原因,所以50欧姆的端接更匹配?
    ' W) N4 N4 @: \/ X; S% q
    + m& J& D! ~2 x. _/ u
    0 V8 V" D: l- b' X7 X5 j
    ; v& [' u! @+ O5 s

    点评

    您好 我的板卡也遇到了一样的问题,终端匹配换成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 编辑
    7 s8 l8 b( i& l8 r# P+ _9 I! J
    xbin 发表于 2019-3-28 13:24; [1 `& k- @! x: f) ]& w
    降到1600有改善,不是说明和信号完整性有关吗?FPGA和DDR芯片底下电源正常吗

    0 b0 @* X7 @0 l1、本来FPGA内部就能自动调整DQ、DQ是的读写时序,能够调整的幅度多达75ps,再看下面的第一张图,从2133降到,1600,时序的裕量又多了78ps,这两个裕量加起来,至少150ps;7 a7 \" g9 V' g5 c% |! [
    5 ?) |# ?8 z; G
    2、看下面的第二张图,地址控制线这些信号,从2133降到1600的情况下,时间裕量多了124ps;9 u$ v) H. X  e2 w" C, u% @& O
    " W% e. d7 X. x+ F1 }
    我以前做过3年多的SI,后来转行做硬件,现在原理图、PCB都是自己画的,虽然SI方面的知识也很有限,但是我画PCB的时候已经尽量按照我的SI方面的知识去画了,我自认为一般需要关注的点我都注意到了,我实在不相信我画的这个板子连1600都跑不了,而且用的这颗FPGA,IP核配置的时候,最低也只能配到1600了。7 ?+ M/ ^) F8 q- t  K
    还有,禁掉高位颗粒,只留低位颗粒的情况下,跑2133完全没问题。
    2 f$ L* T# M5 i4 e0 y# t3 ^. b) K* D/ O
    5 f7 @3 D% V2 X, B3 c+ I3 e' e6 d1 C
    ( w: e9 u3 N' k5 s; r$ j5 c

    4 @# `7 n' k6 u" [6 }; t* t. K
    1 ?" h( ?( d* L9 e1 N

    点评

    1. 原理设计这块,官方有参考设计吗,有没有不一致的? 2. 芯片底下电源正常吗 3. 有没有官方的demo板,让FPGA跑跑看,有没有bug?  详情 回复 发表于 2019-3-29 16:41
  • TA的每日心情
    慵懒
    2022-4-7 15:32
  • 签到天数: 27 天

    [LV.4]偶尔看看III

    推荐
     楼主| 发表于 2019-3-27 21:35 | 只看该作者
    gabbana0529 发表于 2019-3-27 11:13
    3 ^1 y5 M# ~0 {2 y& x9 n6 B看layout高速线换参考层有没有补电容或是打via孔. 等线长检查. 用频谱看2.5G附近有无干扰. 确认公板有无一 ...

    ! @" w8 x- d( z谢谢回答。
    . g9 x# o9 ^# H( R没有换参考层,数据和地址都参考的是GND;
    : }$ K7 @" j$ V2 a9 S! I2 g等长检查了没问题;
    7 G% q6 \) _, _' h) O+ e: l3 n2.5G的频谱暂时没办法看;& K2 {1 g0 _" i4 @8 b
    我们这个PCB跟xilinx的开发板差异大,不太具有对比性,不过原理方面确实是参考了开发板,开发板肯定没问题啊;. u/ j5 U/ `- s' G
    从2133降频至1600有改善,但是还是有错,我觉得降到1600了,时序、信号质量方面的余量应该很充足了,不应该再出错了才对,所以我倾向于不是信号完整性方面的问题。3 a% J  v* N: Y: o
    : W4 X+ h2 l$ X; p6 C% d4 e" F0 M
  • TA的每日心情
    奋斗
    2021-3-10 15:58
  • 签到天数: 11 天

    [LV.3]偶尔看看II

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

    点评

    谢谢回答。从2133降频至1600有改善,但是还是有错,我觉得降到1600了,时序、信号质量方面的余量应该很充足了,不应该再出错了才对,所以我倾向于不是信号完整性方面的问题。  详情 回复 发表于 2019-3-27 21:16

    该用户从未签到

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

    点评

    谢谢回答。 没有换参考层,数据和地址都参考的是GND; 等长检查了没问题; 2.5G的频谱暂时没办法看; 我们这个PCB跟xilinx的开发板差异大,不太具有对比性,不过原理方面确实是参考了开发板,开发板肯定没问题啊  详情 回复 发表于 2019-3-27 21:35

    该用户从未签到

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

    点评

    谢谢回答。 从2133降频至1600有改善,但是还是有错,我觉得降到1600了,时序、信号质量方面的余量应该很充足了,不应该再出错了才对,所以我倾向于不是信号完整性方面的问题。  详情 回复 发表于 2019-3-27 21:36

    该用户从未签到

    6#
    发表于 2019-3-27 13:47 | 只看该作者
    楼主有做过FPGA的DRAM Training吗?( P/ i$ Z; h: m+ B6 B  z

    点评

    谢谢回答。 我不知道您说的FPGA DRAM Training是啥意思?我们应该没做过,您能更加详细地说一下吗,谢谢了。  详情 回复 发表于 2019-3-27 21:38
  • TA的每日心情
    慵懒
    2022-4-7 15:32
  • 签到天数: 27 天

    [LV.4]偶尔看看III

    7#
     楼主| 发表于 2019-3-27 21:16 | 只看该作者
    本帖最后由 gavinhuang 于 2019-3-27 21:26 编辑
    ) O5 m6 t. }( q0 N  H  I; M, E( r
    xbin 发表于 2019-3-26 18:53
    ' Q( s9 P' |3 g$ z3 j* u能否降频使用,降频低16位有没有出错
    : O6 @0 I. B6 h2 p
    谢谢回答。; _/ k  ^5 }9 _6 y6 w& \3 I
    从2133降频至1600有改善,但是还是有错,我觉得降到1600了,时序、信号质量方面的余量应该很充足了,不应该再出错了才对,所以我倾向于不是信号完整性方面的问题。0 x7 r6 h& x- i2 B! w
    % B; D! e2 A+ y( D- v

    * Z6 b$ E9 K6 E$ G# z如题目所说,禁掉高16位颗粒,只留低16位的颗粒的时候,完全没错,运行频率是2133都没错;
    : M5 A3 J; a3 X9 `+ ^. ?; }. J$ S然而反过来,禁掉低16位颗粒,只留高16位颗粒的时候,依然有错,错误数量跟32位运行的时候是同一个数量级的。! s4 k. u% r1 \! G

    点评

    降到1600有改善,不是说明和信号完整性有关吗?FPGA和DDR芯片底下电源正常吗  详情 回复 发表于 2019-3-28 13:24
  • TA的每日心情
    慵懒
    2022-4-7 15:32
  • 签到天数: 27 天

    [LV.4]偶尔看看III

    9#
     楼主| 发表于 2019-3-27 21:36 | 只看该作者
    bluskly 发表于 2019-3-27 11:30
    - G% k7 [' A( E4 g/ o还是降频看看能稳定不,不能稳定的话基本也不太可能是layout的问题。

    4 m  V8 i) S" G3 h: N- P, Y谢谢回答。6 `3 d& u2 K8 `, n6 ]
    从2133降频至1600有改善,但是还是有错,我觉得降到1600了,时序、信号质量方面的余量应该很充足了,不应该再出错了才对,所以我倾向于不是信号完整性方面的问题。
    2 ^) u4 ~* Q- q3 X% T6 ]
  • TA的每日心情
    慵懒
    2022-4-7 15:32
  • 签到天数: 27 天

    [LV.4]偶尔看看III

    10#
     楼主| 发表于 2019-3-27 21:38 | 只看该作者
    Frank9523 发表于 2019-3-27 13:473 T2 c% z5 K. @. u# {3 s1 X
    楼主有做过FPGA的DRAM Training吗?

    3 W# y, C& [( R$ |. K: C谢谢回答。
    7 i: J5 }3 P! t: X我不知道您说的FPGA DRAM Training是啥意思?我们应该没做过,您能更加详细地说一下吗,谢谢了。8 C% G% g  N4 a" g, G

    点评

    就是根据你布板的走线长度,计算出板间延时参数。xilinx可以进行training algorithms。之前在zynq平台遇到过类似的问题,就通过修改板间延时参数解决的。你可以看下下面这个链接。https://www.xilinx.com/support/an  详情 回复 发表于 2019-3-28 08:54

    该用户从未签到

    11#
    发表于 2019-3-28 08:54 | 只看该作者
    gavinhuang 发表于 2019-3-27 21:382 U& v& h- D3 z" T* o% S
    谢谢回答。: V* K% c# y* \$ X8 Q
    我不知道您说的FPGA DRAM Training是啥意思?我们应该没做过,您能更加详细地说一下吗,谢谢 ...
    0 d- Z+ h+ }! ^. v  f" b
    就是根据你布板的走线长度,计算出板间延时参数。xilinx可以进行training algorithms。之前在zynq平台遇到过类似的问题,就通过修改板间延时参数解决的。你可以看下下面这个链接。https://www.xilinx.com/support/answers/46778.html
    ) ~3 O! I. K& _- ?8 ^
    - j' v% @1 l3 p- U, S( z

    4 l) L" t1 O. o8 O3 T! Q* H$ O: J0 `! k

    9 B5 K7 ~; X- y! v3 m7 b

    点评

    谢谢。我们布板的时候已经考虑封装的延时进行等长了,等长方面应该没问题。你发的那个链接,我看了一下,只针对于Zynq系列的器件,我们用的KU系列,没有这个东西。  详情 回复 发表于 2019-3-28 09:59
  • TA的每日心情
    慵懒
    2022-4-7 15:32
  • 签到天数: 27 天

    [LV.4]偶尔看看III

    12#
     楼主| 发表于 2019-3-28 09:59 | 只看该作者
    Frank9523 发表于 2019-3-28 08:54
    ; F/ L2 Z& m  c! H+ j3 }+ M, ?就是根据你布板的走线长度,计算出板间延时参数。xilinx可以进行training algorithms。之前在zynq平台遇 ...

    0 }- m& r8 G5 D" X谢谢。我们布板的时候已经考虑封装的延时进行等长了,等长方面应该没问题。你发的那个链接,我看了一下,只针对于Zynq系列的器件,我们用的KU系列,没有这个东西。( c! n  _  y  X5 R
  • TA的每日心情
    奋斗
    2021-3-10 15:58
  • 签到天数: 11 天

    [LV.3]偶尔看看II

    13#
    发表于 2019-3-28 13:24 | 只看该作者
    gavinhuang 发表于 2019-3-27 21:16
      B0 [: j# f$ O% Y8 Y  v谢谢回答。# B( m/ s5 n4 V8 J
    从2133降频至1600有改善,但是还是有错,我觉得降到1600了,时序、信号质量方面的余量应该很 ...
    4 r! B) D8 B* C* F% J# N  G% m; @5 s
    降到1600有改善,不是说明和信号完整性有关吗?FPGA和DDR芯片底下电源正常吗
    3 P$ r/ A% S5 @6 @; h& n5 ]

    点评

    1、本来FPGA内部就能自动调整DQ、DQ是的读写时序,能够调整的幅度多达75ps,再看下面的第一张图,从2133降到,1600,时序的裕量又多了78ps,这两个裕量加起来,至少150ps; 2、看下面的第二张图,地址控制线这些  详情 回复 发表于 2019-3-29 10:52

    该用户从未签到

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

    点评

    谢谢回答。 你说的不同颗粒DQ对齐是什么意思呢?现在我们低位颗粒上的数据是DQ0-15,高位颗粒是DQ16-31,不知道你说的是不是这个意思。 我一直在怀疑是不是FPGA的哪些设置没打开,但是让FPGA逻辑工程师确认了,  详情 回复 发表于 2019-3-29 11:11
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    关闭

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

    EDA365公众号

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

    GMT+8, 2025-10-12 10:37 , Processed in 0.171875 second(s), 31 queries , Gzip On.

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

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

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