Estoy tratando de implementar la convolución 2d (8 bits cada celda en la convolución, por lo que en systemV es 3D) en el sistema verilog, y tengo problemas para insertar datos en la matriz de "resultados", y no entiendo qué hago mal, esto es mi código:
module conv2d (
input clk,
input logic [7:0] img[3:0][3:0],
input logic [7:0] kernel[2:0][2:0],
output logic [7:0] result [4:0][4:0]
);//#(parameter img_size=16,kernel_size=4)()
int i,j;
always_ff @(posedge clk) begin
for(i=0;i<5;i++) begin
for(j=0;j<5;j++) begin
for(int k=0;k<3;k++) begin
for(int l=0;l<3;l++) begin
if ((i-k > -1)&&(j-l>-1)&&(i-k < 3)&&(j-l < 3))begin
result[i][j] <= result[i][j] + kernel[i-k][j-l]*img[k][l];
end
end
end
end
end
end
endmodule
mi banco de pruebas:
module test;
logic clk;
logic [7:0] img[3:0][3:0] ;
logic [7:0] kernel[2:0][2:0];
logic [7:0] result[4:0][4:0];
initial begin
for(int i=0;i<5;i++) begin
for(int j=0;j<5;j++) begin
result[i][j]=8'b0;
end
end
clk=1'b0;
img[0][0]=8'd1;
img[0][1]=8'd0;
img[0][2]=8'd2;
img[0][3]=8'd0;
img[1][0]=8'd1;
img[1][1]=8'd2;
img[1][2]=8'd3;
img[1][3]=8'd1;
img[2][0]=8'd0;
img[2][1]=8'd0;
img[2][2]=8'd1;
img[2][3]=8'd0;
img[3][0]=8'd1;
img[3][1]=8'd0;
img[3][2]=8'd3;
img[3][3]=8'd1;
kernel[0][0]=8'd1;
kernel[0][1]=8'd0;
kernel[0][2]=8'd0;
kernel[1][0]=8'd0;
kernel[1][1]=8'd1;
kernel[1][2]=8'd0;
kernel[2][0]=8'd1;
kernel[2][1]=8'd1;
kernel[2][2]=8'd0;
end
//#100;
//$stop;
always #5 clk = ~clk;
conv2d con4test (
.clk(clk),
.img(img),
.kernel(kernel),
.result(result)
);
endmodule
esta es la primera vez que trabajo por primera vez con un sistema verilog y arreglos en 3D, no pude encontrar ninguna información útil en línea, no seas tan duro conmigo.
¡Gracias!
EDITAR: solucionado el problema del banco de pruebas. Y mi problema es que la matriz de resultados no se está actualizando, lo que significa que todavía es 0
EDITAR: trabajando!
Hice pocos cambios en el código, pero el que hizo el trabajo (creo) estaba cambiando siempre_ff siempre diré la verdad, no tengo idea de por qué ... y estaré súper interesado si alguien sabe.
Gracias de nuevo.