笔面试经验

校招笔试

现场笔试就是每人发一张试卷,跟考试一样做题就行。线上笔试一般会提前用邮件通知是否参加某个时间段的某岗位笔试,点击确认后等时间就可以。线上笔试为了防止作弊,一般会要求开启摄像头和麦克风,有的公司会有人实时监控,有的则是随机拍照。

每个公司的笔试题内容相差挺多的,除了岗位需求的知识题目外,有的甚至会考其他岗位的知识,比如验证岗笔试会出设计题目,静态时序分析,甚至后端、封装测试的题目都有,如果真的遇到超纲题,会选就选,不会选只能蒙了。所以这里建议多刷笔试题,除了自身岗位需要的,其他方面的题也尽量多刷一刷。

笔试题目一般有单选、多选、编程、论述。

单选题一般比较简单,只要是好好准备过一般都能秒选答案,除非题目超纲(比如你投递设计岗,结果出一个后端的题)。举个例子:

下列语法不可综合的是

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接口,请描述在验证过程中需要测试的功能点有哪些?

这种题目我感觉没有做过实际项目的伙伴可能回答不是跟全面,我的答案是:

  1. Master A到Slave和Master B到Slave的数据通路访问,包括数据读写以及所有AXI协议(burst、wrap、outstanding、地址边界等);

  2. Master A到Slave和Master B到Slave的非法地址访问;

  3. Mater A和Master B同时发起读读、读写、写读、写写时,接口的仲裁情况;

  4. 对Slave的同一地址Master A写Master B能否正确读取,Master B写Master A能否正确读取;

  5. 当AXI接口在工作时给出复位,该模块的状态机是否能正常跳回。

  6. 当两个Master和Slave的时钟频率不同时,以上场景能否正常工作,数据是否会丢失。

我做过实际的验证项目,但是回答完这道题还是感觉写的不够全面。

尽量提前上网找一些笔试题资源刷一刷、如牛客网、IC相关公众号、知乎等。

笔试通过后就要进行面试,面试一般分为三类:专业面试,综合面试,HR面试。

专业面试

专业面试考察专业知识能力,一般会问该岗位相关的一些问题。我在这里将专业面试题目分为三类:

  1. 简历相关问题;

  2. 专业问题;

  3. 开放类问题

简历相关问题就是面试官根据你的个人简历,从里面挑选一些感兴趣的点进行提问,提问较多的问题就是简历上的项目和实习工作经历,比如“讲一下这个项目你都做了哪些事”、“你在XX这个公司做了什么事,学到了什么东西”。更细节的问题就会问“这个项目里你的验证环境是不是自己写的”,然后进一步问“搭建一个验证环境需要写什么component”、“怎么集成到一起”、“说一下这个agent是怎么写的,driver大概结构是什么样子”等等,总的来说像是一个“简历打假”的过程,因此建议不要写一些自己不熟悉的项目经历或者编造实习工作经历。

专业问题就是问该岗位相关的专业知识,比如语言的语法、工具使用、验证流程之类的,难一点的会让你手撕代码。这里举例几个我面试遇到的专业问题。

  1. Interface怎么传递到环境里?答案:通过uvm_config_db的set和get方法。

  2. 覆盖率有哪些类型?答案:功能覆盖率,代码覆盖率,断言覆盖率。

  3. 在验证环境里如何模拟一个FIFO?答案:可以声明一个队列,配合使用push_front和pop_back方法,或者直接声明一个mailbox,配合put和get方法。

  4. 写一个driver的大致结构。这个问题对于熟练掌握UVM并且做过实际项目的同学不难,需要注意定义的driver继承于uvm_driver,传递正确的参数类,使用工厂注册,正确定义各个phase以及get_next_item和item_done方法。

  5. VCS的编译、链接和仿真命令是什么?答案:vlogan、vcs和运行simv文件,如果掌握的熟练可以顺便说一下每个命令的选项,这样可以让面试官眼前一亮,觉得你是“有点东西”的学生。

以上举例的问题都是和SV、UVM代码和EDA工具相关的问题,但是最好掌握一些总线协议、串口协议的知识,例如AMBA、UART、I2C、SPI、OCP等协议,这些都是很好的加分项。

开放类问题是面试官假设一个工作场景,给出几个问题。这类问题范围比较大,不好总结,毕竟你也不知道会遇到一个什么样的面试官,能想出怎样一个带坑的问题。这里举一个我实际遇到的问题:

  • 有一个DUT按一种编码规则输入32bit数据,输出1bit判断输入是否符合编码规则,符合输出1,不符合输出0。请搭建一个验证环境,详细描述

剩余60%内容,订阅专栏后可继续查看/也可单篇购买

数字IC验证校招指南 文章被收录于专栏

《数字IC验证校招指南》,专刊共计两部分,分别介绍了数字IC验证岗位的工作内容和该岗位的校招流程,包括简历准备、投递流程、笔试面试、名企笔试面试真题以及个人经验总结。本专刊将全面介绍笔者在校招过程中的经验,通关大厂技巧,让你们的求职之路更加顺畅。

全部评论

相关推荐

头像
11-07 01:12
重庆大学 Java
精致的小松鼠人狠话不多:签哪了哥
点赞 评论 收藏
分享
无敌虾孝子:喜欢爸爸还是喜欢妈妈
点赞 评论 收藏
分享
5 8 评论
分享
牛客网
牛客企业服务