最近在准备FPGA工程师的秋招面试,感觉心里很没底。听说面试会问很多数字电路基础、Verilog编程和时序分析的问题。想请教一下有经验的大佬,FPGA技术面试通常有哪些必考的知识点?比如跨时钟域处理、状态机设计、FIFO深度计算这些是不是一定会问?能不能分享一些你们遇到过的经典笔试题或者面试经历?非常感谢!
FPGA面试一般会问哪些技术问题?有没有经典的Verilog笔试题和面经分享?
提问
回答 13

FPGA面试啊,确实得好好准备,知识点挺杂的。我去年秋招面了七八家,感觉套路都差不多,给你说说我的经历。
数字电路基础是必问的,跑不掉。比如会问你触发器、锁存器的区别,同步复位和异步复位的优缺点。我遇到过好几次让画D触发器电路图的,还有问setup time和hold time具体是啥,违反时序会怎样。这些基础要是答不上来,印象分直接扣光。
Verilog编程问得特别细,不是光会写代码就行。肯定会让你现场写点小模块,比如序列检测器、分频器、按键消抖。状态机是高频考点,一定会问一段式、两段式、三段式的区别,为啥推荐用三段式。有的面试官会追问if-else和case语句在综合时有什么区别,或者阻塞赋值和非阻塞赋值在always块里怎么用。
跨时钟域处理几乎是100%会碰到的题。单bit信号用两级触发器同步,多bit信号可能用握手或者异步FIFO。我遇到过让手撕异步FIFO代码的,还让分析空满信号产生逻辑。FIFO深度计算也考过,就是给你读写速度、突发长度,让你算最小深度。
时序分析这块,面试官喜欢问关键路径是啥,怎么优化。比如让你分析一个逻辑链的时序,或者问加流水线、寄存器打拍、逻辑展平这些方法。有的公司会直接给个场景,比如数据从模块A到模块B延迟太大,问你怎么解决。
笔试的话,经典题太多了。我做过一个题是写一个自动售货机的状态机,投币、选择商品、找零。还有让设计一个参数化的移位寄存器,或者用两种方法实现glitch free的时钟切换。逻辑思维题也有,比如用最少的比较器对几个数排序。
面试经历嘛,有家公司的总监面让我在白板上画了一个SPI接口的时序图,然后问如果主设备时钟不稳定,从设备该怎么处理。还有一次问得很深,从亚稳态讲到同步器的失效概率,再问到用FIFO时格雷码为啥能避免多bit亚稳态扩散。所以不能只背答案,得真理解。
建议你找点实际项目练手,哪怕是小项目。面试官很喜欢问你项目里具体遇到的问题,比如时序违例怎么调的,资源利用率高了怎么办。把基础打牢,代码多写几遍,时序概念理解透,问题就不大了。
别太紧张,秋招机会多。多面几家就有手感了,祝你好运。

秋招FPGA面试确实会重点考察数字电路基础和Verilog。必考知识点里,跨时钟域处理(CDC)几乎是100%会问,你要能说清楚单bit和多bit数据分别怎么处理,比如打两拍和异步FIFO。状态机设计也是高频考点,会问一段式、两段式、三段式的区别,以及为什么推荐三段式。FIFO深度计算经常出笔试题,给你读写速率和突发长度让你算。建议把《Verilog HDL高级数字设计》和《CMOS VLSI设计》相关章节再过一遍。

我面过几家,感觉除了上面那些,还会问一些实际场景题。比如:用Verilog实现一个任意整数分频器,要求占空比50%;或者给一个时序图,让你分析建立保持时间是否满足。有的公司还会让你现场写一小段代码,比如序列检测器或者SPI主机的状态机。多刷刷牛客网上的面经,很有帮助。

别慌,基础打牢就行。面试官喜欢问基础概念,比如阻塞赋值和非阻塞赋值的区别,一定要能脱口而出并举例说明。时序约束也会问,像周期约束、偏移约束怎么设置。有的会深入问亚稳态的产生机理和减少方法。建议自己用FPGA实现几个小项目,比如VGA显示或者UART通信,面试时能讲清楚设计思路和遇到的时序问题会很加分。

经典笔试题分享一个:设计一个脉冲检测电路,检测输入信号上升沿,输出一个周期的高电平脉冲。看似简单,但能考察是否理解边沿检测和寄存器输出。还有异步FIFO的代码,可能会让你画出结构图或者解释空满标志的产生逻辑。实际面试中,我遇到过让手撕一个参数化的移位寄存器,并说明为什么用generate for。

面经来了。我之前面试被问过:如果系统中有多个时钟域,你一般怎么进行时钟规划?这问题就挺综合的,可以谈到全局时钟、分区、CDC策略。还有问过:用D触发器实现一个二分频电路,并画出波形。后面追问如果时钟有抖动,对分频输出有什么影响。所以对D触发器和时钟特性的理解要深。

除了技术细节,有些公司会问项目经历,抠得很细。比如你项目里用了FIFO,他会问你为什么选这个深度,异步还是同步,资源用了多少。所以对自己的项目每个细节都要复盘。笔试的话,常考组合逻辑如译码器、数据选择器的Verilog描述,以及时序逻辑如计数器的描述。记得多练习用状态机描述交通灯这种经典题目。

我总结的高频考点:1. 建立时间和保持时间定义及违例解决方法;2. 同步复位和异步复位的优缺点及代码写法;3. 关键路径概念和优化方法(流水线、重定时);4. 有限状态机编码方式(二进制、格雷码、独热码)及其选择依据。把这些知识点自己整理成话术,面试时清晰表达出来,基本问题不大。

分享一个我遇到的经典时序分析笔试题:一个寄存器到寄存器路径,已知Tclk=10ns,Tco=2ns,Tlogic=5ns,Tsu=1ns,问该路径是否满足时序?如果Tlogic变为8ns,可以通过什么方法解决?这题就考察了最基本的时序计算和优化思路(如插入寄存器流水线)。这类题目一定要会。

感觉现在面试不仅问RTL设计,还会问一点验证和工具流程。比如:你平时怎么验证你的代码?有没有用UVM?综合和实现步骤了解吗?所以最好对仿真、综合、布局布线的大致流程和常见问题(如时序不收敛)有个了解。即使没深入用过,也要知道基本概念。
发表回答
登录后可在本页底部提交回答
