原创 三态总线驱动冲突引发的数据错误

2008-6-9 14:13 5570 9 12 分类: FPGA/CPLD

    这是几个月前调试的一个bug。表现为主机向FPGA虚拟的硬盘写入数据时出现数据CRC错误。 riple


    以前在UDMA方式下 riple 也调试过出现数据CRC错误的问题,大致可以分为两类:1. 数据的建立、保持时间有问题;2. UDMA的中止协议处理不当,引发一次无效数据传输,进而导致主机与硬盘计算的CRC结果不一致。 riple


    在SignalTap II下捕获的波形如下,采样周期单位10ns: riple


点击看大图


    该波形显示的是一次主机UDMA写操作数据传输完毕时发生的CRC错误。位于波形右侧的trigger就设定在CRC错误被检出时。在波形开始部分,显示的是该次数据传输最后几个字的传输波形。从光标处可以看出,主机驱动的16位数据毛刺很多,数据的建立时间无法保证。16位信号展开后的波形如下图: riple


点击看大图


    尝试采用逻辑分析仪观察数据总线,发现挂接探头后,问题恶化,波形异常,无法调试。 riple


    只得采用示波器观察部分数据总线,进而发现部分数据总线的电平有问题,主机驱动的0、1信号均无法顺利达到判决电平,存在ramp形式的波形(阶梯状上升或下降)。由此怀疑是设备端PCB的信号完整性或电源完整性有问题,尝试在电源之间加入电容仍然不能解决该问题。解决该的问题似乎只能重新制板。 riple


    在FPGA与PATA数据总线接口之间有串接的匹配电阻。为了进一步确认信号完整性问题,决定在该串联电阻前后观察信号波形。由此导致了该问题的解决。 riple


    通过观察该电阻前后的信号波形,没有发现波形形状上的差异,而发现在该电阻前后存在0.3V的电压差。进一步分析显示,在该电阻上有较大的电流流过,该电流导致了压降。 riple


    在正常的电路中,当主机驱动信号时,FPGA的相应引脚应该处于高阻状态,没有拉电流和灌电流,只有这样才能正确读取主机驱动的信号。但是在当前情况下,原本应该处于高阻状态的FPGA引脚却流过了较大的电流。该现象表明,FPGA内部的三态逻辑存在问题,不能正确产生高阻状态。进一步分析相应的HDL程序,发现在该条件下,确实存在不正确的电路行为,导致高阻状态不能出现在引脚上。修改该问题后,示波器上观察不到异常现象,UDMA主机写传输表现正常。 riple


 


    导致该问题分析方向错误的一个原因是,该错误电路在某一型号的主板上工作正常,长期测试稳定,与一款SATA桥接芯片连接工作正常,只是在兼容性测试中发现在特定主板上存在该问题。这一现象使我得出了FPGA内部不存在逻辑错误的结论。找到问题原因后,这一现象也得到了解释:由于总线驱动冲突的存在,总线上的电平受到串联匹配电阻的影响,该电阻起到了分压作用(这只是阻抗匹配电阻在该异常条件下的副作用,还起到了限流保护作用),在某些主板上,对PATA接口的驱动电压较高(或者是驱动电流较小),经分压后仍然能够达到正确的判决电平,所以测试通过,在某些主板上,由于南桥芯片的设计不同,驱动电压较低(或驱动电流较大),该问题就表现出来了。 riple


    注:南桥芯片的驱动电流差异应该比较说得过去。驱动电流大的好处是信号边沿较陡峭,上升下降速度快,信号的切换时间较短,相应的数据稳定时间就较长,可以实现更高的数据传输速率。上述没有出现问题的主板型号较老(865的),出现兼容性问题的主板型号较新(915和C61)。 riple

PARTNER CONTENT

文章评论3条评论)

登录后参与讨论

ash_riple_768180695 2008-6-27 12:43

一个很低级的错误:该高阻的时候驱动输出了。没有什么特殊的。把这个简单错误写在这里不是为了说明错误本身,而是为了记录一段查找、解决错误走过的弯路。 多谢你的鼓励,也希望看到你的心得体会。

用户1335880 2008-6-26 09:59

三态逻辑的哪个方面出了问题,怎么修改的。我觉得配置的时候模式对了,自己会保持高阻态的。

用户1053025 2008-6-10 14:54

赞一个!riple,看下我的博客,加入我们的原创博客QQ群和原创博客小组吧
相关推荐阅读
ash_riple_768180695 2015-12-18 11:06
学习示例程序:FPGA快速系统原型设计--敏捷实践
        学习与开发板配套的示例程序,是敏捷实践的起点。示例程序是厂商针对开发板上提供的硬件资源和接口量身定做的工程,可以展示其FPGA芯片的功能和性能特点。从示例程序入手最大的好处就是:示...
ash_riple_768180695 2015-11-03 16:46
开发板选取:FPGA快速系统原型设计--敏捷实践
    既然是“实践”,就不能只谈编码和仿真,必须要上板运行、调试。这个虚拟项目的目标是实现一块兼容Intel82574L以太网控制器的千兆网卡,需要运行在一块具备PCIe接口和10/100/10...
ash_riple_768180695 2015-10-22 12:41
开篇:FPGA快速系统原型设计--敏捷实践
    虽然借用了 “系统原型开发”的标题,本系列文章将围绕FPGA IP级别的开发这个主题展开,如果可能的话,将扩展至FPGA System级别的开发。     先上一篇PPT:RSPwFP...
ash_riple_768180695 2013-08-26 10:21
学习SystemVerilog(二)——学习它的理由
    学习SystemVerilog的理由也很多,我在阅读SystemVerilog for Design 和 SystemVerilog for Verification两本书前言的过程中,总...
ash_riple_768180695 2013-08-26 10:19
学习SystemVerilog(一)——不学习它的理由
    想要学习SystemVerilog已经很久了。曾经尝试通过Accellera网站上给出的LRM学习,怎奈内容众多,找不出入手点和重点,只能望而却步。虽然手头有三本SystemVerilog...
ash_riple_768180695 2011-06-26 23:20
Hardware-Assisted IEEE1588 Implementation Analysis
06/18/11 11:00:05 PM         最近一段时间在研究IEEE1588-2008精确时间同步协议(PTP)。该协议可以在软件中实现,如果需要提高时间同步...
EE直播间
更多
我要评论
3
9
关闭 站长推荐上一条 /3 下一条