数字IC设计验证-秋招指南

2021-05-11 16:05:05 浏览数 (2)

前言

现在距离正式九月正式秋招还有4个月,距离八月提前批还有3个月,相信不少粉丝都在盘算着为工作做准备。今天,我以一个过来者的身份跟大家分享分享,关于秋招如何准备以及一些注意事项,希望大家能够有所收获。同时也感谢在求职过程中给予我帮助的同学们。

整体概述

我将对秋招的准备分为两个部分,就像一个系统一样,总是划分为软件和硬件的,软硬协同才能发挥最好。这硬件的意思就是,打铁还需自身硬,面试官、笔试题千奇百怪,但是最终起决定性作用的还是自身实力,包括但不仅限于学历、基础知识、项目经验、实习经历和比赛获奖,这些写在简历上直接就能拉高面试的通过率。软件部分就是面试的时候的临场表现,如何最大程度的体现出自己的优势,展现自己的能力,毕竟一个人的能力单单从面试很难考察的非常清楚。

接下来分几个部分来介绍如何准备秋招,设计基础,验证基础,简历准备,信息获取,笔试经验,面试经验,其他注意事项。

设计基础

无论是找设计还是验证,设计部分的基础都是必须的,不会设计的验证工程师不是一个好工程师。

整体流程

首先要建立起一个宏观的概念,一颗芯片,从设计需求到最后成片需要经历哪些流程,这些是必须了解的,每个流程的具体作用是什么,所使用的工具是什么,基本概念必须清楚。然后再继续后续的复习。

电路基础

设计的基础可以从最基础的模电数电开始准备复习,然后进阶到模集数集。这个阶段要懂得什么是BJT,什么是MOSFET,什么又是CMOS。给一个逻辑表达式,怎么画出它的CMOS电路,DSRJKT触发器的结构是什么样的,如何化简到最大项和最小项,卡诺图的使用,加法器的种类与区别,什么是亚稳态,什么是双稳态,SRAM的结构和基本原理等等。知识点很零碎,对于非电子类的同学来说这部分可能比较薄弱,需要好好补一补。此外,对于基本的CMOS电路,我推荐能够画出版图最好,起码一个与非门、反相器这种版图能看得懂。

备战秋招必备文章合辑

verilog基础

有了上面的基础,就可以进一步的复习。这个阶段可以复习verilog,如果有C语言基础,一两天速成是没有问题的。verilog使用的关键词不超过20个,module endmodule wire reg always negedge posedge if else assign case,用这些基本就能完成所有的电路设计。verilog语法学习的书推荐一本《轻松成为设计高手》,然后在hdlbits上用verilog去完成基本的电路,熟悉常见结构的书写,例如什么是时序逻辑,什么是组合逻辑,如何例化模块,gen语句的使用,哪些是可以综合的,哪些是不可以综合的,怎么避免latch,代码综合出来大概是什么样的电路。有些同学尽管做了很多项目,很多细节还是很不清楚,要多复习一下基础。

有了语法基础以后,就开始用verilog写一些小模块,并且为这些小模块写testbench。举些例子,可以写序列检测器、红绿灯、斐波那契数列求解器、fir滤波器等等。然后用verilog的语法写tb,最后跑跑仿真。最好能够用eda综合一下,vivado就行,保证自己写出来的代码是没问题的。

亚稳态

复习完verilog以后,就可以进一步的去理解电路的细节了,主要就是时序分析的问题,包括亚稳态、建立时间保持时间、复位、跨时钟域等等。

亚稳态部分,要了解什么是亚稳态,亚稳态如何产生的,亚稳态的危害是什么,如何避免亚稳态,深恶么事平均失效间隔时间,亚稳态是能够避免的吗。

结合亚稳态,解释什么是建立时间保持时间,他们的物理意义是什么,通过建立时间和保持时间如何计算一个电路的最高工作频率。

异步复位和同步复位的区别是什么,优缺点是什么,如何在复位阶段避免亚稳态的产生。

最后的重中之重,跨时钟域的概念是什么,什么情况算跨时钟域,什么情况不算跨时钟域,跨时钟不处理会发生什么,什么情况下可以不处理,常见的跨时钟域方法有哪些,快到慢,慢到快,多bit,单bit这些分别应该怎么处理?

有时间的话,推荐各位去听一听邸志雄老师的mooc,关于静态时序分析的公开课。

备战秋招-[二]

综合类

以上就是通用基础了,以此为基础,在往上就要准备专业一点的东西了。例如CPU的基本结构,cache的作用,这些计算机体系架构的基本概念要有。然后再去了解常见的总线协议和通信协议。总线协议常见的包括APBAHBAXI,还有一些用的比较少的,比如avlon、wishbone。要透彻地理解他们的特性,应用于什么场景,有什么特点,有什么区别,为什么能够应用于这种场景,什么是outstanding,什么是outoforder,什么是interleaving,如何握手,突发有什么特点,总线的流水线是什么意思。通信协议不用太复杂,除非自己去研究过,只需要了解常见的iic,uart和spi就行。

深入AXI4总线-[一]握手机制

此外,FIFO也是非常重要的一点,需要知道同步FIFO如何设计,最好能手写代码。需要知道异步FIFO的设计思路和整体结构,能写出关键部分的代码,然后如何生成FIFO的空满信号,接近空接近满如何生成,假空假满为什么会产生,产生了有什么影响么,如何设计一个深度不是2的幂的FIFO,根据两边的读写速率和间隔计算FIFO的最小深度。FIFO的内容非常重要,一定要好好研究一下。

备战秋招[六]-FIFO深度计算

后续还有一些零碎的东西,也需要去整理归纳,

时序违例了怎么处理?什么是重定时,什么是流水线,流水线优化了什么,带来了什么消耗。

时钟切换电路应该怎么设计,如何实现无毛刺切换,门控时钟的作用是什么,门控时钟单元的结构是什么样的。

总功耗由哪些部分组成,各个部分分别受到什么的影响,如何降低各个部分的功耗?

然后准备一些常见的代码,奇数分频、帧头检测、状态机、无毛刺时钟切换、按键去抖动

备战秋招-手撕代码篇-奇数分频

验证基础

验证工程师的准备要比设计工程师的更加多,一方面现在很多从材料转过来的同学,对于设计一窍不通,这样很容易在面试中落得下风,另一方面本身验证就是设计,设计就是验证,只是从不同的角度去解读SPEC,对设计的理解当然是多多益善。

这里我推荐大家报名路科验证的V2pro,三个月刚好可以完成UVM的学习,对UVM的整理哲学有一个清楚的认知。V2pro对比原来的V2还增加了新的虚拟项目,进一步加强个人的竞争力。我个人在19年的时候就已经学习过V2课程了,熟悉我的人都知道,路科验证在我的成长路途中,是一个重要的转折点,实验室没有条件的情况下,通过路科验证才得以入门了验证,帮助我后续在比赛中获奖,在找实习的时候也如鱼得水,最后也顺利在秋招斩获OPPO、乐鑫、展锐、平头哥、汇顶还有AMD的offer。真诚地推荐大家通过V2pro学习入门验证。

SV基础

与设计不同,验证几乎100%使用SV作为编程语言,需要对SV足够熟悉。SV的学习推荐大家去看绿皮书,然后自己用SV的语法,不使用UVM但是仿照UVM去理解如何使用SV去编写一个通用的测试平台。

下面是一些需要掌握的基本知识点

SV对比V提供哪些有点,新增了什么数据类型

什么是队列,关联数组以及动态数组,分别用在什么场景,如何声明,有什么优缺点

旗语和事件有什么区别,wait和@的区别是什么

const、ref、input、output、inout分别是什么意思

全局变量和局部变量的作用域是什么,静态变量和动态变量的区别是什么

package的作用使用,使用package和include有什么区别

fork三兄弟的区别与作用是什么

什么是OOP,三大要素是什么,三大要素在SV中分别使用什么来实现的,使用OOP有什么好处,SV中有重载吗,覆盖和重载的区别是什么

什么是类,class和module的区别是什么,什么是虚函数,虚函数的作用是什么,

什么是虚接口,虚接口存在的意义是什么

SV的覆盖率如何声明,如何采集覆盖率,bin的数量如何确定,交叉覆盖率的作用是什么,ignore和illegal的bin如果触发了有什么区别

SV的仿真调度机制是什么样的?

SV的内容很多,以上只是我现在能想起来的考察重点,自己复习的时候要仔细钻研。

UVM基础

UVM现在基本是验证岗必备的技能了,所以也是复习重点。这部分推荐先看看一本书叫UVM primer,eetop有中文版,对UVM的设计哲学有一个整体概念,然后再去研读白皮书和红皮书。

UVM的基础也和SV类似,大概有以下一些内容

UVM的历史,从哪些项目中分别获得了什么特性?

UVM的优势和劣势是什么,一定要使用UVM吗

UVM如何启动测试?如何把接口传递到环境中

configdb机制的作用是什么,如何使用,set以后一定要get吗?什么情况下可以不get?

什么是域的自动化机制,域的自动化机制提供了哪些特性

sequence机制是什么,为什么要设计sequence,什么是layer sequence、vritual sequence?

什么是phase机制,phase有哪些,什么条件下可以进入下一个phase,各个phase的作用是什么,各个phase的执行顺序是怎么样的?

工厂机制是什么,通过工厂机制,UVM提供了什么特性,如何使用这些特性

UVM的整体结构是怎么样的,顶层是什么

UVM的消息是如何管理的,冗余度的意义是什么

一个典型的UVM环境纯在哪些组件,数据是如何流动的,每个组件的作用是什么

component和object有什么共同点和区别

什么是事务级建模,TLM接口的作用,如何使用TLM接口,TLM FIFO的作用是什么

上面仅仅列出了常见的面试考点,通过这些考点,同学们可以自行主动拓展发散思考。

验证通识

和设计一样,基础知识是必备的,如何使用这些基础只是去解读SPEC才是重点,所以对于验证之上的一些概念需要加以理解。

有哪些验证手段?动态仿真、形式验证都有什么优缺点

门级仿真的作用是什么,STA的作用是什么

给一个模块,要能够根据SPEC进行功能点的分解,提出覆盖率

功能覆盖率和代码覆盖率什么意思,这些覆盖率不够怎么办,覆盖率满了就能说验证完备吗

受约束的随机验证优缺点是什么

简历准备

投递简历通常是我们进入到应聘流程的第一步,作为理工科的简历,建议大家保持简历界面整洁,最好直接白纸黑字,简历的主题内容一定要是自己的项目、专利、论文。

自己的专业,本科院校,硕士院校都要写清楚,如果觉得自己学校名气不够但是确实是一个211/985,推荐大家直接注明9885,IC这边就是这么真实。如果是转行的同学,不要避讳的专业,直接大大方方写出来,没有项目经历的话哪怕是自己做的小模块也可以写上去,实在没有,培训班的经历也可以写。

简历的项目中,要包括一下几个内容

  • 如果是比赛,说清楚比赛名字,等级,获奖情况,时间,自己是队员还是队长
  • 项目的简要概述,包括项目是做什么的,采用什么方法,用到了哪些协议
  • 讲清楚自己所负责的内容,不是自己做的,一定不要写
  • 讲清楚达到一个什么水平,例如,如果是ASIC项目,讲一讲工艺和频率,综合面积,吞吐量。如果是FPGA项目,讲一讲开发板类型,用到了什么外设,LUT消耗了多少,DSP消耗了多少,Bram消耗了多少。
  • 尽管内容比较多,但是不要让项目内容过余冗余,简要描述就可,语言简单轻快。

如果你有专利和论文,无论是不是IC、FPGA相关的,我都建议你写上,这是你能力的一个证明

在描述自己的专业技能时,使用三个关键词对掌握程度进行区分:了解,熟悉,精通。对于自己浅尝辄止的领域使用“了解”,对于自己常用的技能可以使用“熟悉”,对于自己非常有自信,很熟练的技能,使用“精通”。这样在面试的时候,如果问到你不会的,可以有一个退路。

推荐一个免费的简历制作网站,制作简单,风格简洁。

https://www.wondercv.com/

有很多同学,经验比较丰富,所以项目有很多,这里建议在保证一页纸的前提下,尽可能多写几个,但是尽量保证一页纸,但是这不是绝对,大家自行取舍。多余的项目可以提交到公司的简历系统中。同时,如果你是设计验证都有求职意向,或者要针对不同公司投递,那么就需要制作不同版本的简历,侧重设计或者验证,有些公司要求有通信背景,那么可以突出通信项目,稍微展开一点。

信息获取

秋招实际上也是一个信息战,能够收集更多的情报代表了你有更多的优势,信息来源无非就是几个地方,知乎、微信公众号、微信群、QQ群、公司官网。

知乎和微信公众号,推荐一个比较活跃的,也是2022届的应届同学,FPGA探索者,我今年也会继续给大家带来面经和招聘信息的整理,届时请继续关注。

快来加入IC交流群吧!微信QQ都有

笔试经验

笔试题有一些资料也放在QQ群了,有需要的同学加群下载就行,我就讲讲笔试的注意事项。

大部分笔试都分为两种,一种是性格测试这种,测性格还有所谓的智力的,这种如果是有计算题大家记得准备好计算器,口算是不切实际的,时间很紧。然后性格测试直接follew your heart,但是要注意,前后要一致,可能第十题和第四十题是一样的,如果两次回答差异过大,会判你不及格,倒在这种地方实在是太亏了。

专业笔试的话,没啥不好意思的,准备两台手机,一台用来扫码锁定,另一台上群交流,很多人都这样,不过以IC这边的笔试难度,交不交流都差不多,难度不会太高,基础扎实的都不怕。

面试经验

面试的固定流程一般都是一样的

  • 起手式,自我介绍一下。自我介绍部分作为面试的开始,大家可以提前打好草稿,主要从几个方面进行,本科的学校和专业,硕士的学校和专业,如果有的话,介绍自己的比赛、专利和论文,在实验室的研究课题,所做过的项目。注意,在介绍由多人合作共同完成的内容的时候,一定要说清楚,自己负责的什么部分,不要让面试官对你的工作有错误的认知。最后有一点一定要注意,很多同学的意向岗位是IC验证,但是公司不一定有单独的验证岗位,比如VIVO、OPPO、乐鑫有专门验证岗位,而联发科、中兴、华为只有IC开发工程师,所以在自我介绍的最后,强调自己对于SVUVM的熟悉,以及自己的求职意向。
  • 自我介绍完以后,一般会进入简历提问环节。因此,针对简历上写的每一个项目,每一个点,都必须了然于心,有些面试官提出的问题会比较细节。这部分大家针对自己的项目好好准备
  • 对于基础知识的考察有时候会随着项目一起问,有时候会直接抛出来。常见的基础知识大概有几种
    • 跨时钟域
    • 低功耗
    • 流水线
    • verilog语法
    • 异步FIFO
    • 如果目标公司要求体系架构的知识,或者你本身有体系架构相关的项目,会问到,比如流水线的好处,流水线带来什么问题,如何解决,cache的作用等等
    • 时序分析相关
    • 芯片设计流程
    • SV oop相关
    • UVM相关
    • 验证通识相关
    • AMBA总线知识
  • 除了对专业知识的考查,通常还会设计到一些项目管理或者人际交往的问题。例如,设计和验证人员是如何沟通的,你是如何分配成员任务的,当你的团队遇到重大bug时是如何解决的,如果你的队员中途退出导致你项目赶不上进度该怎么办。这些问题大家各有各的看法,但是在面试之前可以稍微想一想。
  • 一个面试小的tips,聊胜于无,当面试官对你抛出一个问题的时候,在回答问题的基础上可以做一些拓展。这有两个目的,一是引导暗示面试官往你擅长的方向进行提问,二是展现你的知识储备,刷好感度。举个例子,面试官问你,interface如何传递句柄到环境内中,可以先从interface讲起,interface是什么,为什么要vritual interface,什么是uvm_config机制,在哪里set,在哪里get,这样你从interface的概念到动机到configdb再到使用方法,全都讲了一遍,拉高面试官对你的印象。
  • 在最后的环节中,面试官会问你,你还有什么问题嘛?这种时候一般可以问这些问题
    • 你们公司这个部门的主要业务是什么?很多大公司在不同的的城市业务都不一样
    • 你们公司对于新人的培训机制是怎样的?作为新人,有必要了解这家公司对于应届生的培育方法
    • 如果我想了解学习其他岗位的内容,会有途径嘛?做设计的可能想学习架构、验证,做验证的也是同理,很多同学都不希望局限于一个岗位中
    • 最后还可以问一问刚刚自己没有回答出来,或者自己觉得回答不好的问题,让面试官告诉你,为以后的面试做好准备

建议大家在面试之前准备一套自我介绍模板,把自己的主要信息一气呵成的介绍好。如果是转行过来的同学,一定要准备面试管问你为什么要转过来,你有什么优势么。

备战秋招-面经合集

其他注意事项

面试复盘

经过不断的面试,你可能发现自己在某些方面有一些欠缺,某些知识点有遗漏,这些都对你下次面试起到了很好的查漏补缺作用,所以,建议搭建把自己在面试中所遇到的所有问题,无论自己回没回答上来,都记录下来。不仅仅是问题,还要包括自己的回答,面试官的解释,如果可以的话,在面试的最后环节,可以问一问面试官刚刚自己不懂的问题。也许,下一面试官问你的问题,就是你上次记录下来的问题,细节决定成败。

面试环境准备

最好不要在实验室面试,找一个网络稳定,并且确定没有人打扰的环境面试,比如和室友商量,在寝室面试,一定要保证网络通畅。如果是线下面试,由于我们不是行政、人力这方面的岗位,着装得体大方就行,记得洗脸刮胡子。线下面试一定要准备多几份纸质版简历备用,以防万一。

应聘信息整理

因为不同公司的招聘系统都不一样,推荐大家用excel记录一下不同公司的投递方式、官网地址、面试进度和面试时间以及最终反馈,让信息更加明了。

0 人点赞