Entendiendo los apoyos cuadrados en verilog

1

No entiendo lo que significan los tirantes cuadrados en el siguiente código de Verilog. ¿Alguien puede explicar su propósito?

wire signed [I_width : -F_width] p_to_pipe[order : 0], x_to_pipe[order : 0];

Donde I_width= 5 , F_width=5 y order=2

    
pregunta user37052

1 respuesta

3

El código Verilog proporcionado define dos matrices bidimensionales. Una vez que el componente de la matriz se empaqueta y el otro se desempaqueta. Una matriz empaquetada a veces se denomina vector.

IEEE Std 1800-2012 § 7.4 Arreglos empaquetados y no empaquetados estados:

  

... El término array empaquetado se usa para referirse a las dimensiones declaradas antes del nombre del identificador de datos. El término matriz desempaquetada se usa para referirse a las dimensiones declaradas después del nombre del identificador de datos.

IEEE Std 1800-2012 § 7.4.1 Arreglos empaquetados estados:

  

Una matriz empaquetada es un mecanismo para subdividir un vector en subcampos, a los que se puede acceder cómodamente como elementos de matriz. En consecuencia, se garantiza que una matriz empaquetada se represente como un conjunto contiguo de bits. Una matriz desempaquetada puede o no estar representada. Una matriz empaquetada difiere de una matriz desempaquetada en que, cuando una matriz empaquetada aparece como primaria, se trata como un solo vector.

IEEE Std 1800-2012 § 7.4.2 Arreglos desempaquetados estados:

  

Las matrices desempaquetadas se pueden hacer de cualquier tipo de datos. Las matrices cuyos elementos son en sí matrices se declaran como matrices multidimensionales (véase 7.4.5). Las matrices desempaquetadas se declararán especificando el (los) rango (s) de direcciones después del identificador declarado.

Se declara a la izquierda del nombre de red la definición de rango empaquetado; %código%. Como signed [I_width : -F_width] y I_width son ambos 5, el rango es F_width , un valor de 11 bits. Al declararse empaquetado, el valor se puede asignar como un todo, o asignar un solo bit, o selección de parte dentro del rango [5:-5] . Begin declarado como [5:-5] mean signed puede contener valores negativos utilizando el complemento de 2.

Se declara a la derecha del nombre de red la definición de rango desempaquetado; %código%. Con p_to_pipe[unpacked_index] igual a 2, [order : 0] de order puede tener un valor de 0, 1 o 2. Cualquier otro valor estaría fuera de rango.

Tenga en cuenta que unpacked_index tiene las dimensiones de muestra como p_to_pipe[unpacked_index] . La parte empaquetada de la matriz se traslada a todas las variables definidas en la línea. Unpacked es específico para un nombre de variable. Por lo tanto:

wire signed [I_width : -F_width] p_to_pipe[order : 0], x_to_pipe[order : 0];

Es equivalente a:

wire signed [I_width : -F_width] p_to_pipe[order : 0];
wire signed [I_width : -F_width] x_to_pipe[order : 0];

Recomiendo leer todo IEEE Std 1800-2012 § 7.4. Está diseñado para SystemVerilog, pero es gratuito, a diferencia de los manuales de referencia del lenguaje Verilog de IEEE. Si debe utilizar Verilog estrictamente, intente encontrar una copia de IEEE Std 1364. Las matrices se definen en:

  • IEEE Std 1364-2005 § 4.9 Arreglos
  • IEEE Std 1364-2001 § 3.10 Arreglos
  • IEEE Std 1364-1995 § 3.8 Memorias
respondido por el Greg

Lea otras preguntas en las etiquetas