首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

关于三段式状态机的疑惑,希望有人来为我解答。

关于三段式状态机的疑惑,希望有人来为我解答。

本人在学习verilog 与状态机时发现有如下疑惑,希望有人能为我解答。

如下,是一部分三段式状态机的代码:
always@(posedge clk or negedge rst_n)
begin
        if(!rst_n)   cstate<=WR_S1;
        else cstate<=nstate;
end

always@(cstate)
begin
        case(cstate)
                WR_S1:  nstate=WR_S2;
                WR_S2:  nstate=WR_S3;
                 ...
                 default:nstate=WR_S1
         endcase
end

always@(posedge clk or negedge rst_n)
begin
        if(!rst_n) cmd<=3'b111;
         else begin
         case(nstate)
                  WR_S1:cmd<=3'b101;
                  WR_S2:cmd<=3'b110;
                  ...
                  default:  ;
          endcase
end
end
endmodule

如上一段代码,本人困惑之处在于:
按照个人对代码的理解,
当cstate状态为WR_S1时,照第二个always语句里描述,下一个状态应为WR_S2;
而当下一个状态为WR_S2时,照第三个always语句描述,输出的cmd应为3'b110,而不是3'b101;
然而根据资料显示,
当cstate状态为WR_S1时,下一个状态为WR_S2,输出的cmd为3'b101,既WR_S1所对应的输出结果。
我认为应该是我对代码理解有误,希望有人能来指出问题所在。谢谢
返回列表