[英]Passing parameters to Verilog modules
我正在為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 slave32.DATA_WIDTH = 64;
endmodule
提前致謝
編輯:示例中的一些更正
defparam
語句計划用於棄用。 IEEE Std 1800-2012,附件C(棄用),“C.4.1 Defparam聲明”部分指出:
強烈建議用戶遷移其代碼以使用參數重定義的替代方法之一。
Verilog的許多功能都依賴於供應商。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.