FPGA 内部详细架构解析
FPGA 内部详细架构解析
FPGA(现场可编程门阵列)是一种可编程逻辑器件,其内部架构复杂且精妙。本文将为您详细解析FPGA的六大核心模块:可编程输入输出单元(IOB)、可配置逻辑块(CLB)、嵌入式块RAM(BRAM)、互连线资源、底层内嵌功能单元和内嵌专用硬核。通过深入理解这些模块的功能和相互关系,您可以更好地掌握FPGA的设计和应用。
1. 可编程输入输出单元(IOB)
为了便于管理和适应多种电器标准,FPGA的IOB被划分为若干个组(Bank),每个Bank的接口标准由其接口电压VCCO决定。一个Bank只能有一种VCCO,但不同Bank的VCCO可以不同。只有相同电气标准和物理特性的端口才能连接在一起,VCCO电压相同是接口标准的基本条件。
2. 可配置逻辑块(CLB)
FPGA的基本可编程逻辑单元是CLB,而一个CLB是由查找表、数据选择器、进位链、寄存器组成的。查找表和多路选择器完成组合逻辑功能,寄存器(可配置成触发器或锁存器),完成时序逻辑功能。在赛灵思公司的FPGA器件中,一个CLB由多个(一般为4个或2个)相同的Slice和附加逻辑构成。
Slice又分为SLICEL(Logic)和SLICEM(Memory)。SLICEL和SLICEM内部都各自包含了4个6输入查找表(LUT6)、3个数据选择器(Mux)、1个进位链(Carry Chain)和8个触发器(Flip-Flop):
查找表:6输入查找表类似于一个容量为64 bits的ROM(2^6 = 64)(工艺上是珍贵的SRAM资源),6表示地址输入位宽为6 bits,存储的内容作为输入对应的输出结果的逻辑运算,并在FPGA配置时载入。
对于查找表:目前主流FPGA都采用了基于SRAM工艺的查找表(LUT)(Look Up Table)结构。LUT本质上就是一个RAM。当用户通过原理图或HDL语言描述了一个逻辑电路以后,FPGA开发软件会自动计算逻辑电路的所有可能结果,列成一个真值表的形式,并把真值表(即输入对应的输出逻辑)事先写入RAM,这样,每输入一个信号进行逻辑运算就等于输入一个地址进行查表,找出地址对应的内容,然后输出即可。目前FPGA中多使用4输入的LUT,所以每一个LUT可以看成一个有4位地址线的RAM。
数据选择器:数据选择器一般在FPGA配置后固定下来。
进位链:超前进位加法器,方便加法器的实现,加快复杂加法的运算。
寄存器:可以配置成多种工作方式,比如FF或Latch,同步复位或异步复位、复位高有效或低有效等等。
SLICEM的结构与SLICEL的结构类似,最大的区别是使用了一个新的单元代替SLICE中的查找表。这个新的单元可以配置为LUT、RAM、ROM或移位寄存器(SRL16或SRL32),从而可以实现LUT的逻辑功能,也能做存储单元(多个单元组合起来可以提供更大的容量)和移位寄存器(提供延迟等功能)。
其中SLICEM中LUT的输入端都地址和写地址为8位,高两位可能是将4个LUT并联一起作为一个大的RAM或ROM时用,同时SLICEL和SLICEM的LUT均可设为5位或6位查找表。
3. 嵌入式块RAM(BRAM)
块RAM可被配置为ROM、RAM以及FIFO等常用的存储模块。区别于分布式RAM(Distributed RAM)(主要由LUT组成的,不占用BRAM的资源)。分布式RAM也可以被配置为ROM、RAM以及FIFO等常用的存储模块,但是性能不如BRAM,毕竟BRAM才是专用的,一般是BRAM资源不够用的情况下才使用分布式RAM。反之,BRAM由一定数量固定大小的存储块构成的,使用BRAM资源不占用额外的逻辑资源,并且速度快,不过使用的时候消耗的BRAM资源只能是其块大小的整数倍,就算你只存了1 bit也要占用一个BRAM。
一个BRAM的大小为36K Bits,并且分成两个小的BRAM各自为18K Bits,排列成又分为上下两块,上半部分为RAMB18下半部分为RAMBFIFO36。在FIFO例化的时候可以将BRAM设置为FIFO时,不会使用额外的CLB资源,并且这部分RAM是真双口RAM。
4. 互连线资源
布线资源连通FPGA内部的所有单元,而连线的长度和工艺决定着信号在连线上的驱动能力和传输速度。FPGA芯片内部有着丰富的布线资源,根据工艺、长度、宽度和分布位置的不同而划分为4类不同的类别:第一类是全局布线资源,用于芯片内部全局时钟和全局复位/置位的布线;第二类是长线资源,用于完成芯片Bank间的高速信号和第二全局时钟信号的布线;第三类是短线资源,用于完成基本逻辑单元之间的逻辑互连和布线;第四类是分布式的布线资源,用于专有时钟、复位等控制信号线。
5. 底层内嵌功能单元
内嵌功能模块主要指DLL(Delay Locked Loop)、PLL(Phase Locked Loop)、DSP(Digital System Processing)(数字信号处理)、DCM(Digital Clock Manager)(提供数字时钟管理和相位环路锁定)、和CPU(Central Processing Unit)等等软处理核(比如MicroBlaze的软核)。现在越来越丰富的内嵌功能单元,使得单片FPGA成为了系统级的设计工具,使其具备了软硬件联合设计的能力,逐步向SoC平台过渡。
关于DCM:DCM是FPGA内部处理时钟的重要器件,他的作用主要有三个:消除时钟偏斜(Clock De-Skew)、频率合成(Frequency Synthesis)和相位调整(Phase Shifting)。
DCM的核心器件是数字锁相环(DLL,Delay Locked Loop)。它是由一串固定时延的延时器组成,每一个延时器的时延为30皮秒,也就是说,DCM所进行的倍频、分频、调相的精度为30皮秒。
对于时钟,我们最好不要将两个时钟通过一个与门或者或门(逻辑操作),这样的话就很可能会产生毛刺,影响系统稳定性,如果要对时钟进行操作,例如切换时钟等,请使用FPGA内部的专用器件“BUFGMUX”。
6. 内嵌专用硬核
内嵌专用硬核是相对底层嵌入的软核而言的,指FPGA处理能力强大的硬核(比如ARM Cortex-A9的硬核),等效于ASIC电路。为了提高FPGA性能,芯片生产商在芯片内部集成了一些专用的硬核。例如为了提高FPGA的乘法速度,主流的FPGA中都集成了专用乘法器,而为了适用通信总线与接口标准,很多高端的FPGA内部都集成了串并收发器(Serdes),可以达到数十Gbps的收发速度(比如FMC)。