2026年FPGA大赛用国产高云GW2A做多路千兆以太网UDP收发,为什么仿真能过但上板丢包率超过30%?

开放4 回答 66 浏览

队伍第一次用高云GW2A做四路千兆以太网UDP数据收发,仿真里包全部收齐,上板后丢包率一直在30%以上,抓包看是CRC错误和短包异常。已经排查了时钟约束和PHY配置,还是找不到根因。想问问有经验的同学,这种情况通常是RGMII时序没约束好、FIFO深度不够,还是PCB走线等长没做?两周内要出稳定版本,该从哪一步开始定位?

分享:

4 个回答

  • 数字电路入门生

    先别急着换板子或者加 FIFO,仿真过、上板 CRC 错加短包,这个组合本身就很有指向性:仿真里 RGMII 是理想时序,PHY 的延时、PCB 的偏斜、时钟相位全都不存在,所以问题大概率出在物理层和时序约束的交叉地带。两周出稳定版,我建议按下面顺序压缩排查:第一天先把四路里只留一路跑,其余三路逻辑关掉或拉低使能,看单路丢包率是不是掉到接近零。如果单路也丢,那基本不是资源竞争,而是 RGMII 接收路径本身有问题。第二步确认你的 RGMII 是 PHY 内部延时模式还是 PCB 走线延时模式,高云这边常见坑是约束里没做 input delay 的 min/max,或者 PHY 延时开了但代码按非延时处理,采样点正好落在跳变沿上,表现出来就是 CRC 错和短包。第三步看时钟,RGMII 的 RX_CLK 是 PHY 回送的,要确认它是否走了全局时钟资源、有没有被当成普通信号布线。第四步才轮到 FIFO 深度和跨时钟域,四路同时打满时如果 FIFO 只按单路峰值算深度,背压没做好会整包丢弃,但那通常表现为丢整包而不是 CRC 错。PCB 等长优先级放最后,除非你板子是自己画的且没做等长,一般厂家参考设计不会差到 30%。风险在于你可能花一周调时序,结果发现是 PHY 配置里 RGMII 延时位没写对,所以第一件事应该是拿示波器或 ILA 抓一路 RX_CLK 和 RXD 的相位关系,看到真实波形再决定往哪走。你们现在用的是哪颗 PHY,PHY 侧延时是内部延时还是走线延时?

  • 芯片爱好者小陈

    先别把锅甩给FIFO深度,四路同时跑才丢、单路大概率不丢的话,八成是你把四路的接收时序问题叠加放大了。给你一个我觉得性价比最高的顺序:第一步,把四路砍到一路,其余三路PHY的RX使能先关掉,只留一路跑UDP打流。如果单路丢包率掉到接近零,说明逻辑本身没大问题,问题在四路并发时的资源/时序收敛;如果单路还是30%以上,那基本就是RGMII接收路径本身,跟几路没关系。第二步,重点怀疑RGMII的采样点。仿真里PHY是理想的,没有内部延时、没有走线偏斜、没有时钟相位偏差,上板后这些全都冒出来。你要先确认你的PHY是开了内部延时还是靠PCB绕线延时,代码里对应的采样边沿是不是匹配,约束里有没有对RX_CLK做input delay的min/max。很多队伍只约束了时钟周期,没约束输入延时,综合出来采样点正好压在跳变沿上,表现就是CRC错加短包。第三步才轮到FIFO和PCB等长。FIFO深度不够通常表现为突发丢包而不是随机CRC错,等长没做更多影响的是长期误码率,不会一上板就30%。两周出稳定版,我的建议是先把单路跑通再做四路,别一上来就四路联调,那样你连变量都分不清。另外准备一个降级方案:如果四路时序实在收不敛,先把速率降到百兆验证通路,再逐步拉回千兆。你现在的RX_CLK约束具体是怎么写的,能贴出来看看吗?

  • EE学生一枚

    先别急着怀疑FIFO,四路同时跑才丢、单路大概率不丢,这个现象本身就说明问题在物理层和时序约束的交界处,而不在逻辑。仿真里PHY是理想的,没有内部延时、没有走线偏斜、没有时钟相位偏差,上板后这些全冒出来,所以你看到的CRC错误和短包其实是采样点压在跳变沿上的典型表现。给你一条我认为性价比最高的路径:第一步把四路砍成一路,其余三路PHY的RX使能关掉,只留一路打UDP流。单路丢包率如果掉到接近零,说明逻辑没问题,是四路并发时的时序收敛或资源竞争;如果单路还是30%以上,那基本就是RGMII接收路径本身。第二步确认你的PHY是内部延时模式还是PCB绕线延时模式,代码里对应的采样边沿是不是匹配,约束里有没有对RX_CLK做input delay的min/max。很多人只约束了时钟周期,没约束输入延时,综合出来采样点正好压在跳变沿上。第三步才是看FIFO深度和PCB等长,这两项优先级其实排在后面,因为等长没做好通常表现为误码率随温度或线缆变化,而不是稳定的30%丢包。风险提示一下:两周出稳定版,别一上来就改FIFO深度或重画板子,那是最贵的动作。先用ILA抓一下RX端的数据和CRC,确认错包发生在采样阶段还是缓存阶段,再决定动哪里。你现在的约束文件里RX_CLK是怎么写的,方便贴一下吗?

  • 新手程序员

    先对齐一下场景:你们大概率是学生队,板子是自己画的或者买的开发板,四路PHY挂在同一颗GW2A上,仿真用理想PHY模型,上板就炸。这种情况我见得比较多,先给个判断:四路同时跑才丢、抓包是CRC加短包,这个组合几乎不可能是FIFO深度问题。FIFO不够的表现是突发丢、连续丢,或者计数器溢出,而不是CRC错。CRC错说明数据在进MAC之前就已经坏了,问题在RGMII采样这一层。

    所以第一步别去调FIFO,直接把四路砍成一路,其余三路PHY的RX使能关掉。单路如果丢包掉到接近零,那就是四路并发时的时序收敛或者时钟资源竞争;单路还是30%,那跟几路没关系,就是RGMII接收路径本身。这一步半天就能做完,能帮你省掉至少一周的瞎猜。

    第二步查RGMII延时模式。高云的PHY配置里通常有个内部延时开关,你要确认代码是按延时模式采样还是非延时模式采样,两边必须对齐。很多队伍栽在这:PHY开了内部延时,代码却按无延时处理,采样点正好压在跳变沿上,仿真里PHY是理想的所以看不出来。约束里还要有input delay的min和max,只约束时钟周期是不够的。

    第三步才是PCB。等长没做确实会加剧问题,但它一般不会让四路全崩到30%以上,除非偏得离谱。你可以先拿示波器或者ILA抓一下RX_CLK和RXD的相位关系,比盲目改板子划算。

    顺带提个风险:两周出稳定版,别指望一次修到零丢包。先把单路做到稳定,再逐路加回去,每加一路测一次,这样出问题能立刻定位到是哪一路的走线或者哪个bank的时钟。你们现在四路是共用同一个时钟源还是各自独立?这个信息会直接影响排查顺序。

登录后可在本页底部提交回答

提问者

芯片设计新人查看主页
浏览「其他」

描述场景与已尝试方案,更容易获得有效解答

相关问题

同分类

提问建议

  • 标题写清核心疑问,避免「求助」「请问」等空泛用语
  • 正文补充环境、版本、报错信息或截图
  • 先搜索本站是否已有相近问题,减少重复提问
  • 若与课程相关,请标明课时或章节便于讲师定位