eav*_*een 7 verilog module fpga parameterization
我正在为FPGA设计编写一些Verilog模块.我浏览了一下互联网,了解我如何最好地对我的模块进行参数化.我经常看到两种不同的方法.我在下面列举了两种不同方法的例子.哪些方法是参数化模块的最佳方法?有什么不同?它是依赖于供应商的吗(Altera vs Xilinx)?
第一种方法:模块定义:
module busSlave #(parameter DATA_WIDTH = 1) (
input [DATA_WIDTH-1:0] bus_data,
input bus_wr,
...
);
endmodule
Run Code Online (Sandbox Code Playgroud)
模块实例化:
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
Run Code Online (Sandbox Code Playgroud)
第二种方法:模块定义:
module busSlave(
parameter DATA_WIDTH = 1;
input [DATA_WIDTH-1:0] bus_data,
input bus_wr,
...
);
endmodule
Run Code Online (Sandbox Code Playgroud)
模块实例化:
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
Run Code Online (Sandbox Code Playgroud)
提前致谢
编辑:示例中的一些更正
该defparam
声明计划弃用。IEEE Std 1800-2012,附录 C(弃用),“C.4.1 Defparam statements”部分指出:
强烈鼓励用户迁移其代码以使用参数重新定义的替代方法之一。
Verilog 的许多功能都依赖于供应商。