vivado2017.2一个工程下,两个互不相干的模块会相互影响,只有屏蔽其中一个另一个才能正常工作。使用此芯片第一次发现如此诡异现象,现在依然没有找到根本原因,只找到了规避方法,各路大神如果有相关经验或者建议请小窗告知,感激不尽!
问题现象
工程中有一个串口通信模块,多个Aurora模块。其中一个Aurora模块和串口模块有冲突,不能同时出现,否则串口可以正常使用,但是Aurora不能正常工作,表现为channel up始终为低,输入时钟锁不定,locked信号一直为低。
当没有串口模块的时候所有Aurora模块都正常,硬件上也查看了时钟,完全正常,所以排除外部时钟问题。
时序报告里面没有任何告警,时序裕量大于0,而且串口是低速,高速接口 是时钟锁不定,和时序也不应该有关系。
分析和测试过程
首先屏蔽了串口模块后可以正常,可以说明是串口模块里面某个部分影响到了Aurora。可以采用如下策略,先屏蔽一半代码,如果没有复现问题说明,影响因素在屏蔽的代码里面,反之亦然。
通过这种类似二分法的方法,最终发现主要是串口里面的VIO的影响,屏蔽VIO后串口和Aurora都正常。
由于VIO控制的信号和Aurora根本没有任何联系,所以打开了布局布线图查看了二者的分布情况,示意图如下:
红色底是Aurora的分布范围,白色的是串口模块,被Aurora包围了。尝试了一下手动布局让串口模块和Aurora不产生交叉,变成了下图所示:
布局变成上图所示后,除了布局外,没有任何其他改动,VIO也依然存在于串口中,但是串口和Aurora都可以正常工作了,也就是时钟锁定,channel up拉高,通信数据check完全正常。目前找到这里,只有在硬件上再查一查有什么漏掉的点可能出问题的。想从FPGA上下手找更加根本的原因目前还没想到更好的方法,欢迎各位和我讨论。
没有回复内容