数字IC验证成长录--个人学习经历介绍
以下内容来源牛客特邀专刊《数字IC验证成长录》,作者@竹秋一
本科阶段
我在2015年到2019年就读于一个双非一本的微电子专业,出身不是名校,而且在2018年前微电子还是一个冷门专业。当时的高考的前几志愿都是计算机相关专业,但本菜狗高考成绩不理想,被调剂到微电子专业,以至于入学时也不清楚微电子专业会学什么,工作后会从事什么岗位,就这么稀里糊涂的入了IC的坑。大一时候还没有开专业课,学的都是高数、线代、大物之类的课程,所以我私下学了一些计算机相关的知识,打算大三时跨专业考研,但大二开了各种专业课后,一周几乎是满课状态,几乎没有经历学习其他专业,同时因为在学院实验室里接触了FPGA,觉得挺有意思,因此考研时放弃了跨考计算机专业,继续考本专业微电子的研究生。
考研时选择了一个本地的211学校,原因一是离家近,二是这个学校的微电子学院中有一个专业的分数线很低,基本每年都是国家线,并且录取人数很多,有近200人,因此我觉得考这个专业比其他专业容易一些,毕竟我考研最初的目的就是混个文凭好找工作。这个专业的研究生和一般的研究生有所不同,入学时并不会确认导师,在快到研二时才可以选择导师,并且可以选择留校内实验室,跟着校内导师做科研,也可以选择找一个公司实习两年,跟着校外导师(实习时候的领导)做项目。如果留校,毕业设计由校内导师指导,如果实习,毕业设计就由校外导师负责。对于我个人而言,我对科研没有太大的兴趣,考研目标是为了找更好的工作,因此有工作经历的校外实习更适合我。
研究生阶段
考研第一年考上,2019年秋季入学。当时已经确定了研二离校实习,因此已经提前去了解公司有哪些岗位,要求掌握什么样的知识,打算从研一开始学习。当时对IC设计方向很感兴趣,所以研一入学后没多久就将Verilog复习了一遍。但在选课时我看到了一门名叫SystemVerilog验证技术的选修课,所以就想着接触一下验证方面的知识,选修了这门课程。这门课的老师是UVM红宝书的作者路桑,在第一次课结束后他告诉我们,他自己的公司每年会从班里招两个实习生,跟着他做IC验证方面的研究,并且往届带的研究生都找到了心仪的公司和岗位。这句话吸引了我,加上慢慢对验证的了解和被路桑老师的人格魅力吸引,我将自己的方向从设计改为了验证,并下决心要进入路桑老师的门下继续学习验证。
这门课的内容主要是SV语言和部分UVM的知识,外加一个小模块的虚拟项目,每节课我都认真听,实验独立完成,不会的就上网查,看视频,问同学,就这样完成了这门课程的学习。
而在寒假前路桑老师布置了一个选做实验,是一个APB UART模块的验证,验证环境、测试用例、覆盖率全部都要独立完成,但我知道这也是一个考核,如果能完成这个实验,那进入路桑门下的概率也会提高,因此寒假期间我重新复习了一遍SV和UVM,把绿皮书(SystemVerilog验证:测试平台编写指南)和红宝书(芯片验证漫游指南)从都到尾看了一遍,然后用SV课程里和寒假学到的知识做完了小实验。不得不说,自己亲手完成一个项目和被人带着完成完全是两种体验,一切问题都要自己解决。比如我在亲手搭建UVM环境的时候,一切都是照着课程里的环境模仿的,不知道p_sequencer、virtual_sequence到底有什么用?心里一直想着为什么会有这样一个东西?还有为什么TLM FIFO里的imp类型的端口为什么名称是export?最开始完成环境的时候编译能报几千个error(崩溃),一点一点改正之后才知道环境里的细节太多了,完全不是我一个验证小白能消化的。总之独自做完一个小项目让我有很大的收获,这里建议不管是什么岗位什么方向的同学,有机会一定要尝试做一个小项目,不管它有多简单,独立的完成会让你对整个流程有更新的认识,并且一定会学到很多东西。
在寒假刚开始的三周里,我完成了这个小实验,但距离提交还有一段时间,并且那会是2020年初,疫情严重,我也不例外的居家隔离,线上听课,因此有更多的时间准备找实习的事情,当时我的第一目标就是去路桑老师的公司,所以心里有一股劲一直监督着自己。首先将Verilog语法又双叒复习了一遍,然后买了一本《Python编程:从入门到实践》开始自学,想积累一点脚本基础。而这本书完全就是给新手看的,很适合我,用了一周的时间学完,但是没有做书里面的实验。 之后又买了一本人称“白皮书”的《UVM实战》学了学,总的感受是这本书非常适合验证小白学习,书里假设读者有了SV的基础,然后一步一步的教你如何搭建一个完整的UVM环境,并且边构建环境边解释各种细节,新手学完之后就能照猫画虎的自己写环境了。除了这些,我还自学了Linux、Vim、
就这样一直学习一直准备,到了三月份给路桑老师投了个简历,顺(jian)利(nan)通过面试,在三月底收到录取通知,正式归于路桑门下,开始我的实习之旅和验证之路。
实习
在写这篇文章的时候,我仍然在一家公司实习。从2020年3月底至今,做过不少的实际流片项目,也帮公司的同事们解决过验证方面问题、提供环境方面的支持,所以这些经历使我的简历更加充实,为我秋招取得收获奠定了一些基础。
刚进入公司时(实际还是居家隔离),我跟着导师的课程重新系统专业的学习了一遍SV和UVM,我这才发现在寒假时间自学到的知识还有很多漏洞,因此弥补了知识点的空白。学习SV和UVM的两个月里,导师让我也学习了git的使用,因为在团队协同办公时,需要这种工具进行更新、合并等操作。大致到5月份,导师给我和另一个同门安排了一个验证的虚拟项目,待测设计是APB I2C,一个Synopsys公司的IP。起初我想着运用所学的知识自己搭建一个验证环境,但是当我刚创建好环境目录的时候,导师就已经更新了代码,告诉我们环境已经稳定了……剩下的就是理解文档,写测试用例等等。这个环境中使用了两个自研VIP,我和同门根据导师给出的几个基本测试用例,开始对设计的各种功能展开测试,测试功能包括寄存器测试、数据收发、中断响应、中断清除等等。6月份疫情基本好转,我正式回到学校,开始每天上下班的社畜生活。I2C的虚拟项目做到最后,导师教会了我们使用Verdi和eman工具进行回归测试的方法,简单来说就是写一个HVP和一个emc文件,HVP是一个表格,包含了测试功能点,并且映射到了代码中的coverage group,emc文件就是回归测试的配置文件,包含了编译仿真的命令、测试用例名称、分类、次数等等,运行回归测试时只要启动eman,将这两个文件导入,然后点击run就可以了,灰常简单。
就这样,我算是正式走完了一个标准的验证流程,接着公司就给我们安排了一个实际的项目:一个子系统级的验证,考虑到我们是第一次做模块级以上的,所以导师同样写好了验证环境,不过只是一个初步的雏形。这是我接触到的第一个项目,也是对我的第一个考验。从大概8月份开始(具体时间记不清了),一直到12月初做完。由于涉及到公司的信息,项目具体内容就不展开说了,总之这是一次理论到实践的过程,让我巩固了SV、UVM的知识,并对公司里的验证流程有了一个初步的理解,同时我也学会了如何与设计人员、验证主管沟通,有效地解决问题。
项目结束后,导师给我安排了一个学习任务:研究Jasper Gold工具的使用,也就是形式验证技术。其实就是看看官方手册ug之类的,把实例跑一遍,学一下流程,然后在另一个设计上实现出来。学习了形式验证后我并没有机会在实际项目中使用到,不过把这一点写在了简历上,也是挺不错的。年假结束,我接到了第二个验证项目,待测设计是一个算法模块。模块虽然不大,但我可以亲自搭建环境,走一遍流程了。由于老板不怎么催,进度比较慢,这个项目一直到秋招前才做完。
原文链接:数字IC验证成长录-个人学习经历篇