首页 > 解决方案 > typedef 的 System Verilog typedef

问题描述

typedef enums 允许一种方便的方式来描述一组名称-值对。有没有办法在所有级别使用枚举来链接它们以创建更深层次的结构?

例如,我有以下内容:

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;
...

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

就像是:

a_t b_t c;

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

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

例如,假设我a_t描述了主人的数量并b_t描述了奴隶的数量。我想创建一个结构,在我的信号中有这个层次结构,同时允许enum它们易于阅读和使用。

所以,像这样:

c[MASTER_0][SLAVE_0]
c[MASTER_0][SLAVE_1]
c[MASTER_1][SLAVE_0]
c[MASTER_1][SLAVE_1]

标签: enumstypedefsystem-verilog

解决方案


您是否可能指的是关联数组,例如:

c[ALPHA] = BETA;

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

b_t c[a_t];

这意味着创建一个关联数组c,其 key 是 enumsa_t并且 value 是 enums 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 上的示例。

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


推荐阅读