Можем ли мы иметь набор настраиваемых модулей?

Можем ли мы иметь массив экземпляров для настраиваемого модуля?

Например: у нас может быть 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