一、FPGA 基础概念
1. 什么是 FPGA?与 CPLD、ASIC 的核心区别是什么?
答: FPGA(现场可编程门阵列)是一种基于可编程逻辑单元(CLB)、可编程互连资源(PI)、I/O 接口和嵌入式资源(如 DSP、RAM、PLL)的半导体器件,可通过硬件描述语言(HDL)编程实现任意数字逻辑功能。
核心区别:
- FPGA:基于 SRAM 工艺,可编程性强、灵活性高,可反复擦写。适合快速原型验证、小批量量产,功耗中等,成本随规模上升。
- CPLD:基于 EEPROM/Flash 工艺,集成度低、逻辑资源少,不可反复擦写或次数有限。功耗低、延迟小,适合简单逻辑控制。
- ASIC:专用集成电路,定制化设计,集成度高、功耗低、性能最优,但不可编程。研发周期长、成本高,适合大批量量产。
2. FPGA 的基本架构包括哪些部分?各部分的作用是什么?
答: 核心架构通常包含四部分,不同厂商(Xilinx、Intel)命名略有差异,但功能一致:
- 可编程逻辑块(CLB):FPGA 的核心,由查找表(LUT)、触发器(FF)、多路选择器组成,用于实现各种组合逻辑和时序逻辑。
- 可编程互连资源(PI):包括布线资源、开关矩阵,负责连接各个 CLB、I/O 模块和嵌入式资源,实现信号传输。
- I/O 接口模块(IOB):位于芯片边缘,负责 FPGA 与外部器件(如 CPU、DDR、ADC/DAC)的信号交互,支持多种电平标准(如 LVCMOS、LVDS、SSTL)。
- 嵌入式资源:集成在内部的辅助资源,包括 PLL(时钟倍频/分频)、DSP 切片(高速数字信号处理)、Block RAM(大容量数据存储)。
3. FPGA 的配置方式有哪些?各适合什么场景?
答: 主要分为「主动配置」和「被动配置」两类:
- 主动配置(FPGA 主动读取配置文件):
- 配置芯片:如 Xilinx SPI Flash、Intel EPC 系列。上电后自动读取 bitstream,适合量产产品,掉电不丢失。
- 并行配置:速度快,适合对配置时间要求高的场景,但布线复杂、成本略高。
- 被动配置(外部控制器写入):
- JTAG 配置:通过 JTAG 接口调试开发,方便快速下载 bitstream。
- 串口/USB 配置:由 CPU 或电脑写入,适合调试或远程配置。
- Slave Serial 配置:由 MCU 控制,适合小型系统、低功耗场景。
4. 什么是 LUT?工作原理及常见类型?
答: LUT(查找表)是实现组合逻辑的核心单元,本质是基于 SRAM 的'真值表缓存器'。输入变量所有可能的组合预先存储在 SRAM 中,信号到来时根据输入值'查找'输出结果。
常见类型:
- 4 输入 LUT:可实现任意 4 变量的组合逻辑(2^4=16 种组合)。
- 5 输入 LUT:可实现任意 5 变量的组合逻辑,部分高端 FPGA 采用。
- 6 输入 LUT:Xilinx 7 系列及以上主流配置,灵活性更高,还可拆分为两个 4 输入 LUT 使用。
5. FPGA 中的触发器(FF)有哪些类型?
答: 触发器主要用于实现时序逻辑(存储信号、同步信号):
- D 触发器:最常用,时钟沿时将 D 端数据存入,输出 Q=D,用于同步数据存储、移位寄存器等。
- T 触发器:T=1 时翻转,T=0 时保持,常用于分频电路(如二分频)。
- JK 触发器:功能灵活,但 FPGA 中一般通过 D 触发器组合实现。
- 寄存器:由多个 D 触发器组成,用于批量存储数据。注意区分同步寄存器(推荐)和异步寄存器(易产生时序问题,慎用)。
6. 什么是分布式 RAM 和 Block RAM?核心区别?
答: 两者都是内部存储资源,区别在于实现方式和场景:
- 分布式 RAM:由 LUT 拼接实现,容量小(通常 16bit/32bit),速度快,功耗略高。适合小容量、高速度的存储需求(如小尺寸 FIFO)。
- Block RAM:专用存储模块,容量大(单块 18Kbit/36Kbit),功耗低,接口灵活(支持单/双端口)。适合大容量存储(如大容量 FIFO、缓冲区)。
经验提示:面试常问选型原则——小容量(<1Kbit)用分布式,大容量(≥1Kbit)用 Block RAM,兼顾功耗和资源利用率。
7. FPGA 中的 PLL 作用是什么?
答: PLL(锁相环)是时钟管理模块,核心作用是「对输入时钟进行分频、倍频、相位调整」,生成稳定时钟信号。
主要功能:
- 时钟倍频/分频:满足不同模块的频率需求。
- 相位调整:解决跨时钟域时序问题,匹配外部器件相位。
- 时钟同步:减少抖动和偏移,保证系统稳定。
- 多路输出:一个 PLL 可输出多个不同频率、相位的时钟供不同模块使用。
8. FPGA 的时序约束是什么?为什么要做?
答: 时序约束是向工具(Vivado、Quartus)提供的规则,指导布局布线,确保设计满足时序要求。
核心原因:
- 避免违规:防止因延迟导致建立时间(Setup)或保持时间(Hold)违规,造成系统不稳定。
- 优化性能:指导工具优先保证关键路径,在满足时序前提下优化资源和功耗。
- 验证可行性:提前判断设计是否能在目标频率下运行,避免后期调试问题。
9. 什么是建立时间(Setup Time)和保持时间(Hold Time)?
答: 针对触发器的核心参数,确保稳定采样:
- 建立时间(Tsu):时钟沿到来前,数据必须保持稳定的最小时间。变化会导致采样错误。
- 保持时间(Th):时钟沿到来后,数据必须保持稳定的最小时间。变化同样导致采样错误。
公式参考:时钟周期 T ≥ Tsu + Tco + Tdelay(Tco 为触发器输出延迟,Tdelay 为布线延迟)。这是判断建立时间是否满足的关键,面试常考计算。
10. FPGA 的时钟域是什么?跨时钟域处理方法?
答: 时钟域指由同一时钟驱动的逻辑集合;不同频率/相位驱动则属不同时钟域,信号传输称为'跨时钟域'。
核心问题:避免亚稳态(Metastability),即异步信号直接输入触发器导致不确定状态。
常用方法(按优先级):
- 两级触发器同步:最常用,将异步信号串联两个触发器,大幅降低亚稳态概率(适合单 bit 信号)。
- 异步 FIFO:利用读写时钟分离特性,配合格雷码计数器避免指针亚稳态(适合多 bit 信号)。
- 握手信号同步:通过'请求 - 应答'机制确保同步,适合突发传输。
- 格雷码转换:地址信号跨时钟域时,先将二进制转格雷码再同步,减少多位同时变化风险。
