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