编码状态机表(Verilog HDL)

时间:2016-11-01 17:24:35

标签: verilog

这是一个实践问题,我认为这是正确的方法。当x = 0时,我不知道要找出什么。我是一个verilog hdl新手,因此不确定这是否是一个有效的状态机模块。请指出任何错误。

Module SM(input x, clk, output z)
 reg[1:0] s, next_s;
 always @(posedge clk)
  s <= next_s;
 always @(x,s) begin
  if (x == 1)begin
   next_s <= s + 1'b1;
  else 
   next_s <= ?????
  end
 end 

 assign z = ~{s[0],s[1]};
endmodule

1 个答案:

答案 0 :(得分:0)

几个笔记:

  1. 使用always@ (*)作为组合逻辑,而不是手动指定灵敏度列表。
  2. 我们在顺序(边缘敏感)块中使用非阻塞分配(<=),但在组合块中阻塞分配(=)。
  3. 您对z的作业不正确(您可能想要s[1] == s[0]
  4. 在我看来,状态在x==1时递减,在x==0时递增,而在x==1情况下递增,并且没有为x==0增加任何内容{1}}。
  5. 否则,它看起来不错!