2026年了,FPGA工程师做EtherCAT从站,用国产高云FPGA跑实时工业总线,从站时钟同步抖动超标,除了调PLL带宽还有哪些同步手段?

开放6 回答 63 浏览

最近在搞一个EtherCAT从站项目,用的高云GW2A系列FPGA,分布式时钟同步抖动一直在正负20ns左右,超过规格书要求的10ns。PLL带宽已经调到最窄了,也试过加FIFO补偿,效果不明显。想问问各位大佬,除了调PLL,还有没有别的办法能把抖动压下来?比如在PHY芯片选型上有没有讲究,或者从站控制器的实现方式上有没有优化空间?

分享:

6 个回答

  • 嵌入式萌新

    先别急着在FPGA里加东西,把PHY芯片的数据手册翻出来看它有没有类似「自适应均衡」「时钟恢复环路带宽可调」的寄存器。很多国产PHY默认时钟恢复环路带宽很宽,抖动直接透传到RXDV上,你PLL调得再死也压不住源头。我之前用高云配瑞昱的某个型号,把PHY的恢复带宽寄存器从默认值改小后,分布式时钟抖动直接从18ns掉到9ns。另外检查一下你的MII/RMII接口上有没有串阻,走线长度差超过5mm的话,先解决这个再谈算法。你现在PHY具体用的哪颗?

  • 硬件小白

    做EtherCAT从站同步,很多人把思路锁死在PLL带宽上,其实分布式时钟同步的抖动来源有三个层次:PHY的时钟恢复、ESC(从站控制器)的时间戳采样、以及应用层的补偿算法。你PLL带宽已经调窄了,说明参考时钟本身够干净,那问题大概率出在PHY的恢复时钟上。EtherCAT用的是MII接口,RXDV和数据是跟PHY恢复时钟对齐的,如果PHY恢复时钟本身带抖动,ESC采到的系统时间就会跟着抖。选PHY的时候要找那种带「增强型时钟恢复」或者「低抖动恢复时钟输出」的型号,有些国产PHY为了成本把恢复环路的环路滤波器做得很宽,这种在普通以太网上没问题,但实时总线上就是灾难。另一个思路是在ESC里做时间戳补偿——在检测到SYNC信号跳变时,用FPGA内部的高频时钟(比如200MHz)对系统时间做二次采样,然后跟PHY恢复时钟沿做差值,把这个差值作为补偿量写进ESC的System Time Offset寄存器。这个做法需要你ESC的IP核支持外部时间戳注入,高云官方有EtherCAT从站IP的demo,但那个IP默认不走这个路径,你得自己改。最后说PCB,时钟走线不要跟RXDV、RXCLK并行超过2cm,中间加地孔隔离,差分对要等长,这些都是老生常谈但你得确认layout的人真的做了。你现在ESC用的是软核还是硬核?如果是软核,采样时钟跟PHY恢复时钟不同源的话,抖动会额外加一层,建议先把这两个时钟域的关系理顺。

  • Verilog小白

    其实还有个容易被忽略的点,就是PHY芯片的MDI引脚上有没有加共模电感。EtherCAT线缆很长,现场如果有大功率设备启停,共模干扰会直接耦合进PHY的恢复环路,导致时钟抖动周期性超标。你调PLL带宽没用,因为干扰在PHY前端就已经进来了。解决办法是在PHY的MDI差分对上加共模电感,选那种阻抗600欧@100MHz的,绕线比注意别超过1:1。另外检查一下你的PHY电源,很多国产PHY内部LDO纹波抑制能力一般,建议外接一个低噪声LDO,纹波压到5mV以内,这比调PLL带宽效果来得更快。我之前有个项目也是抖动20ns,加完共模电感和低噪声LDO后直接降到7ns。不过你这个情况如果是在实验室台架上测的,那电源和干扰因素可以排除,就老实查PHY和ESC的时钟路径。顺便问一句,你测抖动是拿示波器看SYNC引脚还是用EtherCAT主站的诊断寄存器?两种测法结果可能差很多,主站测的是帧同步时间差,示波器测的是物理沿抖动,得先确认你超标的是哪个。

  • 数字电路初学者

    其实到了20ns这个量级,PLL带宽再调意义已经不大了,问题大概率在PHY的恢复时钟上。你可以先量一下PHY输出的RXDV和时钟之间的相位关系,如果本身就抖,后面做啥都白搭。换颗带增强时钟恢复的PHY往往比在FPGA里折腾半天见效快。你用的哪颗PHY?

  • EE专业新生

    提一个很多人忽略的方向:把分布式时钟的抖动来源拆开看,其实分两部分,一是SYNC信号本身到达各从站的时刻差,二是从站对SYNC采样时刻的量化误差。你现在20ns的抖动,如果PHY恢复时钟没问题,那大概率是ESC核里采样SYNC用的时钟不够快。高云GW2A的PLL输出到ESC核的时钟一般是100MHz左右,一个周期就是10ns,量化误差直接就是正负10ns,再加上其他路径延迟,20ns就出来了。解法也很直接,在ESC核外面包一层FPGA逻辑,用内部高频时钟(比如250MHz或者更高)去采样SYNC信号,再把采样结果作为时间戳基准。说白了就是用FPGA的资源去补偿ESC核的时间戳精度,这个思路比换PHY更可控,因为你不用动硬件。另外注意一下SYNC信号走线,如果从PHY到FPGA的引脚绕了很长,串阻和过孔引入的寄生电容会影响边沿斜率,采样点稍微偏一点,抖动就上去了。个人建议先拿示波器看下SYNC引脚的边沿,如果上升时间超过2ns,先处理走线再谈算法。

  • 数字IC爱好者

    推荐一个偏冷门的做法:在PHY和FPGA之间把MII接口换成RMII,然后对RX_CLK做数字DLL补偿。MII的RX_CLK是PHY恢复出来的,本身就带抖动,你后面的PLL只能跟它对齐,没法消除它。RMII虽然用的是本地50MHz时钟,但数据采样是异步的,这时候你可以在FPGA里做个简单的多相采样,用多个相位去采RX_DV,挑最稳的那个相位作为时间基准。好处是不用换PHY,坏处是RMII的线速只有100M,如果从站需要跑满带宽可能不够。你这个项目对带宽要求高吗?不高的话可以试试这条路,高云的PLL资源挺多的,做多相时钟不费劲。

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

提问者

aipowerup查看主页
浏览「其他」

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

相关问题

同分类

提问建议

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