芯片验证工程师

本文

主要介绍芯片验证工程师的成长之路,包括职位概述、技术入门、能力提升和角色转换。

写在前头,本文内容是根据自己的工作经验和行业了解,以及师兄的经验传授和网络资源,集合而成。并且我还在不断继续努力中。

版本 说明
0.1 初版发布
0.2 添加验证流程

背景

本人工作IC设计和IC验证同时涉及,工作领域为CPU相关,经验三年。

参考

名称 作者 来源
《路科验证》 刘斌 网络

芯片验证职位概述

  • 以往设计地位高于验证,随着芯片复杂度越来越高,流片成本越来越大,目前芯片验证地位与设计同样重要
  • 验证的岗位需求量大,与设计的比例接近2:1
  • 了解验证知识对于将来从事芯片设计也有很大帮助
  • 公司越规模化,团队越正规化,对芯片验证的规范性和重要性就越突出
  • 芯片验证相对设计,更讲究团队协作
  • 芯片验证软件化,工具和语言等知识迭代快(目前相对稳定,统一使用sv语言和UVM方法学),需要不断学习
  • 芯片验证也要懂设计代码,否则无法更好的完成芯片验证
  • 芯片验证不仅限于发现设计bug,还包括对设计的理解以及提出修改意见

芯片验证的技术入门

芯片验证相对于芯片设计,技术门槛较低,但要学习的知识宽度要大于芯片设计。所谓技术门槛低,换句话说也就是即便你对项目领域(如射频、通信、CPU等)完全不通,但并不妨碍你做基础的验证工作。以下是个人认为芯片验证工程师入门需具备的基础:

  • 基本的数字电路知识
  • systemverilog语言和UVM验证方法学
  • RTL硬件描述语言,如verilog
  • 芯片设计项目的了解(对于前期入门阶段并不是硬性要求)
  • 基础的脚本语言,如Makefile、shell

芯片验证工程师与FPGA验证工程师、芯片设计工程师、软件测试工程师的比较

芯片验证工程师与FPGA验证工程师

  • FPGA验证是更高层次的黑盒验证
  • FPAG验证相对于模拟仿真,缺点是难以调试IC设计的内部信号,难以深入debug
  • FPGA验证相对于模拟仿真,优点是仿真速度快,可模拟芯片真实环境,发现隐藏bug
  • FPGA验证工程师的技能更多是工具的使用,看到的IC设计更上层(一般IC设计完整度较高时才会上FPGA平台)

芯片验证工程师与芯片设计工程师

  • 芯片设计工程师更加硬件化,只需verilog语言,但重点在于对设计领域的深刻理解和项目经验
  • 芯片设计工程师对芯片验证领域无需了解太多,而验证工程师也需要对设计有一定了解
  • 芯片验证工程师往往有机会转型到设计,debug过程对设计逐步了解,并且有时候需要给出修改意见
  • 芯片验证工程师不仅与设计工程师协作紧密,与后端和软件工程师有时也有交互
  • 芯片设计工程师关注的是功能结构如何转换为电路实现,芯片验证工程师关注的是电路层次是否符合功能场景
  • 芯片设计工程师学习深度更深,芯片验证工程师学习广度更广,换句话说,验证工程师相对于设计工程师更容易转行(指项目领域,如射频、通信、CPU)
  • 芯片设计门槛高于芯片验证,需要更强的项目领域相关背景知识(一般要求重点学校硕士学历)

芯片验证工程师与软件测试工程师

芯片验证与软件测试,对于非芯片领域或刚毕业的学生,是很容易产生误会的。

  • 所处芯片开发阶段不同,芯片验证在流片前,软件测试在流片后(不仅限于流片后)
  • 软件测试纯软件化,看不到或不关心电路结构
  • 软件测试与软件设计的薪资差异,远远大于芯片验证和芯片设计的薪资差异,普遍来讲(排除技术大牛),芯片验证薪资往往高于软件测试(这也是为什么产生误会的原因)

芯片验证工程师的能力提升

  • 深入学习设计领域知识和IC设计架构(对于IP验证及其重要)
  • 深刻学习理解SV语言,可以学习与SV类似的面向对象编程语言,帮助对SV语言特性的理解
  • 深刻学习理解UVM验证方法学,可以从软件的设计模式深入理解
  • 优化代码结构和项目层次,增强可复用性,增强集成度和自动化
  • 多平台验证工具的使用,如formal、FPGA等,对于覆盖率收敛很重要
  • 脚本语言,如shell、Makefile、Python、Tcl、Perl等,掌握脚本语言是使验证平台自动化的基础
  • 虚拟建模和VIP的开发,可增加验证效率,并且可复用性强
  • 制定和优化验证流程,验证计划的制定和实现,验证进程评估
  • 验证管理,包括时间和人力,以及任务安排

芯片验证工程师的角色转换

一个芯片验证工程师经历五到七年的技术积累,此时工作任务得心应手(或者说固化),往往会产生工作倦怠的态度,对于新工具和新知识的学习也不再渴望,这时候需要考虑角色的转换。

  • 承担全新设计模块的验证,比如对于CPU项目,可以从DPU模块验证转为LSU模块验证
  • 转为芯片设计,从事不同的工作内容
  • 专职做验证平台优化,学习或自研更好的验证工具和验证方法,提高验证效率(前提是公司同意)
  • 做技术培训者
  • 做验证技术专家或验证管理(前提是能力出众,一般工作十年经验)
  • 离职(需慎重,芯片行业大公司不多,跳一个少一个)

芯片验证工程师的职业规划(也是写给自己)

  • 一年时间,完成芯片验证工程师的入门
  • 三年时间,从初级芯片验证工程师到独立承担模块验证
  • 三年时间,从独立承担模块验证到验证leader(也有可能转向芯片设计)
  • N年时间,从验证人员到验证主管(或技术专家)

验证流程

  • 创建验证计划:参照设计人员提供的设计功能描述文档创建验证计划,并且与设计工程师完成多次review,确保验证计划无明显缺陷
  • 搭建验证环境:验证工程师搭建验证环境平台,准备测试激励
  • 模拟仿真和debug:开始跑测试激励,进行验证环境和设计电路的debug(如果是环境问题择优化环境,设计问题定位具体bug,提交给设计人员)
  • 回归测试:当设计电路通过了一定量的测试激励,验证人员需要准备回归测试,也就是将已有的所有测试通过的用例重新测试一遍
  • 验证代码检查:也就是对验证环境和当前验证结果的review,检查是否有遗漏的测试用例、不恰当的随机约束等
  • 收集覆盖率:覆盖率包括功能覆盖率和代码覆盖率,覆盖率是对验证进度以及验证完备性的重要数据指标
  • 完备性检查:此项任务由验证项目经理完成,主要根据验证计划、验证进度、数据结果等信息来综合评定是否全部完成验证任务,并签字画押
  • 硅后测试:当硅后测试发现bug时,不仅要协助测试人员定位和修复bug,更重要的是分析硅前测试bug逃逸的原因,总结经验教训

除了技术,我们还需要做什么?

虽然我们是技术从业者,但是毕竟人的社会是复杂的,那么除了技术,我们还需要做什么?

  • 提高团队合作性,让更多的人乐于和自己合作,是对自己人品和性格的最好肯定
  • 提高行业敏锐度,多关心了解行业领域的一些事情,相信我这样是有好处的
  • 跟对一个好领导,作为领导的主要干将,相信我这样是有好处的
  • 保持好同事和前同事的联系,相信我这样是有好处的

顺便,对于新入职的毕业生,教你如何快速与同事和领导建立起社交关系,那就从吃食堂开始。

书单

基础

  • 《SystemVerilog验证》
  • 《UVM实战》
  • 《芯片漫游指南:从系统理论到UVM的验证全视界》
  • 《全面的功能验证:完整的工业流程》
  • 《Verilog与SystemVerilog的编程陷阱》
  • 《综合与时序分析的设计约束:Synopsys设计约束(SDC)实用指南》

提升

  • 《设计模式:可复用面向对象软件的基础》
  • 《敏捷软件开发:原则、模式与实践》
  • 《代码大全》
  • 《代码阅读》
  • 《重构:改善既有代码的设计》
  • 《改善程序与设计的55个具体做法》

文章原创,可能存在部分错误,欢迎指正,联系邮箱 cao_arvin@163.com。