Ошибка «нескольких драйверов» возникает при попытке изменить сигнал от разных процессов / всегда блоков.Вы не должны этого делать.
Я привык работать с полностью синхронными системами, поэтому я должен спросить вас, что такое "a_specific_signal" и каково отношение к вашим основным часам.
Следовательно, мой подход будет следующим: 1. синхронизировать «a_specific_signal» с моими текущими часами, 2. определять положительные фронты, 3. использовать это как диск для флага для моего счетчика
reg a_spec_signal_reg0 = 1'b0, a_spec_signal_reg1 = 1'b0, a_spec_signal_reg2 = 1'b0;
always @(posedge clk) begin --synchronizer with 3 FFs
a_spec_signal_reg0 <= a_specific_signal;
a_spec_signal_reg1 <= a_spec_signal_reg0;
a_spec_signal_reg2 <= a_spec_signal_reg1;
end
wire a_spec_signal_posedge;
assign a_spec_signal_posedge = a_spec_signal_reg1 & ~(a_spec_signal_reg2);
reg counter_switch = 1'b0;
always @(posedge clk) begin
something <= 1'b0;
if (a_spec_signal_posedge)
counter_switch <= 1'b1;
if (counter_switch) begin
counter <= counter + 1;
if (counter == 255) begin
counter <= 0;
counter_switch <= 0;
something <= 1'b1;
end
end
end
Несколько замечаний: я предположил, что вы хотите посчитать 256 событий, что означает использование счетчика от 0 до 255 (8 бит).А также что-то сигнал установлен как 0 в его состоянии по умолчанию, поэтому, когда приходит условие «counter == 255», он выводит тик для всего тактового цикла, который обычно используется.