2021届数字芯片求职经验
HR面这类的就不记录了,只写一写技术面、主管面的经验。欢迎关注个人公众号摸鱼范式
vivo提前批
岗位信息
投递岗位:芯片验证工程师
一共两面,一面技术面,二面HR面
技术面
- 首先介绍教育经历和项目经历
- 聊项目,会扣得比较细,根据项目提问题
- 你的加速器有哪些模块?是并行的嘛?
- 你的项目中使用了m3软核,你能解释一下m3启动流程吗?我回答说我不了解
- 你用过axi嘛,axi的特点有哪些,size信号是做什么用的?
- 解释一下CNN的典型层,我项目里有相关的
- uvm有什么特点
- fork-join,fork-join_any,fork-join_none的区别,如果fork-join_none里面是a和b,后面再跟个c,他们的启动顺序是?如果想让c最后启动怎么做?我说的是加一个#0
- 启动sequence有几种方法
- vritual sequence如何工作?
- tlm接口有哪几种?实现tlm通信要做哪些工作?
- 你的参考模型是c吗?还是sv写的?
- 覆盖率有哪几种?代码覆盖率和功能覆盖率如何收集?
- phase有哪些?
- component和object的区别?
- new和create的区别是?
- 如何关闭随机约束?
结果
收到感谢信
乐鑫提前批
岗位信息
投递岗位:数字IC验证工程师
一共两面,技术面,HR面
技术面
- 自我介绍,教育背景,项目经历
- 你在项目中担任的角色和承担的任务是什么
- UVM有什么优点
- 工厂机制的好处是什么?
- 通过工厂进行覆盖有什么要求?
- vritual function/task的作用是什么?这属于oop的什么特性?
- 用任意语言找出100以内的质数
- 在sv或者v中产生一个100Mhz的时钟
- 域的自动化有什么好处?
- 如何启动test?
- config db有什么参数?
- 如果环境中有两个config db set,哪个有效?
- 你遇到问题的时候是如何一步步解决的
- rand bit data[100],如何约束它随意一位是1,剩下的都是0?
- 除了培训班和实验室项目,你为了进入IC行业还做了什么自主学习?
结果
收到offercall
卓胜微
岗位信息
投递岗位:数字验证工程师
邮箱投递,等待面试中
汇顶科技提前批
岗位信息
投递岗位:数字验证工程师
内推,提前批简历未通过筛选,等待正式批笔试
大疆正式批
岗位信息
数字IC工程师
官网投递,等待笔试
oppo提前批
岗位信息
数字验证工程师
官网投递
面试
一面
和了解到的其他人比起来,我的面试官问的问题有点水,问了一堆设计的问题,说应届生不咋懂UVM,最后我建议他以后多问问验证的问题。。。。。
- UVM环境组件有哪些
- interface怎么传递到环境当中
- 动态数组和队列有什么区别,队列能通过索引取值吗
- always @ *的作用是什么
- 分支不写全会发生什么
- 什么是阻塞赋值和非阻塞赋值
- 描述一下AXI的特点,以及一个写事务的过程
- 用AXI,起始地址0x00,突发长度4,每周期发32bit,地址怎么变化
- 时序路径有哪几种
- 什么是建立时间和保持时间
二面
- 自我介绍
- 你在搭建UVM环境的时候从拿到任务到完成环境是一个怎样的流程?
- 分析spec
- 提取功能点
- 根据接口时序,规划drv的tranction内容
- 根据spec编写参考模型
- 完成验证环境组件编码
- 根据spec编写对应的sequence,testcase,定义功能覆盖率
- 你有遇到设计出现bug吗
- 如何处理bug
- 如何和设计人员协同解决bug
- 如何保证你的参考模型就是对的?
- 你的设计中有跨时钟域的内容吗,你是如何处理的,处理跨时钟域有哪些方法?
- 验证环境是你独立完成的吗
- 你是如何定义功能覆盖率的?考虑了哪些点
- 分支覆盖率属于什么覆盖率?
- 代码覆盖率达不到100%,你是如何分析的
- 对于内部数据的肯定会出现一些地方翻转覆盖率达不到100%,你是如何考虑的,会care吗
- 设计内部有很多模块,你们有做小模块的验证吗?
- 系统级联后出现过什么问题?
- 详细讲一讲你的另一个项目
- 你的简历上看起来设计验证各占一半,你的倾向是设计还是验证?
- 你的职业规划是怎么样的?
中兴微电子
投递信息
岗位:我记得我投的是IC验证,但是面试的是IC开发,总之中兴的招聘系统和投递方式实在太迷了,看不懂
投递方式:不知道是问卷星生效的还是官网投递生效的,迷
一面技术面
设计
- 自我介绍,专业,学校,实验室项目,比赛经验,实习经历
- 项目细节,负责的具体内容是哪些,你觉得哪一块最难,如何解决的
- 项目中有遇到异步处理吗
- 跨时钟域如何处理
- 什么是亚稳态,为什么会产生亚稳态
- 什么是建立时间保持时间,他们的关系是什么
- 你的成绩如何,在班级排名多少
- 老家哪里的
- 你了解中兴有哪些工作地点吗
- 你的第一意向是哪个城市
由于我明确表示了我想应聘的是验证,所以面试官跟我说如果有招聘验证工程师会把我的简历投过去,如果没有这次面试就算是技术面试,进入后续流程。
验证
之前面的设计,和HR沟通了一下转成验证的重新进行技术面试
主要还是在讲项目
- 教育背景,项目经历,实验室工作
- 介绍一下你的验证环境
- 你的覆盖率是如何收集的
- 激励是如何产生的
- 覆盖率没收集满你是如何处理的
- 实习主要做了什么?
还问我为什么不去中兴华为实习。大哥啊,华为一个没招,中兴我都没找到哪儿招实习了。
- 你有在投别的公司吗
- 你的意向有哪些公司?
- 除了SV你有别的OOP的经验吗?
然后让我问了一些问题
- 新人培训如何?和华为联发科差不多,导师带着做。
- 你们这里的业务是啥?网络芯片里的流量控制方面的模块,不太懂。
联发科
投递信息
岗位:IC开发工程师
投递方式:官网投递
一面
- 自我介绍,项目经验,实验室经验,学校背景
- 一句基础知识都没问,全都是在聊项目,两个比赛和实验室项目问了个底朝天。简历上些什么,问什么,每一个部分都问。
- 问了硕士毕设做什么,讲了一堆原理,然后就让我讲具体设计实现,正好我电脑上有自己写的毕设文档,直接对着讲。
- 其中一个比赛我说我电脑上有PPT,直接让我对着PPT讲。
最后聊了一下他们的业务主要做的是手机里通信这块的,调制解调器、wifi、蓝牙这些。新人入职培训和华为差不多,设计验证综合前端后端都会cover到。
本来应该是两个面试官的,估计一个设计一个验证,但是另一个面试官没来,主要都在问项目的设计部分。
最后还问我愿不愿意做设计,我说被分到设计也没问题,但是我的意愿是验证。
联发科分为笔试、一面技术面、二面主管面。
结果
收到感谢信
海思优招
岗位信息
芯片与器件设计工程师
投递方式:官网投递
一面
- 自我介绍
- 你说你了解uvm,什么时候开始接触的,用了多久
- uvm是一个类库,你能简单画一下类的继承关系吗
- 项目中模块的结构图画一下
- 讲解一下你的模块都是怎么工作的
- 模块的上下游接的是什么
- 考虑过模块的带宽问题吗,axi能满足你吗
- 手撕代码,上升沿检测,并且讲解一下思路,我没考虑到输入可能是异步的,要打拍
- 考虑留在实习的公司吗
二面
- 自我介绍
- 验证的流程
- 验证环境的构成
- 如何保证验证的完备性
- 如何评价验证的完备性
- 芯片设计的整体流程
- 从验证的角度来说,如何检查异步问题,内部信号拉出来看,延迟驱动,想不起来了
- 手撕代码给我改成写测试点了
一个模块,vaild会连续拉高,同时有16bit数据进来,vaild连续拉高的周期数为3-255,然后模块要把这些数据求和,但是要把最大值和最小值踢除,最后done和sum一起有效。另外不用考虑两次求和之间的间隔,假设无限长。
我写的测试点:
- 复位后done和sum的状态是否正常
- 3拍、255拍、随机拍功能是否正常,随机化数据
- done和sum是否在vaild拉低以后的有限拍内有效
- 特殊拍数,和拍数
- 特殊数据内容,全0,全FFFF
- 特殊数据分布,全部相等,全部只有两个值,全部只有三个值
- 16bit每一bit都翻转
- 数据较大时的溢出检查
- done和sum不能再vaild有效期间进行有效
- 数据分布:正态分布、均匀分布
- vaild和data不同步的时候异常处理
- 数据如果在0-2或者超过255个时的异常处理
- 这么多功能点,如何实现检查?
总结一波手撕代码的题型:
- 序列检测
- 序列生成
- 帧头检测,这个可以看我之前暑期实习的时候面试
- 红绿灯
- 前面提到的剔除最大最小值的累加模块
- 上升沿检测,记得做异步处理
- Round Robin仲裁器
- 有符号比较器
- 三分频
- 异步FIFO的关键代码
下面给一个4输入RR仲裁器的代码,核心就是使用优先级选择器
module arb_comb4 ( input [1:0]cur_arb_id, input [3:0]arb_req, input arb_en, output reg [1:0]nxt_arb_id ); always @(*) begin if(arb_en) begin case(cur_arb_id) 2'd0: case(1'b1) arb_req[1]:nxt_arb_id=2'd1; arb_req[2]:nxt_arb_id=2'd2; arb_req[3]:nxt_arb_id=2'd3; arb_req[0]:nxt_arb_id=2'd0; default:nxt_arb_id=2'd0; endcase 2'd1: case(1'b1) arb_req[2]:nxt_arb_id=2'd2; arb_req[3]:nxt_arb_id=2'd3; arb_req[0]:nxt_arb_id=2'd0; arb_req[1]:nxt_arb_id=2'd1; default:nxt_arb_id=2'd1; endcase 2'd2: case(1'b1) arb_req[3]:nxt_arb_id=2'd3; arb_req[0]:nxt_arb_id=2'd0; arb_req[1]:nxt_arb_id=2'd1; arb_req[2]:nxt_arb_id=2'd2; default:nxt_arb_id=2'd2; endcase 2'd3: case(1'b1) arb_req[0]:nxt_arb_id=2'd0; arb_req[1]:nxt_arb_id=2'd1; arb_req[2]:nxt_arb_id=2'd2; arb_req[3]:nxt_arb_id=2'd3; default:nxt_arb_id=2'd3; endcase default:nxt_arb_id=2'd0; endcase end else nxt_arb_id=cur_arb_id; end endmodule#芯片设计工程师##芯片IC验证工程师##vivo##乐鑫##华为##OPPO##MTK联发科技#