SystemVerilog Enumerated Multi-Domain Array: ¿cómo declarar / definir?

0

Aquí hay un ejemplo de cómo definir la matriz 2 * N de tipos de enumeración de {S0, S1, S2, S3}:

typedef enumeración lógica [N-1: 0] [1: 0] {S0, S1, S2, S3} state_t; (*)

Por lo tanto, cada elemento de la matriz 2 * N anterior puede ser S0 o S1 o S2 o S3.

Digamos que {S0, S1, S2, S3} se definen como un tipo enumeración independiente:

typedef enum {S0, S1, S2, S3} st_t;

Entonces, ¿cómo puedo ahora reescribir la primera declaración (*)?

Podría reescribirse como sigue:

typedef enum st_t [N-1: 0] [1: 0] state_t;

¡Gracias!

    
pregunta John

1 respuesta

0

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)

    
respondido por el Greg

Lea otras preguntas en las etiquetas