一、数字电路基础(必问)
1. 什么是时序电路?和组合逻辑的区别?
答:
- 组合逻辑:输出只与当前输入有关
- 时序逻辑:输出与当前输入 + 历史状态(寄存器)有关 FPGA 设计中,绝大多数模块都是时序逻辑。
2. D 触发器的作用是什么?
答: 在时钟沿到来时,对输入数据进行采样并保持,用于
- 数据存储
- 时序隔离
- 构建状态机
FPGA 内部的基本存储单元就是 D 触发器。
3. 建立时间和保持时间是什么?
答:
- 建立时间(Setup):时钟沿到来前,数据需要稳定的时间
- 保持时间(Hold):时钟沿到来后,数据需要继续稳定的时间
违反会导致亚稳态。
二、Verilog 语法与编码习惯
4. 阻塞赋值和非阻塞赋值的区别?
答:
=阻塞赋值:按顺序执行,常用于组合逻辑<=非阻塞赋值:并行更新,必须用于时序逻辑
面试黄金原则:
always @(posedge clk) 中只能用
<=
5. always @(*) 有什么作用?
答: 自动包含所有右值信号,避免漏敏感信号导致锁存器推断。
6. 什么情况下会推断锁存器?
答:
- 组合逻辑中
- if / case 没有覆盖所有条件
- 输出在某些分支下未赋值
锁存器在 FPGA 设计中通常是错误的结果。
三、时序与时钟相关(高频)
7. 什么是同步设计?
答: 所有时序逻辑由同一个时钟或已约束的时钟域驱动,是 FPGA 设计的基本原则。
8. 跨时钟域如何处理?
答:
- 单 bit 控制信号:两级触发器同步
- 多 bit 数据:
- 异步 FIFO
- 握手机制
直接跨域采样是严重设计错误。
9. 时钟抖动和时钟偏斜有什么区别?
答:
- 抖动(Jitter):时间上的不确定性
- 偏斜(Skew):同一时钟到达不同寄存器的时间差
都会影响时序裕量。
四、FSM(状态机)
10. 状态机一般有哪几种写法?
答:
- 一段式
- 两段式(推荐)
- 三段式(工程最常用)
三段式:状态寄存 → 状态跳转 → 输出逻辑


