Overview
python(cocotb)已经能够支持用于asic verification,但是网上资料还不是很多,由于工作的原因,在python方面已经做了好几年的开发,以前也在华为做过两年的asic验证工作,因此在网上开到cocotb的时候不禁眼前一亮,如果能够基于python搭建一个验证平台,利用python的一些特性,这样的验证平台应该能够做到最大效率的重用,能够大大提高验证人员搭建平台的效率,而且有python丰富的三方库,后续如果应用于计算密集型的项目的话,再也不需要做复杂的RM,这无疑是一个非常棒的想法。
Package
Cocotb
Userguide: https://docs.cocotb.org/en/stable/writing_testbenches.html#writing-tbs
Pyuvm
Userguide: https://pypi.org/project/pyuvm/#description
UT design
为了最大程度的复用和简化,设计了一种基础的框架,这将别于一般的UVM平台框架。
如下:
image.png
平台里面所有和DUT接口交互的地方都使用BFM类进行管理,不再区分driver和monitor。Driver本身的功能做了简化,基本只是简单的处理包转发的功能。
因为python平台的RM会非常的简单,所有省略了RM,继承到scoreboard中。
这个平台里面所有的组件都封装了基类,用户在构建自己的平台的时候都需要基于这些基类,其中除了test、BFM需要用户根据DUT的行为自行编写外,其他组件基本不需要加额外的代码,直接使用基类就可以了。
作者在公司项目上使用这个平台为几个DUT(代码量都在1W行以上)做了UT,各自UT平台的代码仅仅只需要几百行(Bench 200行左右,BFM600行左右)。这相对于原先动辄几千行的SV UT平台来说,不得不说是一个巨大的提升。
很多验证UT平台因为功能复杂且和DUT强相关,后期的维护成本非常大,而在python平台上,因为做了非常大的简化,后期的维护成本应该很低,不过作者刚刚在第一个项目上试用,后面会如何还有待验证。
IT design
验证平台中为了能够将UT平台组件在IT/ST中复用,专门设计了monitor用于捕获DUT的接口信号,不过在我们的python验证平台上,大家可以看到是没有monitor的,那我们的UT平台能不能在IT上面复用呢。
答案是可以的。
而且我们做了更彻底的复用。
按作者有限的经历来说,一般验证平台代码只是复用UT的monitor/RM/Scoreboard,而对应的用例和driver还需要额外的人员重新设计(不排斥有些成熟公司能够做到更高级别的复用,高手勿喷)。而在我们python平台中,为了能够实现能够像搭积木似的把各个UT平台组装成新的IT平台,我们采用了另外一种复用方式,如下:
image.png
简单来说就是把整个UT bench都进行复用,为了解决能拼起来的问题,当然还是需要做一些额外的代码设计拉,不过这个已经是作者能想到的最省力的方式拉。如果有高手有更厉害的想法,欢迎来信交流!
目前这个IT平台我们还处于设计阶段,后续会在项目中试用一下看看,希望能够降低验证人员的重复工作量,提升大家的效率。
总结
不得不说,python是一个神奇的语言。
网友评论