笔面试经验
校招笔试
现场笔试就是每人发一张试卷,跟考试一样做题就行。线上笔试一般会提前用邮件通知是否参加某个时间段的某岗位笔试,点击确认后等时间就可以。线上笔试为了防止作弊,一般会要求开启摄像头和麦克风,有的公司会有人实时监控,有的则是随机拍照。
每个公司的笔试题内容相差挺多的,除了岗位需求的知识题目外,有的甚至会考其他岗位的知识,比如验证岗笔试会出设计题目,静态时序分析,甚至后端、封装测试的题目都有,如果真的遇到超纲题,会选就选,不会选只能蒙了。所以这里建议多刷笔试题,除了自身岗位需要的,其他方面的题也尽量多刷一刷。
笔试题目一般有单选、多选、编程、论述。
单选题一般比较简单,只要是好好准备过一般都能秒选答案,除非题目超纲(比如你投递设计岗,结果出一个后端的题)。举个例子:
下列语法不可综合的是
A.$display
B.generate
C.for
D.case
很简单的一道原题,学习过Verilog的伙伴肯定知道选A。系统函数$display用于打印消息,用于验证环境的仿真过程中,因此不能被综合(一个实际电路怎么能打印消息呢……),generate用于动态的生成verilog代码,可以综合,for语句只要代码风格正确,也可以被综合;case为选择语句,可以被综合为选择器或锁存器。
多选题错误率比单选高,因为要求每一个选项都要完全搞懂,举例:
如下哪些采用了one-hot状态机编码
A. 8’d16
B. 8’d20
C. 8’h20
D. 8’h16
one-hot独热码就是一串二进制数中只有一位为1,其余为0。选择时需要注意选项里的进制,d是十进制,h是16进制,都转换为2进制就能选出答案了,答案为AC。
编程题就是出一个小场景,让你写需要的代码,比如使用Verilog设计一个同步FIFO,使用C语言找出最大数最小数,都较为简单,对于实际做过项目或者实验的小伙伴应该不难。
论述题一般比较好回答,而我在秋招过程中接触到的个别论述题比较难,比如:
现有一个二Master一Slave的AXI接口,请描述在验证过程中需要测试的功能点有哪些?
这种题目我感觉没有做过实际项目的伙伴可能回答不是跟全面,我的答案是:
-
Master A到Slave和Master B到Slave的数据通路访问,包括数据读写以及所有AXI协议(burst、wrap、outstanding、地址边界等);
-
Master A到Slave和Master B到Slave的非法地址访问;
-
Mater A和Master B同时发起读读、读写、写读、写写时,接口的仲裁情况;
-
对Slave的同一地址Master A写Master B能否正确读取,Master B写Master A能否正确读取;
-
当AXI接口在工作时给出复位,该模块的状态机是否能正常跳回。
-
当两个Master和Slave的时钟频率不同时,以上场景能否正常工作,数据是否会丢失。
我做过实际的验证项目,但是回答完这道题还是感觉写的不够全面。
尽量提前上网找一些笔试题资源刷一刷、如牛客网、IC相关公众号、知乎等。
笔试通过后就要进行面试,面试一般分为三类:专业面试,综合面试,HR面试。
专业面试
专业面试考察专业知识能力,一般会问该岗位相关的一些问题。我在这里将专业面试题目分为三类:
-
简历相关问题;
-
专业问题;
-
开放类问题
简历相关问题就是面试官根据你的个人简历,从里面挑选一些感兴趣的点进行提问,提问较多的问题就是简历上的项目和实习工作经历,比如“讲一下这个项目你都做了哪些事”、“你在XX这个公司做了什么事,学到了什么东西”。更细节的问题就会问“这个项目里你的验证环境是不是自己写的”,然后进一步问“搭建一个验证环境需要写什么component”、“怎么集成到一起”、“说一下这个agent是怎么写的,driver大概结构是什么样子”等等,总的来说像是一个“简历打假”的过程,因此建议不要写一些自己不熟悉的项目经历或者编造实习工作经历。
专业问题就是问该岗位相关的专业知识,比如语言的语法、工具使用、验证流程之类的,难一点的会让你手撕代码。这里举例几个我面试遇到的专业问题。
-
Interface怎么传递到环境里?答案:通过uvm_config_db的set和get方法。
-
覆盖率有哪些类型?答案:功能覆盖率,代码覆盖率,断言覆盖率。
-
在验证环境里如何模拟一个FIFO?答案:可以声明一个队列,配合使用push_front和pop_back方法,或者直接声明一个mailbox,配合put和get方法。
-
写一个driver的大致结构。这个问题对于熟练掌握UVM并且做过实际项目的同学不难,需要注意定义的driver继承于uvm_driver,传递正确的参数类,使用工厂注册,正确定义各个phase以及get_next_item和item_done方法。
-
VCS的编译、链接和仿真命令是什么?答案:vlogan、vcs和运行simv文件,如果掌握的熟练可以顺便说一下每个命令的选项,这样可以让面试官眼前一亮,觉得你是“有点东西”的学生。
以上举例的问题都是和SV、UVM代码和EDA工具相关的问题,但是最好掌握一些总线协议、串口协议的知识,例如AMBA、UART、I2C、SPI、OCP等协议,这些都是很好的加分项。
开放类问题是面试官假设一个工作场景,给出几个问题。这类问题范围比较大,不好总结,毕竟你也不知道会遇到一个什么样的面试官,能想出怎样一个带坑的问题。这里举一个我实际遇到的问题:
-
有一个DUT按一种编码规则输入32bit数据,输出1bit判断输入是否符合编码规则,符合输出1,不符合输出0。请搭建一个验证环境,详细描述
剩余60%内容,订阅专栏后可继续查看/也可单篇购买
《数字IC验证校招指南》,专刊共计两部分,分别介绍了数字IC验证岗位的工作内容和该岗位的校招流程,包括简历准备、投递流程、笔试面试、名企笔试面试真题以及个人经验总结。本专刊将全面介绍笔者在校招过程中的经验,通关大厂技巧,让你们的求职之路更加顺畅。