簡體   English   中英

將參數傳遞給Verilog模塊

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM