微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > FPGA,CPLD和ASIC > 关于三段式状态机的疑惑,希望有人来为我解答。(新手求罩)

关于三段式状态机的疑惑,希望有人来为我解答。(新手求罩)

时间:10-02 整理:3721RD 点击:
本人在学习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所对应的输出结果。
我认为应该是我对代码理解有误,希望有人能来指出问题所在。谢谢

什么产品上的   是充电器上面的吗

clk 上升沿 或者 rst_n 下降沿,执行 begin  end 之间的语句。 if 判断 rst_n 是不是 低电平

你这个有一个Clk的延时,而、所以在nstate =WR_S2 时,cmd是等于3‘b101,而下一个clk的上升沿来临时,cmd才变成3'b110,而同时nstate的状态也变了,所以书上才这么说吧,我是这么理解的。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top