Передача параметров в модули 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
заранее спасибо
РЕДАКТИРОВАТЬ: несколько исправлений в примерах