在System Verilog中,如何确定类项是否存在?

时间:2018-11-28 15:54:13

标签: system-verilog

我有一个带有配置文件的系统,该文件由testbench读取。该配置文件是由另一个组生成的,现在它具有不再使用但不想删除的配置值。在测试台中,我读取了配置文件,并将其中的值应用于代表设备寄存器映射的多重嵌套类的成员。

到目前为止,我有一个大而简单的case语句,它解析配置键,然后将关联的值简单地应用于与配置键关联的寄存器字段。例如,

while(!$feof(cfg_file)) begin
  cfg_r        = $fgets(cfg_line, cfg_file);
  cfg_r        = $sscanf(cfg_line,"%s = %s", cfg_name_str, cfg_value_str);

  case (cfg_name_str)

    "gpe" : begin
       ewd_regs.op.gpe.coef = cfg_field_value;
    end

    // Other configuration keywords and a default:

  endcase
end 

在此示例中,关键字和register字段均为“ gpe”,但是对于某些字段,配置文件关键字和register字段不同。

现在配置文件中混乱不堪,我在配置文件中列出了一些关键字,它们与其中一种情况匹配,但不再由定义和构建寄存器/字段映射的单独代码定义。因此,在上面的示例中,ewd_regs.op存在,但ewd_regs.op.gpe不存在。

所以我的问题是,在进行分配之前,如何测试以确定ewd_regs.op.gpe是否存在?如果它不存在,我要记录条件并继续解析配置文件。

1 个答案:

答案 0 :(得分:0)

SystemVerilog语言中无法使用字符串查找标识符以查看其是否存在,然后使用该字符串进行访问。

如果这是UVM寄存器模型,则他们已实现了关联的字符串来分类句柄查找,您可以使用该字符串代替直接句柄名称。

否则,您可能需要创建一个读取配置文件并生成测试台文件这一部分的脚本。