每到招聘季,很多做 FPGA 的同学都会有同一个感受:
项目能做,代码能写,一到面试却被问得很散、很细、很杂。
本质原因只有一个:
FPGA 面试问的不是'你会不会写代码',而是'你是否真的理解硬件行为'。
这篇文章整理了一批 FPGA 面试中高频出现的经典问题,覆盖 基础语法、时序设计、接口、调试、工程经验 等方向,每道题都配有工程视角的解析,适合:
- 校招 / 社招 FPGA 面试前系统复习
- 查漏补缺,验证自己'到底懂没懂'
- 面试前快速过一遍,避免低级失分
一、Verilog / HDL 基础高频题
1. 阻塞赋值(=)和非阻塞赋值(<=)的区别?
参考答案:
- 阻塞赋值(=)
- 按顺序执行
- 常用于组合逻辑
- 非阻塞赋值(<=)
- 同一时刻统一更新
- 必须用于时序逻辑
工程经验补充:
- 一个 always 块里不要混用 = 和 <=
- 时序逻辑用
<=是为了避免仿真和综合结果不一致
2. 为什么时序逻辑一定要用非阻塞赋值?
核心原因:
- 硬件中所有触发器是同时采样、同时更新
- 非阻塞赋值更贴近真实硬件行为
- 可避免'前级更新影响后级'的隐式错误
面试加分点:
'使用非阻塞赋值可以保证多级寄存器在同一个时钟沿同时更新,符合触发器建模原则。'
3. always @(*) 写组合逻辑要注意什么?
要点:
- 所有输入信号都必须出现在逻辑路径中
- 所有分支必须对输出信号赋值
否则会:
- 推导出 Latch(锁存器)
- 时序不可控,调试非常痛苦
二、时序与时钟相关问题(必考)
4. 什么是建立时间和保持时间?
- 建立时间(Setup Time)
数据在时钟沿到来之前必须稳定的最短时间 - 保持时间(Hold Time)
数据在时钟沿之后仍需保持稳定的最短时间
本质:
触发器对输入数据有'采样窗口',违反就可能采到错误值或亚稳态。
5. 什么是亚稳态?如何解决?
亚稳态产生条件:
- 异步信号
- 建立 / 保持时间被破坏
常见解决方案:
- 双触发器同步(两级寄存器)


