¿Cómo dar una matriz 2-D como salida de una función en Verilog?

0

Tengo que escribir un código para generar productos parciales para una multiplicación de 53 cabinas de 53 * 53 radix. Declaré una función como se muestra abajo; está mostrando el mensaje de error MULTIPLE PACKED DIMENSION NOT ALLOWED IN VERILOG . ¿Por qué?

function[27:0][107:0]boothans;(function declaration)
    
pregunta twinkle

2 respuestas

2

Una de las formas "agradables" de aplanar una matriz es elegir un tamaño de matriz donde las longitudes de los bordes sean potencias de 2. Por ejemplo, tiene tamaños de 108 y 28 bits. Si redondea esos hasta 128 y 32 bits, entonces puede concatenar las direcciones de bits para obtener una matriz "plana".

Por ejemplo, digamos que x es la dirección de 32 bits e y es la dirección de 128 bits,

square[x][y] se asigna a flat[x + y << 32]

Para resolver esto en verilog, puede recorrer xey de forma anidada, y su nueva dirección de datos planos es {x, y} o {y, x} dependiendo de si desea que sus datos sean en filas o columna-sabio.

El otro lado es solo una cuestión de revertir el proceso. Es trivial rellenar los datos con ceros cuando sea necesario, y parece que estás haciendo algo de relleno en cualquier caso porque las longitudes de tus filas no son las mismas.

    
respondido por el stanri
1

Creo que el mensaje de error lo dice todo en tu caso. Simplemente, no puede usar una matriz como puerto de entrada / salida de un módulo o función (al menos no sin SystemVerilog).

Si desea continuar, deberá aplanar su matriz 2d en un bus 1d para pasar dentro y fuera de la función.

    
respondido por el Tim

Lea otras preguntas en las etiquetas