数字IC面试经验及面试题总结(内附大厂试题)

前言

微电子这行,现在本科生出去做研发会比较难,尤其是大公司,很少招本科生去做研发,除非很优秀,读研了导师又不愿意放你出去实习,结果就是到了找工作那一步,总觉得有点心虚。

而我作为一个学酥,当找工作这件大事咄咄袭来的时候,坦白讲,我是慌张的。

最开始春招的时候,在经过几家公司的面试和宣讲会之后,我发现自己的能力还存在很多不足,这让我更没有底气去选择心仪的公司。

不过好在自己还是有点上进心的,缺什么就补什么,当即就选了西安叩持电子的IC修真院进行个人提升,毕竟参与了中科院郝跃院士牵头发起的树芯计划,还是比较可靠的。

当时也没有太多的想法,就是冲着讲师出身去的,都是出身英特尔,华为这类大厂从业经验十多年的行业大牛,所以讲授的方向更偏实战而非纸上谈兵。

这正是我那时所需要的,成功把学习思维转化成工作思维,熟悉掌握之后工作所要做的内容和项目。最终还在实训阶段走了一遍流片的全流程,实属意外之喜。

经过六个月的学习之后,总算找到了自己满意的工作。但能力归能力,面试归面试,你永远不会知道面试官抛出来的会是什么样的问题。

经历了无数的笔试面试之后,发现数字IC的笔试面试还是有很对共通之处和规律可循的。期望我的经验能让你少走些弯路。

一、有关笔试准备

数字IC验证的笔试往往和数字IC设计做的是同一套笔试题,所以相比有数字设计经验的同学,做验证同学的在笔试环节还是有很大劣势的,但也并不是不可弥补。

笔试题一般侧重基础,但基本都跟数字IC设计中最常用的方法和思想有关,最常考的有:

(1)信号的跨时钟域同步。包括单比特和多比特,对于单比特自然用两级寄存器同步最为方便。对于多比特,常考察异步FIFO以及握手方法。要理解亚稳态的概念以及避免亚稳态的方法。
(2)说到亚稳态,就不得不说setup time 和 hold time。一定要掌握两种时钟约束和分析时钟约束的方法。清楚四种路径(输入到输出,输入到寄存器,寄存器到寄存器,寄存器到输出),并能找到关键路径。会计算最高的工作频率。
(3)分析和修复setup time validation(降低时钟频率,组合逻辑优化或拆分,提高工作电压) 和 hold time validation(插入buffer,更难修复)
(4)能用verilog描述常用的电路结构,如:D触发器,计数器,分频(奇数倍分频,偶数倍分频,小数分频(如1.5倍)),同步FIFO,异步FIFO,序列检测器(FSM实现)
(5)用verilog描述给出的代码或者伪代码
(6)找出verilog代码中的错误,如信号未进行跨时钟域同步,无else分支会产生不期望的锁存器等等。
(7)阻塞,非阻塞赋值
(8)sv基础,包括@signal触发和wait(signal)的区别,事件触发,队列操作,task同步调度(fork …join,fork …join_any,fork …join_none的用法差异)
(9)掌握一些常用的协议,如I2C(能够根据提示用verilog实现),SRAM协,AMBA(AHB),AXI。
(10)异步复位在使用时应当注意什么?
(11)请画出异步复位同步释放的电路结构:
(12) 在验证环境中,C如何access和dut中寄存器,是如何联系的?
(13)掌握一些常用的低功耗方法,如clock gating(能画出电路结构图),了解DVFS,多阈值电压技术,多电压技术
(14)组合逻辑输出需经过寄存器过滤毛刺。。。

二、数字IC面试

面试准备:

面试之前充分准备自我介绍,针对外企可以准备一份英文自我介绍,最好能够用英文介绍自己做过的项目或课题。

然后最重要的是充分准备好你简历所写的内容,写在简历上的东西一定是你完全掌握的,如果有项目的话最好把项目各方面可能会被问到的问题想到。

另外一个容易被忽视的是,好多人对选择工作城市的理由上准备很不充分,要能够给出很合理且具有说服力的理由让面试官相信你确实想要去那座城市工作和生活,表现出自己的诚意,不然就会让面试官会觉得你只是在拿他们当备选offer。

技术面:

如果你有项目经历的话,面试官最关心的是你对自己做过的项目有没有吃透。所以面试前的准备就显得很重要,当然,这是建立在你扎实的项目经历之上的。也有面试官对你的项目经历不感兴趣,他/她可能会问你一些基础知识。

大多数技术面的时候最后面试官一般会问你还有什么问题,面试前最好有所准备,准备一些有关职业发展,工作岗位等问题。一般在技术面时不要提及薪资待遇,因为这是HR负责的部分。

技术面里遇到的问题:

  1. 先简单谈谈你现在在做的工作。
  2. 请谈谈你在学校的学习和项目。
  3. 请谈谈你对UVM验证方法学的理解。
  4. 请谈谈UVM组件的关系。
  5. 举例谈谈UVM组件中的一些常用方法。
  6. 请谈谈virtual sequencer与sequencer的区别,以及为什么要用virtual sequencer?
  7. 为什么会有sequence,sequencer,以及driver,为什么要分开实现?这样做有什么好处?
  8. 你写过assertion吗?assertion分为哪几种?简单描述下assertion的用法。
  9. 请描述一下你所验过的模块的功能。
  10. 你对fifo熟悉吗?谈谈如何判断fifo的空满状态?
  11. fifo有同步的和异步的,它们有什么区别?
  12. 对于异步fifo,如何处理空满时的同步问题?还可以采用什么方法?
  13. 请谈谈验证的思想,验证人员和设计人员思考问题的差异。
  14. 你们项目中都会考虑哪些coverage?
  15. coverage一般不会直接达到100%,当你发现有condition未cover到的时候你该怎么做?
    16.为什么要尽量避免绝对路径的使用?如何避免?
  16. 如何在driver中使用interface?为什么?
  17. 你了解UVM的callback机制吗?
    19.UVM各component之间是如何组织运行的,是串行的还是并行的?如果串行的,请问是通过什么机制实现各组件之间的运行调度的?
    20.对一个加密模块和解密模块进行验证,如果数据先进行加密紧接着进行解密,如果发现输入数据与输出数据相同,能不能说明这两个加解密模块功能解没有问题?为什么?
    21.在对一个模块仿真的时候发现:如果输入是一个地址addr,发现dut的输出是一个相同的地址addr,但是参考模型的输出是addr1.请分析可能是什么问题导致的?你会怎么去解决?

HR面:

一般在技术面通过之后,这个时候就可以细致地了解薪资福利等方方面面的问题啦,包括吃,住,行等问题都可以提问。

尽量提前考虑好要问的事情,以免入职之后造成不必要的麻烦和困扰。

最后要说的话

IC行业竞争并不算激烈,各行各业都在内卷的大环境下,做芯片的反倒是可以一门心思搞技术了。(前提是你的能力足够)
最后希望大家放平心态,当具备足够的能力之后,面试的成功只取决于你自己的心态和临场表现。

你可能感兴趣的:(IC设计面试真题)