Ошибка: предел итерации 5000 достигнут во время xxx нс - PullRequest
0 голосов
/ 01 сентября 2018

Я читал книгу "Verilog Hdl" Самира Пальниткара. В конце главы 6 приведено следующее упражнение: сконструируйте синхронный счетчик с помощью триггеров JK «ведущий-ведомый». Однако я борюсь с триггером JK. Вот схема триггера JK, представленная в книге: Here's the JK flip-flop circuit provided in the book

А вот мой код Verilog для вышеуказанной схемы (я проверял его несколько раз, надеюсь, нет глупой ошибки):

module test(in1, in2, clk, out, clr);
    input in1, in2, clk, clr;
    output out;

    mJKff wtf(
        .Q(out),
        .J(in1),
        .K(in2),
        .clk(clk),
        .clr(clr));

endmodule

module mJKff(Q, J, K, clk, clr);
    output Q;
    input J, K, clk, clr;

    wire
        a, b, c, d, y, ybar, cbar, qbar;

    assign
        a    = ~(qbar & J & clk & clr),
        b     = ~(clk & K & Q),
        y     = ~(a & ybar),
        ybar = ~(y & clr & b),
        c    = ~(y & cbar),
        d    = ~(ybar & cbar),
        cbar = ~clk;

    assign
        qbar = ~(Q & clr & d),
        Q    = ~(c & qbar);

endmodule

Код успешно скомпилирован, я использую Quartus Prime v18.0 для симуляции и получаю эту ошибку:

Ошибка (подавляемая): (vsim-3601) Достигнут предел итерации 5000 в момент времени xxx нс.

«ххх» именно в тот момент, когда «клк» поднимается и J = 1; К = 0; clr = 1 Что не так?

1 Ответ

0 голосов
/ 01 сентября 2018

Вам нужно добавить задержки в вашу схему; без них циклы в вашей логике бесконечно бегают в симуляции; Пример:

assign #1 qbar = ~(Q & clr & d);
...