微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > FPGA,CPLD和ASIC > 状态机为什么会跑飞?

状态机为什么会跑飞?

时间:10-02 整理:3721RD 点击:
FPGA 代码 带则SIGNAL TAP文件编译后 工作正常 去掉SIGNAL TAP 文件 编译后 工作不稳定   最后我发现把编译选项里的 状态机 编码方式 由 AUTO或者ONE HOT 改为 MINIMAL BIT  方式 就 无论加STP文件还是去掉STP文件编译 都稳定了  这现象怎么解释?
还有调试过程 会发现  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

我也遇到了这个问题,看下你的状态机跳转的条件,是不是组合逻辑或者外部输入,要是这样,首先在该时钟域内打一拍至少,再试下

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top