| ||
// Write the new DOM to a .INI file
fi = new;
fi.serialize("dst.ini", dom);
上面的例码首先解析了YAML文件格式,继而将配置信息存储到DOM结构对象中,稍后对其进行数据修改,并将更新后的数据再输出为.ini格式。存储到dst.ini文件的数据内容如下:
scalarInt=42
[objectSC]
scalarInt=1234
scalarString=new value
从这里介绍的第一个SV开源库身上我们可以看出,svlib的开发者们有着丰富的软件开发经验,而当这些从软件世界迁移过来的开发者在面对SV寥寥可数的方法集时,就会不由自主怀念以前软件开发时的各种可用的第三方库。而在svlib的开发中,又借用了C的一些库和系统接口,例如配置文件YAML的解析包是从C复用并导入到svlib中的。这些分类的方法簇、类簇都可以在Python、Java的标准库中找到原型,所以说这些类和函数并不是凭空产生的,而是认识到其它软件编程语言的标准库中一些类和方法对SV能够产生帮助时,才移植到SV一侧的。又比如上一节在谈论SV与其它语言的接口时,我们也谈到了SV在处理浮点数计算和数学库上面的欠缺,而如果SV暂时不提供这样的数学库的情况下,只能建立SV通其它支持数学库的语言Python或者Matlab等建立接口,进行混合仿真。
下面这张图给出了svlib构建的组织。可以看到svlib的一部分函数是由SV完全实现的,而另外一部分函数则是间接调用的DPI-C的函数,譬如C的内存管理方案、复用其它C库(YAML)等。
读者如果对这个开源库感兴趣,可以下载并且查看源代码和文档。通过阅读源代码,读者也可以体会到一些开发标准库需要考虑的地方:
在对于库、类、函数和参数等命名时需要遵守一定的规则,这不但便于记忆和理解,也便于在文档中查找。
考虑到库可能在不同的仿真器和平台上使用,需要尽量在可能的仿真器和平台上测试。
最好不要依赖于其它的库。svlib只基于SV的标准库和自带的DPI C库,这也使得它可以在其它的方法学库中使用,譬如UVM、OVM。
当然还有一点,如果你想让你的第三方库为更多的人使用的时候,就将它开发地更规范化一些,包装起来,并且想办法让更多的人知道它还感兴趣。
我们下一节还将继续介绍开发库和类的过程中可以采样的标准单元测试方法SVUnit,这一点也借鉴与其它软件更早些时间的方法,例如JUnit和PyUnit。
谢谢你对路科验证的关注,也欢迎你分享和转发真正的技术价值,你的支持是我们保持前行的动力。