4474|4

2

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

状态机跳转错误 [复制链接]

各位大神好,我遇到一个状态机跳转错误的问题,烦请大家帮我分析,寻求解决办法。
这个状态机一共26个状态,当中有5个状态,姑且叫他们A,B,C,D,E吧。
状态机的输入是rdy_i和smp_rdy_i, 输出信号是p_o and q_o.
rdy_i和smp_rdy_i是有别的同时钟域模块产生的,但是寄存器输出后经过了一些组合逻辑,输入到这个状态机模块。
输入输出有一定的因果关系,
p_o 置为1若干周期后,smp_rdy_i会由0变为1,持续1个时钟周期;
q_o 置为1若干周期后,rdy_i会由0变为1,持续1个时钟周期。

正常情况下,状态机的第二段和第三段代码如下所示,
状态机应该是由A-B-C-D,到D状态时,正常情况下,p_o应该是0,q_o应该是1.

但是有时,频率有可能是跑几十次或者几百次或者几千次出现一次,通过chipscope,我能看到,状态机停在了D状态,
而且停在D状态时,p_o是1,而q_o是0,我觉得q_o是0,那rdy_i不会变成1,状态机就会卡在这个地方,但是问题是
状态机为什么在D状态时信号值不对呢?唯一的解释就是状态机跳转错误,可能直接从A状态跳转到D状态了,为什么出
现这个现象呢?状态机为什么会跳转错误?我该采取什么错误避免状态机跳转错误呢?

相关代码如下:
case(state)
...
A: begin
  if(smp_rdy_i)
     next = B;
  else
     next = A;
end
B: begin
  if(rdy_i)
    next = C;
  else
    next = B;
end
C: begin
  if(rdy_i)
    next = D;
  else
    next = C;
end
D: begin
  if(rdy_i)
    next = E;
  else
    next = D;
end
...
default:begin
   next = 'bx;
end
endcase

...

case(next)
...
A:begin
  p_o<=1'b1;
  q_o<=1'b0;
end
B:begin
  p_o<=1'b0;
  q_o<=1'b1;
end
C:begin
  //other signals assignments
end
D:begin
  //other signals assignments
end
...
endcase

此帖出自FPGA/CPLD论坛

最新回复

时序问题,你状态跳转是组合电路完成的,所以你要保证所有的跳转条件都在这个时钟域上才行!!!如果有别的时钟域就会出现意外的值!!!!  详情 回复 发表于 2017-1-21 14:54
点赞 关注(1)
 

回复
举报

6

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
非常感谢啊!
此帖出自FPGA/CPLD论坛
 
 

回复

2

帖子

0

TA的资源

一粒金砂(初级)

板凳
 

??
此帖出自FPGA/CPLD论坛
 
 
 

回复

1万

帖子

24

TA的资源

版主

4
 
感觉是编译器优化的问题。看看有没有变量在中断里面使用了,但是没有使用volatile进行定义?
此帖出自FPGA/CPLD论坛
 
 
 

回复

59

帖子

0

TA的资源

一粒金砂(中级)

5
 
时序问题,你状态跳转是组合电路完成的,所以你要保证所有的跳转条件都在这个时钟域上才行!!!如果有别的时钟域就会出现意外的值!!!!
此帖出自FPGA/CPLD论坛
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表