Передача параметров в модули Verilog

Я нахожусь в процессе написания некоторых модулей Verilog для дизайна FPGA. Я посмотрел в интернете, чтобы узнать, как лучше всего параметризовать свои модули. Я вижу два разных метода, которые встречаются часто. Ниже приведен пример двух разных методологий. Какой из этих методов является наилучшим способом параметризации модулей? В чем разница? Это зависит от поставщика (Altera vs Xilinx)?

Первый метод: определение модуля:

module busSlave #(parameter DATA_WIDTH = 1) (
  input [DATA_WIDTH-1:0] bus_data,
  input                  bus_wr,
  ...
);
endmodule

Модуль создания экземпляров:

module top;

  //DATA_WIDTH is 32 in this instance
  busSlave #(.DATA_WIDTH(32)) slave32(
    .bus_data(data_0),
    .bus_wr(wr_0),
    ...
    );

  //DATA_WIDTH is 64 in this instance
  busSlave #(.DATA_WIDTH(64)) slave64(
    .bus_data(data_1),
    .bus_wr(wr_1),
    ...
    );
endmodule

Второй метод: определение модуля:

module busSlave(
  parameter DATA_WIDTH = 1;
  input [DATA_WIDTH-1:0] bus_data,
  input                  bus_wr,
  ...
);
endmodule

Модуль создания экземпляров:

module top;

  //DATA_WIDTH is 32 in this instance
  busSlave slave32(
    .bus_data(data_0),
    .bus_wr(wr_0),
    ...
    );
  defparam slave32.DATA_WIDTH = 32;

  //DATA_WIDTH is 64 in this instance
  busSlave slave64(
    .bus_data(data_1),
    .bus_wr(wr_1),
    ...
    );
  defparam slave32.DATA_WIDTH = 64;
endmodule

заранее спасибо

РЕДАКТИРОВАТЬ: несколько исправлений в примерах

Ответы на вопрос(1)

Ваш ответ на вопрос