状态机为什么会跑飞?
还有调试过程 会发现 SIGNAL TAP 里的信号探测点或者内存深度的增加或者减少,再编译出来的程序,会导致FPGA工作不一样,有时候工作几份钟或者几秒钟状态机跑飞,状态机出现全0的情况,然后再改改SIGNAL TAP 设置 再编译出来,运行又稳定了。不知道什么原因,根本的问题是不是FPGA程序写的不够好?请高手指点
不知道你的资源占用是不是很厉害,加了signal Tap之后导致时序问题,因为signal Tap占用布线资源和一些块RAM资源,供参考。
噢谢谢 忘了说了 资源占的很少 , 全都不到 30%
我曾经遇到过signaltap检测结果不对的情况
找了很久没找到原因
你的频率是不是跑得比较高?
插不插stp信号,负载和时序是不相同的,可以看看将时序过约一些,可能有帮助
最好是能够用synplify primer做物理综合,可以避免这类事情发生
1# sweep7758
1、编译选项里有safestate选项,quartus默认关闭,所以default分支有可能不起作用
2、查看时序是否满足要求
频率的话 我用的是 50M,不算高吧?
用synplify primer做物理综合有什么优点吗?
我也在网上看到说 编译时 开启 SAFE STATE MACHINE 选项 , 但是 我没找到这个选项在哪, 我用的QUARTUS5.0 是不是太老了 没有? 谁告诉我下QUARTUS5.0没这选项,还是在哪里我没找到?
50M不高,
看你使用的资源量,跟物理综合没什么关系。
找个Quartus7.2版本没那么困难吧,建议先换一下软件版本。
使用物理综合的话,去掉stp信号后对时序不会有影响,因为是rtl级直接插入的
另外建议检查下时序约束,看是否有不合理或者未约的地方
有没有异步逻辑或者跨时钟域的地方
首先时序分析必须满足要求,时序不能有警告。其次QUARTUS用8.0或者9.0版的吧。
加探针,相当于加负载,会导致时钟时序或数据路径倾斜,所以和不加探针结果不一样,当然一般发生在时钟频率高的情况下
时序我没有特别去约束,基本都默认的QUARTUS设置, 状态机里其实有一个输入信号是前端一个模块产生的,前端模块时钟频率大约100M,就这里应该属于所谓的不同时钟域,状态机的输入信号都没有经过进一步锁存。不知道有没影响。
还有 那个SAFE STATE MACHINE 编译选项在哪啊 ?谁告诉我下, 我想试试。
要么把你的状态机代码贴出来,看代码上有没有问题,
ddddddddddddddddddddddd
我也遇到了这个问题,看下你的状态机跳转的条件,是不是组合逻辑或者外部输入,要是这样,首先在该时钟域内打一拍至少,再试下
