结构verilog)模式匹配模块没有输出

时间:2013-11-11 22:16:55

标签: verilog flip-flop

目标是为具有两个输入w1和w2以及输出q的电路编写结构verilog代码。该电路比较w1和w2的输入序列。如果w1和w2匹配4个连续时钟脉冲,则q为1.否则它保持为0。

示例:

w1 = 0100111010010
w2 = 0000110010010
q  = 0000010000111

我绘制了状态图和状态表,并得出结论,我需要为此电路提供3个D触发器。然后我为每个D-FF的输入写了K-maps。到目前为止很好,对吗?

不,当我写下代码时,生成的波形如下所示:

http://i.imgur.com/BwRgP7j.png

这是我的代码:

module PatternMatch2(q, w1, w2, clk, rst);
    output  q;
    input   w1, w2, clk, rst;

    DF DF1(y1, yBar1, Y1, clk, rst),
       DF2(y2, yBar2, Y2, clk, rst),
       DF3(y3, yBar3, Y3, clk, rst);

    and and0(Y1, nI, yBar3, yBar1),
        and1(Y2In1, nI, yBar2, y1),
        and2(Y2In2, nI, y2, yBar1),
        and3(Y3In1, nI, y3),
        and4(Y3In2, nI, y2, y1),
        and5(q, y3, yBar2, yBar1);

            xor xor0(i, w1, w2);        


    or or0(Y2, Y2In1, Y2In2),
       or1(Y3, Y2In1, Y2In3);

    not not0(nI, i);

endmodule


// D - Flip Flop Module
module DF(q, qBar, D, clk, rst);
    input D, clk, rst;
    output q, qBar;

    reg q;

    not n1 (qBar, q);

    always@ (posedge rst or posedge clk)
    begin
    if(rst)
            q = 0;

    else
            q = D;
    end
endmodule

我花了很多时间,但我仍然不确定我的代码中有什么问题,因为我的方程似乎是正确的。任何帮助将不胜感激。

编辑:更新了代码(仍然是同一个问题)

2 个答案:

答案 0 :(得分:1)

编译代码时,我收到此警告消息:

  

隐式线'Y2In3'没有任何驱动程序

您需要适当地推动or1输入。

答案 1 :(得分:1)

您只需要将2个FF组织为饱和计数器,并重置此类任务:

  1. 创建复位信号rst = XOR(w1,w2)并连接到两个FF的复位输入
  2. 根据以下真值表(饱和的2位计数器)将FF输入(d0,d1)连接到输出(q0,q1):

    q1 q0 => d1 d0
    0  0  => 0  1
    0  1  => 1  0
    1  0  => 1  1
    1  1  => 1  1
    

    那是:

    d0 = OR(NOT(q0), q1)
    d1 = OR(q0, q1)
    

  3. 您的输出将为:q = AND(q0,q1,NOT(rst))