enums - typedef 的 System Verilog typedef
问题描述
typedef enum
s 允许一种方便的方式来描述一组名称-值对。有没有办法在所有级别使用枚举来链接它们以创建更深层次的结构?
例如,我有以下内容:
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_t
b_t
就像是:
a_t b_t c;
所以在 的每个维度上c
,我都可以有enum
s。
编辑:一些澄清 - 假设a_t
和是不可变的b_t
,c_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]
解决方案
您是否可能指的是关联数组,例如:
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
实际上是在创建“一组名称-值对”,但我要澄清的是,它本质上是为值分配标识符。如果您可以解释应用程序以获得更清晰的答案,这将有所帮助。
推荐阅读
- javascript - Safari 12.1 中的跨域 iframe 麦克风权限更改了吗?
- python - 将UTC时间戳转换为熊猫中的本地时区问题
- hibernate - ORM 谁可以动态生成脚本
- python - 从二进制序列到时间序列频率
- java - 片段总是通过 onAttach 到 onDestroyView,而不是通过 onCreateView 到 onDestroyView
- php - 获取 wordpress 表单输入,然后根据 api 数据检查该输入
- arrays - 使用两位数对数组中的版本号进行排序并不准确
- c++ - 在特定秒数后停止循环的有效方法
- android - ConstraintLayout,将 LinearLayout 向上移动(负向)
- r - 如何为 R 散点图添加标题?