数字IC面试总结,看看你掌握几个?

不少人在IC面试过程中,不知道如何去准备。其实在面试的过程中,公司也会有一些考核手段,比如专业知识的考察,项目经验的查问。所以在面试前,一定要做好相关的准备。

岗位的选择

找工作的时候首先一定要确定找工作的方向,以及心仪的岗位。IC的岗位一般有设计、验证、后端、封装、测试、FPGA等等。但是具体到每个人身上,就要在开始的时候确定下你要找的职位,可以有两个或三个,但是要分出主次,主次不分会让你纠结整个找工作的过程。

同时,主次不分说明了你不知道自己真正想做的是什么。主次分清,然后就根据主次去准备。比如我就做设计,那我几乎所有的时间都放在了设计上,验证方面的知识我基本上一点没看,后端稍微自学了一些和设计相关的基础知识。

现在回头看找工作的这个阶段,我觉得还是后端和验证比较好找。

首先从一个公司的正常配比人数来说,验证肯定要比设计的人多,而后端是一个比较注重经验的岗位。对于在公司实习的学生来说,做的基本上就是验证和后端,能够让实习生做设计的很少。

但是对于在实验室的同学来说,大部分都是找设计岗。所以在外实习的人应该把握自己的优势,在找工作的时候进一步把优势扩大,就是你的项目。

很多时候在你决定找哪个方向的工作时就决定了找工作的难易程度。

数字IC面试总结,看看你掌握几个?_第1张图片

知识点整理

一般而言,专业面试里遇到的问题有两类,一种是专业基础知识,就是这个领域的人多多少少都应该知道的内容,比如ASIC设计的全流程是怎样的;低功耗方法;跨时钟域信号处理;时序分析等等。另一种则是专用领域知识,这部分内容来自于公司部门的业务方向,或者学生的项目/实习/竞赛经历,比如有的人对AMBA总线很熟;有的人做数字信号处理很强;有的人对计算机体系结构很了解等等。

在这一块我尽可能多地列出笔试面试中可能遇到的数字IC方面的专业基础知识点,但没有给出具体的解答,因为这些知识点可以在网上很容易就搜到。

跨时钟域信号处理类
1)亚稳态的定义是什么;
2)MTBF(平均失效间隔时间)的概念;
3)同步电路与异步电路的比较;
4)两级DFF同步器的原理和代码,以及输入窄脉冲情况下的变化;
5)握手协议进行同步的原理和代码,并与方法4)在资源、速度、适用情况等方面进行比较;
6)异步FIFO的原理和代码,包括为什么需要同步读写指针,为什么要用格雷码,满空状态如何判断,为什么会有假满假空现象以及会对系统产生什么影响,FIFO深度如何选择等等;
7)异步复位同步释放的原理和代码,以及比较异步复位和同步复位的优缺点;

综合与时序分析类
这个分类不是特别严谨,我的理由是用DC做综合或者用PT做时序分析都是在服务器的环境下,所以就放在一起了。一个数字IC设计工程师应该要能够借助这两个工具评估自己的设计。
1)ASIC设计流程,从spec到GDSII的全过程,以及每一步的意义和工具;
2)综合的概念,以及主要操作步骤;
3)综合的常用脚本,包括创建原时钟、分频时钟,设置时钟参数等等;
4)Setup time和Hold time的概念;
5)静态时序分析(STA)的概念和优缺点;
6)用PT做STA所需要的数据和脚本,以及弄懂PT时序分析报告上的信息;
7)时钟抖动(jitter)和时钟偏移(skew)的概念,以及他们对时序分析的影响(更严格还是更宽松了?);
8)对一个“输入-DFF-组合逻辑-DFF-输出”的一个典型系统进行时序分析,计算该系统的最大运行频率(最小周期);
9)如何修复Setup违例和Hold违例;

低功耗方法
1)集成电路中功耗的来源;
2)动态功耗与哪些参数有关,开关功耗的公式,以及静态功耗与哪些参数有关;
3)SoC系统中常用的低功耗技术,从体系结构级到器件工艺级都要能列出一种,比如划分不同电压域、时钟域,使用不同阈值的器件等等;
4)RTL级的低功耗设计方法,重点是门控时钟,包括基于与门和基于锁存器的门控时钟结构的代码和优缺点比较;

计算机组成与设计类
这部分的内容稍微有点偏向专用领域,但是平头哥和比特大陆等公司的笔试题里出现了不少相关内容。
1)计算机中使用补码的意义;
2)超前进位加法器的原理和代码;
3)小数定点化的概念,包括对于一个确定的十进制小数,需要多少bit才能无损定点化;
4)基于IEEE-754标准的浮点数的表示;
5)计算机中的乘法和除法如何计算的(只需知道最简单的方法);
6)流水线设计的作用和优缺点;
7)处理器中结构冒险、数据冒险、控制冒险的概念和解决机制;
8)cache的映射方法和写回策略有哪些;

常见编程题
今年在笔试环节让手撕代码的公司不少,状态机的设计方法一定要熟练。
1)奇数分频电路的代码,包括两种情况:使用带负沿触发的DFF(要求占空比50%),不使用带负沿触发的DFF;
2)按键去抖动电路的代码;
3)无毛刺时钟切换电路的代码;
4)用状态机实现的序列检测电路,比如“1011”检测;

面试环节:

由于大多公司并未基于验证出笔试题,所以对IC验证工程师而言,在面试阶段会更多涉及一些SV与UVM相关的思想与应用。

总结起来,最常考的有:

RTL设计思想及代码考察:
IC 开发flow 及个阶段使用的工具。
信号的跨时钟域同步。包括单比特和多比特,对于单比特自然用两级寄存器同步最为方便。对于多比特,常考察异步FIFO以及握手方法。要理解亚稳态的概念以及避免亚稳态的方法。

说到亚稳态,就不得不说setup time 和 hold time。一定要掌握两种时钟约束和分析时钟约束的方法。清楚四种路径(输入到输出,输入到寄存器,寄存器到寄存器,寄存器到输出),并能找到关键路径。会计算最高的工作频率。

分析和修复setup time validation(降低时钟频率,组合逻辑优化或拆分,提高工作电压)和 hold time validation(插入buffer,更难修复)。

用verilog描述常用的电路结构,如:D触发器,同步/异步复位,计数器,分频(奇数倍分频,偶数倍分频,小数分频(如1.5倍)),同步FIFO,异步FIFO, 序列检测器(FSM实现)。
用verilog描述给出的代码或者伪代码(可能会给一段C代码,然后据此写出对于的verilog代码)。

找出verilog代码中的错误,如信号未进行跨时钟域同步,无else分支会产生不期望的锁存器等等。

阻塞,非阻塞赋值。
ROM、SRAM、DRAM、flash等各类存储器的区别与应用。掌握一些常用的协议,如I2C(能够根据提示用verilog实现),SRAM协议、AMBA(AHB、AXI、APB、OCP)等。

以上就是IC修真院分享的关于数字IC面试的一些知识,IC行业近年来岗位需求量大,薪资待遇高。但同样入行也是有一定的门槛,所以想要入行的朋友,一定要提前学习相关的技能。

你可能感兴趣的:(IC设计面试真题,面试,fpga开发,职场和发展)