簡體   English   中英

用於verilog中的模塊數組的defparam

[英]defparam for array of modules in verilog

我正在嘗試使用我自己定義的寄存器數組來實現參數化的特殊用途 memory。

我的注冊:

module my_register(clk,
                   data_in,
                   write_enable,
                   equal);

parameter WORD_SIZE = 4;

input                           clk;
input       [WORD_SIZE - 1 : 0] data_in;
input                           write_enable;
output                          equal;

reg [WORD_SIZE - 1 : 0] register;

always @(posedge clk) begin
     if (write_enable)
         register = data_in;
end

assign equal = data_in ^ register;
endmodule

在頂部模塊中,我有:

module my_memory(clk,
                 data_in,
                 write_enable, 
                 matches);

parameter MY_WORD_SIZE = 8;

input                                           clk;
input  [WORD_SIZE - 1 : 0]                      data_in;
input  [(2'b1 << MEMORY_ADDRESS_WIDTH) - 1 : 0] write_enable;
output [(2'b1 << MEMORY_ADDRESS_WIDTH) - 1 : 0] matches;

my_register memory [(2'b1 << MEMORY_ADDRESS_WIDTH) - 1 : 0] (clk, data_in, write_enable, matches);
endmodule

但問題是我無法覆蓋頂部模塊中my_register的參數WORD_SIZE

我試過了:

defparam memory.WORD_SIZE = MY_WORD_SIZE;

但這不起作用並給出錯誤:

WORD_SIZE 未在前綴 memory 下聲明

有沒有辦法覆蓋自定義模塊數組的參數?

提前致謝

您不能使用defparam在一個語句中覆蓋一組實例。 您必須為每個實例重復defparam 但是在 Verilog-2001 或 SystemVerilog 中不需要使用defparam語句。 您可以通過實例化語句內聯傳遞參數。

module my_memory #(parameter MY_WORD_SIZE = 8) ( 
input                                           clk,
input  [WORD_SIZE - 1 : 0]                      data_in,
input  [(2'b1 << MEMORY_ADDRESS_WIDTH) - 1 : 0] write_enable,
output [(2'b1 << MEMORY_ADDRESS_WIDTH) - 1 : 0] matches
);

my_register #(.WORD_SIZE(MY_WORD_SIZE))
     memory [(2'b1 << MEMORY_ADDRESS_WIDTH) - 1 : 0] (clk, data_in, write_enable, matches);
endmodule

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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