Приветствую всех
Суть задачи: есть 32 таймера, каждый из них имеет 16-разрядный выходной регистр, где хранится текущее значение, вот его упрощённый код:
Код
module timer #(
parameter TIMER_WIDTH = 16
)(
input logic rst_i,
input logic clk_i,
input logic ena_i,
//...
output logic [ TIMER_WIDTH - 1 : 0 ] value_o
);
always_ff @( posedge rst_i or posedge clk_i )
begin
if ( rst_i )
begin
value_o <= '0;
end else
begin
if ( ena_i )
begin
value_o <= value_o + 1'b1;
end
end
end
endmodule
И есть модуль с регистрами шириной 8 бит, память под регистры я объявляю вот так:
Код
logic [ 2**ADDR_WIDTH - 1 : 0 ][ DATA_WIDTH - 1 : 0 ] regs;
Значения, которые получаются в процессе работы таймеров, должны храниться в этом наборе регистров. Как нужно описать межсоединение таймеров с набором регистров так, чтобы не получалось "лишних" регистров? Пытался делать так (упрощённо):
Код
module registers #(
parameter ADDR_WIDTH = 7,
parameter DATA_WIDTH = 8,
parameter NUMBER_OF_TIMERS = 32
)(
//...
input logic [ NUMBER_OF_TIMERS * TIMER_WIDTH - 1 : 0 ] timers_i,
output logic [ NUMBER_OF_TIMERS * TIMER_WIDTH - 1 : 0 ] timers_o,
//...
);
//...
genvar i;
generate
for (i = 0; i < NUMBER_OF_TIMERS; ++i)
begin : some
assign timers_o[(i + 1) * TIMER_WIDTH - 1 : i * TIMER_WIDTH] = regs[i * 2 + 1 : i * 2];
assign regs[i * 2 + 1 : i * 2] = timers_i[(i + 1) * TIMER_WIDTH - 1 : i * TIMER_WIDTH];
end
endgenerate
//...
Затем в топе:
Код
module top (
//...
output logic [ NUMBER_OF_TIMERS * DATA_WIDTH * 2 - 1 : 0 ] timers_o,
//...
);
//...
logic [ NUMBER_OF_TIMERS * DATA_WIDTH * 2 - 1 : 0 ] timers_i;
genvar i;
generate
for ( i = 0; i < 32; ++i )
begin : TIMER
timer #( TIMER_WIDTH ) tim ( .*,
.value_o ( timers_i[ ( ( i + 1 ) * TIMER_WIDTH - 1 ) : ( i * TIMER_WIDTH ) ] )
);
end : TIMER
endgenerate
registers #(
ADDR_WIDTH,
DATA_WIDTH,
NUMBER_OF_TIMERS
) regs ( .* );
//...
В итоге получаю вот такую картину:

Не понимаю, откуда ещё берутся драйверы, если их нет. Я даже цепи сброса удалил, причём на остальные 500 цепей никаких ошибок не вылазит (или после какого-то числа ошибок компиляция завершается автоматически?) Заранее благодарю за помощь