我正在编写一些用于FPGA设计的Verilog模块。我在互联网上查找了如何最好地对我的模块进行参数化的方法。我看到经常出现两种不同的方法。下面是这两种不同方法的示例。
这两种方法中哪一种是最好的参数化模块的方式?
它们之间有什么区别?
它是否取决于供应商(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 slave64.DATA_WIDTH = 64;
endmodule