Я читал книгу "Verilog Hdl" Самира Пальниткара. В конце главы 6 приведено следующее упражнение: сконструируйте синхронный счетчик с помощью триггеров JK «ведущий-ведомый». Однако я борюсь с триггером JK.
Вот схема триггера JK, представленная в книге:
![Here's the JK flip-flop circuit provided in the book](https://i.stack.imgur.com/dbg66.png)
А вот мой код 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
Что не так?