En primer lugar, es una práctica común que los parámetros sean mayúsculas. Al leer el código, esto ayuda a identificar las constantes de las variables. Para las matrices, consulte IEEE Std 1800-2012 § 7.4 Arreglos empaquetados y no empaquetados .
- Empaquetado significa que se puede acceder a todos los bits a la vez o troceados
- Desempaquetado significa que cada índice debe seleccionarse individualmente.
Los siguientes tienen las mismas dimensiones:
-
logic [N-1:0] arr_up [M-1:0];
es M matrices desempaquetadas, cada una con N bits empaquetados
-
logic arr_uu [M-1:0] [N-1:0];
es M matrices desempaquetadas, cada una con N matrices de bits individuales desempaquetadas
-
logic [M-1:0] [N-1:0] arr_pp;
es una matriz empaquetada M por N, se puede leer una porción de N bits del índice M
Las matrices desempaquetadas se pueden inicializar con un solo dígito: logic [N-1:0] arr_up [M];
es equivalente a logic [N-1:0] arr_up [0:M-1];
. Tenga en cuenta que el [M]
es [0:M-1]
no [M-1:0]
.
Las diferencias están en el acceso. Todos pueden acceder a un solo bit, pero solo los bits empaquetados pueden acceder a un segmento.
arr_up[M-2] = {{N{1'b0}}}; // legal
arr_uu[M-2] = {{N{1'b0}}}; // illegal, assigning packed to unpacked
arr_pp[M-2] = {{N{1'b0}}}; //legal'
arr_up[M-1:M-4] = {{3*N{1'b1}}}; // illegal, unpacked cannot use sliced array
arr_uu[M-1:M-4] = {{3*N{1'b1}}}; // illegal, unpacked cannot use sliced array
arr_pp[M-1:M-4] = {{3*N{1'b1}}}; // legal
arr_up[M-2][N-5] = 1'b0; // legal
arr_uu[M-2][N-5] = 1'b0; // legal
arr_pp[M-2][N-5] = 1'b0; // legal
arr_up[M-2][N-5:4] = {{N-9{1'b1}}}; // legal
arr_uu[M-2][N-5:4] = {{N-9{1'b1}}}; // illegal, unpacked cannot use sliced array
arr_pp[M-2][N-5:4] = {{N-9{1'b1}}}; // legal
Si el simulador solo está accediendo a un solo bit o índice, las matrices desempaquetadas darán un mejor rendimiento. Esto se debe a que las matrices empaquetadas se acceden en conjunto incluso si solo se está utilizando un bit. Hay un equilibrio entre la sobrecarga de búsqueda de simuladores y el número de operaciones de búsqueda. En general, las matrices 2-D son matrices desempaquetadas de matrices empaquetadas. Añadir dimensiones es normal en el lado desempaquetado. Los bytes, los enteros, las palabras y los buses de datos están empaquetados.
Con typedef enum logic [N-1:0][1:0]{S0,S1,S2,S3} statetype;
, tenga en cuenta que esto está creando la definición del tipo de estado. Es crear una matriz de 2 * N bits pero solo permite 4 valores.
Para una matriz de máquinas de estado de 4 estados, recomendaría:
typedef enum logic [1:0]{S0,S1,S2,S3} state_et;
state_et state[N], nextstate[N];