EDA365电子论坛网

标题: 求教,FPGA引出来的DDR4读写错误,帮忙分析一下! [打印本页]

作者: gavinhuang    时间: 2019-3-26 15:04
标题: 求教,FPGA引出来的DDR4读写错误,帮忙分析一下!
总体情况:我们用FPGA挂了2通道的DDR4,读写出错,具体情况如下:, S* m2 M, X$ m- p6 Q/ G5 ^& G! ~
. K2 s" \+ V% j* o
1、使用的是Xilinx的KU040,引出来了2个通道的DDR4,每个通道位宽是32位,每个通道由2颗x16的DDR4颗粒组成,fly-by拓扑,设计的运行频率是2133;
9 @; u& K& k/ a, v6 Q2、bank47、48组成CH0,bank67、68组成CH1,PCB图中,右边的两个颗粒是CH0,左边的两个颗粒是CH1;
# t9 J* x. k& n2 \, B/ n& @4 }3、现在出现的问题是读写出错,往DDR颗粒中写满数据,再读出来,与写入的进行对比,发现错误;' @; G2 B& Z' Q4 f1 c8 T
4、测试的情况是,测了3块板子,3块板子的CH0都出错,有1块板子的CH1出错,2块没有错(这些测试结果,每个CH都是基于32位位宽进行测试);+ [' G$ W) m3 e( _; k4 c- m# \
5、重点来了,我们在逻辑程序里,把每个通道高16位的颗粒的DQ/DQS/DM信号禁掉,因为是fly-by,ADDR/CMD/CTRL禁不了,这种情况下,测试所有的板子、通道都没问题;/ L- u/ R0 Z4 O; a- H# {
6、我们反过来把低16位的颗粒数据信号禁掉,只保留高16位的颗粒,测试有错,错误的现象、错误个数的数量级跟之前32位都测的时候基本一致;1 Z' m1 P0 i% x0 z! P
: s" Q6 ?1 y8 u( u2 K) c
综上,帮忙分析一下可能的原因?谢谢了!
6 p( G% B+ g8 |2 @  v" c6 c1 M9 [, T+ ]2 a- W2 m2 @* N& H/ B
1、我们曾经很怀疑逻辑程序的问题,但是说不通的是,CH1没错啊,而且我们试了用极为简单的语句去调用IP核,也会出错,而且用16位程序没出错;
' ^4 F4 A" v) n0 g) Q, Q2、我按照FPGA的资料,仔细检查了硬件设计,也没发现什么错误;
% P. w; H- N6 t+ d) j' s
; X! i3 r5 ^6 V% i9 o! i+ D/ m # p. N3 W4 v; u9 _) B
0 n7 d% N  F2 s
( i' y0 r1 Y9 s2 ?* ]
1 y, i+ Y: A& c

- y( _" S9 B2 Y, _; d9 z+ c( s+ i1 D4 T0 D( y; w* N5 a

# `  R4 b4 |' G7 u3 y
3 K* N7 m. R6 `# C% t, x " C# B2 {' A+ w1 f  b' Q1 S
7 k) e- R  r3 c6 `
# x% n5 l' c! l

2 L6 a1 W, M; A- ]4 p) l( x* S" |4 R
作者: xbin    时间: 2019-3-26 18:53
能否降频使用,降频低16位有没有出错
作者: 2534758998    时间: 2019-3-27 09:50
学习,谢谢
作者: gabbana0529    时间: 2019-3-27 11:13
看layout高速线换参考层有没有补电容或是打via孔. 等线长检查. 用频谱看2.5G附近有无干扰. 确认公板有无一样问题. 改bootstrap降外频测试.
作者: bluskly    时间: 2019-3-27 11:30
还是降频看看能稳定不,不能稳定的话基本也不太可能是layout的问题。
作者: Frank9523    时间: 2019-3-27 13:47
楼主有做过FPGA的DRAM Training吗?
* X: e( U: s! k7 A& G- m
作者: gavinhuang    时间: 2019-3-27 21:16
本帖最后由 gavinhuang 于 2019-3-27 21:26 编辑
/ x2 O$ m  s- g' U* \1 i  z
xbin 发表于 2019-3-26 18:537 A0 ^) |( f1 e8 \
能否降频使用,降频低16位有没有出错
  T6 i+ c8 q0 H- `, R
谢谢回答。
7 [8 z7 }/ i2 G  D+ I# D! I: l从2133降频至1600有改善,但是还是有错,我觉得降到1600了,时序、信号质量方面的余量应该很充足了,不应该再出错了才对,所以我倾向于不是信号完整性方面的问题。
* n3 Z5 n1 L- v; u0 `) [0 o' U& p

% Y6 ^1 X. n" B* l如题目所说,禁掉高16位颗粒,只留低16位的颗粒的时候,完全没错,运行频率是2133都没错;
; q4 f5 |" W1 r; N2 p然而反过来,禁掉低16位颗粒,只留高16位颗粒的时候,依然有错,错误数量跟32位运行的时候是同一个数量级的。, f4 [" D7 H: N9 P

作者: gavinhuang    时间: 2019-3-27 21:35
gabbana0529 发表于 2019-3-27 11:13* f! ]; ~8 H3 b( w
看layout高速线换参考层有没有补电容或是打via孔. 等线长检查. 用频谱看2.5G附近有无干扰. 确认公板有无一 ...

# G# p% e- t; A$ [5 }% M" ~谢谢回答。/ p- d  R5 x( b, z$ C
没有换参考层,数据和地址都参考的是GND;
8 H5 T" ~3 T, ~& Z$ c等长检查了没问题;
5 X2 S2 N6 x* X2.5G的频谱暂时没办法看;2 b' R" b; N- C6 d, }
我们这个PCB跟xilinx的开发板差异大,不太具有对比性,不过原理方面确实是参考了开发板,开发板肯定没问题啊;7 p0 a4 u' C3 M) m' y
从2133降频至1600有改善,但是还是有错,我觉得降到1600了,时序、信号质量方面的余量应该很充足了,不应该再出错了才对,所以我倾向于不是信号完整性方面的问题。
  V$ `* z4 V" ~0 @
$ H, q) |1 o% H* p9 z
作者: gavinhuang    时间: 2019-3-27 21:36
bluskly 发表于 2019-3-27 11:30
9 c; l3 i% T; n: \1 r6 Z还是降频看看能稳定不,不能稳定的话基本也不太可能是layout的问题。

4 ^* m5 c7 S% V8 S9 @谢谢回答。
! H! |. G, [$ \从2133降频至1600有改善,但是还是有错,我觉得降到1600了,时序、信号质量方面的余量应该很充足了,不应该再出错了才对,所以我倾向于不是信号完整性方面的问题。$ e" }1 H8 H7 |5 v- p8 v

作者: gavinhuang    时间: 2019-3-27 21:38
Frank9523 发表于 2019-3-27 13:471 f* L, ~+ l0 Z! J
楼主有做过FPGA的DRAM Training吗?
+ F5 V/ S5 C' }* K# k% |
谢谢回答。
2 a' t) L/ a0 B8 T: {我不知道您说的FPGA DRAM Training是啥意思?我们应该没做过,您能更加详细地说一下吗,谢谢了。
6 a, t4 A# ^- P+ y; p
作者: Frank9523    时间: 2019-3-28 08:54
gavinhuang 发表于 2019-3-27 21:38
" C1 @  O* ]- L$ u: `, ^( E* x谢谢回答。. [6 E) [# F) X0 s$ H. n6 V
我不知道您说的FPGA DRAM Training是啥意思?我们应该没做过,您能更加详细地说一下吗,谢谢 ...
! b/ g1 R. f4 o* h% o
就是根据你布板的走线长度,计算出板间延时参数。xilinx可以进行training algorithms。之前在zynq平台遇到过类似的问题,就通过修改板间延时参数解决的。你可以看下下面这个链接。https://www.xilinx.com/support/answers/46778.html' C+ ~- k8 b; f; p  _
* o. l* G$ E# J( F# ?% T9 _; k
6 |$ k3 }: l6 Y! ^1 b* {
+ Y  `5 e& A) w
: ^" b( L% S% q8 ^; J

作者: gavinhuang    时间: 2019-3-28 09:59
Frank9523 发表于 2019-3-28 08:54* \; ~* K2 R; x; b. t. j
就是根据你布板的走线长度,计算出板间延时参数。xilinx可以进行training algorithms。之前在zynq平台遇 ...

+ i" d% H1 n5 X% {" w* K9 s谢谢。我们布板的时候已经考虑封装的延时进行等长了,等长方面应该没问题。你发的那个链接,我看了一下,只针对于Zynq系列的器件,我们用的KU系列,没有这个东西。( U. f) u1 _3 |1 @

作者: xbin    时间: 2019-3-28 13:24
gavinhuang 发表于 2019-3-27 21:16
8 w/ i( K% C* p4 P/ n# w* I" ^谢谢回答。
4 W3 ], i# J1 g$ G从2133降频至1600有改善,但是还是有错,我觉得降到1600了,时序、信号质量方面的余量应该很 ...

3 w2 ^4 z/ ]" s降到1600有改善,不是说明和信号完整性有关吗?FPGA和DDR芯片底下电源正常吗
; ?- ?% ]1 b) l; y* J
作者: kevin890505    时间: 2019-3-28 17:32
低位没问题,高位没问题,是不是因为fly-by要不同颗粒DQ要对齐?FPGA不知道是怎么玩的,CPU类的是自动校准,计算到每个颗粒的延时然后自己设置好寄存器。你问下FPGA的看看。
作者: gavinhuang    时间: 2019-3-29 10:52
本帖最后由 gavinhuang 于 2019-3-29 11:02 编辑
7 X7 T8 C5 j7 J
xbin 发表于 2019-3-28 13:24# Q2 j- d8 {! Z1 r
降到1600有改善,不是说明和信号完整性有关吗?FPGA和DDR芯片底下电源正常吗

( _# d3 K$ R' P' r  K) v' r, ~1、本来FPGA内部就能自动调整DQ、DQ是的读写时序,能够调整的幅度多达75ps,再看下面的第一张图,从2133降到,1600,时序的裕量又多了78ps,这两个裕量加起来,至少150ps;# {5 K( P7 O. }3 ~
5 O6 U9 T- c, P" |  m: X" S9 u
2、看下面的第二张图,地址控制线这些信号,从2133降到1600的情况下,时间裕量多了124ps;
$ z" z- k  r4 c& [: g; y! t5 C9 Q6 S
我以前做过3年多的SI,后来转行做硬件,现在原理图、PCB都是自己画的,虽然SI方面的知识也很有限,但是我画PCB的时候已经尽量按照我的SI方面的知识去画了,我自认为一般需要关注的点我都注意到了,我实在不相信我画的这个板子连1600都跑不了,而且用的这颗FPGA,IP核配置的时候,最低也只能配到1600了。; b( ?' D* z$ ]
还有,禁掉高位颗粒,只留低位颗粒的情况下,跑2133完全没问题。
% u7 {" W; ]) T- F- v7 M% `. W% ?& l- N/ f& z2 Y. W; c+ I$ A
2 A' d  V: ?+ d9 R( A

4 O. g& C3 G, X7 o4 ?
& ^& I/ ~0 |6 x1 I4 W( v; S  C" ~
8 }0 P8 O( z5 ], m0 d# A2 k" }
作者: gavinhuang    时间: 2019-3-29 11:11
kevin890505 发表于 2019-3-28 17:32
- l4 ~4 ?8 x8 w3 R( D/ E, o) `- ?低位没问题,高位没问题,是不是因为fly-by要不同颗粒DQ要对齐?FPGA不知道是怎么玩的,CPU类的是自动校准 ...
$ S+ v" f0 u$ e
谢谢回答。5 c9 q9 M) L- U6 d
你说的不同颗粒DQ对齐是什么意思呢?现在我们低位颗粒上的数据是DQ0-15,高位颗粒是DQ16-31,不知道你说的是不是这个意思。
& D: n" N  I+ [. G  }/ ?7 I( z: g+ h* X) O
我一直在怀疑是不是FPGA的哪些设置没打开,但是让FPGA逻辑工程师确认了,实在找不到可设置的地方了。现在发帖也希望让做过FPGA的朋友们帮忙看一下的。
' ^% A  _& o" I( t& i) P9 V% ^0 J
作者: xbin    时间: 2019-3-29 16:41
gavinhuang 发表于 2019-3-29 10:52
5 @) v" A: h4 K+ v( b7 m# I1 O1、本来FPGA内部就能自动调整DQ、DQ是的读写时序,能够调整的幅度多达75ps,再看下面的第一张图,从2133 ...

# l0 q' V- k" v( }( d1. 原理设计这块,官方有参考设计吗,有没有不一致的?7 v! W- a; x0 N, [( \; s8 {
2. 芯片底下电源正常吗
9 L3 t! F3 D/ b% N$ I3. 有没有官方的demo板,让FPGA跑跑看,有没有bug?! Z9 R2 ]4 C! v! O; c& o

作者: gavinhuang    时间: 2019-3-29 16:58
本帖最后由 gavinhuang 于 2019-3-29 17:00 编辑
" C# N+ G; o8 {) R+ U: K/ \
xbin 发表于 2019-3-29 16:414 W4 j: O* n9 `0 k
1. 原理设计这块,官方有参考设计吗,有没有不一致的?3 r9 [# \, D/ f6 }0 ?
2. 芯片底下电源正常吗
. N( ]( A& f* m+ Z" t# Q7 G3. 有没有官方的demo板 ...

% C4 y# q' n! e, Q5 @1、原理设计几乎就是参照官方的参考设计去做的,根据走线便利性调整了一些信号所在的管脚,官方明确说可以调整的,调整的时候需要按照一定的要求调整,确认我们都满足了的;
! h' _9 N. I6 F" Q2、芯片底下电源正常;
0 v, }' r9 T# t) L8 O1 Y1 W+ d3、有官方的开发板,开发板跑着肯定没问题啊;
8 x: e, E9 Y5 h2 b
作者: 哈哈061    时间: 2019-3-29 17:01
上面的DDR4是高16位吗?看下FPGA的读写平衡打开了吗.
作者: xbin    时间: 2019-3-29 17:09
gavinhuang 发表于 2019-3-29 16:58
  c+ d7 l2 i/ i9 _( v6 p. S1、原理设计几乎就是参照官方的参考设计去做的,根据走线便利性调整了一些信号所在的管脚,官方明确说可 ...
1 E  @# R: L4 O/ b0 P
尴尬了,第三点,看来还是硬件的问题呀。这锅你要背了。
9 }' f2 t) F& g/ n9 e8 ?' `* h
作者: gavinhuang    时间: 2019-3-29 17:38
哈哈061 发表于 2019-3-29 17:01: F+ `+ F3 L/ x" P3 |
上面的DDR4是高16位吗?看下FPGA的读写平衡打开了吗.
9 @$ W  e# y( |) ?0 a4 t
谢谢回答。$ w" l4 Z5 h& n" U: q( o+ o1 P* R

' ^3 M# Y- O: j" Q: j, c你说的“上面的DDR4”是指我PCB图里面上面的那个颗粒吗,上面的是低位,下面的才是高位。7 x- Q$ ?' b9 m, P( G/ Z

. `' w  ]. c  ~' ]没找到FPGA的读写平衡相关的设置选项,所以应该是默认打开的才对。' ?  r8 b. X1 F( @

作者: gavinhuang    时间: 2019-3-29 18:10
xbin 发表于 2019-3-29 17:09
% i( x& w$ H* k: l5 R尴尬了,第三点,看来还是硬件的问题呀。这锅你要背了。

  W* U) n. {+ h. B$ ~) Z: C/ k4 H是啊,早就基本上指向硬件了,但是就是找不到硬件的问题点。
$ g  |4 t8 |3 X: z/ F3 y% ?! v$ D& R# q. p8 Y8 V
最新消息:7 ^9 E2 b! B+ b9 n( B$ J
1、请看以下图一官方推荐的拓扑,地址/命令/控制线在外部有端接电阻上拉到0.6V-VTT,今天在其中一块板子上试了一种办法,就是把地址/命令/控制信号的外部端接电阻从39.2欧换成了49.9欧,然后这块板子没出问题了!!!!
* q# E1 j1 Q; E+ E  \& P2、图二是官方对于图一拓扑上各个走线区域的走线要求;
9 ]; G7 H* i8 |. j7 M) @( E; C3、我想不通:+ D: E% p9 U9 a2 h# Y  R; U- ]
3.1)、官方推荐的端接电阻是39.2,我就是按这个阻值做的,这个端接电阻怎么至于影响这么大,从来没见过DDR需要换这个端接电阻的;
) a3 w0 |; y1 `9 u+ H3.2)、唯一比较合理地解释是,我主走线(控36欧姆)的区域,占总长的比例太小了,因为这个板子上,DDR颗粒距离主控芯片实在太近,除了两头BGA的fanout区域,能够正常控阻抗的区域实在太短了,现在从FPGA到第一个颗粒的长度,总长也就1700mil左右,两个颗粒之间的距离大概450mil,能控36欧姆的走线长度,有的信号上只有两三百mil,难道是这个原因,所以50欧姆的端接更匹配?
+ g% d( z; }( E
9 _7 |6 u  O2 I$ u2 H7 ^8 _
; a6 o" w# o' ?0 h' S& T 7 M1 o; d+ V1 p1 c# a* R

作者: xbin    时间: 2019-3-29 18:56
gavinhuang 发表于 2019-3-29 18:10& }5 T4 `9 `; j' r0 L/ t; ~5 ]& T1 g
是啊,早就基本上指向硬件了,但是就是找不到硬件的问题点。7 j' {4 |# u7 T; Z' ?/ C- Z
2 ?4 B! j9 O4 D% S9 Y
最新消息:
; U- H4 D8 j. m; y+ E4 _; f0 N, N
参考设计用5个DDR,你这个用2个而已,是不是也和这个有差异。有没有高速示波器,可以看看Addr在RTT的信号怎么样,说不定之前过冲下冲严重导致异常?
4 [6 M& A" V. |1 A2 X
作者: xbin    时间: 2019-3-29 19:10
gavinhuang 发表于 2019-3-29 18:10
; Q$ n# j( k% k7 N! x是啊,早就基本上指向硬件了,但是就是找不到硬件的问题点。1 a' a9 ?" V2 b# Z
3 ~  t0 A) A/ q  g" `
最新消息:

3 T& \3 _9 v. b, Bhttps://forums.xilinx.com/t5/Memory-Interfaces/Fly-by-ddr3-termination-value/td-p/809007 官方有个提问,说RTT影响DDR3使用频率。( U  m# Z. D3 \+ l

作者: 千里之行    时间: 2019-4-19 11:44
检查一下高位颗粒的电源走线,会不会存在远端电压跌落的问题。
作者: hhawwl    时间: 2020-1-6 15:06
最后解决了吗?  m; r. Z/ e) T/ q" @; w) I

作者: anguchou    时间: 2020-1-7 21:55
:):)
作者: garden009    时间: 2020-1-7 22:22
学习一下了:)
作者: tellmewhen    时间: 2020-1-9 11:50
学习了,谢谢各位分享解决思路,想问问楼主最后问题解决了吗?
作者: dqwuf2008    时间: 2020-8-5 16:33
学习了一下,不错啊
作者: jeamy    时间: 2020-10-20 18:14
您好 请问找到原因了吗?
作者: jeamy    时间: 2020-10-20 18:23
gavinhuang 发表于 2019-3-29 18:10, P) I8 g8 Y7 o" A
是啊,早就基本上指向硬件了,但是就是找不到硬件的问题点。
) q! M, C! h& F
$ i3 M2 r% j1 S最新消息:
( [  [# p4 t/ t* m! _
% _4 m/ {- ~% m1 z" P2 X: M) ~! i0 h
您好 我的板卡也遇到了一样的问题,终端匹配换成50欧后无错误的最高速率有提升,但是跑不到最高速,请问您找到问题原因了吗?
作者: gavinhuang    时间: 2020-10-21 09:03
jeamy 发表于 2020-10-20 18:230 w6 j% R3 V/ U4 a/ ~0 k5 v3 E9 {; v
您好 我的板卡也遇到了一样的问题,终端匹配换成50欧后无错误的最高速率有提升,但是跑不到最高速,请问 ...
' K1 t+ b  m6 e: V9 N6 t& b4 ]
我的板子后来查到的原因是VTT电压上的纹波很大
+ p6 D) b) Z5 B: F1 h
作者: jeamy    时间: 2020-10-22 18:17
gavinhuang 发表于 2020-10-21 09:03. ^  D2 o( Y. H7 b" L
我的板子后来查到的原因是VTT电压上的纹波很大
8 V9 g2 k$ @: Z9 i
我量的VTT纹波大概是20-30mv,这个正常吗?纹波过大您是通过加滤波电容解决的吗?
作者: gavinhuang    时间: 2020-10-23 09:11
jeamy 发表于 2020-10-22 18:17" |8 L8 t, o, n% N$ X
我量的VTT纹波大概是20-30mv,这个正常吗?纹波过大您是通过加滤波电容解决的吗?
  @% c: K$ [9 G. u+ e6 v- g5 r, r
你这个纹波算正常吧,我当时的纹波都300多mV了,我那个是因为生成VTT的电路,本来想着从远端取反馈能精确点,不过取反馈的走线太细长,不知道是类似于自激了还是咋回事,导致纹波很大,改成就近取反馈就好了
6 A% U2 g' p5 w4 T6 Y! Z




欢迎光临 EDA365电子论坛网 (https://bbs.eda365.com/) Powered by Discuz! X3.2