Primera pregunta
Tanto si declaramos el array como escalar o vectorial, 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
Además, cuando declaro el array bidimensional como abajo, podría acceder a toda la fila usando el operador de indexación[] para la variable declarada usando una sintaxis de abajo.
reg[X:X] var_name [Y:Y];
Sin embargo, no pude acceder a toda la fila cuando declaré el array utilizando 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