搜索
bottom↓
回复: 9

【诡异啊】状态机生成的奇怪问题,会用FSM的请进~~~~~~

[复制链接]

出0入0汤圆

发表于 2012-3-4 16:26:42 | 显示全部楼层 |阅读模式
最近写一个状态机,出现了奇怪的问题,用quartus生成的状态图中可以看到有一个状态STATE_D无法跳转到。上图:

(原文件名:IncorrectFSM.jpg)

这是期望的状态图:

(原文件名:CorrectFSM.jpg)

代码如下:

module fsm(
mclk,
rst_n,
ein,
ain,
bout
);

input ain,ein,mclk,rst_n;
output bout;
reg bout;
reg[1:0] fsm_state;

parameter STATE_S = 2'b00;
parameter STATE_E = 2'b01;
parameter STATE_D = 2'b10;
parameter STATE_W = 2'b11;


//Bypass control state machine
always@(posedge mclk, negedge rst_n)
begin
   if(!rst_n) begin
      fsm_state <= STATE_S;
      bout <= 1'b0;
   end
   else begin
      case(fsm_state)
      STATE_S:
      begin
         if(ein) begin
            bout <= 1'b0;
            fsm_state <= STATE_E;
         end
         else begin
            bout <= 1'b1;
            fsm_state <= STATE_D;
         end
      end
      
      STATE_E:
      begin
         if(!ein) begin
            bout <= 1'b1;
            fsm_state <= STATE_D;         
         end
         else if(ain) begin
            bout <= 1'b1;
            fsm_state <= STATE_W;   
         end
         else begin
            bout <= 1'b0;
            fsm_state <= STATE_E;
         end
      end
      
      STATE_D:
      begin
         if(ein) begin
            bout <= 1'b0;
            fsm_state <= STATE_E;         
         end
         else begin
            bout <= 1'b1;
            fsm_state <= STATE_D;   
         end
      end
      
      STATE_W:
      begin
         if(!ein) begin
            bout <= 1'b1;
            fsm_state <= STATE_D;         
         end
         else if(!ain) begin
            bout <= 1'b0;
            fsm_state <= STATE_E;   
         end
         else begin
            bout <= 1'b1;
            fsm_state <= STATE_W;   
         end
      end
   
      default:
         fsm_state <= STATE_S;
      endcase
   end
end

endmodule


很奇怪,倒不是写法的问题,不管用两个always、三个always的都一样,问题貌似和这个ein输入有关系。如果把ein改成两位的信号,或者把STATE_S处的ein改成!ein,都可以。难道是因为状态机里不允许出现“只要满足一个条件,任何状态都向某一个状态跳转”的情况吗?求教~~~~

阿莫论坛20周年了!感谢大家的支持与爱护!!

知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)

出0入0汤圆

发表于 2012-3-4 21:06:25 | 显示全部楼层
楼主,能不能把缩进位的格式加进去呀,否则看起来好费劲的

出0入0汤圆

发表于 2012-3-4 22:52:52 | 显示全部楼层
if(ein) begin
bout <= 1'b0;
fsm_state <= STATE_E; 改成fsm_state <= STATE_D;

end
else begin
bout <= 1'b1;
fsm_state <= STATE_D; 改成fsm_state <= STATE_E;
end
要不默认的先跳到state E,你试试

出0入0汤圆

 楼主| 发表于 2012-3-5 09:12:45 | 显示全部楼层
回复【1楼】xiazhijpeng  
楼主,能不能把缩进位的格式加进去呀,否则看起来好费劲的
-----------------------------------------------------------------------

ourdev不识别制表符啊,换成空格了

出0入0汤圆

 楼主| 发表于 2012-3-5 09:16:21 | 显示全部楼层
回复【2楼】 nuaatao
if(ein) begin  
bout <= 1'b0;  
fsm_state <= STATE_E; 改成fsm_state <= STATE_D;  

end  
else begin  
bout <= 1'b1;  
fsm_state <= STATE_D; 改成fsm_state <= STATE_E;
end  
要不默认的先跳到state E,你试试

-----------------------------------------------------------------------

是这样吗?

  STATE_S:
  begin
     if(!ein) begin
        bout <= 1'b1;
        fsm_state <= STATE_D;
     end
     else begin
        bout <= 1'b0;
        fsm_state <= STATE_E;
     end
  end

这样子也不行的。
另外ModuleSim仿真的时候就能识别出正确的状态图,难道是Quartus10 Bug了?

出0入0汤圆

发表于 2012-3-5 11:29:04 | 显示全部楼层
你仔细整理下思路 应该是存在逻辑问题 之后QU2自动给“优化掉了”。

出0入0汤圆

 楼主| 发表于 2012-3-5 12:03:47 | 显示全部楼层
回复【5楼】mcupro  李伟
你仔细整理下思路 应该是存在逻辑问题 之后qu2自动给“优化掉了”。
-----------------------------------------------------------------------

逻辑本身很简单的,并不存在错误的问题,因为用ModuleSim生成的状态图和仿真波形都对。我一直觉得是写法的问题,不知道是不是Quartus或者FSM规定上有什么特殊要求

出0入0汤圆

发表于 2012-5-3 21:58:56 | 显示全部楼层
同样遇到问题,求解答

出0入0汤圆

发表于 2012-5-4 00:36:47 | 显示全部楼层
本帖最后由 flyaudio 于 2012-5-4 00:51 编辑

楼主,程序实现的功能有没有改变?实验过没?

我时钟认为综合工具是不会犯这样的错误的。

出0入0汤圆

发表于 2012-5-4 09:47:29 | 显示全部楼层
"难道是因为状态机里不允许出现“只要满足一个条件,任何状态都向某一个状态跳转”的情况吗?"

单就状态机来说,我认为这种情况使用子状态来处理更好。不懂Verilog的路过。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-7-24 09:21

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表