| ||
创建CIP的容器和注意事项
放置CIP即assertion的容器无外乎是module或者interface。这两种容器在使用时有各自的特定。对于module而言,一旦我们在其内部声明了assertion,针对DUT,我们可以将其assertion容器(module/interface)bind绑定到DUT。这样,在编译后,assertion容易“vf”就看起来同例化在“dut”中一样,当然bind并不会由此修改设计,而是做到了attach但是不影响设计功能。不过bind有一点不尽如人意的地方,那就是无法很方便地深入dut的层次查看到更多的信号。
接下来,我们看看interface的信号probe方式,无论是直接利用SV的信号路劲层次赋值、EDA仿真器提供的信号probe函数、又或者利用UVM DPI接口的函数,都可以使得DUT中的信号很容易地被监测到接口中的各个信号。只不过在使用接口时,如果我们想将CIP(module)例化在接口,可就会遇到一点麻烦。因为interface只能够例化interface,而无法例化module。因此,CIP需要被装载到interface中,这样可以完成CIP的复用。
此外,考虑到CIP会同时被使用在动态仿真环境和形式验证环境,尤其在形式验证环境中,对于非综合的或者UVM相关的代码支持地不够那么友好,所以CIP的代码在实现中,需要结合编译指向来提供灵活的应用方案,以下即通过编译选项“VW_CIP_SIM”来区分动态仿真环境和形式验证环境。
如何开发及发布VIP/CIP?
这是一个鸡生蛋蛋生鸡的问题,包括路桑最近也在主持一些AHB/AXI开源VIP开发工作的事情。APB2.0 & 3.0 VIP目前已经完成,我们将会在不久之后发布到路科官网的资源供大家下载学习使用,AHB/AXI也在准备当中。路桑在开发过程中,是通过已有VIP来验证自开发的VIP,而接下来介绍的方式也有助于VIP在每一版开发时的准确发布。
该观点涉及到的软件单元测试概念以及测试开源包SVUnit已经在路桑的红宝书中介绍过,大家可以自行补充概念。该论文也是基于SVUnit和软件单元测试概念,在开发每一个property时,不但提供正确的场景,也提供错误的场景分别来测试其反应,即检查是否在正确场景和错误场景中做出了期望的响应。
从该论文的CIP发布经验,以及路桑团队自身在开发开源VIP的过程中,我们一致认为标准的单元测试环境非常有助于前期开发以及后期版本的稳定推出。也就是说,越偏向软件的部分越容易和越应该将单元测试的概念贯穿下去,当然,在开发VIP的过程中覆盖率的完善的灵活的随机配置都有助于我们更快使得VIP能够稳定下来。
不久之后,路科将会发布APB2.0、APB3.0 VIP的开源版本,只作为大家的学习使用,在我们接下来发布了AHB3.0 VIP后,路桑将会出一个VIP开发的文章系列,指导有需要的朋友,从想法、到结构、到开发流程、最后到VIP发布的完整生命周期——懂行的验证老司机,该知道这个福利有多么难得吧?
与诸君共勉,只要你还热爱验证,热爱技术。另外,路桑在回顾DVCon US这两年最佳论文的时候发现,投自Austin(德州)这个城市的论文和验证专家出气地多,论文质量也都奇佳。路桑觉得这似乎同当地收入和生活水平存在某种联系,或者也能够说明,居住在让你能够静下心来做研究的地方对于工程师更友好一些吧。