【问题标题】:No output from a pattern matching module模式匹配模块没有输出
【发布时间】:2020-03-29 05:54:53
【问题描述】:

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

例子:

w1 = 0100111010010
w2 = 0000110010010
q  = 0000010000111

我画了一张状态图和一张状态表,得出的结论是我需要为这个电路使用 3 个 D 触发器。然后我为每个 D-FF 的输入编写了 K-maps。然而,当我编写代码时,结果波形意外地看起来像这样:

这是我的代码:

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

我不确定我的代码有什么问题,因为我的方程式似乎正确。

【问题讨论】:

    标签: verilog flip-flop


    【解决方案1】:

    当我编译您的代码时,我收到以下警告消息:

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

    您需要适当地驱动您的or1 输入。

    【讨论】:

      【解决方案2】:

      对于此类任务,您只需要将 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))

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-07-07
        • 1970-01-01
        • 2019-05-08
        • 2019-05-26
        • 2021-11-06
        • 1970-01-01
        • 2021-07-09
        • 1970-01-01
        相关资源
        最近更新 更多