【摘要】
本文结合某单板(下文中统一称M单板)FPGA调试过程中发现地弹噪声造成某重要时钟信号劣化从而导致单板业务丢包的故障,来谈下如何最大程度地降低地弹噪声对单板信号完整性影响。一、故障现象M单板在进行业务调试时发现:如果只有上行方向有业务,上行业务正常无丢包;如果只有下行方向有业务,下行业务也正常无丢包;如果双向都有业务,下行业务丢包严重,上行业务正常。同时高温情况下比常温下丢包更加严重。二、故障分析通过逻辑内部定位发现丢包地点为下行SSRAM读写处,即下行业务包写入SSRAM,再读出后包内容出错导致报文丢弃。FPGA外挂SSRAM结构框图见图1,进入FPGA内部的上行业务和下行业务都需要通过各自的SSRAM进行缓存来实现一些功能。其中上行SSRAM的读写使用的是125M的本地晶振时钟,而下行SSRAM使用的是38M系统时钟。
图1 FPGA外挂SSRAM原理框图从故障现象来看,不是简单的时序问题,因为单独只有上行业务或下行业务时,业务都正常。而上下行同时有业务处理时,下行业务就会丢包,因此怀疑是上行的业务干扰了下行的业务。而下行业务受到干扰的最大可能就是下行SSRAM的时钟信号受到了干扰。为了验证此猜测,我们做的如下实验:使用高速示波器测量CLK_38M时钟,比较只有下行业务和上下行业务同时都有时的信号波形,看是否有区别。测试结果见图2和图3。比较可看出,只有下行业务时,时钟信号质量很好,而上行业务也有时,时钟的上升沿有一个明显的回沟,而回沟的位置在2.0V左右,而2.0V是VIH的临界电平,该回沟会导致FPGA误判,这样就会出现采样点错误而导致采样数据出错。
图2 只有下行业务时CLK_38M波形
图3 上下行业务都有时CLK_38M波形
上行业务是怎样影响到下行时钟CLK_38M的呢?查看M单板的原理图,发现CLK_38M和上行SSRAM的36根数据线在同一个I/O bank。那么最大可能便是上行SSRAM的数据线对CLK_38M进行了干扰。那么该干扰是FPGA内部的地弹噪声造成的还是FPGA外部PCB走线造成的呢?为了验证此问题,又做了2个实验。实验1:将图4中的R141去掉,然后在跟FPGA相连的电阻焊盘上飞一根线直接到SSRAM的时钟管脚,经示波器测量后发现仍然存在干扰。实验2:将图4中的R141去掉,在FPGA内部将系统来的38M时钟从另外一个bank的空余I/O口(该I/O本身有串阻引出)输出,同时将引出的38M时钟通过飞线连接到R141中与SSRAM相连的焊盘。经过示波器测试,发现干扰消失,同时进行业务测试时发现上下行业务同时发包时,下行业务正常。 通过上面两个实验可以确认此故障确定是在FPGA内部上行SSRAM的数据线翻转时带来的地弹噪声,干扰了下行了CLK_38M时钟,导致该时钟质量劣化而使得下行SSRAM读写出错,最终导致下行业务丢包。
图4 M单板原理图截图三、原因分析所谓“地弹”(ground bounce),是指芯片内部“地”电平相对于PCB板“地”电平的变化现象。以PCB板“地”为参考,就像是芯片内部的“地”电平不断的跳动,因此形象的称之为地弹。地弹是同步开关噪声(Simultaneous Switching Noise,简称SSN)的一种,SSN是指当器件处于开关状态,产生瞬间变化的电流,在经过回流途径上存在电感,形成交流压降,从而引起噪声。如果是由于封装电感引起地平面的波动,造成芯片地和系统地不一致便是地弹。对于任何封装的芯片,其引脚会存在电感电容等寄生参数。而地弹正是由于引脚上的电感引起的。我们可以用图5来直观的解释下。图中开关Q的不同位置代表了输出的“0”和“1”两种状态。假定由于电路状态转换,开关Q接通RL的低电平,负载电容对地放电,随着负载电容电压下降,它积累的电荷流向地,在接地回路上形成一个大的电流浪涌。随着放电电路建立然后衰减,这以电流变化作用于接地引脚的电感,这样在芯片外的PCB板“地”GNDPCB与芯片内的地GNDA之间,会形成一定的电压差,如图中的VG。这种由于输出电平转换导致芯片内部参考地点位漂移就是地弹。SSN噪声主要是伴随着器件的同步开关输出(SSO,即Simultancous Switch Output)而产生,开关速度越快,瞬间电流变化越显著,电流回路上的电感越大,则产生的SSN越严重。此外考虑得更广一点,除了信号本身回流路径的电感之外,离的很近的信号互连线之间的串扰也是加剧SSN的原因之一。
图5 地弹噪声产生原理图
而此故障确定是在FPGA芯片引脚有寄生电感。内部上行SSRAM的数据线翻转时带来了地弹噪声,干扰了下行了CLK_38M时钟,导致该时钟质量劣化而使得下行SSRAM读写出错,最终导致下行业务丢包。四、解决与预防措施了解了地弹噪声的原理,就可以针对地弹产生的机制制定相应的措施。1)降低芯片内部驱动器的开关速率和同时开关的数目。2)为了减轻近距离信号互连线直接串扰,尽量减少被干扰信号周围信号线的翻转。3)增大芯片地平面面积。对于1)和2),考虑到SSRAM的读写带宽有一定要求,读写的时钟速率和数据线位宽不能随意降低或减少。根据计算,做了如下调整:保持时钟速率125M不变,将SSRAM的36根数据线减少到29根,减少的9根数据线为离CLK_38M最近的几根。对于3),将CLK_38M所在的I/O bank中没有使用的I/O管脚在逻辑内部都设置为输出接地。通过改进,CLK_38M时钟质量有所改善,回沟电平位置上升到2.3V左右。在常温下只配置单路的双向业务时,业务正常无丢包。但是当配置4路的双向业务时,下行还是有少量丢包,高温下丢包更加严重。配置4路业务和配置1路业务的区别是,配置4路业务时,由于数据包的增多,SSRAM的数据线翻转更加频繁,导致地弹噪声更加严重,因此回沟也越深,如图6所示。
图6 配置4路双向业务时CLK_38M波形
通过查证,该FPGA芯片的抗噪能力这么差的原因是该芯片公司为了降成本,将芯片的封装进行了简化,芯片中原来4层的PCB简化为2层,去掉了专有的电源层和地层,同时将金线变成了铜线。因此在现有的芯片和PCB硬件设计上已经没有办法再降低地弹噪声了。正在无助的时候,思维转了个方向。既然没法降低地弹噪声,那有没有办法降低地弹噪声对时钟信号的干扰呢?如图6所示,芯片之所以会产生误判是因为正好在时钟的上升沿上偶尔会出现回沟,如果回沟的位置不在上升沿,而是在高电平或是低电平的位置,不就可以避免误判了吗?而回沟偶尔出现在CLK_38M时钟的上升沿,原因是上行SSRAM的数据线都在CLK_125M时钟的上升沿翻转,而CLK_125M与CLK_38M时钟不是同源的时钟,会周期性的出现CLK_125M与CLK_38M同时翻转的情况,也就是上行SSRAM的数据线在CLK_38M的上升沿处同时翻转而产生翻转噪声。为了将翻转噪声移到CLK_38M的高电平处,逻辑做了改动。即上行SSRAM不再采用CLK_125M时钟,而是将下行的38M时钟进行3倍PLL倍频后得到116M时钟,然后将116M时钟进行移相80°(经过示波器测量后得出的移向方案),由于116M时钟38M是同源时钟,因此相位关系是一定的,这样可以保证116M时钟和38M时钟不同时翻转。修改后CLK_38M时钟波形如图7所示,回沟移到了高电平处。
图7 上行SSRAM时钟改为116M并移相后的CLK_38M波形
同时为了改善CLK_38M时钟上升沿变缓的问题,在硬件上将时钟线的33欧姆串阻改为了0欧姆,且在逻辑内部将时钟线进行了上拉。经过改进后,时钟的上升时间明显变短。六、总结经过以上改进后,CLK_38M时钟质量有明显改善,上升沿光滑,上升时间短。配置4路双向业务,48小时长期常温和高低温情况下进行测试,业务正常,没有再出现下行丢包的情况。通过M单板调试过程中出现的地弹噪声干扰38M时钟信号的故障及解决方法。总结出以下几点:1)在FPGA硬件设计中,比较重要的信号,例如时钟和复位线等,尽量不要和多根翻转频繁的信号线放置在同一个I/O bank。2)在FPGA硬件设计中,比较重要的信号,例如时钟和复位线等,在其临近的周围I/O中不要安排翻转比较频繁的信号线,避免线间干扰。3)在FPGA逻辑设计中,没有使用的I/O空余管脚最好设置为输出接地,以增大地平面面积。4)如果地弹噪声无法避免,可以通过避免其他大量信号线和重要信号线同时翻转的方式,降低地弹对重要信号线的影响。5)对于地弹造成的重要信号线上升沿变缓的情况,可以通过加大被干扰信号的驱动电流,降低干扰信号的驱动电流的方法。同时将被干扰信号线在逻辑内部上拉。这些方法可以大大减小被干扰信号的上升时间,改善信号质量。
暂无评论