使用EP2C35 FPGA 设计了多个串口工作,出现了几个问题. 第一次, 由于内核电源1.2V 供电不是完整平面,而是带状线供电,EP2C35 在代码容量大的情况下,而且输入FPGA 信号变换频繁, 造成整个EP2C35 所有的D触发器停止翻转. 经过多次验证, 只要输入的FPGA 的IO 信号 太多, 并且有2M 串口信号进入, 任何一个可能动作, 都会造成FPGA 的时钟在D触发器停止翻转. 查阅Alter 的关于电源方面的资料.
altera 提供此方面的资料显示, 如果FPGA电源的完整性得不到保证, FPGA可能会出现意想不到的后果! 联想到本次FPGA内核电源的PI 特性不好, 估计出现这个问题可能是 FPGA 电路板的问题引起.
为了验证上面想法的正确性, 我们对FPGA的内核1.2V电源的平面重新进行分割并制板,然后把在上面电源完整行不好造成D触发器停止翻转的程序,在新板上测试,居然发现问题解决了! 得出一个结论,FPGA正常可靠的工作, 需要一个优质的电源来保证的.
第二次, 串口模块在新设计板上工作时, 出现一个怪现象. 单个串口程序模块与另外一块板进行串口通信时,串口通信工作正常.然而, 多个串口模块在新的FPGA板上工作时,发现一个问题, 串口通信居然不正确,频繁的出错. 串口模块在两块相同的EP2C35板上通信, 结果串口通信模块正常工作. 问题怪哉乎!
经过多次,对比和比较验证,发现问题居然还是出现在EP2C35的硬件设计上, EP2C35用作输入IO时,所有IO线并行走线,线路间干扰造成串口通信接收工作不正常. 当两个EP2C35模块相互通信工作正常,由于所有的IO翻转时钟都是同源,线路间干扰较小.当EP2C35模块与其他FPGA 的串口通信模块串口通信时,由于时钟翻转与别的串口输入翻转存在相位误差,产生高频干扰(线路间),引起串口通信不正常工作.
找到问题存在,解决这个问题方法:1.增加PCB层数,输入FPGA的IO线特别处理,增加间距和线宽;2.输入FPGA IO 口线串电阻,加电容,进行高频滤波;3. 软件滤波.