typedef的系统Verilog typedef

问题描述 投票:-1回答:2

typedef enum s提供了一种方便的方式来描述一组名称-值对。是否有一种方法可以链接它们以在各个级别使用枚举创建更深的结构?

例如,我有以下内容:

typedef enum logic {ALPHA=0, BETA=1} a_t;
typedef enum logic {GAMMA=0, DELTA=1} b_t;

我想创建由ca_t组成的变量b_t。这可能吗?

类似:

a_t b_t c;

所以在c的每个维度上,我都可以有enum s。

enums typedef system-verilog
2个回答
0
投票

您也许是指associative array,例如:

c[ALPHA] = BETA;

如果是这样,您可以简单地将其称为:

b_t c[a_t];

这意味着创建一个关联数组c,其键是枚举a_t,而值是枚举b_t。如果您愿意,可以继续前进:)

typedef enum logic {ALPHA=0, BETA=1} a_t;
typedef enum logic {GAMMA=0, DELTA=1} b_t;
typedef enum logic {BAD_AT=0, GREEK_LETTERS=1} c_t;

c_t my_data_structure[a_t][b_t];

// Assigning a value
my_data_structure[ALPHA][GAMMA] = GREEK_LETTERS;

请参阅EDA Playground here上的示例。

[另外,我认为您对typedef的使用有点误解。它没有完全描述一组名称-值对,而是为数据类型提供了一个新名称。实际上是enum创建了“一组名称/值对”,但我想澄清一下,它实际上是在为值分配标识符。如果您可以解释该应用程序以获得更清晰的答案,这将有所帮助。


0
投票

您不能从另一个创建一个enum typedef。有些人可能会称之为扩展枚举。您也不能有多个enum具有相同名称的多个名称。

您可以做的是创建一个具有名称/值对的关联数组,并将这些数组连接在一起。

int a[string], b[string], c[string];
initial begin
       a = '{"ALPHA":0, "BETA":1};
       b = '{"GAMMA":0, "DELTA":1};
       c = a;
       foreach(b[s]) c[s]=b[s];
end
© www.soinside.com 2019 - 2024. All rights reserved.