FPGA笔试面试常考问题及答案汇总
经历了无数的笔试面试之后,不知道大家有没有发现FPGA的笔试面试还是有很多共通之处和规律可循的。所以一定要掌握笔试面试常考的问题。
FPGA设计方向(部分题目)
1. 什么是同步逻辑和异步逻辑?
同步逻辑 是指在同一个时钟信号的控制下进行工作的电路。电路中所有触发器的状态变化都与时钟信号同步。它具有稳定、可预测的优点,是FPGA设计的主流方法。
异步逻辑 是指电路中的各个部分没有统一的时钟信号,电路状态的改变由输入信号的变化直接引起。异步设计在某些特定场景下有优势,但由于时序难以控制,容易产生亚稳态,因此在FPGA设计中应尽量避免。
2. 同步电路和异步电路的区别:
同步电路:所有存储元件(如触发器)的时钟输入端都连接同一个时钟源。
异步电路:没有统一的时钟源,部分或全部存储元件的状态变化与时钟信号无关。
3. 时序设计的实质:
时序设计的实质就是满足每一个触发器的建立/保持时间的要求。
4. 建立时间与保持时间的概念?
建立时间:在时钟有效沿到来之前,数据必须保持稳定的最小时间。
保持时间:在时钟有效沿到来之后,数据必须保持稳定的最小时间。
5. 为什么触发器要满足建立时间和保持时间?
因为触发器内部对输入信号进行采样和锁存需要一定的时间。如果不满足建立/保持时间,触发器可能会进入亚稳态。亚稳态是指触发器的输出进入一种不稳定的中间状态,无法在规定的时间内确定是高电平还是低电平,这可能导致后续电路产生错误。
6. 什么是亚稳态?为什么两级触发器可以防止亚稳态传播?
亚稳态 是指触发器在不满足建立/保持时间时,其输出进入的一种不确定的状态。
两级触发器(也叫“一位同步器”)是解决亚稳态的常用方法。其原理是:如果第一级触发器由于输入信号不满足时序要求而进入亚稳态,在下一个时钟周期到来之前,它通常有足够的时间从亚稳态恢复到稳定的逻辑电平。只要恢复后的稳定信号满足第二级触发器的建立时间,第二级触发器就不会进入亚稳态,从而有效地防止亚稳态的传播。
7. 什么是时钟抖动(Clock Jitter)?
时钟抖动 是指时钟信号的有效沿相对于其理想位置的随机偏移。它会导致时钟周期在不同时刻发生轻微的变化,从而影响设计的时序裕量。在高速设计中,时钟抖动是一个需要重点考虑的因素。
8. 锁存器(Latch)和触发器(Flip-flop)区别?
锁存器 是电平敏感的存储元件。当使能信号处于有效电平时,其输出会随着输入信号的变化而变化。
触发器 是边沿敏感的存储元件。其输出只在时钟信号的上升沿或下降沿才会发生变化。
在FPGA设计中,除非有特殊需要,通常应避免使用锁存器,因为它难以进行时序分析,且在不同的FPGA架构上表现可能不一致。
9. FPGA 芯片内有哪两种存储器资源?
FPGA芯片内通常有两种主要存储器资源:
Block RAM (BRAM): 是一种专用的、容量较大的存储块,可配置为单端口、双端口、FIFO等模式。使用BRAM可以节省查找表(LUT)资源,并提供更高的存储速度。
分布式RAM: 利用FPGA内部的查找表(LUT)资源来构建小型存储器。这种方式灵活但会消耗逻辑资源。
10. 什么是片上调试(On-chip Debugging)?常用的工具是什么?
片上调试 是指在FPGA运行时,通过专用硬件模块(如JTAG)来实时监控内部信号波形和状态,以帮助设计者发现和解决问题。
常用的工具包括Xilinx的Vivado ILA (Integrated Logic Analyzer) 和Intel的SignalTap II。这些工具可以在不影响设计功能的情况下,像示波器一样捕获和分析内部信号。
RTL代码方向(部分题目)
1. 请解释一下
always_ff
和always_comb
的用法及优势。
always_ff
:用于描述同步时序逻辑。它强制在敏感列表中只包含时钟和异步复位信号,避免了编写组合逻辑时误用阻塞赋值(=
)的问题,提高了代码的可读性和健壮性。
always_comb
:用于描述组合逻辑。它能够自动推断所有输入信号,并对编写组合逻辑时可能出现的锁存器警告进行检查。使用这两个新关键字是SystemVerilog的最佳实践,它们比传统的
always @(*)
更具可读性和安全性。2. 阻塞赋值(
=
)与非阻塞赋值(<=
)的区别?在什么场景下使用?阻塞赋值(
=
):赋值操作在当前语句执行后立即完成。常用于组合逻辑。非阻塞赋值(
<=
):赋值操作在当前时钟周期结束时才完成。常用于时序逻辑,以避免竞争冒险。3.
parameter
和localparam
的区别?
parameter
:可以在模块实例化时被修改,常用于定义模块的参数,如数据位宽、深度等。
localparam
:只能在当前模块内部使用,不能被外部修改。常用于定义模块内部的常量。综合与约束(部分题目)
1. 请列举几个你知道的SDC(Synopsys Design Constraints)命令,并说出它的用途。
SDC是FPGA设计中用来进行时序约束的标准文件。常见的命令包括:
create_clock
:定义时钟信号及其频率。
set_input_delay
:设置输入端口的时序约束,告诉工具输入信号在时钟到来前多长时间到达。
set_output_delay
:设置输出端口的时序约束,告诉工具输出信号在时钟到来后多长时间有效。
set_false_path
:告诉工具忽略某些路径的时序分析,常用于异步或不相交的时钟域之间的路径。
set_max_delay
:对特定路径设置最大延迟。2. 什么是时序收敛(Timing Closure)?如何解决?
时序收敛 是指在设计中,所有时序路径都满足建立时间和保持时间的要求。如果存在不满足的路径,则称为时序违例(Timing Violation)。
解决时序违例的方法包括:
修改约束:检查SDC文件是否正确,例如时钟频率设置过高或路径约束不合理。
优化RTL代码:例如,使用流水线技术、减少组合逻辑的级数、增加寄存器等。
优化综合和布局布线选项:调整工具的策略,如提高优化级别、尝试不同的布线算法等。
FPGA笔试面试经验总结
无论是数字IC还是FPGA,很多基础理论是相通的。掌握这些核心知识点,并结合FPGA的独特应用场景进行深入学习,你就能在面试中脱颖而出。