电子说
毋庸置疑,UVM大大提高了我们开发验证平台的效率。但同时,熟练掌握UVM搭建验证平台也并不是一件容易的事情。同时由于不同验证工程师搭建环境的风格不太一致,所以在一个项目中常会出现不好管理,甚至前后不一相互矛盾的UVM代码。对于这些问题UVM 代码生成器基本都可以解决,更为关键的是,这对于项目的开发效率提高也是一件极有意义的事情。
简单的UVM代码生成器在2011年就有了雏形,最初是Cadence的Jim McGrath开发的,它在2011年9月16日作为UVMWorld投稿上传。后来脚本经由ChristophSühnel、David Long以及John Aynsley进行了修改。当前版本的简单UVM代码生成器 已获得了Apache 2.0开源认证。
这篇文章就旨在谈论UVM代码生成器的优点,及开发使用时需要注意的问题。
一.模板代码应具有的特性
每个UVM测试平台代码库可以分为两部分,封装好且基本保持不变的样板代码部分和需要用户自定义的代码部分。基于此,就要求我们所生成的代码能够包含相当多的用户自定义元素。理论上,我们生成代码的基本原则是,先调用UVM,定义好一些结构语法都正确的SystemVerilog模板代码,然后我们基于此进行复制和配置得到我们的代码。这就要求我们的模板代码至少要能包含以下几个元素:
我们使用这些变量元素表明,我们期待自动生成的UVM代码是具有一定灵活性的,不能仅仅简单复制一段源文件来实现。我们希望以脚本来实现UVM 代码生成器的功能。这个代码生成器会生成一系列的class、package、module、和interface。
二.代码生成器的实现
使用简单代码生成器实现自动生成UVM代码,生成器脚本文件可以按照按以下流程走。
如上所述,使用一些配置文件对变量、对代码进行约束,然后基于模板代码生成目标代码,这一方法能够使得代码具备一定的灵活性。除了用户定义的代码片段可能会引入的错误之外,我们原本生成的生成的代码应该是完整的,可以使用生成的仿真脚本运行操作。
读者可以自行尝试前文提到的开源代码生成器,这种代码生成器的优点在于
当然,本文的目的不是说服你使用这个特定的代码生成器,而是让你更好地了解UVM代码生成的基本内在步骤。
**代码生成器在实现特定的代码时,要考虑哪些要求呢?**如前所述,每个工程师的代码风格都不尽相同,当在文件级别考虑实现我们的代码生成器时,以下这些问题我们就一定要注意到了:
在结构层面上,UVM 代码生成器也有一些需要考量的地方 ,具体可如下实现:
本文中的要点不是为了在UVM对testbanch的生成方法中作出具体的选择,只是给出参考,选择任何类似可行的的结构都是有效的。
在更详细的层面上,简单的UVM代码生成器就需要对UVM的具体feature进行选择了,如下:
上述都是只代表了常规的编码选择,除此之外,代码生成器还要求对另外一些文件的自动化生成,这些文件手写起来是相当费时的。
基于提高生产力的考虑,UVM 代码也要生成一些可供扩展的代码块,如下
上图显示了一个简单UVM代码生成器能够产生的结构类型的示例,包括多个DUT接口和相关agent,嵌套envs以及寄存器块,参考模型和记分板的实例化。 请注意,代码生成器不会生成寄存器模型,参考模型或记分板的内容。 寄存器模型通常来自单独的生成器,现在可有许多文章对此进行讨论。参考模型则是必须要手动编码的。
三**.总结**
代码生成器的好处是不言而喻的:
本文只起到抛砖引玉的作用,提出了要实现自动生成UVM代码的生成器需要考虑的问题及参考。
对UVM代码生成器的功能是没有上限的,应该实现多复杂的功能,取决于你们的需要和付出回报比。代码生成器总是要不断向前发展的,以改进编码风格和处理新的问题,同时该进的时候还要注意要能能向后兼容配置文件,保证随时可以重新生成整个代码库。
全部0条评论
快来发表一下你的评论吧 !