验证工程师的跃迁从入门到专业如下:
一、初出茅庐
很多自学者和转行同学早期的一个常见状态:熟悉一定数字电路基础,了解数字设计概念;能够看懂verilog,会写简单的verilog,D触发器之类的;会阅读简单的spec,理解产品手册需求和功能要求。
二、崭露头角
sv+uvm(前3-6个月),这是大部分从事dv工作者的建议,目前除了大型外企的某些岗位是使用c++来做pv的,可以说uvm已经成了硬通货了,这个阶段不求精通但求能用,可以不会搭建环境,但是得会构建场景。
三、渐入佳境
handle整个模块从release到RTL freeze到gatesim到tapeout以及post-silicon的整个过程,此时uvm对你来说已经不是难点了,虽然偶尔会因为uvm中某些奇怪的特性卡主,但大部分时间都在构思边界场景,以及如何提高覆盖率。
你已经可以对一些简单的设计漏洞自行debug,并给出你的修改意见,你会对designer的笔误十分反感。你会花大量的时间研究design spec,偶尔会看一看uvm的源码,会觉得uvm真的非常强大,同时会发现许多介绍uvm的书并不能涵盖一切应用场景。
此时,你最关心的是如何在deadline之前确保验证的完备性和验证的可靠性,如何使得一个测试用例随机出尽可能多的的复杂情况,如何使整个环境的自动化水平变高,如何优雅地写sequence,等等。
四、登堂入室
在deadline之前完成一个中等模块对你来说已经不是难事,你会时不时关心RTL在改版之后对环境和已有用例的影响,总会觉得上一次做的环境不够完美。你会用自己的方法实现覆盖率驱动验证,写环境和构建用例对你来说已经非常容易,你甚至会觉得这是一个体力活。
你会发现设计中的一些不合理的地方,比如fifo居然没有反压机制,支持outstanding的数量不够,数据带宽在某些情况下达不到要求,你会花更多的时间去完善testplan,会更多的关注体系结构和上层数据流动。
你已经不满足于基于uvm的simulation ,你会使用一些别的验证方法,比如使用形式验证+assertion的组合验证流控和多路访问的仲裁,与此同时你变得越来越“懒”,对自动化的要求越来越高。