首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >类型定义的系统Verilog类型定义

类型定义的系统Verilog类型定义
EN

Stack Overflow用户
提问于 2020-02-07 11:57:53
回答 2查看 647关注 0票数 0

typedef enum提供了一种方便的方法来描述一组名称-值对。有没有办法将它们链接起来,以便在所有级别使用enum创建更深层次的结构?

例如,我有以下内容:

代码语言:javascript
复制
typedef enum logic {ALPHA=0, BETA=1} a_t;
typedef enum logic {GAMMA=0, DELTA=1} b_t;
typedef enum logic {ZETA=0, ETA=1} c_t;
...

我想创建一个由a_tb_t组成的变量c。这个是可能的吗?

类似于:

代码语言:javascript
复制
a_t b_t c;

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

编辑:一些澄清-假设a_tb_tc_t是不可变的,因为它们是自动生成的。这样的枚举有成百上千种。我想根据需要创建更大的结构,因为自动生成它们的所有组合会使代码变得太大和混乱。

例如,假设my a_t描述主设备的数量,b_t描述从设备的数量。我想要创建一种结构,在我的信号中具有这种层次结构,同时允许enum为它们提供易读性和易用性。

所以,就像这样:

代码语言:javascript
复制
c[MASTER_0][SLAVE_0]
c[MASTER_0][SLAVE_1]
c[MASTER_1][SLAVE_0]
c[MASTER_1][SLAVE_1]
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-02-07 23:04:02

您可能指的是associative array,例如:

代码语言:javascript
复制
c[ALPHA] = BETA;

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

代码语言:javascript
复制
b_t c[a_t];

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

代码语言:javascript
复制
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创建了一组“名称-值对”,但我要澄清的是,它本质上是将标识符分配给值。如果你能解释一下这个应用程序,得到一个更清晰的答案,那将会有所帮助。

票数 1
EN

Stack Overflow用户

发布于 2020-02-07 23:59:41

您不能从另一个或一组其他类型定义创建一个enum类型定义。有些人可能称之为扩展枚举。对于同一个值,也不能有多个名称的enum

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

代码语言:javascript
复制
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

还有一些方法可以收集每个枚举类型的名称来初始化关联数组。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60106883

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档