数字芯片设计工程师面试经验(实习加校招)
前言
作为一名硬件工程师,之前校招过程中拿到了一些offer,其中不乏华为、VIVO等手机公司,后来选择在寒武纪做数字芯片设计,工作半年有余,本来是没有想换工作的想法的,华为某部门因为看到了我发表的一篇SCI而联系我,面试后给我发了很不错的offer。我想既然面试了,不如再看看其他的,就面了字节跳动的高级硬件研发岗位,本文主要介绍字节跳动的FPGA岗位面试流程和具体内容。
面试流程
字节跳动面试流程一共5面,其中4面技术面,1面HR面。面试均以视频面试方式进行,对应的面试链接可以在对话框编程,在面试过程中也会考察编程能力。面试整体过程所有公司基本都是大同小异,先自我介绍,其中包括教育经历和工作经历,然后面试提问会先基于你自己的经历进行展开,这两部分主要是先让你讲述你熟悉的领域,给彼此一个过度。如果简历内容基本问完了,那么就会提问一些面试官准备好的内容,不同面试考察重点不同。字节一二面以基础知识和编程能力为主,那么就会多问这类问题;三四面以简历内容为主,比如教育经历、科研经历和工作经历,再展开问,主要看候选人对于所处行业的认知深度,对所学知识的掌握深度,语言表达能力,这个过程不同人有不同人的感受,有的人会觉得很简单,有的人会觉得很难。前提是你对自己的经历有较深的理解,简历内容禁得住询问,然后语言表达能力过关,对于年轻候选人,要给面试官以学习能力强、潜力强的感觉;对于经验丰富的候选人,要给面试官对于行业有深刻认知和知识认知广的感觉。1234技术面对应的面试官职级一般也会越来越高,HR面我认为主要是聊天,再聊薪资,薪资基本也在之前定好了,我觉得没有太多难点。
面试问题
如上文所述,对于简历内容我不做讨论,本文主要讲字节跳动所问的基础知识,但是也会有根据我简历所提的相关问题,下文也会列出一部分。
- 因为我之前做的硕士课题用过FIR低通滤波器,可能这个属于工科必备知识,所以一面和三面都有让我写FIR滤波器的代码,比如告诉你3阶FIR滤波器,你来写这个module,考察你算法的理解和编程规范,本文所指的代码都是verilog代码。
- FPGA基础知识,比如组成单元,静态时序分析相关内容。
- 异步FIFO IP核的组成,其中关键点是多比特跨时钟域,不能直接打2拍,这个时候可以问你跨时钟域处理方法有哪些,FIFO常用方法是格雷码加打两拍,然后读写指针判断空满,记得要在对应的时钟域,FIFO这些问题在很多面试都有考察。
- 三段式状态机,coding一个序列检测代码。
- 一个握手与反压的问题,类似于:设计一个并行6输入32比特加法器,输出1个带截断的32比特加法结果,要求用三级流水设计,带前后反压。(这个问题的答案可以看我专栏的文章,数字芯片设计—握手与反压,里面有详细解答)
- 对于1个异步FIFO,如果写时钟频率是读时钟频率的100倍,是否会出现风险?
问题6解析
- 可能会产生虚空和虚满,这个也是FIFO设计中安全性的一个体现。但是对于本题,比如写地址同步到读时钟域,判断此时读空与否,可能会判断已经读空,但是由于写时钟频率快,此时又写了很多,所以非空,但是只要深度大于200,因为在读时钟域打了2拍,这个就不会对数据安全性产生影响。
- 格雷码转换是相邻写地址,尽管读时钟2次采样时看到的不是相邻地址,但这个不影响写时钟频率下的格雷码,不会增大亚稳态发生的概率。
- 设计存在的问题可能是,对于FPGA来说,同时产生相差100倍的时钟频率比较困难,一般PLL锁相环输出时钟频率最大最小差值不到一百倍,这样可能最小的频率需要自己进行分频处理,时钟扇出质量不好,有timing问题。
总结
- 提升基础知识扎实程度,对于IC或者FPGA设计常用方法和原理掌握,了解基本IP核原理,会写对应IP的关键代码,积累设计方法和经验,比如握手、流水、乒乓操作等基本设计方法,也可以关注我的知乎,我的专栏有讲这些基础知识。
- 提升知识广度,对于常用总线协议进行学习和总结,对于所处方向的常用算法和知识进行学习总结,用自己的话能清楚地讲述一个行业知识的原理和内容,也是一种能力。
- 提升行业认知,社招过程中,越往后越考察你对于行业甚至市场的理解,你可以选择做一个高水平资深工程师,也可以选择让公司看到你敏锐的行业直觉和洞察力,需要让公司和主管知道,你能为公司带来什么。
- 多思考,自己的未来要做什么,五年后的自己在做什么,十年后应该在做什么,对此进行规划,不仅是技术本身,还有技术之外的综合能力的积累。
最后,祝大家都能拿到字节跳动的offer,都能拿到自己想要的工作机会。如果想了解更多芯片和FPGA方面的知识可以关注我,如果想内推字节跳动或者寒武纪可以私信我,欢迎点赞分享。
字节跳动内推链接
过了两周不到被发起面试,也不知道基础研究是做什么的,但是面试过程中知道是量子实验室中的,然后可能需要我做一些FPGA的开发验证,所以一面问题主要是verilog的语言基础,比如阻塞赋值非阻塞赋值,然后还有外部时钟和内部时钟接口处如何统一,还有针对我的课题提问了较多。一面是两个人,应该是总监和一个技术小哥,后来得知小哥是组里唯一的硕士。一面效果很好,问我什么时候入职,有说有笑。
二面也是技术面,问我的都是围绕简历展开的,很简单。
三面是HR,突如其来没有预约晚上九点开始面试,之后聊了四十分钟,最后我问她能否被录取,她说不能告诉我,但是说了一句“我认为你是一个很优秀的人”。
后来煎熬了好久等offer,在4.1号收到offer call,还是很开心的。