请教,状态机编程跑飞和跑死,如何解决

另外,状态机工作在低频情况下,20MHz。
UID378283&帖子1194&精华0&积分11677&资产11677 信元&发贴收入6255 信元&推广收入0 信元&附件收入17411 信元&下载支出12114 信元&阅读权限70&在线时间1218 小时&注册时间&最后登录&
把你的代码贴上来看看,
UID148731&帖子521&精华0&积分793&资产793 信元&发贴收入3325 信元&推广收入0 信元&附件收入208 信元&下载支出2870 信元&阅读权限30&在线时间251 小时&注册时间&最后登录&
& & 已经贴上代码了,请指教!
UID505295&帖子52&精华0&积分23&资产23 信元&发贴收入270 信元&推广收入0 信元&附件收入0 信元&下载支出297 信元&阅读权限10&在线时间9 小时&注册时间&最后登录&
抛开代码不说,首先你可以看下你编译后的报告,看下状态机里有几个状态,如果不是全编码将状态机进行全编码。即假如用格雷码的话,码的位宽为3,也就是8个状态。when others的时候直接能够跳转到你指定的状态即可。
如果看深层原因的话,应该是有亚稳态出现,查查有没有跨时钟域信号输入。
这只是个人经验,如果不行,还要高人指点。
UID148731&帖子521&精华0&积分793&资产793 信元&发贴收入3325 信元&推广收入0 信元&附件收入208 信元&下载支出2870 信元&阅读权限30&在线时间251 小时&注册时间&最后登录&
首先谢谢你的回答!
我看了报告,没有什么异常,所有的状态都有对应,即one-hot的话是7位,从0000,
gray的话是3位。
而且我的when others中也将它回到了初始状态。
给我的感觉就是干脆就没进去process,我看了,此时的reset是正常的。
UID378283&帖子1194&精华0&积分11677&资产11677 信元&发贴收入6255 信元&推广收入0 信元&附件收入17411 信元&下载支出12114 信元&阅读权限70&在线时间1218 小时&注册时间&最后登录&
process的敏感条件,会不会与这个有关系?虽说看上去以时钟为上升沿应问题不大。
要不你改成三段式一下,在逻辑组合语句里把所有相关的敏感条件都加进去,状态机的话直接选择自动就好,
另外,不知道你reset是高复位还是低复位,如果是低复位的话,最好名称以n或_n结束,
UID378283&帖子1194&精华0&积分11677&资产11677 信元&发贴收入6255 信元&推广收入0 信元&附件收入17411 信元&下载支出12114 信元&阅读权限70&在线时间1218 小时&注册时间&最后登录&
& & process的敏感条件,会不会与这个有关系?虽说看上去以时钟为上升沿应问题不大。
要不你改成三段式一下,在逻辑组合语句里把所有相关的敏感条件都加进去,状态机的话直接选择自动就好,
另外,不知道你reset是高复位还是低复位,如果是低复位的话,最好名称以n或_n结束,
UID148731&帖子521&精华0&积分793&资产793 信元&发贴收入3325 信元&推广收入0 信元&附件收入208 信元&下载支出2870 信元&阅读权限30&在线时间251 小时&注册时间&最后登录&
我见过别人讨论过,用综合指令或者约束,强行规定综合后必须生成一旦进入非有效状态便立即复位随即进入有效状态的电路
请问这个东西在哪里设置?
UID148731&帖子521&精华0&积分793&资产793 信元&发贴收入3325 信元&推广收入0 信元&附件收入208 信元&下载支出2870 信元&阅读权限30&在线时间251 小时&注册时间&最后登录&
问题解决了!
将状态机中外部的信号和它的时钟进行了一下同步
p_reg2_1: process(S_Lclk)
& & & & if rising_edge(S_Lclk) then
& & & & & & & & S_PCI_usero&=PCI_
& & & & & & & & S_ready_i&=
& & & & else
& & & & & & & &
问题就解决了!
[通过 QQ、MSN 分享给朋友]
有奖下载:摩尔定律失效后的芯片该怎么发展(西电 韩根全教授PPT)三段式状态机,modelsim上仿真没问题,下载到板子上后,signaltab却显示与仿真不相符,可能是什么原因? - FPGA|CPLD|ASIC论坛 -
中国电子技术论坛 -
最好最受欢迎电子论坛!
后使用快捷导航没有帐号?
三段式状态机,modelsim上仿真没问题,下载到板子上后,signaltab却显示与仿真不相符,可能是什么原因?
11:03:53  
状态转移及条件全在always@(*),modelsim上状态转移都是对的,signaltab实板验证的时候状态转移却是乱的
11:15:17  
本帖最后由
11:17 编辑
代码结构是这样的:
always@(posedge CLK_100M or negedge rst_n)
& && &&&if(!rst_n) state_last &= S0;
& && &&&else state_last &= state_
always@(*)
& && &&&if(!rst_n) state_current &= S0;
& && &&&else
& && &&&begin
& && && && && & case(state_last)
& && && && && && && && &S0:& &begin if(rst_n)& && & state_current = S1;& && && &end
& && && && && && && && &S1: begin if(条件1)& &state_current = S2;& && && && && &&&end
& && && && && && && && &S2:&&begin if(条件2)& &state_current = S3;& && && &end
& && && && && && && && &S3: begin if(条件3)& &state_current = S4;& && && && && &&&end
& && && && && && && && &S4:&&begin if(条件4)& &state_current = S5;&&end
& && && && && && && && &S5:;
& && && && && && && && &default:;
& && && && && & endcase
& && &&&end
always@(posedge CLK_100M or negedge rst_n)
& && &&&if(!rst_n)
& && && && & ......
& && && && &........
& && &&&else
& && && && &case(state_current)
& && && && && && &S1:
& && && && && && && &.............
& && && && && && && & ............
& && && && && && && &条件1满足
& && && && && && &S2:
& && && && && && && &.............
& && && && && && && & ............
& && && && && && && &条件2满足
& && && && && && &S3:
& && && && && && && &.............
& && && && && && && & ............
& && && && && && && &条件3满足
& && && && && && &S4:
& && && && && && && &.............
& && && && && && && & ............
& && && && && && && &条件4满足
& && && && && && & S5:
& && && && && && && &.............
& && && && && && && & ............
& && && && &endcase
11:22:33  
仿真可以的话一般就是时序问题了!你是不是状态跑飞了?检查一下你的跳转条件是不是都是CLK_100M 上的信号!!!你要保证你的跳转条件都是这个时钟域的才行!
11:32:49  
仿真可以的话一般就是时序问题了!你是不是状态跑飞了?检查一下你的跳转条件是不是都是CLK_100M 上的信号!!!你要保证你的跳转条件都是这个时钟域的才行!
你看我写的第三段,跳转条件都已经处在CLK_100M的这个always里面了,是你所说的处在时钟域吧?
11:58:24  
你看我写的第三段,跳转条件都已经处在CLK_100M的这个always里面了,是你所说的处在时钟域吧?
恩,你的条件跳转信号是不是在100M这个时钟域上!
12:03:36  
恩,你的条件跳转信号是不是在100M这个时钟域上!
是的,是在啊,
12:08:01  
就是说这些信号都用100M时钟打过拍了是吧,如果是别的时钟域的话要至少打两拍,如果都满足你就要查一下时序是不是报红了!还有一个办法你也可以试一下,把状态换成独热码!
16:19:52  
就是说这些信号都用100M时钟打过拍了是吧,如果是别的时钟域的话要至少打两拍,如果都满足你就要查一下时序是不是报红了!还有一个办法你也可以试一下,把状态换成独热码!
改成独热码也不行,不太清楚你说的时钟域、打拍是什么意思,能解释一下吗?
always@(*)应该是组合逻辑吧,与时钟没关系
17:03:45  
改成独热码也不行,不太清楚你说的时钟域、打拍是什么意思,能解释一下吗?
always@(*)应该是组合逻辑吧,与时钟没关系
就是因为always@(*)是组合电路,所以这里面的信号都要是100M时钟域下的,要不就会出错,你可以试试改成1段式试试,我估计你的条件是不这个时钟域的!因为我以前遇到过!!哈哈!
17:19:23  
我状态都是通过parameter来定义的,我试了一下不用parameter来定义状态变量,直接用原始数据,不管是格雷码还是独热码,结果就正常了。。。。。
这尼玛在逗我?真奇葩,啥原因?
17:32:44  
就是因为always@(*)是组合电路,所以这里面的信号都要是100M时钟域下的,要不就会出错,你可以试试改成1段式试试,我估计你的条件是不这个时钟域的!因为我以前遇到过!!哈哈!
现在可以了。
17:40:44  
我状态都是通过parameter来定义的,我试了一下不用parameter来定义状态变量,直接用原始数据,不管是格雷码还是独热码,结果就正常了。。。。。
这尼玛在逗我?真奇葩,啥原因?
哈哈!!!parameter和你直接写应该是一样的!虽然你现在程序可以了,但是有可能调着调着就挂了!
22:13:51  
很奇怪的问题,但确实好了
22:55:41  
学习/学习/学习
23:29:17  
学习/学习/学习
Powered by
供应链服务
版权所有 (C) 深圳华强聚丰电子科技有限公司没有更多推荐了,
加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!电子相关帖子
你可能感兴趣的标签
热门资源推荐电子相关帖子
你可能感兴趣的标签
热门资源推荐}

我要回帖

更多关于 状态机跑飞 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信