【问题标题】:System Verilog Associative Array系统 Verilog 关联数组
【发布时间】:2020-06-11 06:29:21
【问题描述】:

是否可以定义不同元素类型的关联数组 - 如下所示?

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

【问题讨论】:

    标签: associative-array system-verilog


    【解决方案1】:

    不,所有数组必须具有相同的元素类型。

    如果您真的想要一个仅包含两个不同类型元素的数组,请使用另一个结构而不是数组。

    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 节。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多