cisen / blog

Time waits for no one.
133 stars 20 forks source link

世界第一颗FPGA芯片拆解,带你深入了解FPGA原理【转】 #1077

Open cisen opened 2 years ago

cisen commented 2 years ago

总结

LUT功能 SLICEL SLICEM
逻辑函数发生器 v v
ROM v v
分布式RAM   v
移位寄存器   v

https://www.sohu.com/a/420818137_505888

现场可编程门阵列(FPGA)可以实现任意数字逻辑,从微处理器到视频生成器或加密矿机,一应俱全。FPGA由许多逻辑模块组成,每个逻辑模块通常由触发器和逻辑功能以及连接逻辑模块的路由网络组成。FPGA的特殊之处在于它是可编程的硬件:您可以重新定义每个逻辑块及其之间的连接,用来构建复杂的数字电路,而无需物理上连接各个门和触发器,也不必花费设计专用集成电路的费用。

3279a9efab9c4fcca84963e0c07c4c92

内部裸片显微照片

FPGA是由Ross Freeman发明的,他在1984年共同创立了Xilinx,并推出了第一款FPGA——XC2064。这种FPGA比现代FPGA简单得多,它只包含64个逻辑块。而现代FPGA中的逻辑块有几千个或数百万个,但它导致了目前价值数十亿美元的FPGA产业。由于其重要性,XC2064被列入芯片名人堂。在这篇文章中,我们对Xilinx的XC2064进行了逆向工程,解释了它的内部电路(上图)以及 "比特流 "是如何对它进行编程的。

190df0bc2f204e92b0d7b93853c08f38

第一款FPGA芯片- Xilinx XC2064

如今,FPGA是采用Verilog或VHDL之类的硬件描述语言编程的,但当时Xilinx提供了他们自己的开发软件XACT,运行在MS-DOS操作系统之下,价格高达12,000美元。XACT自然无法与现在的FPGA开发工具相比,XACT通过用户定义了每个逻辑块的功能(如下面的屏截图所示)以及逻辑块之间的连接,对连接进行布线连接,并生成可加载到FPGA中的比特流文件。

d0832de2228b4337829991abd22102bb

XACT的屏幕截图

两个查找表F和G在屏幕底部实现逻辑运算,上面部分显示该逻辑的卡诺图

通过位流(具有专有格式的位序列)配置FPGA。如果您查看XC2064的比特流(如下所示),那是令人费解的混合模式,这些模式不规则地重复,并散布在比特流中。XACT中的功能定义与位流中的数据之间没有明确的联系。但是,研究FPGA的物理电路可以揭示比特流数据的结构,并且可以理解。

通过位流(具有专有格式的位序列)配置FPGA。如果您查看XC2064的比特流(如下所示),那是令人费解的混合模式,这些模式不规则地重复,并散布在比特流中。XACT中的函数定义与位流中的数据之间没有明确的联系。但是,研究FPGA的物理电路可以揭示比特流数据的结构,并且可以理解。

7a5a621e7c084e338812e167e2bd92e2

XC2064的比特流

FPGA如何工作

下图来自原始FPGA专利,显示了FPGA的基本结构。在此简化的FPGA中,有9个逻辑块(蓝色)和12个I/O引脚。互连网络将组件连接在一起。通过设置互连上的开关(对角线),逻辑块相互连接并连接到I/O引脚。每个逻辑元素都可以使用所需的逻辑功能进行编程。其结果是一个高度可编程的芯片,可以实现任何适合可用的电路。

e5f5333f1c00465dbc289550f4abce4a

FPGA专利显示通过互连连接的逻辑块(LE)

CLB:可配置逻辑块

虽然上图显示了九个可配置逻辑块(CLB),但XC2064有64个CLB。下图显示了每个CLB的结构。每个CLB有四个输入(A、B、C、D)和两个输出(X和Y)。两者之间是组合逻辑,可以使用任何所需的逻辑功能进行编程。CLB还包含一个触发器,允许FPGA实现计数器、移位寄存器、状态机和其他有状态电路。梯形是多路复用器,可以编程通过其任何输入。多路复用器允许为特定任务配置CLB,为触发器控件和输出选择所需的信号。

2cffad504a4d4d5f823c1471aa7ed7fe

XC2064中的可配置逻辑块

那么,组合逻辑如何实现任意逻辑功能?它会采用与门、或门、异或门等逻辑吗?

不,它使用一种称为查找表(LUT)的巧妙技巧,实际上它包含的是逻辑功能的真值表。例如,三个变量的功能由其真值表中的8行定义。LUT由8位内存以及多路复用电路组成,以选择正确的值。通过将值存储在这8位内存中,可以实现任何3输入逻辑功能。

互 连

FPGA的第二个关键部分是互连,可以对其进行编程以不同方式连接CLB。互连相当复杂,但是粗略的描述是每个CLB之间有几个水平和垂直线段。CLB互连点允许在水平线和垂直线之间建立连接,从而可以创建任意路径。

更复杂的连接通过“交换矩阵”(switchmatrices)完成。每个开关矩阵都有8个引脚,可以(几乎)任意方式将它们连接在一起。下图显示了XC2064的互连结构,提供了到逻辑块(青色)和I / O引脚(黄色)的连接。该图显示了路由功能的特写。绿色框是8针开关矩阵,而小方块是可编程的互连点。

b5f3531e8cca4ba0887f4a1061bb061e

XC2064 FPGA具有一个8x8的CLB网格

每个CLB都有从AA到HH的字母名称。互连可以将例如块DC的输出连接到块DE的输入,如下所示。红线表示路由路径,红色小方块表示已激活的路由点。离开模块DC后,信号由第一个路由点定向到8针开关(绿色),该信号将其引导到另外两个路由点和另一个8针开关。(未显示未使用的垂直和水平路径。)请注意,布线相当复杂;即使是这条短路径,也使用了四个路由点和两个开关。

bc1e9540de0447a6b4f9f2125a3cc2eb

从块DC的输出路由到块DE的信号示例

下面的屏幕截图显示了 XACT 程序中的路由外观。黄线指示逻辑块之间的路由。随着信号的加入,挑战在于如何有效地路由而不使路径发生冲突。XACT 软件包执行自动路由,但也可以手动编辑路由。

4e604960e6f344fc8d86ed9c4ebe2b39

XACT程序的屏幕截图

此MS-DOS程序通过键盘和鼠标进行控制

Implementation

本文的其余部分讨论了XC2064的内部电路,从裸片照片中的反向工程。

下图显示了XC2064芯片的布局。FPGA的主要部分是8×8的网格。每个图块包含一个逻辑块和相邻的路由电路。尽管图片显示将逻辑块(CLB)显示为与围绕它们的路由不同的实体,但这并不是 FPGA的实现方式。取而代之的是,每个逻辑块和相邻路由都实现为单个实体,即图块。(具体来说,图块包括每个CLB上方和左侧的路由。)

978005d5a93e489abd96f1eb1720e2ea XC2064芯片的布局

I/O模块围绕集成电路的边缘提供与外界的通信。它们连接到小的绿色方形焊盘,该焊盘连接到芯片的外部引脚。裸片被缓冲区(绿色)划分:两个垂直和两个水平。这些缓冲器可放大在电路中传播很长距离的信号,从而减少延迟。垂直移位寄存器(粉红色)和水平列选择电路(蓝色)用于将比特流加载到芯片中,如下所述。

Tile的内部结构

下图显示了XC2064中单个Tile的布局;如上图所示,该芯片包含64个这样的Tile挤在一起。每个Tile约有40%的面积被保存配置位的内存单元(绿色)所占据。顶部三分之一处通过两个交换矩阵和许多单独的路由交换处理互连路由,下面是逻辑块。逻辑块的关键部分是输入的多路复用器、触发器和查找表(LUT)。每个块通过垂直和水平布线连接到相邻的块,以实现互连,电源和接地。配置数据位被水平地馈送到存储单元,而垂直信号选择要加载的存储单元的特定列。

5f84480818e64cc290b82c8872fcac1f

XC2064中单个Tile的布局

晶体管

FPGA由CMOS逻辑实现,该逻辑由NMOS和PMOS晶体管构建。晶体管在FPGA中具有两个主要作用。首先,可以将它们组合以形成逻辑门。其次,晶体管被用作信号通过的开关,例如以控制路由。在此作用下,该晶体管称为传输晶体管。

2222469cd9df4a8c896ff451ab260860

MOSFET的结构

下面的裸片照片特写显示了在显微镜下晶体管的外观。多晶硅栅极是两个掺杂硅区域之间的蛇形线。

33df5b99962946dd9eb47421b31523f3

FPGA中的MOSFET

比特流和配置存储

XC2064 中的配置信息存储在配置内存单元中。FPGA 的内存不是使用 RAM 块进行存储,而是分布在 160×71 网格中的芯片上,确保每个位都位于它控制电路旁边。下图显示了配置比特流如何加载到 FPGA 中。比特流被送入从芯片中心(粉红色)向下运行的移位寄存器中。将 71 位加载到移位寄存器中后,列选择电路(蓝色)将选择特定的内存列,并并行加载到此列中。然后,将接下来的 71 位加载到移位寄存器中,左侧的下一列将成为所选列。此过程将重复 FPGA 的所有 160 列,将整个比特流加载到芯片中。使用移位寄存器可避免大量内存寻址电路。

a0360c7fe8df47138f070a76b59444fb

比特流如何加载到FPGA中

重要的是,比特流的分布与文件中的分布完全相同:比特流文件中的比特布局与芯片上的物理布局匹配。如下所示,每个位都存储在FPGA控制电路的旁边。因此,比特流文件格式直接由硬件电路的布局确定。例如,当由于缓冲电路而在FPGA切片之间存在间隙时,相同的间隙会出现在位流中。比特流的内容不是围绕字段,数据表或配置块之类的软件概念来设计的。了解比特流取决于从硬件角度而非软件角度进行思考。

如下所示实现配置存储器的每一位。每个存储单元均包含两个以环路连接的反相器。该电路具有两个稳定状态,因此可以存储一个位:顶部反相器为1,底部反相器为0,反之亦然。为了写入该单元,左侧的传输晶体管被激活,使数据信号通过。数据线上的信号只会使逆变器过载,从而写入所需的位。(您也可以使用相同的路径从FPGA中读取配置数据。)Q和反相Q输出控制FPGA中所需的功能,例如关闭路由连接,为查找表提供位,或控制锁存器电路。(在大多数情况下,仅使用Q输出。)

8759526a5ce7442ca547aaa19fb9d2fe

从数据表中显示一个位配置内存的示意图

上方的Q是输出,下方的Q是倒置输出

下图显示了存储单元的物理布局。左图显示了八个存储单元,其中一个单元高亮显示。每条水平数据线馈入该行中的所有存储单元。每列选择行选择该列中的所有存储单元以进行写入。中间照片放大了一个存储单元的硅和多晶硅晶体管。

c9ef6b37698c4fbcbe73c68cc9b9d1a4

存储单元的物理布局

查找表多路复用器

如前所述,FPGA通过使用查找表来实现任意逻辑功能。下图显示了如何在XC2064中实现查找表。左侧的八个值存储在八个存储单元中。四个多路复用器根据A 输入值选择每对值中的一个 。如果 A 为0,则选择最高值;如果 A 为1,则选择最低值。接下来,较大的多路复用器根据B 和 选择四个值之一 C。在这种情况下,结果是所需的值 A XOR B XOR C。通过在查找表中放置不同的值,可以根据需要更改逻辑功能。

fc46c5aae89840bfb5b73e7821b06def

使用查找表实现XOR

每个多路复用器都是通过晶体管来实现的。根据控制信号,其中一个传递晶体管被激活,将该输入传递到输出。下图显示了LUT电路的一部分,多路复用了其中的两个比特。右边是两个存储器单元。每一个比特都要经过一个反相器进行放大,然后经过中间的多路复用器的传递晶体管,选择其中的一个比特。

cf107a5e99db4b5984a3ff83b2adf928

LUT实现中的电路特写

锁存器

每个CLB包含一个触发器,允许FPGA实现锁存器,状态机和其他有状态电路。下图显示了触发器的实现。它使用主/辅助设计。当时钟为低电平时,第一个多路复用器让数据进入主锁存器。当时钟变高时,多路复用器关闭第一个锁存器的环路,并保持该值。(该位通过“或”门,“与非”门和反相器两次反转,因此保持不变。)同时,当时钟变高时,辅助锁存器的多路复用器从第一个锁存器接收该位(请注意,时钟已反转)。该值成为触发器的输出。当时钟变低时,次级的多路复用器关闭环路,从而锁存该位。因此,触发器是边缘敏感的,在时钟的上升沿锁存该值。置位和复位线强制触发器为高电平或低电平。

32b7fe2e0e2045999afdd2fb5db28408

触发器的实现,箭头指出了第一个多路复用器和两个OP-NAND门

8-pin交换矩阵

交换矩阵是一个重要的路由元件。每个开关有八个"引脚"(每侧两个),几乎可以连接任意引脚组合在一起。这允许信号比单个路由节点更灵活地转动、拆分或交叉。下图显示了四个 CLB (cyan)之间的路由网络的一部分。交换矩阵(绿色)可与右侧连接的任意组合连接。请注意,每个引脚可以连接到其他 7 个引脚中的 5 个。例如,引脚 1 可以连接到引脚 3,但无法连接到引脚 2 或 4。这使得矩阵几乎是一个横栏,有20个潜在的连接,而不是28个。

51081b5b205945a691597d0db3451ab7

基于Xilinx可编程门阵列数据手册

开关矩阵由一排传输晶体管实现,该传输晶体管由上方和下方的存储单元控制。晶体管的两侧是可以通过该晶体管连接的两个开关矩阵引脚。因此,每个开关矩阵具有20个相关联的控制位。

每个图块两个矩阵,即每个图块产生40个控制位。下图显示了其中一个存储单元,该存储单元连接到下面的传输晶体管的长弯曲栅极。该晶体管控制引脚5和引脚1之间的连接。

b94f75f3740f403b9798af5fbe460894

其中一个存储单元

因此,与该存储单元相对应的位流中的位控制引脚5和引脚1之间的开关连接。同样,其他存储单元及其相关晶体管控制其他开关连接。请注意,这些连接的顺序不遵循特定的模式。因此,位流位和开关引脚之间的映射是随机的。

输入路由

CLB的输入在位流中使用不同的编码方案,这由硬件实现方式解释。在下图中,八个圆圈的节点是CLB框DD的潜在输入。 db3dc4f3e04842bd8a9234520a3f6bc6

CLB的输入在位流中使用的编码方案示意图

最多只能将一个节点配置为输入,因为将两个信号连接到同一输入将使它们短路。使用多路复用器选择所需的输入。一个简单的解决方案是使用8路多路复用器,其中3个控制位选择8个信号之一。另一个简单的解决方案是使用8个通过晶体管,每个晶体管都有自己的控制信号,其中一个选择所需的信号。但是,FPGA使用一种混合方法,该方法避免了第一种方法的解码硬件,但使用了5个控制信号,而不是第二种方法所需的8个控制信号。

3f93a7f53cbd4edeb97fce43c57ed91d

FPGA使用多路复用器选择八个输入之一

上面的示意图显示了FPGA中使用的两级多路复用器方法。在第一阶段,控制信号之一被激活。第二阶段从顶部或底部选择信号作为输出。例如,假设控制信号 B/F 发送到第一级,“ ABCD”发送到第二级;输入B是唯一将传递到输出的B。因此,选择八个输入之一需要在比特流中使用5位,并使用5个存储单元。

结 论

XC2064使用各种高度优化的电路来实现其逻辑块和路由。该电路需要紧凑的布局,以适合芯片。即使这样,XC2064还是一个非常大的芯片,比当时的微处理器还大,因此一开始很难制造,而且要花费数百美元。与现代FPGA相比,XC2064的单元数量非常少,但是即使如此,它也引发了革命性的新产品线。

了解XC2064比特流的关键是两个概念。首先,FPGA由64个块组成,这些块是将逻辑块和路由结合在一起的重复块。尽管FPGA被描述为具有被路由包围的逻辑块,但这并不是实现它们的方式。

第二个概念是,比特流中没有抽象。它直接映射到FPGA的二维布局中。因此,只有考虑FPGA的物理布局,比特流才有意义 将数字放到最后,用360打开 FPGA原理和结构_14592643.001.zip FPGA原理和结构_14592643.002.zip FPGA原理和结构_14592643.003.zip FPGA原理和结构_14592643.004.zip

cisen commented 2 years ago

真实xilinx fpga

组成

MUX

XOR

FF

LUT

CARRY4

SLICEM

SLICEL

CLB CLB(Configurable Logic Block)

可配置逻辑单元(Configurable Logic Block,CLB)在FPGA中最为丰富,由两个SLICE组成。由于SLICE有SLICEL(L:Logic)和SLICEM(M:Memory)之分,因此CLB可分为CLBLL和CLBLM两类。在Xilinx公司的FPGA器件中,CLB由2个 相同的SliceL或则一个SliceL和一个SliceM构成。每个Slice不仅可以用于实现组合逻辑、时序逻辑。其中,SliceM还可以配置为分布式RAM和分布式ROM。 https://github.com/cisen/blog/issues/1078

https://www.sohu.com/a/420818137_505888

cisen commented 2 years ago

https://zhuanlan.zhihu.com/p/506828648?utm_medium=social&utm_oi=609699348280512512 深入理解 FPGA 的基础结构

(1)FPGA 的两个基本单元

组成 FPGA 的两个最基本的部分是组合逻辑以及时序逻辑,分别实现这两个基本部分的结构就是 FPGA 的基本单元。组合逻辑部分一般采用查找表(Look-Up-Table,LUT)的形式,时序逻辑部分一般采用触发器(Flip-Flop,FF)的形式。

1、组合逻辑的基本单元

根据数电中的知识,任何一个组合逻辑都可以表示成真值表的形式(逻辑输入对应逻辑输出),也就是任意的真值表所反映的内容都能由组合逻辑实现,查找表(LUT)就能完成这个任务。 v2-62cb6b409490238623c96bc704371cf6_r

具体的过程可以参照上面这张图,左边这张图给出了一个 3 输入的查找表,可以实现任意 3 输入的逻辑函数。一般 k 输入的查找表由 [公式] 个 SRAM 单元和一个 [公式] 输入的数据选择器组成,可以实现 [公式] 种逻辑函数。

例如:k = 2 时为 16 种,k = 3 时为 256 种,k = 4 时为 65536 种逻辑函数。右边这张图给出 AB + AC + BC 的一个逻辑示例,使用查找表时需要先根据查找表的输入对真值表进行转换,然后将数值栏(f 栏)直接写入配置内存。当所要实现的逻辑函数的输入数比查找表的输入数多时,可以联合使用多个查找表来完成。

2、时序逻辑的基本单元

时序逻辑的基本单元采用 D 触发器,这种触发器是一种在时钟的上升沿(或下降沿)将输入信号的变化转送至输出的边沿触发器。 v2-fff497687c9453b0390c7c387a3ce61e_r

D-FF 的符号和真值表如上图所示,可以从真值表中看出,只有在上升沿出现时会产生输入到输出的通路,剩下的时间输出均保持不变。这里需要简单说明一下 D-FF 的原理,因为理解这件事才可以更好的理解建立时间与保持时间的概念。 v2-99ed8576f29e1af33eae1cd8a83bd62c_r

左边这张图是 D-FF 的原理图。当 CLK=0 时,主锁存器工作,将输入信号从 D 保存进来,输出信号 Q 不变;当 CLK=1 时,从锁存器工作,将主锁存器保存的信号输出到 Q,输入信号被隔断,因此不发生变化。由于这个过程中的传输门的工作不是完全理想的,因此就会需要建立时间与保持时间这两个概念。

建立时间(setup-time):如果在 CLK=0 时,由于门的传输延时,输入信号没有稳定的保存到主锁存器中,那么当 CLK 从 0 变到 1,输入关闭,输出打开时,主锁存器就只能给输出端口提供一个不稳定的信号。为了避免这种情况的发生,需要输入信号在上升沿到来前已经稳定。 保持时间(hold-time):当 CLK 从 0 变到 1,由于门的传输延时,门不可能立刻关闭,如果此时发生输入信号的变化,那当门关闭后实际保存的信号就可能是变化后的信号(相当于下一时刻的信号将我们需要的当前信号覆盖了)。为了避免这种情况的发生,需要输入信号在上升沿到来后保持一段时间的稳定。

(2)FPGA 的结构

v2-52a7d4c9d2ab778d932e626becb2e36d_r

首先给出一张结构图,包含 FPGA 构成的基本要素,接下来给出两张图从宏观角度将整个 FPGA 的基本结构展示出来。图片很好理解,这里就不过多解释了,补充一点,相邻的逻辑块、连接块、开关块组成一个可重复逻辑模块(tile)。 v2-a800a5c6400e8a139768b0d2884b7da0_r

v2-6b87f6ddaaa37509057fcd14a4e8db4c_r

1、逻辑块的结构

大部分的逻辑块的基本要素都包含基本逻辑单元 BLE (Basic Logic Element)。BLE 由实现组合电路的查找表,实现时序电路的触发器,以及数据选择器构成。数据选择器在存储单元 M0 的控制下决定直接输出查找表的值还是输出 FF 中存储的值。

v2-86ab973974043907563f64cb7a089c60_720w

为了提高算术运算电路的性能,FPGA 逻辑块中还包含专用的进位电路。 v2-173a71d2f40ffcea63c4ecb1094262d8_r

左图中两个全加器(Full Adder,FA)为专用进位逻辑,FA0 的进位输入(carry_in)连接到相邻逻辑块的进位输出(carry_out)。这条路径称为高速进位链,可以为多位算术运算提供高速的进位信号传输。右图是 Xilinx 公司 FPGA 的专用进位逻辑,Xilinx 没有设计专用的全加器电路,而是使用查找表和进位生成电路的组合来实现加法。

为了在不增加查找表输入数的前提下提高逻辑块的功能性,设计了逻辑簇结构。 v2-de42f958404b525311332b907a0e56e0_720w

逻辑簇的最大优势就是在增加逻辑块功能性的同时又不会大幅影响 FPGA 的整体面积。查找表的面积会随着输入 k 的增大呈指数级增长,而增加逻辑簇中 BLE 的数量 N,逻辑块的面积只按二次函数增长。

2、I/O 块的结构

I/O 块放置在芯片的外围。FPGA 的 I/O 口除了固定用途的电源、时钟等专用引脚,还有用户可以配置的用户 I/O。I/O 块具有输入/输出缓冲、输出驱动、信号方向控制、高阻抗控制等功能,可以使输入/输出信号能在 FPGA 阵列内的逻辑块和 I/O 块间按指定方式传输。I/O 块里还有触发器,可以锁存输入/输出信号。很多 FPGA 还具有应对高速通信的差分信号(Low Voltage Difference Signaling,LVDS)等功能。

3、布线元素的结构

v2-6b4c93ccfe75fd845ef260795ed04628_r

连接逻辑块和布线通道的连接块(CB)有输入用和输出用两种,纵向和横向布线通道的交叉处有开关块(SB)。

开关块 开关块位于横向和纵向布线通道的交叉处,通过可编程开关来控制布线路径。下面给出不相交型开关块的拓扑图,白色圆点相连部分有可编程开关,T0,R0,B0,L0 这四个端口之间可以相互连接,其余类似。 v2-6fe35dd97b07f4966632dbc589bc7147_720w

连接块 连接块也由可编程开关构成,其功能是连接布线通道和逻辑块的输入/输出。需要注意的是,单纯采用全交叉开关矩阵来实现,连接块的面积就会非常大,因此一般使用节省掉一些开关的稀疏矩阵来实现。上面这个示意图中的连接块由单向线组成,包括正向连线 14 根,反向连线 14 根以及 6 个逻辑块的输入。

v2-ccf31a3344b76591ca3d6642defdf1bb_720w

4、时钟结构

PLL (PhaseLocked Loop) v2-55c3cb234c8e22244b6b4c3d2e42c783_r

生成时钟信号的核心部分是压控传感器 VCO,VCO 是能根据所加的电压调整频率的振荡器。鉴相器可以比较外部输入的基准时钟和 VCO 自身输出时钟间的相位差。如果两个时钟一致则维持 VCO 电压;如果不一致则需要通过控制电路对 VCO 电压进行调整,最终让输出时钟和基准时钟达到一致。为了让输出时钟的频率具有一定的选择性,因此增加参考时钟分频器 N,反馈时钟分频器 M,输出时钟分频器 [公式] ,并且可以得到基准频率和输出频率的关系如下:

[公式]

DLL (Delaylocked Loop) v2-c55b919b8a75f0c3a80a21bb7473a048_720w

DLL 的作用是消除分配时钟与参考时钟之间存在相位差。工作原理是在参考时钟(Reference Clock)和反馈时钟(Controlled Clock)之间插入延迟,直到两个时钟的上升边缘对齐,使两个时钟错位360度 (意味着它们是同步的)。右图是一个可变延迟线的示意图,可以通过选择器选择所需延迟量的路径,从而控制具体的延迟量。DLL 网络也可以进行分频,具体的方式与 PLL 相同。

5、存储结构

硬宏存储器:硬宏型存储器被称为块存储器(Block RAM,BRAM),实现方法就是以硬宏的形式在架构中嵌入存储器块。 查找表存储器:查找表存储器被称为分布式存储器(Distributed RAM,分布式 RAM),使用 SLICEM 逻辑块查找表中的真值表作为小型的存储器,能实现 BRAM 不能实现的异步访问,但是一般需要小规模存储器时才采用这种方法(不能占用太多的用来实现逻辑的查找表资源)。

6、配置链

将电路编程到 FPGA 上的过程叫做配置,向 FPGA 写入的电路信息叫做配置数据。配置数据中包含在 FPGA 上实现电路的所有信息,比如查找表中真值表的数据、开关块中各个开关的开闭状态等。

配置存储器:FPGA 需要一种在芯片上存储配置数据的机制,一般采用 SRAM 存储配置信息。优点是没有重写次数的限制,但 SRAM 是易失性存储器,断电后 FPGA 上的电路信息会丢失。因此一般需要在芯片外部另行准备非易失存储器,在上电时自动将配置信息写入 FPGA。 JTAG 接口: 使用 JTAG 接口进行配置时,要先将配置数据一位一位序列化,再通过边界扫描用的移位寄存器写入 FPGA。这条移位寄存器的路径就称为配置链。