芯路恒电子技术论坛

 找回密码
 立即注册
热搜: 合集
查看: 4888|回复: 1

【求助】有限状态机的condition不完整

[复制链接]
  • TA的每日心情
    郁闷
    2019-12-26 16:14
  • 1

    主题

    1

    帖子

    14

    积分

    新手入门

    Rank: 1

    积分
    14
    发表于 2019-12-26 16:07:11 | 显示全部楼层 |阅读模式
    一个101的序列检测器,源代码如下
    1. module block1(
    2.         din,
    3.         clk,
    4.         rst_n,
    5.         Qout
    6. );
    7.         input din,clk,rst_n;
    8.         output reg Qout;
    9.         parameter S0 = 2'b00;
    10.         parameter S1 = 2'b01;
    11.         parameter S2 = 2'b11;
    12.        
    13.         reg [1:0]current_state;
    14.         reg [1:0]next_state;
    15.        
    16.         always@(posedge clk or negedge rst_n)
    17.         begin
    18.                 if(!rst_n)
    19.                 begin
    20.                         current_state <= S0;
    21.                 end
    22.                 else
    23.                 begin
    24.                         current_state <= next_state;
    25.                 end
    26.         end
    27.        
    28.         always@(current_state or din)
    29.         begin
    30.                 case(current_state)
    31.                 S0:
    32.                 begin
    33.                         if(din == 1)
    34.                         begin
    35.                                 next_state = S1;
    36.                                 Qout = 1'b0;
    37.                         end
    38.                         else
    39.                         begin
    40.                                 next_state = S0;
    41.                                 Qout = 1'b0;
    42.                         end
    43.                 end
    44.                 S1:
    45.                 begin
    46.                         if(din == 1)
    47.                         begin
    48.                                 next_state = S1;
    49.                                 Qout = 1'b0;
    50.                         end
    51.                         else
    52.                         begin
    53.                                 next_state = S2;
    54.                                 Qout = 1'b0;
    55.                         end
    56.                 end
    57.                 S2:
    58.                 begin
    59.                         if(din == 0)
    60.                         begin
    61.                                 next_state = S1;
    62.                                 Qout = 1'b1;
    63.                         end
    64.                         else
    65.                         begin
    66.                                 next_state = S0;
    67.                                 Qout = 1'b0;
    68.                         end
    69.                 end
    70.                 default:
    71.                 begin
    72.                         next_state = S0;
    73.                         Qout = 1'b0;
    74.                 end
    75.                 endcase
    76.         end


    77. endmodule
    复制代码


    此时的状态机为图一
    把S2的if改成if(din==1)之后,状态机为图二,其condition少了一半,是什么原因,怎么调整?

    图一

    图一

    图二

    图二
    回复

    使用道具 举报

  • TA的每日心情
    擦汗
    2020-2-13 22:59
  • 2

    主题

    10

    帖子

    89

    积分

    初级会员

    Rank: 3Rank: 3

    积分
    89
    发表于 2019-12-28 22:56:11 | 显示全部楼层
    本帖最后由 000 于 2019-12-28 23:02 编辑

    无标题.png
    把S2的if改成if(din==1)之前
    无标题2.png
    把S2的if改成if(din==1)之后


    系统的输出逻辑还是对的
    状态机内的部分可能出现BUG了。。。

    回复 支持 反对

    使用道具 举报

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

    本版积分规则

    QQ|小黑屋|Archiver|芯路恒电子技术论坛 |鄂ICP备2021003648号

    GMT+8, 2024-3-29 03:24 , Processed in 0.113801 second(s), 35 queries .

    Powered by Discuz! X3.4

    © 2001-2017 Comsenz Inc. Template By 【未来科技】【 www.wekei.cn 】

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