Tengo una matriz 2d (y 1 dimensión más de 11 bits), y no quiero enviar al módulo "cb" la matriz 2d completa, sino solo una parte de él, y entendí que si quiero cortar una array No puedo usar variables no constantes en ambos lados de ":".
Entonces, encontré en línea una manera de superar este problema: img [i +: kersize] [j +: kersize], pero sigo recibiendo el siguiente error: "Error (10768): Error Verilog HDL en convbasic.sv (38): el rango debe ser el índice final en el nombre indexado"
Mi código:
module convbasic #(parameter imgsize=4,
parameter kersize=3) (
input clk,
input bit unsigned [10:0] img[imgsize:0][imgsize:0],
input logic raise,rst,
input bit unsigned[10:0] kernel[kersize:0][kersize:0],
output bit unsigned[10:0] result [4:0][4:0]
);
.
.
.
genvar i,j;//,k,l;
generate
for(i=hkersize;i<hkersize+imgsize;i++) begin:first
for(j=hkersize;j<hkersize+imgsize;j++) begin:second
cb(.clk(clk),.img_window(img[i-hkersize +: kersize][j + hkersize +: kersize]),.kernel(kernel),.result(r[i][j]));
end
end
endgenerate
endmodule
lo que estoy tratando de obtener es enviar la matriz al módulo, con índices [j-hkersize: j + hkersize]. (donde - > hkersize = kersize / 2).
Realmente necesito tu ayuda, no tengo idea de cómo solucionarlo, gracias por tu ayuda y esfuerzo.