【问题标题】:Verilog Mealy FSM with 1 moduleVerilog Mealy FSM 带 1 个模块
【发布时间】:2013-01-19 13:30:57
【问题描述】:

我必须为 1 个 meally 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

PS。我只对这种技术感兴趣,如果它错了,请尝试告诉我有什么问题以便修复它

【问题讨论】:

  • 请使用模拟器调试您的程序。
  • 嗯,我在 fsm 的理论观点中使用 verilog。我不需要答案来作弊来锻炼或类似的东西。我可以使用其他技术轻松地重写它。我只是对这个很好奇,我找不到与 verilog 教程、数字设计书或互联网示例相关的东西。如果你能回答我的问题.. PS 我在网吧工作,我无法下载编译器和模拟器..

标签: verilog fsm


【解决方案1】:

来自Wikipedia

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

假设输入in在代码中已经被拼写为x,那么模块是否符合定义?

你有一些状态q。和一些输出y。您的输入in or x 直接影响输出。所以这符合 Mealy Machine 的定义。

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

【讨论】:

  • 嗯,你是对的'in'(在这个例子中它的x,我只是写得很快,没有注意到我把它命名为'in :p)。至于这个问题,我只是好奇该技术是否也正确,因为当您拥有每个 D-flip-flip 下一个状态的方程时,它写起来太容易太快了。否则我将不得不为 d 触发器定义编写 +1 模块或定义一些参数变量(用于状态)并在 always 块中使用它们来根据输入等技术在统计数据之间进行更改。
  • 无论如何,据我所知,这也是正确的,但不是最好的方法,因为它很难理解(找到统计数据之间的联系),这使得创建状态转换图变得更加困难。 Ty 回答
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-04
  • 2013-02-01
  • 1970-01-01
  • 2019-02-12
  • 1970-01-01
相关资源
最近更新 更多