4-битный счетчик d триггер с + 1 logi c Verilog - PullRequest
0 голосов
/ 19 апреля 2020

enter image description here

Я пытаюсь реализовать этот D-триггерный счетчик с + 1 logi c через verilog. Но я получаю много кодов ошибок о нескольких постоянных драйверах для net. Может кто-нибудь дать мне руку, я очень плохо знаком с этим языком программирования. Вот также код soo far

module LAB (clk, clear, Enable, Q);

input clk, clear, Enable;   

output[3:0] Q; 

reg[3:0] Q;

wire D;


assign D = Q;

always @ (posedge clk)

begin

if (!clear)

Q <= 1'b0;

else

Q <= D;

end

always @ (Enable)

begin

if (Enable == 1)

Q <= D + 1;

else

Q <= D;

end 

endmodule

. Вот коды ошибок, которые я получаю

Ошибка (10028): Не удается разрешить несколько постоянных драйверов для net "Q [3 ] "at

LAB.v (17) Ошибка (10029): постоянный драйвер на LAB.v (9)

Ошибка (10028): невозможно разрешить несколько постоянных драйверов для net «Q [2]» в LAB.v (17)

Ошибка (10028): невозможно разрешить несколько постоянных драйверов для net «Q 1 » в LAB.v (22)

Ошибка (10028): невозможно разрешить несколько постоянных драйверов для net "Q [0]" в LAB.v (22)

Ошибка (12153): может не разработана иерархия пользователей верхнего уровня

Ошибка: 64-разрядный анализ и синтез Quartus II не удалось. 6 ошибок, 4 предупреждения

Error: Peak virtual memory: 4613 megabytes


Error: Processing ended: Sun Apr 19 18:39:09 2020


Error: Elapsed time: 00:00:01


Error: Total CPU time (on all processors): 00:00:00

Ошибка (293001): полная компиляция Quartus II не удалась. 8 ошибок, 4 предупреждения

1 Ответ

0 голосов
/ 19 апреля 2020

у вас есть 2 разных всегда блока, которые управляют одним и тем же регистром Q. Вы можете думать об отдельном блоке всегда как об отдельном аппаратном устройстве. Итак, в вашем случае у вас есть 2 флопа, выходы которых подключены. Это нарушает правила аппаратного обеспечения и синтеза. Это также создает проблемы во время симуляции.

Единственный способ исправить это - создать единственный блок всегда, который определяет все логи c, необходимые для управления флопом, что-то вроде следующего:

always @ (posedge clk or negedge clear) begin
    if (!clear)
        Q <= 1'b0;
    else if (enable)
        Q <= D + 1;
    else 
        Q <= D;
end

Я не комментирую вашу логику c здесь, просто приведу пример, который должен устранить все ошибки вокруг нескольких драйверов для Q.

...