Pasar parámetros a los módulos Verilog
Estoy en el proceso de escribir algunos módulos Verilog para un diseño FPGA. Miré en internet para descubrir cómo mejor parametrizo mis módulos. Veo dos métodos diferentes que ocurren a menudo. Incluí un ejemplo a continuación de las dos metodologías diferentes. ¿Cuál de estos métodos es la mejor manera de parametrizar módulos? ¿Cuál es la diferencia? ¿Es dependiente del proveedor (Altera vs Xilinx)?
El primer método: definición del módulo:
module busSlave #(parameter DATA_WIDTH = 1) (
input [DATA_WIDTH-1:0] bus_data,
input bus_wr,
...
);
endmodule
Módulo de instanciación:
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)) sl,ave64(
.bus_data(data_1),
.bus_wr(wr_1),
...
);
endmodule
El segundo método: definición del módulo:
module busSlave(
parameter DATA_WIDTH = 1;
input [DATA_WIDTH-1:0] bus_data,
input bus_wr,
...
);
endmodule
Módulo de instanciación:
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
Gracias por adelantado
EDITAR: algunas correcciones en los ejemplos