上次说到CPU的boot,今天说说SOC环境的另外一种启动方式。用C启动SOC验证环境有几个问题。
一是CPU boot过程比较慢,每次仿真前都需要很长的一段初始化时间。
二是IP验证环境的测试用例无法直接复用到SOC环境里面。
对于小型的芯片用C做仿真还可以,但是对于大型的SOC芯片,用C做仿真效率有点低。基于上面两处不便,我们考虑能否用UVM直接接管CPU,然后通过SV/C直接下激励。
上述方法是可行的,为了让SOC环境跑的更快,用相应的BUS的agent接管 CPU的总线,将CPU bypass过去,然后通过UVM的环境调用不同agent的driver,实现给不同模块激励。
如上图所示,右边是一个SOC,CPU通过总线访问SPI,USB,PCIE,DDR,I2C等。在SOC验证环境里面,通过usb_agt 接管去往USB的总线,用pcie_agt接管去往PCIE的总线。当然也可以用chip_agt 接管CPU出来的总线。总而言之做法就是通过UVM去接管系统的总线。
这样我们可以bypass boot的过程,并且还可以实现IP的验证环境在SOC验证环境中复用。如果我们对C代码进行一些封装,还可以通过C访问SV从而实现C test在这类环境的复用。
通过UVM接管CPU,bypass boot的过程,我们仿真的速度可以加快不少,但是SOC还是非常大,在编译和仿真的时候,会消耗很多时间和内存。为了加速,我们将不用的module用empty的module代替,只保留接口信息,模块内部不实现,这样可以大大减少SOC环境的逻辑单元数和信号的翻转率,提升编译和仿真速度。
上图中,我们在测USB的时候会用到DDR,但是SPI,PCIE和I2C都不会用到,因此我们将这些模块用空的module代替。采用这些手段,这个SOC的验证环境就可以跑的比较快。
一个优秀的SOC验证环境还需要具备哪些东西?关注处芯积律,后续慢慢揭晓。
作者:IC bug 猎人
原文链接:处芯积律
推荐阅读
更多IC设计技术干货请关注IC设计技术专栏。欢迎添加极术小姐姐微信(id:aijishu20)加入技术交流群,请备注研究方向。