Según mi conocimiento, typedef enum logic [N-1:0][1:0]{S0,S1,S2,S3} state_t;
no debería compilar, y no pude compilarlo en ningún simulador en EDAplayground . Las enumeraciones necesitan un tipo de datos vectorial simple. logic [N-1:0][1:0]
es una matriz de doble empaquetado y, por lo tanto, no es simple.
Si no especifica el tipo de datos de una enumeración, se supone que es un int
.
typedef enum st_t [N-1:0][1:0] state_t;
tiene un problema similar a su declaración original, pero ahora define una enumeración como una enumeración doble. Además, nunca define los valores de enumeración.
Lo que funcionará:
typedef enum logic [1:0] {S0,S1,S2,S3} st_t;
typedef st_t [N-1:0] state_t;
O como una matriz desempaquetada:
typedef enum logic [1:0] {S0,S1,S2,S3} st_t;
typedef st_t state_t [N];
Lea más sobre los tipos definidos por el usuario ( typedef
) y las enumeraciones ( enum
) en IEEE Std 1800-2012 § 6.18 Tipos definidos por el usuario y § 6.19 Enumerations
Pruebe las combinaciones differnet en su simulador SystemVerilog o uno de los muchos simuladores en EDA Playground (use uno de los simuladores comerciales, el los que tienen límite si hay alguna característica de SV)