我应该在实例化模块时什么时候放置 "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 节模块实例化语法。
例子中,我按"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 节模块实例化语法。