下周要去一家做通信设备的公司面试FPGA开发岗位,心里很没底。听说FPGA面试会问很多底层和时序的问题。想请教一下有经验的前辈,FPGA技术面试通常涵盖哪些方面?比如一定会考的Verilog编程题、状态机设计、跨时钟域处理、时序约束这些吗?能不能分享一些经典的笔试题或者面试真题?非常感谢!
FPGA面试一般会问哪些技术问题?有没有常考的Verilog笔试题?
提问
回答 21

兄弟别慌,通信公司的FPGA面试确实比较硬核。Verilog基础语法、组合/时序逻辑区别这些肯定跑不掉。常考的手撕代码有:序列检测器(比如检测1011)、异步FIFO(会问深度、指针判断)、时钟分频(奇数偶数占空比)。状态机是重中之重,一定会让你画状态转移图或者写两段式三段式代码。跨时钟域处理(CDC)必问,单bit多bit同步、握手、异步FIFO原理要门儿清。时序约束会问建立保持时间、关键路径、时钟约束怎么写。建议把《Verilog HDL高级数字设计》和《FPGA之道》相关章节再过一遍。

刚面完两家,热乎的经验。除了楼上说的,通信公司很可能问数字信号处理相关,比如FIR滤波器怎么用FPGA实现,CIC滤波器结构,调制解调的基本概念。还会问你项目里用过哪些IP核,比如DDR控制器、Serdes、PCIe,最好能说清楚你配置了哪些参数,遇到过什么问题。手写代码题我遇到的是:用Verilog实现一个参数化的位宽可变的加法器,要考虑到流水线优化。

基础题:阻塞赋值和非阻塞赋值的区别?什么时候用=,什么时候用<=?这道题几乎百分百出现。

我当年面试被问了一个很经典的题:如何用Verilog生成一个占空比50%的奇数分频时钟?写完之后面试官追问,如果不用时钟下降沿触发,只用上升沿,怎么实现?这个题很考基本功和思维灵活性。

通信设备公司,肯定要懂同步时序设计。建立时间、保持时间的概念和计算题是高频考点。可能会给你一个简单的寄存器到寄存器的路径图,让你判断是否满足时序,或者计算最大时钟频率。时序约束的基础命令也要会,比如create_clock, set_input_delay, set_output_delay是干嘛的。

别光看代码,硬件思维很重要。面试官可能会问:如果设计一个高速数据采集系统,从ADC到FPGA,你会考虑哪些问题?这时候就要从时钟方案(同步还是异步)、数据接口(并行LVDS还是串行)、缓存策略(FIFO大小)、时序约束、可能的数据丢包处理这些方面去回答。

分享一个我被问到的真题:请设计一个脉冲展宽电路,输入是一个周期很长的单时钟周期脉冲,输出需要把这个脉冲展宽到N个时钟周期。这个题看似简单,但能看出你写代码的严谨性,比如复位后的状态、边界条件处理。

跨时钟域处理是必问的。准备好回答:单比特信号如何同步?(两级触发器)多比特数据流如何同步?(握手或异步FIFO)异步FIFO的空满判断是怎么做的?(格雷码)为什么用格雷码?异步FIFO的深度有什么讲究?这些问题都是连环炮。

状态机设计是核心能力。面试官可能会让你现场设计一个自动售货机的简单状态机,或者UART发送模块的状态机。一定要用标准的两段式或三段式写,并且能说明为什么状态寄存器要用时序逻辑,输出用组合逻辑(或有时序)。避免出现latch也是常考点。

除了技术,可能会问一些项目经验。你简历上写的项目,每一个细节都要吃透。比如你用了某个算法,他可能会问这个算法为什么适合用FPGA实现?相比软件实现有什么优势?资源用了多少?最高时钟频率跑到多少?怎么优化的?
发表回答
登录后可在本页底部提交回答
