在设计中,顶层模块 A 有另一个模块 B 的两个实例
module A (....);
B (.C(C1)...) inst1;
B (.C(C2)...) inst2;
模块 B 有一些参数,我想使用生成块从测试台分配这些参数。
//Testbench
module test_top ();
A (....) A1;
generate
for (genvar k = 0; k<2; k++) begin
defparam A1.instk.C = 0;
end
endgenerate
NCSIM 上的编译导致 defparam 语句出现错误。它无法获取实例的路径。可能是因为生成语句。 在生成块中使用 defparam 是否合法?
首先,不要使用
defparam
- 它已被弃用。相反,请使用 #( ... )
语法设置参数。
其次,如果您希望使用
B
来引用模块 genvar
的实例,则需要处于生成循环中。
最后,如果您确实想将 分层命名 与
generate
一起使用,那么您必须在 generate
语句内命名该块。 $display
块中的 initial
给出了一个示例 - 模块实例 I
内的 A1
的分层名称。
例如:
module A #(integer WIDTH) (input [WIDTH-1:0] I, output [WIDTH-1:0] O);
generate
for (genvar k = 0; k<WIDTH; k++) begin : BLOCK_NAME
B #(.WIDTH(WIDTH),.BIT(k)) Binst (.I(I), .O(O[k]));
end
endgenerate
endmodule
module B #(integer WIDTH, BIT) (input [WIDTH-1:0] I, output O);
assign O = I[BIT];
endmodule
module test_top;
reg [1:0] I;
wire [1:0] O;
A #(.WIDTH(2)) A1 (.I(I), .O(O));
initial
$display("I[1]= %b", test_top.A1.BLOCK_NAME[1].Binst.I);
endmodule