锐单电子商城 , 一站式电子元器件采购平台!
  • 电话:400-990-0325

拆解FPGA芯片,带你深入了解其原理

时间:2023-01-15 08:00:00 0aa33晶体管模块0aa31晶体管模块

拆解FPGA芯片带你深入了解它的原理

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

内部裸片显微照片如下: 内部裸片显微照片

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

第一款FPGA芯片-Xilinx XC2064:

如今,FPGA是采用Verilog或VHDL语言编程等硬件描述,但当时Xilinx他们提供自己的开发软件XACT,运行在MS-DOS在操作系统下,价格高达1.2万美元。XACT自然不能和现在相处FPGA开发工具相比,XACT用户定义了每个逻辑块的功能(如下面的屏幕截图所示)和逻辑块之间的连接,载的连接FPGA比特流文件。

XACT的屏幕截图

两个搜索表F和G在屏幕底部实现逻辑操作,上部显示逻辑的卡诺图

XACT的屏幕截图

配置通过位流(具有专有格式的位序列)FPGA。如果您查看XC2064年的比特流(如下所示)是一种令人费解的混合模式,特流中的混合模式。XACT位流中的功能定义与数据没有明确的联系。然而,研究FPGA物理电路可以揭示比特流数据的结构,并且可以理解。

配置通过位流(具有专有格式的位序列)FPGA。如果您查看XC2064年的比特流(如下所示)是一种令人费解的混合模式,特流中的混合模式。XACT位流中的函数定义与数据没有明确的联系。然而,研究FPGA物理电路可以揭示比特流数据的结构,并且可以理解。

XC2064的比特流

FPGA如何工作

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

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

CLB:可配置逻辑块

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

XC2064年可配置逻辑块

那么,组合逻辑如何实现任何逻辑功能呢?它会使用与门、或门、不同或门的逻辑吗?

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

互连

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

通过交换矩阵,更复杂的连接(switchmatrices)完成。每个开关矩阵都有8个引脚,可以(几乎)以任何方式连接在一起。下图显示XC2064年的互联结构为逻辑块(蓝色)和I / O引脚(黄色)连接。这张照片显示了路由功能的特写镜头。绿色框架为8针开关矩阵,小方块为可编程连接点。

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

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

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

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

XACT程序屏幕截图

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

Implementation

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

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

XC2064芯片的布局

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

Tile的内部结构

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

XC2064中单个Tile的布局

晶体

FPGA由CMOS逻辑实现,逻辑原因NMOS和PMOS结构晶体管。晶体管。FPGA它有两个主要功能。首先,它们可以组合形成逻辑门。其次,晶体管被用作信号通过的开关,如控制路由。在这种作用下,晶体管被称为晶体管的传输。

MOSFET的结构

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

FPGA中的MOSFET

比特流和配置存储

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

如何加载比特流?FPGA中

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

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

在数据表中显示位置内存的示意图

上Q为输出,下Q为倒置输出

上Q为输出,下Q为倒置输出

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

存储单元的物理布局

找表多路复用器

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

使用搜索表实现XOR

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

LUT实现中的电路特写

锁存器

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

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

8-pin交换矩阵

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

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

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

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

其中一个存储单元

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

输入路由

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

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

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

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

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

结论

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

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

第二个概念是,比特流中没有抽象。它直接映射到FPGA的二维布局中。因此,只有考虑FPGA的物理布局,比特流才有意义。

【QQ交流群】

群号:173560979,进群暗语:FPGA技术江湖粉丝。

多年的FPGA企业开发经验,各种通俗易懂的学习资料以及学习方法,浓厚的交流学习氛围,QQ群目前已有1000多名志同道合的小伙伴,无广告纯净模式,给技术交流一片净土,从初学小白到行业精英业界大佬等,从军工领域到民用企业等,从通信、图像处理到人工智能等各个方向应有尽有。

【微信交流群】

现微信交流群已建立09群,人数已达数千人,欢迎关注“FPGA技术江湖”微信公众号,可获取进群方式。

后续会持续更新,带来Vivado、 ISE、Quartus II 、candence等安装相关设计教程,学习资源、项目资源、好文推荐等,希望大侠持续关注。

江湖偌大,继续闯荡,愿大侠一切安好,有缘再见!

锐单商城拥有海量元器件数据手册IC替代型号,打造电子元器件IC百科大全!

相关文章