Нет выходных данных из модуля сопоставления с образцом

Цель состоит в том, чтобы написать структурный код Verilog для схемы, которая имеет два входа, w1 и w2, и выход, q. Схема сравнивает входные последовательности w1 и w2. Если w1 и w2 совпадают для 4 последовательных тактовых импульсов, q должно быть равно 1; в противном случае он должен оставаться равным 0.

Пример:

w1 = 0100111010010
w2 = 0000110010010
q  = 0000010000111

Я нарисовал диаграмму состояний и таблицу состояний и пришел к выводу, что для этой схемы мне нужны трехмерные триггеры. Затем я написал K-карты для входов каждого D-FF. Однако, когда я написал код, результирующая форма сигнала неожиданно выглядит так:

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

Я не уверен, что не так в моем коде, поскольку мои уравнения кажутся правильными.


person jeebface    schedule 11.11.2013    source источник


Ответы (2)


Когда я компилирую ваш код, я получаю это предупреждающее сообщение:

Неявный провод «Y2In3» не имеет драйвера

Вам нужно правильно управлять входом or1.

person toolic    schedule 11.11.2013

Для такой задачи нужно всего 2 ФФ, организованных как насыщающий счетчик со сбросом:

  1. Создайте сигнал сброса rst=XOR(w1,w2) и подключите к обоим входам сброса FF.
  2. Соедините входы ваших ФП (d0, d1) с выходами (q0, q1) в соответствии со следующей таблицей истинности (2-битный счетчик с насыщением):

    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=И(q0, q1, НЕ(первый))

person glexey    schedule 11.11.2013