How to use $sformatf inside generate block

genvar i;
generate
for(i=0;i<4;i++) begin
interface_if #(`INSTANCE_NUMBER) $sformatf(“instance_number%0d”,i) (.clk(clock), .reset(reset));
end
endgenerate,

i want to create this instance number dynamically as instance_number_0,instance_number_1,instance_number_2,instance_number_3 for various connections. But it is throwing error giving $sformatf cannot be used. Can anyone suggest me how to create this instance number and correct me?

Thanks in advance

In reply to srinivas s chauhan:

We can not give string format in the instance name. Henceforth the error. Looks like you are trying to give different name to instances getting created.

The generate block creates it’s own scope. The instance hierarchy will be uniquified which can be used as instance ID. From IEEE 1800-2017 Section 27.4:

Generate blocks in loop generate constructs can be named or unnamed, and they can consist of only one item, which need not be surrounded by begin-end keywords. Even if the begin-end keywords are absent, it is still a generate block, which, like all generate blocks, comprises a separate scope and a new level of hierarchy when it is instantiated.

genvar i;
generate 
for(i=0;i<4;i++) begin : interface_blk
interface_if #(`INSTANCE_NUMBER) my_interface (.clk(clock), .reset(reset));
end
endgenerate

// This will create names the following generate block threads
interface_blk[0].my_interface
interface_blk[1].my_interface
interface_blk[2].my_interface
interface_blk[3].my_interface

Hence you need not use ‘interface_number[%0d]’ explicitly. Refer to this site for more information on generate block.