8数字设计:原理与实践(第5版)

存储器和可编程逻辑

FPGA 和 CPLD

ROMRAMFPGACPLD

🎯 AI 时代的学习建议:不要只读理论。理解这一章的设计动机(为什么需要这个概念?)和边界条件(什么情况下会失效?)。当 AI 生成的代码涉及这些概念时,你能判断它是否用对了场景。AI 能帮你总结内容,但无法替代你亲手阅读、思考、建立直觉的过程。

第8章 存储器和可编程逻辑(FPGA 和 CPLD)

一、导读

1.1 本章学习目标

理解半导体存储器的基本分类:易失性与非易失性、随机存取与顺序存取

掌握ROM、PROM、EPROM、EEPROM和Flash存储器的工作原理和特点

深入理解SRAM和DRAM的单元结构、读写操作和刷新机制

掌握FPGA的基本架构:可配置逻辑块(CLB)、可编程互连和I/O块

理解CPLD的结构特点及其与FPGA的区别和适用场景

了解可编程逻辑器件的设计流程和EDA工具链

能够根据应用需求选择合适的存储器类型和可编程逻辑器件

认识现代FPGA的片上资源和高级功能(DSP块、BRAM、硬核等)

1.2 为什么本章如此重要

存储器和可编程逻辑器件是现代数字系统的两大支柱。存储器为系统提供数据和程序的存储能力,从微小的传感器节点到庞大的数据中心服务器,任何数字系统都离不开存储器。可编程逻辑器件(特别是FPGA)则提供了硬件级别的灵活性和并行处理能力,在通信、图像处理、人工智能加速和高性能计算等领域发挥着越来越重要的作用。

理解存储器的工作原理对于数字系统设计至关重要。不同类型的存储器在速度、容量、功耗、成本和持久性等方面各有特点。SRAM速度快但容量有限且易失,DRAM容量大但需要刷新且速度较慢,Flash非易失但写入速度有限。选择合适的存储器类型和配置方案,直接影响系统的性能指标。

FPGA的出现彻底改变了数字系统的设计方式。传统的ASIC(专用集成电路)设计周期长、成本高,一旦流片完成就无法修改。FPGA允许工程师在实验室甚至现场对硬件进行重新编程,将设计迭代周期从数月缩短到数小时。这种灵活性使得FPGA在原型验证、小批量生产和需要现场升级的应用中具有不可替代的优势。

随着技术的进步,现代FPGA已经不仅仅是"可编程的门阵列"。它们集成了大量的片上存储器(BRAM)、数字信号处理块(DSP)、高速收发器、甚至硬核处理器(如ARM Cortex-A系列)。FPGA已经从单纯的逻辑实现平台演变为完整的片上系统(SoC)解决方案。理解这些器件的架构和能力,是进行高效FPGA设计的前提。

1.3 核心问题引导

SRAM和DRAM的存储单元结构有什么不同?为什么DRAM需要定期刷新而SRAM不需要?

Flash存储器为什么在写入之前必须先擦除?这种特性对系统设计有什么影响?

FPGA中的查找表(LUT)是如何实现任意逻辑函数的?一个4输入LUT可以实现多少种不同的逻辑函数?

FPGA的可编程互连资源对电路性能有什么影响?为什么FPGA的实现速度通常低于同等工艺的ASIC?

CPLD和FPGA各有什么优势?在什么场景下应该选择CPLD而不是FPGA?

FPGA的配置数据存储在什么地方?上电配置过程是怎样的?

现代FPGA中的嵌入式块RAM(BRAM)和硬核DSP对设计效率有什么提升?


二、核心概念详解

2.1 ROM及其变体

只读存储器(Read-Only Memory,ROM)是一类在正常工作时只能读取不能写入的存储器。ROM用于存储不需要频繁修改的信息,如固件程序、引导代码、查找表和配置数据等。

掩模ROM(Mask ROM)在芯片制造过程中通过掩模板写入数据,一旦制造完成数据就不可更改。掩模ROM的优点是单位成本最低(适合大批量生产),缺点是设计和制造周期长,任何数据修改都需要重新制作掩模板。

可编程ROM(Programmable ROM,PROM)允许用户在制造后进行一次编程。PROM内部有可编程的熔丝(Fuse)或反熔丝(Antifuse)结构,编程时通过大电流烧断熔丝或击穿反熔丝来永久改变存储单元的状态。PROM适合小批量生产和原型开发。

可擦除可编程ROM(Erasable PROM,EPROM)可以通过紫外线照射擦除全部数据,然后重新编程。EPROM芯片顶部有一个石英窗口,用于紫外线照射。擦除过程需要约20分钟。电可擦除可编程ROM(Electrically Erasable PROM,EEPROM)可以通过电信号擦除和重新编程,不需要紫外线。EEPROM支持按字节擦写,但写入速度较慢,擦写次数有限(通常为10万至100万次)。

Flash存储器是EEPROM的改进版本,按块(Block)擦除而不是按字节擦除,因此擦写速度更快、集成度更高。Flash存储器分为NOR Flash和NAND Flash两种架构。NOR Flash支持随机读取,常用于存储执行代码;NAND Flash具有更高的存储密度和更快的写入速度,常用于大容量数据存储(如SSD和U盘)。

2.2 RAM存储器

随机存取存储器(Random Access Memory,RAM)允许对任意存储位置进行读写操作,是计算机系统的主要工作内存。RAM分为静态RAM(SRAM)和动态RAM(DRAM)两大类。

SRAM的每个存储单元由六个晶体管组成(6T SRAM Cell),形成两个交叉耦合的反相器(存储节点)和两个访问晶体管(字线控制)。只要保持供电,SRAM就能无限期地保持数据,不需要刷新。SRAM的读写速度快(访问时间为几纳秒),但每个单元需要六个晶体管,集成度较低,单位容量成本较高。

DRAM的每个存储单元由一个晶体管和一个电容组成(1T1C DRAM Cell)。电容存储电荷代表数据(充电为1,放电为0),晶体管作为开关控制读写。由于电容存在漏电,存储的电荷会随时间衰减,因此DRAM需要定期刷新(通常每64ms刷新一次全部行)。DRAM的优势在于单元结构简单,集成度远高于SRAM,单位容量成本低。

DRAM的读写操作比SRAM复杂。读取时,字线激活使存储电容与位线连接,微小的电压变化通过灵敏放大器(Sense Amplifier)检测并放大。写入时,将目标电压驱动到位线上,同时激活字线。现代DRAM使用行列复用寻址方式,先发送行地址(RAS),再发送列地址(CAS),以减少引脚数量。

2.3 FPGA架构

现场可编程门阵列(Field-Programmable Gate Array,FPGA)由三个核心部分组成:可配置逻辑块(Configurable Logic Block,CLB)、可编程互连资源(Programmable Interconnect)和输入/输出块(I/O Block)。

CLB是FPGA的基本逻辑单元,通常包含几个查找表(Look-Up Table,LUT)、触发器和多路选择器。LUT是FPGA实现组合逻辑的核心元件——一个n输入LUT本质上是一个2^n位的小RAM,存储了n输入逻辑函数的真值表。通过配置LUT的内容,可以实现任意n输入的组合逻辑函数。例如,一个4输入LUT有16位存储内容,可以实现任意4输入布尔函数。多个LUT可以通过内部多路选择器组合实现更复杂的逻辑功能。

可编程互连资源包括各种长度的连线段和可编程开关(通常是SRAM控制的传输门)。互连资源将各个CLB和I/O块按照设计要求连接起来。互连资源的布线灵活性直接影响FPGA可实现的逻辑功能和性能。现代FPGA采用层次化互连结构,包括局部互连(相邻CLB之间)、行/列全局互连和长线资源。

I/O块提供芯片引脚与内部逻辑之间的接口,支持多种电平标准和信号协议。每个I/O块通常可以独立配置为输入、输出或双向模式,支持不同的电压标准和终端电阻设置。

2.4 CPLD架构

复杂可编程逻辑器件(Complex Programmable Logic Device,CPLD)基于与FPGA不同的架构。CPLD由多个宏单元(Macrocell)块通过可编程互连矩阵连接而成。每个宏单元包含一个与-或逻辑阵列(乘积项结构)和一个可配置的触发器。

CPLD的乘积项结构天然适合实现组合逻辑。与阵列生成输入变量的各种乘积项,或阵列将所需的乘积项求和。一个典型的宏单元有几十个乘积项,可以实现相当复杂的逻辑函数。

CPLD相对于FPGA的主要优势在于:确定的时序特性(信号路径延迟可预测,因为互连结构固定);快速的上电即工作能力(配置数据存储在片上非易失性存储器中,不需要外部配置芯片);较低的待机功耗。这些特性使CPLD特别适合实现地址译码、片选逻辑、简单状态机和I/O扩展等应用。

CPLD的劣势在于逻辑规模有限(通常只有几千到几万门)和灵活性较低(不适合实现复杂的时序逻辑和数据通路)。对于大规模设计,FPGA是更好的选择。

2.5 可编程逻辑器件的设计流程

使用FPGA或CPLD实现数字设计的标准流程包括以下步骤:设计输入(使用HDL如Verilog/VHDL或原理图输入)、功能仿真(验证逻辑功能的正确性)、综合(将HDL代码转换为门级网表)、布局布线(将逻辑映射到具体的物理资源上并确定互连)、时序分析(验证所有时序约束是否满足)、生成配置文件(下载到位片的二进制数据)和硬件下载验证。

综合工具需要针对目标器件的架构进行优化。对于FPGA,综合工具将逻辑映射为LUT和触发器;对于CPLD,综合工具将逻辑映射为乘积项和宏单元。布局布线工具则需要考虑互连资源的可用性和信号延迟的精确计算。

现代FPGA设计流程还包括高级综合(High-Level Synthesis,HLS),允许使用C/C++等高级语言描述算法,自动转换为HDL代码。这大大降低了算法工程师使用FPGA的门槛。


三、深入分析与讨论

3.1 FPGA与ASIC的权衡分析

FPGA和ASIC是数字硬件实现的两种主要方式,各有其适用场景。FPGA的优势在于:无NRE(Non-Recurring Engineering)成本,设计修改只需重新编程;开发周期短(数天到数周);适合小批量生产和原型验证。ASIC的优势在于:大批量时单位成本极低;性能更高(定制优化后可达到更高的时钟频率);功耗更低(没有可编程互连的额外开销);面积更小。

一般来说,当年产量低于10万片时,FPGA方案更经济;当年产量超过百万片时,ASIC方案更具成本优势。在两者之间的灰色地带,需要根据性能需求、上市时间、风险承受能力等因素综合判断。

现代设计中也出现了混合方案:使用FPGA进行原型验证和功能调试,确认设计正确后再流片ASIC。一些FPGA厂商甚至提供从FPGA到ASIC的平滑迁移路径。

3.2 现代FPGA的片上系统趋势

现代高端FPGA已经远远超越了"可编程逻辑"的范畴,演变为完整的片上系统平台。以Xilinx UltraScale+和Intel Stratix 10系列为例,现代FPGA集成了以下资源:数百万个逻辑单元(LUT);数十兆位的高速块RAM(BRAM/URAM);数千个硬核DSP切片(支持高精度乘加运算);高速串行收发器(速率可达112Gbps);硬核ARM处理器(如Cortex-A53/A72);硬件视频编解码引擎;以及AI推理加速引擎。

这种片上系统的集成使得单个FPGA芯片可以实现过去需要多块芯片才能完成的系统功能。嵌入式处理器可以运行操作系统和应用软件,FPGA逻辑可以实现定制化的硬件加速,高速收发器可以处理通信协议——所有这些都在单一芯片上协同工作。


四、实践案例

4.1 基于FPGA的数字信号处理加速器

在一个雷达信号处理系统中,需要对接收到的信号进行实时FFT(快速傅里叶变换)处理。使用通用处理器实现的FFT处理速度无法满足实时性要求(需要处理100MHz的采样数据)。

使用FPGA实现FFT加速器的方案:利用FPGA的并行处理能力,采用流水线结构的基-4 FFT算法。每个处理级使用片上BRAM存储中间数据,使用DSP切片实现蝶形运算的复数乘法。1024点的FFT需要5级流水线(因为4^5=1024),每级有256个蝶形运算单元并行工作。

FPGA实现的优势在于:完全流水线化,每个时钟周期都能输出一个FFT结果;并行处理能力强,远超通用处理器的串行执行;DSP切片提供硬件级乘加运算能力;片上BRAM提供高速的数据缓存。最终实现在200MHz时钟下处理100MHz采样率的信号,满足实时性要求。

4.2 CPLD在混合电压系统中的I/O适配

在一个嵌入式系统中,核心处理器工作在1.8V,但需要与多种外设通信:3.3V的SPI Flash、5V的工业传感器接口和1.2V的存储器接口。直接使用处理器的GPIO无法匹配这些不同的电压标准。

使用CPLD作为I/O适配器的方案:CPLD的每个I/O块可以独立配置电压标准。将CPLD放置在处理器和外设之间,处理器侧使用1.8V LVCMOS标准,外设侧分别配置为3.3V、5V和1.2V标准。CPLD内部实现电平转换逻辑和必要的时序调整。

选择CPLD而非FPGA的原因:逻辑需求简单(主要是电平转换和缓冲),CPLD的规模已经足够;CPLD上电即工作,不需要外部配置芯片,简化了系统设计;CPLD的I/O电压灵活性满足多标准接口需求;CPLD的确定性时序保证了信号转换的可靠性。


五、常见误区与注意事项

误区一:FPGA可以无限次重新编程。 基于SRAM的FPGA本身确实可以无限次配置,但基于Flash或反熔丝的FPGA/CPLD有编程次数限制。Flash型器件通常支持1000至10000次编程,反熔丝型只能编程一次。即使是SRAM型FPGA,其配置数据通常存储在外部Flash中,Flash的擦写次数是有限的。

误区二:DRAM比SRAM慢,所以SRAM总是更好的选择。 虽然SRAM的访问时间确实比DRAM短,但DRAM在容量和成本方面具有压倒性优势。现代DDR4/DDR5 DRAM通过突发传输、多bank架构和预取技术,有效带宽已经非常高。在需要大容量内存的系统中,DRAM是唯一经济可行的选择。实际系统通常同时使用SRAM(作为高速缓存)和DRAM(作为主存)。

误区三:FPGA设计不需要考虑时序。 FPGA设计同样面临严格的时序约束。虽然FPGA工具有自动布局布线和时序优化能力,但设计者仍然需要理解时序约束、正确编写时序约束文件、并分析时序报告。忽视时序约束的FPGA设计可能在某些条件下出现间歇性故障。

误区四:FPGA可以完全替代ASIC。 虽然FPGA的功能越来越强大,但在大批量、高性能或低功耗应用中,ASIC仍然具有不可替代的优势。ASIC的定制优化可以达到FPGA无法匹敌的性能功耗比。此外,某些极端性能要求的应用(如超高频处理器)只有在ASIC工艺中才能实现。


六、本章小结

本章介绍了现代数字系统中重要的存储器和可编程逻辑器件。ROM家族包括掩模ROM、PROM、EPROM、EEPROM和Flash,各有不同的特性和适用场景。SRAM以速度取胜,DRAM以容量和成本取胜,两者在计算机系统中互补使用。FPGA基于查找表和可编程互连架构,提供了极高的设计灵活性和并行处理能力,是现代数字系统设计的重要平台。CPLD基于乘积项结构,具有确定性时序和快速上电的优势,适合小规模逻辑和I/O适配。现代FPGA已经演变为集成了处理器、DSP和高速接口的片上系统平台。掌握这些器件的原理和特性,使你能够根据具体应用需求选择最合适的实现方案,设计出高效、可靠的数字系统。


七、思考题与练习

比较SRAM和DRAM在单元结构、读写速度、集成度、功耗和成本方面的差异。解释为什么计算机系统通常同时使用SRAM(Cache)和DRAM(主存)。

解释Flash存储器中"擦除"操作的物理原理。为什么Flash不能像SRAM那样按字节随机写入?这种特性对文件系统的设计有什么影响?

一个4输入LUT可以实现多少种不同的逻辑函数?如果使用两个3输入LUT来实现一个4输入逻辑函数,画出可能的连接方式。

比较FPGA和CPLD在以下维度的差异:逻辑容量、时序确定性、上电配置、功耗特性和适用场景。为一个简单的地址译码应用选择合适的器件并说明理由。

计算一个存储系统的有效访问时间:Cache(SRAM)命中时间为2ns,命中率为95%;主存(DRAM)访问时间为50ns。计算平均内存访问时间(AMAT)。如果将Cache容量增大一倍使命中率提高到98%,AMAT改善多少?

查阅一种主流FPGA器件(如Xilinx Artix-7或Intel Cyclone V)的数据手册,列出其关键资源参数(LUT数量、BRAM容量、DSP切片数、I/O数量、最大时钟频率等)。

解释FPGA中"软核处理器"和"硬核处理器"的区别。在什么场景下你会选择硬核处理器(如Xilinx Zynq中的ARM Cortex-A9)而非软核(如MicroBlaze)?

设计一个基于FPGA的LED显示屏控制器。该控制器需要驱动一个64x64的RGB LED面板,使用PWM实现256级灰度控制。分析所需的FPGA资源(逻辑、存储器和I/O),并选择合适的FPGA系列。

8/8存储器和
0%