Estoy tratando de escribir un código Verilog para un multiplicador basado en el principio del ábaco. Quiero comprimir una matriz de 8X15 bits a las filas más bajas. Por ejemplo para una matriz de
p0 = 0000000000000000
p1 = 1111111111111111
p2 = 0000000000000000
p3 = 1111111111111111
p4 = 0000000000000000
p5 = 1111111111111111
p6 = 0000000000000000
p7 = 1111111111111111
Quiero que mi salida sea:
pp[0] = 000000000000000
pp[1] = 000000000000000
pp[2] = 000000000000000
pp[3] = 000000000000000
pp[4] = 111111111111111
pp[5] = 111111111111111
pp[6] = 111111111111111
pp[7] = 111111111111111
He escrito el siguiente código para lograr esto:
always @ (p0 or p1 or p2 or p3 or p4 or p5 or p6 or p7)
begin
pp[1] = p0;
pp[2] = p1;
pp[3] = p2;
pp[4] = p3;
pp[5] = p4;
pp[6] = p5;
pp[7] = p6;
pp[8] = p7;
for (i=1; i<=15; i=i+1)
begin
for (j=8; j>=1; j=j-1)
begin
for (k=j-1; k>=1; k=k-1)
begin
if ((!pp[j][i]) && (pp[k][i]))
begin
pp[j][i] <= pp[k][i];
pp[k][i] <= pp[j][i];
end
end
end
end
end
pero la salida que estoy obteniendo es la siguiente:
pp[0] = 000000000000000
pp[1] = 000000000000000
pp[2] = 111111111111111
pp[3] = 000000000000000
pp[4] = 111111111111111
pp[5] = 000000000000000
pp[6] = 111111111111111
pp[7] = 111111111111111
¿Puede alguien decir dónde está la falla?