0 引 言
当今社会,芯片技术与人们的生活密切相关,在各种电子产品中都有芯片的身影,而且,它们往往是电子产品关键的核心技术。制造芯片的流程非常复杂而且资源投入巨大,保证芯片的设计质量非常重要。验证工作是芯片制造过程中及其关键的一个环节,无缺陷的芯片不是设计出来的,而是验证出来的,验证过程是否准确与完备,在一定程度上决定了一个芯片的命运。
目前在百万门级以上的ASIC,IP,SoC设计时代,验证约消耗整个设计工作的70%,需要专职的验证团队,而且验证团队人数通常是设计团队的1.5~2倍。随着设计规模的扩大,芯片验证的重要性达到了一个新的高度,但对验证方法也提出了更多的要求,怎样搭建高效稳定的验证模型成为目前研究的热点。本文重点介绍如何搭建一种分层次的验证模型,以及如何使用这套验证模型进行仿真。
1 验证架构
验证架构通常称为testbench,如图1所示,可以把验证架构分为激励源、发送器、接收器、参考模型和记分牌五个部分。激励源属于脚本层,发送器和接收器属于时序层,参考模型和记分牌属于软件层。
激励源 仿真的数据在激励源中生成,它是一个TCL脚本语言解释器,激励代码采用TCL解释性脚本语言编写,激励生成之后会放到发送端共享缓存区中,这个过程在设计代码开始仿真之前。
发送器 当仿真开始后发送器会根据设计条件把数据从发送端共享缓存区中取出来,传递到设计模块和参考模型中,发送器由Verilog代码编写实现,需要设计自己的PLI函数用来作为与发送端共享缓存区传递数据的接口。
接收器 接收器用来采集设计模块处理后的数据,并把数据放到接收端共享缓存区中,用于记分牌读取数据,接收器由Verilog代码编写实现,需要设计自己的PLI函数用来作为和接收端共享缓存区传递数据的接口。
参考模型分析激励源的数据并产生和设计模块用来校验结果,由于验证人员和设计人员的理解思路不同,参考模型的功能和设计模块的功能也不同,但随着验证过程的推进,两者应该收敛于需求规格书,参考模型基于C++语言实现。记分牌记分牌从接收端共享缓存区取出数据和参考模型的分析结果并进行比较,把每次比较的结果记录下来,以便验证人员定位问题,记分牌基于C++语言实现。