带1个模块的Verilog Mealy FSM

带1个模块的Verilog Mealy FSM,verilog,fsm,Verilog,Fsm,我必须为1米fsm编写一个verilog程序。写它有很多技巧。我将向您展示1,我想知道它是否有效无需提及其他技术,只需说明它是否有效以及原因!这是: module MealyFsm(out,in,clk,rst); output out; input in,clk,rst; reg [1:0] q; always @(posedge clk or negedge rst) begin if (~rst) q<=2'b00; else

我必须为1米fsm编写一个verilog程序。写它有很多技巧。我将向您展示1,我想知道它是否有效无需提及其他技术,只需说明它是否有效以及原因!这是:

module MealyFsm(out,in,clk,rst);
  output out;
  input in,clk,rst;

  reg [1:0] q;

  always @(posedge clk or negedge rst) begin
    if (~rst) 
      q<=2'b00;
    else
      begin
        q[0]<=~q[0] &  q[1] &  x | ~q[0] &    x | q[1] &  x;
        q[1]<= q[1] & ~q[0] & ~x | ~q[1] & q[0] | q[0] & ~x;
      end
  end

  assign y = ~x & q[0] & ~q[1];

endmodule
另外,我只对这项技术感兴趣,如果它错了,请试着告诉我什么地方错了,以便从

在计算理论中,Mealy机器是一个有限状态 输出值由其当前状态决定的机器 和电流输入

假设输入在代码中被输入为x,那么模块是否符合定义

你有一些状态q。和一些输出y。您在或x中的输入直接影响输出。所以这符合粉状机器的定义


注:逻辑很难理解,状态的功能和流程也很难理解,有更好的方法来编写FSM,其中大部分是在单个模块中完成的。

请使用模拟器来调试您的程序。我在FSM的理论视图中使用verilog。。我不需要答案来作弊、锻炼或诸如此类的事情。。我可以使用其他技术轻松地重写它。我只是好奇这一点,我找不到有关verilog教程,数字设计书或互联网的例子。如果你能问我的问题。。PS我在网吧工作,我不能下载编译器和模拟器。在这个例子中,你关于“in”的说法是对的,我只是写得很快,没有注意到我把它命名为“in:p”。关于这个问题,我只是好奇这种技术是否也正确,因为当你有每个D-flip-flip的下一个状态的方程时,写起来太容易了。否则,我将不得不为d触发器定义编写+1模块,或者为状态定义一些参数变量,并在always块中使用它们根据输入等技术在状态之间进行更改。无论如何,据我所知,这也是正确的,但不是最好的方法,因为很难理解和找到连接在stats和之间,这使得创建状态转换图变得更加困难。谢谢你的回答