在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 3601|回复: 5

[原创] 程序不稳,计数有时错乱的 原因和解决方法

[复制链接]
发表于 2011-10-30 15:34:08 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
在程序设计中经常碰见一些现象,比如状态机里有个计数:CNT<=CNT+10’d1;   状态机会根据CNT值不同来进行状态跳转,但是用SIGNAL TAP观测 有时候会发现CNT的值错乱的情况,比如从0XFD突然变到了0XC5等不正常计数,有时候SIGNAL TAP里 增加或者减少些观测点或者减少内存使用再编译运行有可能会工作正常,但也有可能更加糟糕。就是很不稳定,当然状态机频率低于100M的时候基本是正常的。

另外使用QUARTUS 里DCFIFO 核 时也发现过类似情况,有时会发现RDUSEDW这个信号计数结果错乱导致后面程序判断也乱了,当把DCFIFO的WCLK 频率变低 或者WCLK反向一下,或者SIGANLTAP 里 随便改改, 计数结果又会变正常。

以上的现象 我觉得应该是时序不好,紧张,FPGA是EP1C6Q240C8N的,工程的资源和RAM用的都不超过50%的,我在工程里对用到CLK都进行了FMAX的约束,但编译后时序报告里也没提示说这个频率跑不起来啊。

请教下 这样的情况该如何去分析找到真正原因点,解决,我都不知道从哪下手了,时序报告里也看不出什么名堂,只能在盲目的凑时序。

先谢谢各位的指教!!
发表于 2011-10-30 18:36:25 | 显示全部楼层
回复 1# sweep7758


    时序约束过了没有?
发表于 2011-10-30 23:02:15 | 显示全部楼层
本帖最后由 dreamylife 于 2011-10-30 23:10 编辑

时序问题是一定的。你看看cnt <= cnt +10'b1这个路径里还有没有其他的组合了,如果看不不来可以用RTL viewer看看加法器左右的两级寄存器之间还有没有别的组合逻辑了。如果有的话你都平到别的周期里去,让这个路径干净一点。你还可以把10'b1改成1'b1,个人觉得会有超好的效果~
发表于 2011-10-31 00:08:05 | 显示全部楼层
应该看看稳定时的计数值,在沿时刻计数值会发生多次跳变。以前仿真timer时发现是这样。当然也可能是你的硬件只能跑到100M吧
发表于 2011-10-31 12:55:40 | 显示全部楼层
你把时钟频率降下来看看有没有好一些呢?如果好些了就一定是时序问题了。不过一般来说就是时序问题。
 楼主| 发表于 2011-10-31 14:47:51 | 显示全部楼层
确实时序问题,把频率降低或者CLK反向一下会有不同效果,我想跑100多M肯定是没问题的,主要是代码设计上不好。
约束就是把用到的CLK进行了FMAX约束 ,其他也不知道该约束啥了。。   
10‘D1我改1’B1了  不过不知道实际上这有什么区别。
还有编译时有个警告是这样的,Found <17> node(s) in clock paths which may be acting as ripple and/or gated clocks -- node(s) analyzed as buffer(s) resulting in clock skew
我没有用计数分频产生CLK。  不过有涉及状态机的CLK切换 assign clk_s=(read_req_reg2)?mclk:sd_wclk;   不知道这样的CLK的切换 是不是不妥。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /1 下一条


小黑屋| 手机版| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-11-13 03:34 , Processed in 0.024033 second(s), 9 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表