¿Cuál es la diferencia entre la matriz escalar y la matriz vectorial?

4

Primera pregunta

Ya sea que declaremos la matriz como escalar o vector, podemos acceder a cada elemento bit a bit. Por ejemplo, podemos declarar dos matrices a continuación.

reg scalar_array[0:9];
reg [0:9] vector_array;  

always @*
begin
  scalar_array[0] = 1'b1;
  vector_array[0] = 1'b1;
end

Me gustaría saber si existe la diferencia entre dos declaraciones.

Segunda pregunta

También, cuando declaro la matriz bidimensional como abajo, pude acceder a toda la fila usando el operador de indexación [] para la variable declarada usando la siguiente sintaxis.

reg[X:X] var_name [Y:Y];  

Sin embargo, no pude acceder a toda la fila cuando declaro la matriz con la siguiente sintaxis.

reg var_name [X:X][Y:Y];

Me gustaría saber cómo se puede sintetizar este concepto en el hardware, y si ambos son sintetizables, cuál es la diferencia entre ellos.

reg [0:9] vector_array_2d [0:15];
reg scalar_array_2d[0:9][0:15];
always @*
begin
  vector_array_2d[0] = 'd1;
  scalar_array_2d[0] = 'd1; //raise the error!! 
end
    
pregunta JaeHyuk Lee

1 respuesta

1

Para su primera pregunta, busque la diferencia entre arreglos empaquetados y no empaquetados .

Su segunda pregunta es una limitación de Verilog con matrices desempaquetadas: solo permite el acceso a un elemento de matriz a la vez. SystemVerilog no tiene esta restricción. Puede acceder a una matriz desempaquetada en su totalidad o seleccionar una dimensión completa.

    
respondido por el dave_59

Lea otras preguntas en las etiquetas