两段式状态机不可能完成的任务

两段式状态机不可能完成的任务,第1张

  最近折腾状态机,发现一个小任务对于两段式状态机写法是不可能完成的。这个小任务很简单,先看用一段式状态机实现的代码:

  module test(

  clk,rst_n,

  din,dout

  );

  input clk;

  input rst_n;

  input din;

  output[3:0] dout;

  parameter IDLE = 3'd0;

  parameter STA1 = 3'd1;

  //一段式写法

  reg[2:0] cstate;

  reg[3:0] cnt;

  always @(posedge clk or negedge rst_n)

  if(!rst_n) cstate <= IDLE;

  else begin

  case(cstate)

  IDLE: begin

  cnt <= 4'd0;

  if(din) cstate <= STA1;

  else cstate <= IDLE;

  end

  STA1: begin

  cnt <= cnt+1'b1;

  if(cnt == 4'd10) cstate <= IDLE;

  else cstate <= STA1;

  end

  default: cstate <= IDLE;

  endcase

  end

  assign dout = cnt;

  endmodule

  同样的,用三段式状态机也能够实现这个功能:

  

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/dianzi/2484390.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-08-04
下一篇 2022-08-04

发表评论

登录后才能评论

评论列表(0条)

保存