associative-array - 系统 Verilog 关联数组
问题描述
是否可以定义不同元素类型的关联数组 - 如下所示?
typedef enum {M1, M2} mod_t;
typedef struct {...} m1_reg_t;
typedef struct {...} m2_reg_t;
array[mod_t] = {
M1: { string name;
m1_reg_t cfg
}
M2: { string name;
m2_reg_t cfg;
int m2_indx;
}
}
解决方案
不,所有数组必须具有相同的元素类型。
如果您真的想要一个只有两个不同类型元素的数组,请使用另一个结构而不是数组。
typedef struct {
string name;
m1_reg_t cfg;
} M1_t;
typedef struct {
string name;
m2_reg_t cfg;
int m2_indx;
} M2_t;
struct { M1_t M1;
M2_t M2;
} opcodes;
但是,如果您正在寻找一个包含许多元素的数组,其中每个元素可能包含不同的操作码,请考虑使用标记联合的动态数组。
typedef union tagged {
struct {
string name;
m1_reg_t cfg;
} M1;
struct {
string name;
m2_reg_t cfg;
int m2_indx;
} M2;
} opcode_t;
opcode_t opcodes[];
访问标记的联合需要模式匹配语句。请参阅 1800-2017 LRM 中的第 12.6 节。
推荐阅读
- hibernate - Jpa @PersistenceUnit 忽略 transaction_new
- c++ - CRC32 C++实现使用bool数组并手动逐位异或
- r - 如何提取最长匹配?
- r - 具有新行添加的 R Shiny 数据框(具有因子变量级别的自动填充)
- java - 运行 Spring Boot 应用程序时出现 Whitelabel 错误
- html - 使用传单和 R 将本地图像发布到弹出窗口中
- reporting-services - #ERROR 帮助、SSRS 报表生成器、带 LOOKUPSET 的 IIF
- spring - Spring Boot - 集成测试 - WebTestClient & HttpServletRequest
- c# - 如何修复在不同操作系统中运行的 C# 应用程序的 datagridview 显示?
- android - 尝试从 Xamarin Forms ContentPage 创建片段时出错