【发布时间】:2014-12-18 20:38:25
【问题描述】:
我正在为 FPGA 设计编写一些 Verilog 模块。我浏览了互联网,以了解如何最好地参数化我的模块。我经常看到两种不同的方法。我在下面提供了两种不同方法的示例。 以下哪种方法是参数化模块的最佳方法? 有什么不同? 是否依赖于供应商(Altera 与 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
提前致谢
编辑:示例中的一些更正
【问题讨论】:
-
defparam slave32.DATA_WIDTH = 64;你是说 slave64?
标签: module verilog fpga parameterization