内部的defparam在veilog中生成块

时间:2016-04-19 07:47:31

标签: verilog system-verilog

在设计中,顶级模块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语句出错。它在哪里无法获取实例的路径。可能是因为生成语句。 在genertate block中使用defparam是否合法?

1 个答案:

答案 0 :(得分:1)

首先,不要使用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 的层次结构名称。

例如:

function addGame() {
   if(addGame.flag) 
   return;
   addGame.flag = true;
   // rest of procedure ....

http://www.edaplayground.com/x/4PyL