概述
cfg_file的解析和生成对于芯片验证工作来说是非常重要也非常常见的,svlib提供了这样的一个可以解析和生成cfg_file的功能,目前支持解析和生成ini格式的文件内容,yaml格式的文件内容暂不支持解析和生成。不了解ini和yaml文件格式的可以看以下博文,这里不加赘述。https://www.cnblogs.com/xiaofenggou/p/16667390.html
单层级的使用
svlib提供的cfg_file这样的一个功能是基于一个类及其变量和ini文件文件的一个映射关系所提供的,最简单的使用方式如下:
这是一个单层级的cfg_file的使用,一个简单的类的对象和ini文件的一个映射,该对象里没有任何其他对象实例。可以看到比较特别的是使用了`SVLIB_DOM_UTILS_BEGIN,`SVLIB_DOM_UTILS_END,`SVLIB_DOM_UTILS_FIELD_INT,`SVLIB_DOM_UTILS_FIELD_STRING这几个宏,看着和UVM的factory机制中的注册宏很类似,其中DOM的含义是document object model,是svlib中文件对象管理的模型,模型只专注于支持的文件格式的数据管理。当使用这些宏将class及其内部的变量注册到DOM中之后,就自动的在class里创建了2个新的function:
function void fromDOM(cfgNodeMap dom);
function cfgNodeMap toDOM(string name);
toDOM主要用于完成类中的变量转换成DOM中的特定格式,fromDOM完成DOM中特定的数据转换成类中的特定变量。cfgNodeMap是一个类似于键值对的class,用于保存特定的键值数据。cfgFileINI是一个用于处理ini文件根据cfgNodeMap的写入,读出处理的class,cfgError_enum是一个用于错误消息管理的class。
嵌套级的使用
嵌套级的使用如上图所示,class内部除了变量之外,还有其他的class对象类型,只是在使用SVLIB的DOM进行注册时,使用`SVLIB_DOM_FIELD_OBJECT宏进行注册。结果如最后一个图,可以看到不同的子对象,以[]分隔,自身的变量和数值都是使用=,这也是ini文件形式的一个特点。