【赛灵思FPGA】一次“血”的教训之Xilinx FPGA菊花链
0赞这篇文章主要是还原一个“事故”现场,具体原因有待进一步分析。
遇难芯片:1片Xilinx FPGA XC5VSX95T、1片PROM XCF32P、2片PROM XCF08P、一块盗版Xilinx Platform Cable USB II。
事故起因:如下图,左边板子的硬件是我做的,右边的硬件不是(但以前的整个系统是我调的)。我的工作就是将这两款板子的各个功能接口调试完成并将实验平台搭起来,剩下的工作就是动动嘴皮子就行了。之前,我一直在调试右边板子上的超高速AD,有一个通道有些误码(这个以后再谈)。之后,我画的板子回来了,便随心所欲的挨个调试。为了方便描述,左边板称为A板,右边板称为B板。
A板 B板
但是,手上只有一个我以前自己买的盗版下载线(官方下载线退还了),如下图。
盗版下载线 方下载线
事故之前还有个细节,A板刚送来时有隔离磁珠没有焊上,我挨个焊上测量电压均正常,唯独1.2V的磁珠左端正常,而右端只有800mV。当时觉得磁珠碍事,便换了0Ω电阻,但测量还是一样的情况。观察之后发现800mV出现的原因是我把示波器的地线接在了电源地上,而0Ω右端都是与板子右边那片数字区域相连(电源地和数字、模拟地之间也通过0Ω连接,单点接地设计)。因此,将电源地换成数字地,显示的就是1.2V了。这之后A、B两块板子单独找FPGA都是正常的。
事故过程:正当我认为都没问题,觉得其他电源都是磁珠,就1.2V是0Ω电阻,不满意便换回了磁珠。这里列出磁珠选用型号:PB2012-800/3A(100M阻抗80Ω、最大过流3A),ZRX图如下。
准备再次上电调试时,不幸的事情发生了(我只是单独上电,绝没有同时上点的可能)打开连接A板子的电源,显示的电流变大了将近200mA(输入24V)左右。这意味着肯定有东西短路了,计算机上FPGA也找不到了。马上关掉电源,上手去摸一下各个IC的温度,发现A板的PROM XCF08P已经发烫,但FPGA没有温度,其他也无异常,情况还不算遭。仔细看了下当时的电路,下载线连接如下图
虽然只有一个盗版下载线,但是刚好调试台下面有两**立电源,而我做的板子有14Pin接口,另外一块则刚好是6Pin接口。于是乎就想当然的将这两块板子同时挂在了下载线上。
现在记不清在未换1.2V磁珠上电测试之前,正常状况下这样是否连接过,隐约有这个印象是连过的。换了磁珠再上电就出了状况,这是我的第一反应。因为担心未上电的B板也出问题,我又开了下B板的电源,同样也是增加了200mA左右(B板12V输入,具体电流增加多少没太留意,A板正常应该是110mA,B板插上AD正常应该是500mA左右)。这下情况不妙了,B板的PROM XCF08P一样很烫,背面的PROM XCF32P也有点温度但不烫,FPGA一样无明显的温度变化,其他IC,包括电源都无异常。再看看下载线,还是绿灯,电源正常,但是坏的可能性已经很大了,我以前也用坏过盗版下载线,不过没有烧过配置芯片。
事故排查:心急之下,第一反应便是还原之前的正常状态,因为怀疑是磁珠的问题,便把A板1.2V的电源磁珠换成了0Ω电阻。换了A板的PROM XCF08P,电源电流正常,但是这次单独连接下载线就找不到FPGA了,临时找到别的地方一个盗版下载线连上正常。心里暗自庆幸,希望B板也只是PROM烧了问题不算大。于是乎也换了B板的PROM XCF08P,因为它的温度太热了。撤下AD板再次上电,电流是降了下来,几乎回到了正常值的范围300mA左右(AD板加上500mA),但是依然找不到FPGA,同时我也用示波器彻底检查了下各个电压值,均无异常。那么,现在要做的就是检查B板的菊花链,主要保证FPGA未坏。取下08P和32P,飞线接出FPGA TDO到JTAG TDO,依然找不到FPGA,检查了N多遍(因为这个板子的下载线是用串口头引出的,起初总是怀疑是不是连线有问题),还是不找不到。为了确定FPGA的JTAG是否被打坏,除了看官方资料,调整了配置模式M[2:0]=101为JTAG模式外,还拿来了一个正常的小开发板挨个对比TCK、TDI、TMS、TDO。这下算是确认了。如下图所示。
正确的TCK
正确的TDI
正确的TMS
正确的TDO
而B板JTAG的TCK、TDI、TMS都有信号,并与正确信号类似只是信号电平有些出入,唯独TDO在示波器上触发不到任何边沿信号。FPGA的TDO无输出?这我想国内任何人都无能为力,只有更换芯片了。第二天换好的了FPGA、两块PROM的B板送过来,再次上电只找到了FPGA,ID还是错误的。这下是虚惊了一身冷汗,其实这个问题我碰到过不止一次,就是虚焊而已,以前是TQFP的FPGA虚焊,这次就是PROM虚焊。FPGA虚焊很可能就想以前那样找不到任何东西,PROM虚焊则可能找到些异常的东东,补焊一遍就解决了。这并不一定是焊工不行,在搬运或者移动过程中,一些颠簸或者摩擦振动、残渣都有可能引起虚焊,航空测试就有专门的振动试验,听别人说有的板子一上测试台连有些航空导线都被振的七零八乱的,这又和安装、接插件、设计结构以及工艺有关了。
事故分析:这次事故主要原因还是在于我的操作不规范,如果规规矩矩借个下载线分开调试,可能就不会有这么多麻烦事。但是,我还是有兴趣在分析下这个内藏玄机的事件。我是这样看的,我的目的只是换了磁珠,上A板电验证之前的正常状况而已,B板根本未上电,只是A、B两板由盗版下载线的转接头有连接关系。A板上电坏了XCF08P,Spartan6 XC6SLX25正常,而B板上不光是坏了XCF08P、XCF32P、最值钱的Xilinx FPGA XC5VSX95T的TDO(或者JTAG)却坏了(这也可能是我第二次上电打坏的,但B板电源依然完好)。这便是我觉得悲剧的地方,95T躺着都中*。我觉得有些差异,V5是真脆弱还是有别的原因。我画的FPGA板子在JTAG的供电问题上我都是3.3V和2.5V二选一,一般都是使用2.5V,而B板只能接3.3V,这是我调试忽略地方。A、B板菊花链(JTAG链路)如下图所示。
A板菊花链示意图
B板菊花链示意图
转接板连接图
虽然A、B板的JTAG电源不同,但只是上了A板电源的电,B板相当于负载。
有一种解释是B板3.3V负载较多,而A板2.5V只有PROM和FPGA的VCCAUX。由于同根下载线VREF和GND同时连接A、B板,负载变小。导致电源输出电流增加,同时A板菊花链TDO与B板菊花链的TDO共同连接在JTAG的TDO上,当A板响应时,TDO输出信号,灌进B板的TDO(V5)引脚,置其损坏。但两板的电源没有丝毫损坏,而且A板的FPGA还完好无损。也就是说,主要原因出在A板菊花链的最后一级,但又是什么原因造成最后一集的PROM被打坏的呢?电源过来的脉冲?不得而知。
另一个解释就是盗版下载线内部因为某种原因把脉冲漏进了TDO管脚,致使两条菊花链的最后一级的TDO被损坏,A板FPGA幸免的原因是前面有PROM用身躯挡住了脉冲,而B板则是FPGA第一个遭殃,后面的PROM靠近FPGA的也损坏(至于A、B板后级菊花链的一好一坏的结果可能与FPGA和PROM的JTAG结构有关,这就不是很清楚了)。对于盗版下载线的TDO是如何有输出脉冲的,也许浪涌是罪魁祸首。而官方的下载线是有这方面的保护芯片,盗版没有,至少我这款确定是没有。
至于我当时的第一反应磁珠,我自己也不敢肯定是否与它有关。虽然磁珠隔离只会吸收高频脉冲,是降压而非升压,即便是过流也不是一个磁珠造成的,更何况我换的还是1.2V FPGA核心电源的磁珠,这产生的浪涌也能漏进2.5V的话,FPGA还完好无损如何解释?。这就与TI开关电源模块的输出网络扯不上关系了。
事故小结:现在我深刻意识到调试贵重东西时候一定要按步就班,不异想天开、想当然的做。每次上电都要高度警觉,对电源,对开板子之外的一切外设接口都要留心。除自我约束之外,我想应该是时候好好研究一下JTAG下载线,之前也早有打算自己弄一个,但没有时间。再说了,USB传输比PCIe要小型化的多,到哪里都能用。刚好我导师的雷达上用到68013做为USB传输芯片,不过是与Altera的FPGA连的,不懂USB有点说不过去。这次如果真是盗版没有浪涌保护的原因,那就真的是一次大教训了。FPGA并不是金刚不坏之身,他的致命弱点或许就是TDO管脚。对于配置接口的浪涌保护,下载没有,那设计的时候不防加上。
(PS:题外话,写这篇文章主要为我自己留下深刻印象,有啰嗦的地方见谅,如有不同观点的动动手交流交流)