2013-02-04 46 views
-2

我必须为1 mealy fsm写一个verilog程序。有很多技术来编写它。我会告诉你1,我想知道,如果它太(没有必要提及其他技术,只是说如果工作或不为什么!)这就是:带1个模块的Verilog Mealy FSM

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。林感兴趣的只是这种技术,如果其错误的。请告诉我,什么是错,以解决它

+0

请使用模拟器来调试您的程序。 – Tim

+0

以及即时通讯在fsm的理论视角中使用verilog ..我不需要回答作弊行为或类似的东西..我可以用其他技术很容易地重写它。我只是好奇这一个,我无法找到有关Verilog教程,数字设计书或互联网例子的相关内容。如果你可以asnwer我的问题.. PS即时通讯工作网咖,我不能下载编译器和模拟器.. – user2040678

回答

0

Wikipedia

在计算理论中,一个米利型机是一个有限状态 机,其输出值由当前状态 和当前输入确定。

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

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

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

+0

好吧,你是正确的关于'在'(它在这个例子中的x,我只是写了它,没有注意到我已经命名它在:p)。关于这个问题,我只是好奇,如果这种技术是正确的,因为当你有每个D-flip-flip下一个状态的方程式时,它的写作过于简单。否则,我必须为d触发器定义编写+1模块或者定义一些参数变量(用于状态),并在always块中使用它们来根据输入等等技术在各个状态之间进行切换。 – user2040678

+0

无论如何,因为我明白那是正确的,但不是最好的方法来做它,因为它很难理解(找到统计之间的联系),并且使得创建状态转换图更加困难。 Ty回答 – user2040678