路科验证的个人空间 https://blog.eetop.cn/1561828 [收藏] [复制] [分享] [RSS]

空间首页 动态 记录 日志 相册 主题 分享 留言板 个人资料

日志

验证平台自动化篇之一:你为什么需要一款代码生成器?

已有 2897 次阅读| 2018-6-10 11:01 |个人分类:验证系统思想|系统分类:芯片设计

在介绍UVM的部分中,我们突出了它的结构性和复用性,UVM作为基于SystemVerilog语言的验证方法学,汇集了原有的方法学和特性,在最近的几年中已经成为了公认的验证方法学标准,而且从最新的消息来看,UVM-1.2已经被IEEE批准为1800.2的标准。这一消息无疑会让手握了IEEE-1800标准(SystemVerilog)的verifier们感到振奋,这意味着以后行业在底层验证的结构化构建上面也有了统一的标准。无论是1800还是1800.2,可以说都是好东西,然而对于一个初级选手,要入门这两个标准,其难度一点也不亚于当年如何学习C语言的。


对于一个新手,掌握SystemVerilog,这需要他们一边熟悉语法,一边实践来了解SV的语言特性;而对于UVM的学习又有不同,这一点在我授课的时候就能体会到。因为SV的语言特性是可以模块化,进行剥离分解传授的,而UVM的不同的地方在于,首先要进入UVM世界获得一张门票,就挺有难度,比如你得建立好UVM的世界观,懂得UVM世界是怎么运作的,其次再来认识UVM中的各个组件、通信、序列方式等。而学生们在上课的签到表中,也可以看到SV部分还有很多的同学坚持签到,而到了UVM部分则有很大的签到缺失。这么看来,UVM缺失对它的初学者们不那么友好。尽管在软件领域,也有别的基于某些语言的包(package),但是自称体系和标准的包并不多,UVM就是一个。


UVM让绞尽脑汁的不单单是在校学生,也包括那些初次接手UVM项目的菜鸟verifier。一本UVM类的索引手册和方法子集就难免叫人头疼,更何况如果没有一个贴心的IDE开发工具,这就很考验verifier的记忆,去熟悉那些常用的类、方法和参数列表。UVM为了提供一个良好的环境结构,对于可行的结构搭建和序列控制提供了不止一种方法,这也使得verifier们在考虑使用哪一种方法更为合适前手足无措。UVM另外一个对于新人不好的地方是,它需要大量的培训、练习和经验来将UVM中的各个组件、环境建立和场景创建有机组合为自己知识体系。这些要求对于一个新人而言很难满足,但公司的工作要求却实实在在的这么描述。


即使新人可以通过在校期间的实习来弥补一些距离,但也无法保证他亲自搭建的验证结构会不会对今后的复用不那么友好,需要的时间是否为项目进度所允许。有很多的公司提供UVM培训,譬如“90天UVM从零到精通”,“UVM实战”等题目都可以搜索到,只要你花一些时间和钱,就能得到专业的培训。同时,网上也能搜索到不少UVM的代码生成器,譬如“UVM模板”、“UVM生成器”,用来协助生成一些公共的代码结构。培训是为了帮助应聘者进入一家好的平台环境工作,是从乙方的角度出发;而UVM模板和生成器则是从甲方的角度出发,它的目的是将构建UVM验证环境好的代码规则和结构方式作为底层框架植入到verifier的手中,这可以避免代码的凌乱不规则,从而提高效率。当然,代码生成器也有一些缺陷,譬如会生成一些冗余的代码、不那么容易理解代码、或者无法按照使用者的要求生成更准确的代码。


在介绍代码生成器之前,我们首先要考虑,一个verifier需不需要代码生成器?拥有了它,会有什么好处呢?什么菜算得上一款出色的代码生成器呢?我们可以从它产生的代码质量几个方面来评估它:

  • 好的编码风格

  • 代码有足够的稳定性可移植性。可以在多个仿真器运行,且易于将来做扩展和修改。

  • 可读性,且便于维护。

  • 灵活性。用户自定义的代码部分可以很好地嵌入。

  • 高产出。即属于可以自动化生成的代码可以尽量多地产生并作为验证环境的框架基础。

  • 迭代性。即支持伴随着项目的变化,对验证环境做出调整时,生成代码也可以做出快速的迭代反应,继而修改验证环境结构。


那么代码生成器的好处在哪儿呢?对于UVM新的用户,代码生成器可以快速地给用户提供完整的工作环境,继而节省构建和调试验证环境的时间,对于一个标准的模块验证环境,这往往可以节省2周到3周的时间。那么UVM的老用户而言,它就可以帮助节省冗长乏味的结构搭建时间,还能在既有的框架上很快地完成激励通路。另外,如果在整个项目组中都流行同一个代码生成器,那么它良好的结构和代码风格,使得代码在后续继承时便于维护,而不会出现继承新环境时要花太多的时间去理解前人构建环境的“奇异思路”。所以无论对于新用户还是老用户,代码生成器都有它的优势。所以就提供工作效率来看,一个verifier应该需要掌握代码生成器的常规使用方法,并且有一款自己熟悉的代码生成器,而且最好在所在的公司内能够有一款一致的工具。


那么一款代码生成器可以协助我们完成哪些场景的需求呢?

  • 首先它仍然有助于UVM学习。因为通过快速的环境结构建立,可以使得用户不再拘束于某些代码的碎片,而是可以在一栋能够使用的“房子”中间落脚。在此基础上他可以实现需要自定义的方法。当然,也有的一些UVM用户认为,代码生成器使得UVM小白无法经历从无到有的构建过程,丢失了深入UVM并且调试环境的机会。对于这种观点,路桑认为还需两方面看待,一方面,代码生成器可以带小白们“一日看尽长安花”;另外一方面,在小白们通读了生成的代码,知道了什么是“套路”、什么是好的代码风格以后,再参考这种代码形式,从零开始尝试构建环境,进一步学习也是好的学习途径,毕竟高手一开始也是从模仿别人开始的。

  • 在项目过程中,代码生成器的介入期限往往只会在验证一开始的环节。在这个时候,需要收集DUT的接口类型、数量和其它信息,继而将这些信息作为生成器的输入文件,进而依靠它来生成环境的框架。一旦产生之后,我们便不再需要生成器,而是手动来修改代码,添加自定义部分。那么有人会问,如果DUT的接口修改了怎么办呢?有没有可能使用生成器再生成一次新的代码框架,同时又可以保留和合并之前的自定义代码呢?这要看代码生成器本身是否支持。如果代码生成器产生的代码结构,无法清晰分清公共部分(自动生成部分)和自定义部分,文件也没有清晰剥离的话,那么我们就无法再次生成环境框架。如果剥离得清晰,那么生成器仍然可以实现框架的更新和自定义代码的合并。


其实有很多公司和组织提供了不错的代码生成器,无论是已经开源发布的,还是被囊括在商用套件中,又或者是公司内部开发的。这些代码生成器一般都可以解决下面这些问题:

  • 生成模块化的uvm_agent。

  • 顶层的uvm_env将各个agent进行例化。

  • 各个agent内的monitor到scoreboard的TLM端口连接。

  • 按照uvm_env中各个组件的层次,生成相应的config对象和层次化的config结构,继而从顶层传递到目标对象,完成配置。

  • 各个driver对应的sequence基类,和顶层的virtual sequence。

  • virtual sequencer和各个agent中的sequencer在顶层环境中的连接。

  • 虚接口的创建的传递。


同时,不同的代码生成器也有一些个性化的功能,譬如:

  • 将寄存器模型(已生成的)集成到顶层环境中。

  • 创建寄存器到总线driver的adaptor模板。

  • 创建subscriber模板,为scoreboard服务。

  • 创建顶层的TB,包括例化DUT,而DUT同interface之间的连接关系需要预先给定。


目前,有这样一些代码生成器可以供用户下载学习和使用。在使用的同时,请注意这些工具的licence类型,避免使用冲突:

Easier UVM Code Generator @Doulos

https://www.doulos.com/knowhow/sysverilog/uvm/easier_uvm_generator/


VCS UVM Template Generator (uvmgen) @Synopsys

这个工具插件绑定与VCS工具,使用之前请确认你的机器是否已经安装有VCS。


VerificationWorks envBuilder @Paradigm Works

http://paradigm-works.com/products/

该公司的这个环境自动化工具前些年是免费的,然而现在看起来也要收费了。


UVM Framework @MentorGraphics

https://verificationacademy.com/sessions/dvcon-2017/testbench-automation

MentorGraphics推出的UVM验证环境自动化工具,它的功能不再局限于生成空模板盒子,而在于结合Questa VIP,更快地建立可以直接使用(给出激励)的环境。这个工具的特性与我们接下来本章要重点介绍的验证平台自动化理念有很大的相似之处。我们会在稍后进一步介绍该工具的特性。读者还可以在上面给出的网址中观看这个工具的特性介绍和视频,这个工具对于Questa仿真用户和VIP用户是一大福利,因为它解决了基于Questa仿真工具和VIP的验证环境快速构建的问题。该工具在QuestaSim10.6的基础上就集成到仿真工具中了,作为一个验证环境自动化的工具相信对于QuestaSim的用户是一个卖点。


目前推荐使用的一款开源代码生成器是Doulos的"Easier UVM Code Generator",除了免费之外,就是它的生成器代码可供读者参考和修改,进而有可能贴合自己团队的使用要求。而这一生成器的限制在于,它使用的假设是使用者缺少可以服用的VIP,无论是商用的还是自己公司内部的,可这假设往往与公司的实际情况不一样。对于大公司而言,它有足够的资金保证商业VIP的供应,并且在此基础上开发,这服用资源的效率配置最大化,而对于小公司而言,它们也会在项目的积累上面逐步完善出自己的VIP。无论对于哪一种情况,这种代码生成器都无法很好地贴好已有的VIP接口,和公司的实际开发流程,因此要做到真正的生成器深度嫁接,是有不小的困难。而对于UVM的新手,或者轻量级的验证场景,这一生成器又是一个不错的助手。因此,我们这一章,不再就普通的代码生成器开发进行更多的代码展示,而读者可以就上面提到的生成器下载,完成实例演示应用,掌握该生成器的使用。


在这一章中,路桑就自己参与过研发的验证平台自动化工具Pangu,介绍它的设计理念和实现流程。之所以代替EDA厂商,自己研发一款验证平台自动化工具需要额外的精力,但在下一节MentorGraphics UVM Framework的介绍中,用户可以理解到,开发一款贴合自己公司开发流程的自动化工具是多么为整个项目团队省心,而如果读者你所在的公司已经拥有了这么一款工具,那么请感谢它的开发者吧,如果你的公司还没有,那么希望你在读完本章之后,可以从中获取开发的理念和所需要的一点技术,在将来合适的时机能够帮助公司完善这项空白。


谢谢你对路科验证的关注,也欢迎你分享和转发真正的技术价值,你的支持是我们保持前行的动力。


点赞

评论 (0 个评论)

facelist

您需要登录后才可以评论 登录 | 注册

  • 关注TA
  • 加好友
  • 联系TA
  • 0

    周排名
  • 0

    月排名
  • 0

    总排名
  • 0

    关注
  • 253

    粉丝
  • 25

    好友
  • 33

    获赞
  • 45

    评论
  • 访问数
关闭

站长推荐 上一条 /1 下一条

小黑屋| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-5-3 04:57 , Processed in 0.018793 second(s), 12 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
返回顶部