最近在准备FPGA工程师的面试,投了几家通信和芯片设计公司。感觉知识面很广,不知道从何重点复习。想请教一下有经验的前辈,FPGA技术面试通常分为哪几个部分?除了Verilog语法,像时序约束、跨时钟域处理、FIFO、状态机这些是不是必考的?有没有一些经典的笔试题或者面试问题可以分享一下?
FPGA面试一般会问哪些技术问题?有没有高频考点?
提问
回答 18

面试FPGA岗位,技术问题确实覆盖面广。高频考点你基本都提到了:时序约束(建立保持时间、时钟偏斜、关键路径)、跨时钟域处理(单bit和多bit的同步方法)、FIFO(深度计算、空满判断、格雷码使用)和状态机(两段式三段式区别、如何避免毛刺)。
除了这些,通信公司可能会问SerDes、PCIe、DDR控制器接口协议;芯片设计公司可能更注重低功耗设计、ASIC和FPGA开发流程差异、代码可综合风格。
建议把《FPGA之道》和《Verilog HDL高级数字设计》相关章节过一遍,然后在LeetCode或牛客网上找数字IC/FPGA的笔试真题练手,很多公司题库是类似的。

我去年面了五六家,感觉必问的就几块:
首先是基础,Verilog语法比如阻塞非阻塞赋值、generate使用、参数传递,这些肯定要熟。
然后就是跨时钟域,几乎每家都问,让你画电路图说明两级同步、握手、异步FIFO怎么实现。
时序约束一定会问,让你解释setup/hold time,以及如果违反了怎么修。有的会让你现场写一段SDC约束。
FIFO深度计算是经典笔试题,比如给你读写频率和突发长度,让你算需要多大FIFO。
状态机问得也多,特别是怎么写安全,怎么编码。
另外,项目经历会问得很细,用了什么芯片、遇到什么时序问题、怎么调试的,这块要准备好。

分几部分说吧:
一是基础知识,包括数电(组合时序逻辑、流水线、竞争冒险)和Verilog。
二是设计能力,就是你说的那些考点,状态机、同步FIFO和异步FIFO、跨时钟域处理,这些都要能画出结构图并解释清楚。
三是时序分析,建立保持时间的概念、时钟约束、静态时序分析的基本流程。
四是项目经验,会深挖你简历上的项目,问具体实现细节和遇到的问题。
五是协议和接口,比如UART、SPI、I2C、AXI,有些公司会要求手画时序图。
高频题可以搜一下“FPGA面试100题”之类的资料,很多论坛都有总结。重点还是把基础打牢,然后把自己的项目吃透。

FPGA面试啊,确实东西挺杂的,不同公司侧重点不太一样。不过核心的东西翻来覆去就那些,你把基础打牢了,问题就不大。
一般面试会分几个环节。先是笔试,考些基础概念和编程题。然后技术面,会深挖你的项目,再问些技术点。有的公司还会有上机实操,让你现场写点代码或者分析时序。
Verilog语法是入场券,这个必须熟。但光会语法肯定不够,面试官会觉得你只会写代码,不懂设计。
时序约束绝对是高频考点,几乎必问。经常会让解释建立时间和保持时间,画个时序图分析一下。再就是让你说说平时怎么加约束的,比如周期约束、偏移约束,用过多周期路径吗。
跨时钟域处理也是重灾区。单bit信号怎么同步,多bit信号为什么不能用打两拍,异步FIFO怎么用,格雷码为啥能用在指针上。这些问题你都得准备,能自己画图讲清楚最好。
FIFO和状态机,算是设计里的两大支柱了。FIFO会问深度计算、空满判断逻辑、同步异步区别。状态机必问一段式、两段式、三段式的区别和优劣,通常都会让你选三段式,并说明为什么好。
除了这些,可能还会问点算法相关的东西,比如FIR滤波器怎么实现,序列检测器怎么写。通信公司可能还会问协议相关的东西,像UART、SPI、I2C,或者PCIe、DDR接口的注意事项。
笔试题的话,网上能找到一些经典题目。比如用D触发器搭个二分频电路,画一下门控时钟的电路,分析一个带反馈的逻辑会不会产生毛刺。还有就是给一段有问题的代码,让你找茬。
建议你把简历上写的项目吃透,每个细节都搞清楚。面试官很喜欢从你的项目出发,一层层往下问,直到把你问住。你要是能把自己做的东西讲得明明白白,还能说出其中的设计折中和优化考虑,印象分会很高。
别太紧张,把基础概念理顺,能用自己的话讲出来,就成功一大半了。祝你好运。

我面过几家,感觉必问的肯定是跨时钟域处理,几乎每家都问。让你画电路图,单bit用两级同步器,多bit用异步FIFO或者握手。异步FIFO会问得很细,比如指针打拍、格雷码、空满判断逻辑,甚至让你写代码。时序约束也常问,建立保持时间定义、如何计算、怎么用SDC约束。建议把这两块搞透。

分几块吧。一是基础,Verilog语法、阻塞非阻塞区别、状态机写法(一段两段三段)。二是设计,FIFO深度计算、低功耗设计、流水线设计。三是时序,恢复移除时间、亚稳态、时钟抖动。四是项目,会深挖你简历里的项目,用了什么技术,遇到什么问题。通信公司可能还会问接口,像SerDes、DDR、PCIe这些。

高频考点:1. 时序分析基础,建立保持时间画图解释。2. 跨时钟域处理方案。3. FIFO深度计算,经典的生产者消费者问题。4. 状态机设计,摩尔和米利区别。5. 代码风格,比如怎么避免锁存器。
建议找一些公司的笔试题看看,比如华为、中兴、海思的往年题,很多都是类似的套路。
另外,准备好项目经历,讲清楚你在项目中的角色、难点和解决方案,这比纯技术问题更重要。

我面过几家,感觉通信公司特别爱问跨时钟域处理,尤其是异步FIFO的设计,深度计算、空满标志产生这些细节。笔试题经常让写个串并转换或者用状态机检测序列。时序约束的话,会问建立保持时间的概念,以及怎么用工具写约束文件。建议把《Verilog HDL高级数字设计》或者《FPGA之道》里的例子多看看。

分几块吧:基础部分肯定考Verilog语法,比如阻塞非阻塞区别、可综合风格。然后就是设计类,状态机(一段式两段式三段式优缺点)、FIFO(同步异步区别、深度计算)、跨时钟域(打两拍、握手、异步FIFO)。进阶点会问时序分析,建立保持时间、恢复移除时间、怎么约束时钟和异步路径。有的公司还会问点协议,比如AXI4、UART、SPI的实现。刷题可以去看看各大公司的面经,牛客网上有一些。

高频考点:1. 时序约束的基本命令,比如create_clock, set_input_delay。2. 跨时钟域处理,单bit和多bit的处理方法必须掌握。3. FIFO,尤其是格雷码指针和空满判断。4. 状态机编码方式,优缺点。5. 低功耗设计方法(时钟门控等)。
面试可能会让你现场画状态转移图,或者分析一段代码的时序问题。平时可以自己用FPGA实现个小项目,比如VGA显示或者简单通信协议,面试说起来会很有底气。
发表回答
登录后可在本页底部提交回答
