Можем ли мы иметь набор настраиваемых модулей?
Можем ли мы иметь массив экземпляров для настраиваемого модуля?
Например: у нас может быть input [15:0] a;
- это создает шину. Можем ли мы сделать то же самое для пользовательских модулей, т.е. DFF [15:0] d;
, где DFF - это настраиваемый модуль?
Здесь я намереваюсь создать 16 экземпляров модуля DFF.
Ответы
Ответ 1
Verilog массивов экземпляров были добавлены в Verilog-1995 (IEEE 1364-1995). Они могут использоваться с воротами, определяемыми пользователем примитивами и модулями. Сгенерированные, более мощные, но более сложные, были добавлены в Verilog-2001.
Вот пример массива экземпляров модуля:
DFF d[15:0] (clk, DFF_i, DFF_o);
Для каждого подключения порта, если размер соответствует формальному параметру, он подключается к каждому экземпляру. В противном случае каждый экземпляр подключается к выбору части (или бит-select) выражения.
Ответ 2
невозможно сделать это напрямую (обновление: теперь после ответа mark4o я знаю, что есть способ), но что вы можете сделать, это использовать оператор generate
для создания нескольких экземпляров вашего настраиваемого модуля и их подключения до ваших сигналов. Должен выглядеть примерно так:
wire DFF_i[15:0];
wire DFF_o[15:0];
generate
genvar i;
for (i=0; i<15; i=i+1) begin : dff
custom i_custom(
.clk(clk)
,.input(DFF_i[i])
,.output(DFF_o[i])
);
end
endgenerate
В противном случае во время синтеза возможно наличие правильных пользовательских модулей, но я не эксперт.
Cheers,
Daniel