FPGA程序时好时坏,求原因。
最近在使用verilog编写了一个程序,是在v6板子上实现的,软件是ISE14.2。
我昨晚上综合了一下完整的大程序,在调试过程中,发现程序的一个模块出现了问题,结果中有噪声,但不清楚噪声是怎么来的,接下来,我把程序中的其他模块都注释掉,单独包含该模块,编译综合后测试了一下该模块,发现没有问题。然后我又综合了一遍完整的程序(就是之前有问题的那个)。今天早上,我把生成的bit文件下到板子里,奇特的是竟然没有问题了,但是我没有怎么修改,只是在原程序中加了icon和ila,想用chipscope抓一下信号,看看问题所在,但是竟然没有问题了。
这个是不是说明程序不稳定呢,还是其他的什么原因,要怎么改进呢,多谢各位大神ORZ
求指导。ORZ
每次综合后布局布线的结果都不是完全一样的,如果出现不稳定的情况,
1. 可能时序问题。
2. 可能是程序的某个case被触发到了,导致错误出现。
整个大程序一开始调试的时候,所有模块全部都是通过的,后来,在程序的最后加了一个case语句,再调试的过程中,导致某个模块产生了错误,后来又综合了一遍,竟然没有错误了,请问,难道是case语句的问题,但是,理论上,case语句应该有影响啊。还有,你说的第二个原因的具体意思是什么啊,不太理解呀~
多谢多谢
刚才写错了,理论上,case语句应该不会有影响啊
这种 情况一般都是时序问题。
Do you check the synthesis report?how about your constraint coverage?
代码100%有bug,引起timing问题,导致fpga综合工具每次综合的结果不一致
代码BUG怎么找呀,会存在哪些bug呢,相比之前,只是多了一个case语句而已。多谢
我也遇到过这种类似问题,建议小编查查代码中,有没有输入的异步信号没有同步化,直接引入状态机控制。
主要查状态机的输入信号是否为同步信号。
如何将异步信号同步化呢?是不是类似于跨时钟域问题呢?
嗯,多谢,但是如何将异步信号同步化呢,能不能具体的说一下呢,多谢多谢
你的程序里应该有时序比较临界的环节,也就是说最大频率的余量不足,才会导致你增加一点调试模块会影响你的布局布线。
最简单的方法就是用你当前模块时钟讲异步信号打两拍后再使用。
明显是时序有问题,你加上去的那个case,敏感列表是否有增加相应的条件
可能是布局布线的问题 我以前也是 可能是时序处于临界了
这种问题最不好找了。
1) 检查时序约束,是否所有的时钟和逻辑都有约束。
2) 检查布局布线结果,是否有时序错。
3) 检查跨时钟域问题,是否都进行了处理。
4) 对高速serdes,检查参考时钟等,是否满足ppm要求。
总之,遇到这类问题很烦。在设计初期就必须多注意。
1)可能是评估频率不高,本身处于临界状态
2)可能没有考虑亚稳态或者存在跨时钟域现象
3)代码写的不好,导致功耗过大……
我也经常遇到这样的额情况
路过路过路过
像是电路的时序出现了问题
之前验过一条GPS基带,碰到的情况跟小编如出一辙,在VCS底下跑得很溜,一上FPGA就不稳定,做了一版STA分析之后,发现是有一部分电路路径过长,导致Setup Time和Hold Time均不够,系统主频无法跑到预期水平
理解小编的痛苦,祝小编早日搞定
以前也遇到过最后发现是程序有bug,。看看timing有问题没
看到这里 我相信是时序的问题的可能性非常大了
建议先看时序报告
没有问题的话,再看设计
看一下有没有STA的violation
看一下时序报告,最好加一下约束
或者检查一下代码是否有不完备的地方
很有可能遇到亚稳态了
一般都是时序问题
在用case的时候,一定要包含信号的完整性,如果不完整,会出现很多不稳定的问题。改进的办法是,用MUX代替case语句,这样,综合出来的结果会更好一下。
