我应该在实例化模块时什么时候放置 "dot" ?

When should I put the "dot" while instantiating a module?

例子中,我按"enc_en"放点的时候出现错误,请问我的实现有什么问题吗?

module some_top_module();
....
logic [NOF_PORTS-1:0] wr_en_vec;
logic [NOF_PORTS-1:0] rd_en_vec;
logic enc_en;
encoder #(.IN_W(ADDR_WIDTH)) enc(avalon_aligned_if.slave.ext, .enc_en, .wr_en_vec);
...
endmodule

module encoder #(parameter IN_W = 2)(enc_in, enc_en, enc_out);

function integer expb2 (input [31:0] value);
for (expb2  = 1; value > 0; expb2  = expb2 << 1) begin
value = value -1;
end
endfunction

localparam OUT_W = expb2(IN_W);

input logic [IN_W-1:0] enc_in;
input logic enc_en;
output logic [OUT_W-1:0] enc_out;
 ...
 ...
 endmodule

你的语法不合法。 VCS 产生一个有用的错误:

  The two types of module port connections, by ordered list and by name, shall
  not be mixed.

没有 leading .,您使用的是有序端口列表,如果有 .,则您使用的是按名称的端口列表。

encoder #(.IN_W(ADDR_WIDTH)) enc(avalon_aligned_if.slave.ext, .enc_en, .wr_en_vec);
//                                 by-order                    by-name

参考 IEEE Std 1800-2017,第 23.3.2 节模块实例化语法