Parameter an Verilog-Module übergeben
Ich bin gerade dabei, einige Verilog-Module für ein FPGA-Design zu schreiben. Ich habe mich im Internet umgesehen, um herauszufinden, wie ich meine Module am besten parametriere. Ich sehe zwei verschiedene Methoden, die häufig vorkommen. Ich habe hier ein Beispiel für die beiden unterschiedlichen Methoden angeführt. Mit welcher dieser Methoden lassen sich Module am besten parametrisieren? Was ist der Unterschied? Ist es herstellerabhängig (Altera vs Xilinx)?
Die erste Methode: Moduldefinition:
module busSlave #(parameter DATA_WIDTH = 1) (
input [DATA_WIDTH-1:0] bus_data,
input bus_wr,
...
);
endmodule
Modulinstanziierung:
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
Die zweite Methode: Moduldefinition:
module busSlave(
parameter DATA_WIDTH = 1;
input [DATA_WIDTH-1:0] bus_data,
input bus_wr,
...
);
endmodule
Modulinstanziierung:
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
Danke im Vorau
EDIT: einige Korrekturen in den Beispielen