2013-11-11 3 views
0

Цель состоит в том, чтобы написать структурный верилогический код для схемы с двумя входами w1 и w2 и выходом q. Схема сравнивает входные последовательности w1 и w2. Если w1 и w2 матч 4 последовательных тактовых импульсов, д равно 1. В противном случае она остается на 0.структурный верилог) нет выхода из модуля соответствия шаблону

Пример:

w1 = 0100111010010 
w2 = 0000110010010 
q = 0000010000111 

Я нарисовал диаграмму состояний и таблицу состояний и пришел к выводу, что мне нужно 3 D флип-флоп для этой схемы. Затем я написал 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); 

    [email protected] (posedge rst or posedge clk) 
    begin 
    if(rst) 
      q = 0; 

    else 
      q = D; 
    end 
endmodule 

Я провел много часов, но я все еще не уверен, что не так в моем коде, поскольку мои уравнения кажутся правильными. Любая помощь будет оценена по достоинству.

EDIT: обновлен код (по-прежнему такой же вопрос)

ответ

1

Когда я компиляции кода, я получаю следующее предупреждение:

неявной провод 'Y2In3' не имеет какого-либо драйвера

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

+0

Какой компилятор вы используете? Я использовал и iverilog и bughunter pro, и обе программы не дают мне никакой ошибки. – jeebface

+1

Nevermind. Я понимаю, что вы говорите. – jeebface

1

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

  1. Создайте RST сигнала сброса = XOR (w1, w2) и подключить к обоим или FF вход сброса
  2. Connect ваши ТФ входы (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. Ваш выход будет: д = И (q0, q1, NOT (первый))