Я хочу создать эту общую оболочку для набора модулей, которые я пишу. Оболочка должна обеспечивать возможность подключения этих модулей к различным типам NoC без необходимости изменять поведение внутренних модулей.
Я думал, что один из способов сделать это будет следующим. Учитывая очень простой модуль для переноса:
module add #(
parameter COLUMN_WIDTH = 32
)
(
//data in
input logic [COLUMN_WIDTH-1:0] col_1,
input logic [COLUMN_WIDTH-1:0] col_2,
//data out
output logic [COLUMN_WIDTH-1:0] col_o
);
assign col_o = col_1 + col_2;
endmodule
Обертка должна быть следующей:
module wrapper #(
parameter COLUMN_WIDTH = 32,
parameter WRAPPED_MODULE = add
)
(
//data in
input logic [COLUMN_WIDTH-1:0] col_1,
input logic [COLUMN_WIDTH-1:0] col_2,
//data out
output logic [COLUMN_WIDTH-1:0] col_o,
/* std signals */
input logic clk,
input logic reset_i // reset everything
);
logic [COLUMN_WIDTH-1:0] max_result;
WRAPPED_MODULE #(.COLUMN_WDITH(COLUMN_WIDTH),
) a(
.*
);
always @(posedge clk) begin
if (reset_i)
max_result <= 0;
else
max_result <= (col_o > max_result) ? col_o : max_result;
end
endmodule
Ошибка, которую я получаю, следующая:
Error-[IND] Identifier not declared
wrapper.sv, 4
Identifier 'add' has not been declared yet. If this error is not expected,
please check if you have set `default_nettype to none.
Это имеет смысл, поскольку параметр — это не то же самое, что макрос. Полный дизайн должен, возможно, создавать несколько обернутых модулей, и я не хочу дублировать код, создавая оболочку для каждого внутреннего модуля. Как я могу это сделать?