可重配置的数据处理器的配置卸载的制作方法

专利2022-05-09  15


优先权申请

本申请要求于2018年11月21日递交的申请号为16/198,086(代理案号sbnv1001-1b)的美国非临时申请的权益,该申请通过引用并入本文中。

本技术涉及可重配置架构的配置,尤其可以应用于粗粒度可重配置架构的配置。



背景技术:

包括现场可编程门阵列fpga的可重配置处理器可以被配置为比使用执行计算机程序的通用处理器更有效或更快地实现各种功能。正在开发所谓的粗粒度可重配置架构(例如cgra),在该架构中,阵列中的可配置单元比典型的、更细粒度的fpga中所使用的更为复杂,并且可以使得能够更快或更有效地执行各类功能。例如,已提出了可以针对机器学习和人工智能工作负荷使得能够实现节能加速器的cgra。参见prabhakar,etal.,“plasticine:areconfigurablearchitectureforparallelpatterns,”isca’17,june24-28,2017,toronto,on,canada。

可重配置处理器的配置涉及配置描述的编译以产生配置文件,该配置文件有时被称为比特流或比特文件,并且将配置文件分发到处理器上的可配置单元。为了开始过程,必须针对该过程加载配置文件。为了更改过程,必须将配置文件替换为新的配置文件。

用于分发和加载配置文件的过程和支持结构可能很复杂,并且过程的执行可能很耗时。

为了最大化运行效率,并且能够在可重配置处理器上交换程序,需要一种有效地加载配置状态并存储配置和程序状态的手段。



技术实现要素:

描述了一种使得能够有效地加载和卸载粗粒度可重配置阵列处理器以及其他类型的可重配置处理器的配置和控制状态的技术,粗粒度可重配置阵列处理器包含在网格或贴片(tile)中布置的可编程元件。

本文中所描述的技术提供了从存储在存储器中的格式化配置文件加载配置数据的能力,并且经由并行和串行技术的组合传输到可重配置处理器。而且,本文中所描述的技术提供了将程序控制和数据状态卸载到类似格式的卸载配置文件中的有效手段。结合起来,加载和卸载技术可以支持用于快速将程序换入和换出可重配置处理器的协议,以实现分时和其他虚拟化技术。

在本文中描述了可用于可重配置处理器的配置和重配置的过程和结构,该可重配置处理器包括总线系统和连接到该总线系统的一个或多个可配置单元的阵列。一个或多个阵列中的可配置单元包括配置数据存储库,该配置数据存储库是使用例如锁存器的串行链来实现的,以存储本文中被称为单元文件的配置数据。特定于可配置单元的单元文件可以包括配置数据的多个子文件。在本文中所描述的示例中,子文件由具有适合使用总线系统进行有效分发的大小的数据“块”(chunk)组成。

多个可配置单元中的可配置单元可以均包括用于执行单元配置加载过程的逻辑,该过程包括:经由总线系统接收可配置单元特有的单元文件的子文件;以及将所接收的子文件加载到可配置单元的配置存储库中。在一些实施例中,多个可配置单元中的可配置单元在配置之后的执行期间使用总线系统中的路由,这些路由也在配置加载过程中使用。

描述了一种配置加载控制器,其包括执行阵列配置加载过程的逻辑。阵列配置加载过程包括分发配置文件,该配置文件包括阵列中的多个可配置单元以实现机器的单元文件。

在该技术的一方面,单元文件可以被组织为包括多个有顺序的子文件。在一些实施例中,特定于不同可配置单元的单元文件可以具有不同数目的有顺序的子文件。针对可配置单元的阵列的配置文件被布置,从而使单元文件的子文件与其他单元文件的相同顺序的其他子文件交错,并且对其进行布置,使得子文件在配置文件中的位置暗示子文件的阵列中的可配置单元及其在特定于可配置单元的单元文件中的顺序。

本文中所描述的阵列配置加载过程的示例通过以n个轮次的分发序列(对于i=0至n-1的轮次r(i))向阵列中的多个可配置单元发送子文件来执行。在每个轮次r(i)中,该过程经由总线系统将顺序(i)的一个子文件传输到具有单元文件的可配置单元,单元文件包括至多(i 1)个子文件。

存储在多个可配置单元中的可配置单元中的配置数据可以包括串行链,并且单元配置加载过程可以通过以下操作来执行:在一个总线周期内,在分发序列的一个轮次中从总线系统接收特定于可配置单元的单元文件的第一子文件的全部或部分;并且在下一轮次的分发序列中接收第二个子文件之前,在随后的总线周期期间开始将接收到的第一个子文件推入到串行链中;并且在稍后的总线周期内从总线系统接收下一轮次的分发序列中的第二子文件;在将接收到的第二个子文件推入到串行链中之后,在将先前接收的子文件推入到串行链之后,在总线周期期间开始将接收到的第二个子文件推入串行链。

在分发序列的一些轮次中,在多个有顺序的子文件中的第二子文件被可配置单元接收之前,第一子文件被可配置单元中的单元配置加载过程消费。

该阵列可以包括多于一种类型的可配置单元,并且不同类型的可配置单元的单元文件可以包括不同数目的配置数据的子文件。例如,第一类型的可配置单元的单元文件包括z1个块,并且第二类型的可配置单元的单元文件包括z2个块,其中z1小于z2。阵列配置加载过程可以包括取回这样的配置文件的段,对于(i)从0到z1-1,该段包括要在轮次r(i)中分发的第一类型和第二类型的所有可配置单元的单元文件的子文件(i),然后取回这样的配置文件的段,对于(i)从0到z2-1,该段包括要在第r(i)轮次中分发的所有第二类型可配置单元的单元文件的子文件(i)。该协议可以扩展到任意数目的类型的可配置单元,这样的可配置单元在其单元文件中具有不同数目的子文件。

在发起阵列配置加载过程的一种技术中,可以从主机过程接收标识配置文件在存储器中的位置的配置加载命令,并且响应于该命令,该过程生成一个或多个存储器访问请求。当返回配置文件的请求部分时,可以执行分发序列。

可以按照与分发顺序相匹配的交错方式在配置文件中布置多个单元文件的子文件。配置文件的这种布置使得配置加载过程能够通过配置文件中的子文件的位置以及每个子文件的多个有顺序的子文件中的位置来暗示可配置单元。阵列配置加载过程可以包括基于子文件在配置文件中的位置将子文件路由到可配置单元。

通过阵列配置加载过程接收配置数据的多个可配置单元可以包括可配置单元的阵列中的所有可配置单元。在由配置文件实现的机器不利用所有可配置单元的情况下,一个或多个未使用的可配置单元的单元文件可以实现无操作配置。而且,阵列配置加载过程可以被配置为使得通过阵列配置加载过程接收配置数据的多个可配置单元包括比可配置单元的阵列中的所有可配置单元更少的可配置单元。

在本文中所描述的示例中,可配置单元的阵列中的可配置单元包括连接在菊花链中的相应加载完成状态逻辑,该逻辑在阵列配置加载逻辑处开始和结束。在确认使用菊花链成功加载配置文件的过程中,阵列配置加载逻辑在配置文件分发之后在菊花链上转发配置加载完成信号,并且在阵列中的每个可配置单元中,当接收到来自前一链成员的配置加载完成信号且其自身单元文件的加载完成时,配置加载完成状态逻辑在菊花链上转发配置加载完成信号。

本文中描述了这样的总线系统,其支持可配置单元的多个阵列,其中每个阵列可以被称为贴片。所描述的总线系统包括:顶级网络,连接到外部数据接口(诸如,一个或多个pcie或ddr类型的接口)以及每个贴片的阵列接口;以及阵列级网络,连接到对应的贴片的阵列接口以及可配置单元的阵列中的可配置单元。阵列配置加载过程可以包括:从主机过程接收标识配置文件在存储器中的位置的配置加载命令,以及响应于用于通过外部数据接口取回配置文件的命令,经由顶级网络生成一个或多个存储器访问请求。阵列配置加载过程可以使用配置文件中子文件的位置所暗示的地址,经由阵列级网络将子文件路由到可配置单元。

描述了一种配置卸载控制器,该配置卸载控制器包括用于执行阵列配置卸载过程的逻辑,该过程包括:向阵列中的多个可配置单元分发用于卸载特定于对应的可配置单元的单元文件的卸载命令,单元文件均包括多个有顺序的子文件;在配置卸载控制器处接收来自可配置单元的阵列的子文件。通过根据子文件是其一部分的单元文件的可配置单元以及子文件在单元文件中的顺序在存储器布置所接收的子文件,组装配置卸载文件。配置卸载文件的结构可以与上述配置文件的结构相同。多个可配置单元中的可配置单元可以包括用于执行单元配置卸载过程的逻辑,该过程包括:从所述可配置单元的所述配置存储库中卸载所述子文件;以及经由总线系统(例如,经由阵列级网络)发送特定于可配置单元的单元文件的子文件到配置卸载控制器。配置卸载控制器不需要以任何特定顺序接收卸载的子文件。配置卸载控制器然后通过总线系统(例如,经由顶级网络)将单元子文件发送到存储器。

还提供了用于配置可重配置的数据处理器的方法。

在查看以下附图、具体实施方式和权利要求时,可以看到本文中所描述的技术的其他方面和优点。

附图说明

图1是示出了包括主机、存储器和可重配置的数据处理器的系统的系统图。

图2是cgra(粗粒度可重配置架构)的顶级网络和组件的简化框图。

图3是在图2的配置中可用的贴片和阵列级网络的简化图,其中阵列中的可配置单元是阵列级网络上的节点。

图3a示出了连接阵列级网络中的元件的示例交换单元。

图4是示出了示例可配置单元的框图。

图5示出了可以用于控制可配置单元中的单元配置加载过程的状态机图的一个示例。

图6是支持可配置单元中的配置存储库的加载的结构的逻辑表示。

图7是示出了耦接到可重配置的数据处理器的主机的操作的流程图。

图8是示出了配置加载控制器的操作的流程图,该配置加载控制器可以是主agcu的一部分或以其他方式与贴片中的可配置单元的阵列通信。

图9示出了配置文件的示例组织。

图10是示出了用于与图2和图3的系统类似的系统执行阵列配置加载过程的逻辑的一个示例的状态机图。

图11是示出了与图10的分发序列类似的分发序列的早期轮次的时序的时序图。

图12是示出了可配置单元中的单元配置加载过程的流程图。

图13是示出了用于针对与图2和图3的系统类似的系统执行阵列配置卸载过程的逻辑的一个示例的状态机图。

图14是示出了可配置单元中的单元配置卸载过程的流程图。

具体实施方式

以下描述将典型地参考具体的结构实施例和方法。应当理解,无意将技术限制于具体公开的实施例和方法,而是可以使用其他特征、元件、方法和实施例来实践该技术。描述了优选实施例以说明本技术,而不是限制由权利要求限定的其范围。本领域的普通技术人员将认识到以下描述的各种等效变化。

图1是示出了包括主机120、存储器140和可重配置的数据处理器110的系统的系统图。如图1的示例中所示,可重配置的数据处理器110包括可配置单元的阵列190和配置加载/卸载控制器195。本文中所使用的短语“配置加载/卸载控制器”是指配置加载控制器与配置卸载控制器的组合。配置加载控制器和配置卸载控制器可以使用单独的逻辑和数据路径资源来实现,或者可以使用适合特定实施例的共享的逻辑和数据路径资源来实现。在一些实施例中,系统可以仅包括本文中所描述的类型的配置加载控制器。在一些实施例中,系统可以仅包括本文中所描述的类型的配置卸载控制器。

处理器110包括连接到主机120的外部i/o接口130和连接到存储器140的外部i/o接口150。i/o接口130、150经由总线系统115连接到可配置单元的阵列190和配置加载/卸载控制器195。总线系统115可以具有承载一个数据块的总线宽度,对于该示例可以是128比特(在本文中对128比特的引用可以更一般地被认为是示例块大小)。一般来说,配置文件的块可以具有数目为n比特的数据,并且总线系统可以被配置为在一个总线周期内传输n比特的数据,其中n是任何实际的总线宽度。以分发序列分布的子文件可以由一个块或适合特定实施例的其他数目的数据组成。在本文中使用各自由一个数据块组成的子文件来描述过程。当然,该技术可以被配置为分发不同大小的子文件,例如包括可以由在两个总线周期内分发的两个块组成的子文件。

为了通过配置文件配置可配置单元的阵列190中的可配置单元,主机120可以经由可重配置的数据处理器110中的接口130、总线系统115和接口150将配置文件发送到存储器140。配置文件可以以适合特定架构的许多方式加载,包括在可配置处理器110外部的数据路径中。可以经由存储器接口150从存储器140中取回配置文件。配置文件的块然后可以以本文中所描述的分发序列发送到可重配置的数据处理器110中的可配置单元的阵列190中的可配置单元。

外部时钟生成器170或其他时钟信号源可以将时钟信号175或多个时钟信号提供给可重配置的数据处理器110中的元件(包括可配置单元的阵列190、以及总线系统115)和外部数据i/o接口。

图2是cgra(粗粒度可重配置架构)处理器的组件的简化框图。在本例中,cgra处理器具有2个贴片(贴片1、贴片2)。贴片包括连接到总线系统的可配置单元的阵列,在该示例中,包括阵列级网络。总线系统包括将贴片连接到外部i/o接口205(或者,任何数目的接口)的顶级网络。在其他实施例中,可以利用不同的总线系统配置。在本实施例中,每个贴片中的可配置单元是阵列级网络上的节点。

四个贴片中的每个贴片具有4个agcu(地址生成和合并单元)(例如,magcu1、agcu12、agcu13、agcu14)。agcu是顶级网络上的节点和阵列级网络上的节点,并且包括用于在每个贴片中的顶级网络上的节点与阵列级网络上的节点之间路由数据的资源。

在该示例中,顶级网络上的节点包括一个或多个外部i/o,包括接口205。与外部设备的接口包括用于在顶级网络上的节点与连接到接口的外部设备(诸如,大容量存储器、主机处理器、其他cgra处理器、fpga设备等)之间路由数据的资源。

在该示例中,贴片中的agcu中的一个agcu被配置为主agcu,其包括用于贴片的阵列配置加载/卸载控制器。在其他实施例中,可以实现多于一个的阵列配置加载/卸载控制器,并且一个阵列配置加载/卸载控制器可以通过在一个以上的agcu之间分发的逻辑来实现。

magcu1包括贴片1的配置加载/卸载控制器,并且magcu2包括贴片2的配置加载/卸载控制器。在其他实施例中,配置加载/卸载控制器可以被设计用于加载和卸载多于一个的贴片的配置。在其他实施例中,可以针对单个贴片的配置设计多于一个的配置控制器。而且,配置加载/卸载控制器可以在系统的其他部分中实现,包括作为顶级网络和阵列级网络或网络上的独立节点。

顶级网络是使用彼此连接以及连接到顶级网络上的其他节点(包括agcu和i/o接口205)的顶级交换机(211-216)来构建的。顶级网络包括连接顶级交换机的链路(例如,l11、l12、l21、l22)。数据以分组的形式在链路上的顶级交换机之间传播,并且从交换机传播到连接到交换机的网络上的节点。例如,顶级交换机211和212通过链路l11连接,顶级交换机214和215通过链路l12连接,顶级交换机211和214通过链路l13连接,并且顶级交换机212和213通过链路l21连接。链路可以包括一个或多个总线和支持控制线,例如包括块宽总线(矢量总线)。例如,顶级网络可以包括可用于以类似于axi兼容协议的方式协调数据传输的数据、请求和响应通道。参见axiandaceprotocolspecification,arm,2017。

顶级交换机可以连接到agcu。例如,顶级交换机211、212、214和215分别连接到贴片1中的magcu1、agcu12、agcu13和agcu14。顶级交换机212、213、215和216分别连接到贴片2中的magcu2、agcu22、agcu23和agcu24。

顶级交换机可以连接到一个或多个外部i/o接口(例如,接口205)。

图3是在图2的配置中可用的贴片和阵列级网络的简化图,其中阵列中的可配置单元是阵列级网络上的节点。

在该示例中,可配置单元的阵列300包括多种类型的可配置单元。该示例中的可配置单元的类型包括模式计算单元(pcu)、模式存储单元(pmu)、交换单元(s)、以及地址生成和合并单元(每个单元包括两个地址生成器ag、以及共享cu)。对于这些类型的可配置单元的功能的示例,参见“prabhakaretal.,“plasticine:areconfigurablearchitectureforparallelpatterns”,isca’17,june24-28,2017,toronto,on,canada”,其将通过引用并入,就像在本文中充分阐述的那样。这些可配置单元中的每个可配置单元包含这样的配置存储库,该配置存储库包括表示设置或运行程序的顺序的一组寄存器或触发器,并且可以包括嵌套循环的数目、每个循环迭代器的限制、针对每一级要执行的指令、操作数的来源、以及输入和输出接口的网络参数。

另外,这些可配置单元中的每个可配置单元包含这样的配置存储库,该配置存储库包括一组寄存器或触发器,该组寄存器或触发器存储可用于追踪嵌套循环或其他方式中的进度的状态。配置文件包含表示执行程序的组件中的每个组件的初始配置或开始状态的比特流。该比特流被称为比特文件。程序加载是基于比特文件的内容在可配置单元的阵列中设置配置存储库以允许所有组件执行程序(即,机器)的处理。程序加载可能还需要加载所有pmu存储器。

阵列级网络包括互连阵列中的可配置单元的链路。阵列级网络中的链路包括一种或多种物理总线,在这种情况下,为三种物理总线:块级矢量总线(例如,128比特数据)、字级标量总线(例如,32比特数据)、以及多比特级控制总线。例如,交换单元311与312之间的互连321包括具有128比特的矢量总线宽度的矢量总线互连、具有32比特的标量总线宽度的标量总线互连、以及控制总线互连。

这三种物理总线的区别在于传输的数据的粒度不同。在一个实施例中,矢量总线可以承载包括16字节(=128比特)数据作为其有效载荷的块。标量总线可以具有32比特的有效载荷,并且承载标量操作数或控制信息。控制总线可以承载控制信号交换,诸如令牌和其他信号。矢量和标量总线可以是分组交换的,包括指示每个分组的目的地的报头和其他信息,诸如当分组被无序接收时可以用于重组文件的序列号。每个分组报头可以包含标识目的地交换机单元的地理坐标的目的地标识符(例如,阵列中的行和列),并且可以包含识别用于到达目的地单元的目的地交换机上的接口的接口标识符(例如,北、南、东、西等)。例如,控制网络可以基于设备中的定时电路进行电路交换。配置加载/卸载控制器可以针对128比特的配置数据的每个块生成报头。报头在报头总线上发送到可配置单元的阵列中的每个可配置单元。

在一个示例中,128比特的数据块在矢量总线上传输,该矢量总线将块作为矢量输入提供给可配置单元。矢量总线可以包括128个有效载荷线和一组报头线。报头可以包括每个块的序列id,其中可以包括:

·指示块是暂存(scratchpad)存储器还是配置存储数据的比特。·形成块编号的比特。

·指示列标识符的比特。

·指示行标识符的比特。

·指示组件标识符的比特。

对于加载操作,配置加载控制器可以按照从n-1到0的顺序将数目为n的块发送到可配置单元。对于该示例,6个块以最高有效比特优先的顺序发送:块5->块4->块3->块2->块1->块0。(请注意,该最高有效比特优先的顺序导致块5在来自阵列配置加载控制器的分发序列的轮次0中分发)。对于卸载操作,配置卸载控制器可以将顺序的卸载数据写入存储器。对于加载和卸载操作,在可配置单元中的配置数据存储库中的配置串行链的移位是从lsb(最低有效比特)到msb(最高有效比特),或者msb首先输出。

图3a示出了连接阵列级网络中的元件的示例交换单元。如图3a的示例总所示,交换单元可以具有8个接口。交换单元的北、南、东、西接口用于交换单元之间的连接。交换单元的东北、东南、西北和西南接口均用于连接到pcu或pmu实体。每个贴片象限中的一组2个交换单元连接到地址生成和合并单元(agcu),该地址生成和合并单元包括多个地址生成(ag)单元和连接到该多个地址生成单元的合并单元(cu)。合并单元(cu)在ag之间进行仲裁并处理存储器请求。交换单元的8个接口中的每个接口可以包括矢量接口、标量接口和控制接口,以与矢量网络、标量网络和控制网络通信。

在配置之后的机器的执行期间,数据可以使用阵列级网络上一个或多个交换单元的矢量总线和矢量接口,经由一个或多个单元交换机和单元交换机之间的一个或多个链路发送到可配置单元。

在本文中所描述的实施例中,在贴片的配置之前,配置文件或比特文件可以使用阵列级网络上一个或多个交换单元的矢量总线和矢量接口,经由一个或多个单元交换机和单元交换机之间的一个或多个链路,使用相同的矢量总线从配置加载控制器被发送到可配置单元。例如,特定于可配置单元pmu341的单元文件中的配置数据块可以经由配置加载/卸载控制器301与交换单元311的西(w)矢量接口之间的链路320、交换单元311、以及交换单元311的东南(se)矢量接口与pmu341之间的链路331,从配置加载/卸载控制器301被发送到pmu341。

在该示例中,agcu中的一个agcu被配置为主agcu,其包括配置加载/卸载控制器(例如301)。主agcu实现了这样的寄存器,主机(120,图1)可以通过该寄存器经由总线系统将命令发送到主agcu。主agcu控制对贴片中的可配置单元的操作,并且实现程序控制状态机以基于它通过写入寄存器从主机接收的命令来追踪贴片的状态。对于每个状态转换,主agcu通过菊花链命令总线向贴片上的所有组件发出命令(图4)。这些命令包括用于重置贴片中的可配置单元的阵列中的可配置单元的程序重置命令,以及用于将配置文件加载到可配置单元的程序加载命令。

主agcu中的配置加载控制器负责从存储器中读取配置文件,并且将配置数据发送到贴片的每个可配置单元。主agcu可以优选地以顶级网络的最大吞吐量从存储器中读取配置文件。从存储器读取的数据由主agcu根据本文中所描述的分发顺序通过阵列级网络上的矢量接口发送到对应的可配置单元。

在一个实施例中,以可以减少可配置单元内的布线要求的方式,保存要在组件中的配置加载过程中加载或配置卸载过程中卸载的单元文件的配置和状态寄存器连接在串行链中,并且可以通过串行链移位比特的过程来加载。在一些实施例中,可以存在多于一个的并联或串联布置的串行链。当一个可配置单元在一个总线周期内从主agcu接收到例如128比特的配置数据时,可配置单元以每周期1比特的速率通过其串行链移位该数据,其中移位器周期可以以与总线周期相同的速率运行。可配置单元需要128个移位器周期来加载具有通过矢量接口接收的128比特的数据的128个配置比特。128比特的配置数据被称为块。可配置单元可能需要多个数据块来加载其所有配置比特。示例移位寄存器结构如图6中所示。

可配置单元通过多个存储器接口(150,图1)与存储器交互。可以使用若干agcu来访问存储器接口中的每个存储器。每个agcu包含可重配置标量数据路径,以生成对片外存储器的请求。每个agcu包含fifo(用于组织数据的先进先出缓冲区)以缓冲来自片外存储器的传出命令、数据和传入响应。

agcu中的地址生成器ag可以生成密集或稀疏的存储器命令。密集请求可用于批量传输连续的片外存储器区域,并可以用于从/向可配置单元的阵列中的可配置单元读取或写入数据块。密集请求可以通过agcu中的合并单元(cu)转换为多个片外存储器突发请求。稀疏请求可以将地址流入队到合并单元。合并单元使用合并超高速缓冲存储器来维护关于所发出的片外存储器请求的元数据,并且组合属于同一片外存储器请求的稀疏地址以最小化所发出的片外存储器请求的数目。

图4是示出了示例可配置单元400(诸如,模式计算单元(pcu))的框图。可配置单元的阵列中的可配置单元包括配置数据存储库420(例如,串行链)以存储单元文件,该单元文件包括特定于对应的可配置单元的配置数据的多个块(或者,其他大小的子文件)。可配置单元的阵列中的可配置单元各自均经由线路422连接到配置数据存储库420的单元配置加载逻辑440,以执行单元配置加载过程。单元配置加载过程包括经由总线系统(例如,矢量输入)接收特定于可配置单元的单元文件的块,并且将所接收的块加载到可配置单元的配置数据存储库420中。参考图5进一步描述了单元配置加载过程。

在该示例中,多个可配置单元中的可配置单元中的配置数据存储库包括锁存器的串行链,其中锁存器存储控制可配置单元中的资源的配置的比特。配置数据存储库中的串行链可以包括串联连接的配置数据的移位寄存器链和状态信息和计数器值的第二移位寄存器链。参考图6进一步描述了配置存储库。

可配置单元可以使用三组对应的输入和输出(io):标量输入/输出、矢量输入/输出和控制输入/输出,与标量、矢量和控制总线对接,这三组对应的io是。标量io可以用于传送数据的单个字(例如,32比特)。矢量io可以用于传送数据块(例如128比特),诸如在单元配置加载过程中接收配置数据以及在多个pcu之间的长管道上进行配置之后在操作期间发送和接收数据的情况下。控制io可以用于传送控制信号,诸如可配置单元的执行的开始或结束。控制输入由控制块470接收,并且控制输出由控制块470提供。

使用矢量fifo块460中的矢量fifo来缓存每个矢量输入,该矢量fifo块可以包括一个或多个矢量fifo。使用标量fifo450来缓冲每个标量输入。使用输入fifo解耦了数据产生者与消费者之间的定时,并且通过使其对输入延迟不匹配具有鲁棒性来简化可配置单元间的控制逻辑。

输入配置数据410可以作为矢量输入提供给矢量fifo,然后被传输到配置数据存储库420。可以使用矢量输出从配置数据存储库420中卸载输出配置数据430。

cgra使用菊花链完成总线来指示加载/卸载命令何时完成。主agcu通过菊花链命令总线将程序加载和卸载命令发送到可配置单元的阵列中的可配置单元(从s0过渡到s1,图5)。如图4的示例中所示,菊花链完成总线491和菊花链命令总线492连接到菊花链逻辑493,该菊花链逻辑与单元配置加载逻辑440通信。如下所述,菊花链逻辑493可以包括加载完成状态逻辑。在下面进一步描述了菊花链完成总线。命令和完成总线的其他拓扑显然是可能的,但在本文中没有描述。

在框480中,可配置单元包括多个可重配置的数据路径。可配置单元中的数据路径可以被组织为多级(级1、……、级n)、可重配置simd(单指令、多数据)管线。推入到可配置单元中的配置串行链的数据块包括可配置单元中的每个数据路径的每一级的配置数据。配置数据存储库420中的配置串行链经由线路421连接到块480中的多个数据路径。

模式存储器单元(例如,pmu)可以包含与用于地址计算的可重配置标量数据路径耦接的暂存存储器,以及pcu中所使用的总线接口。pmu可以用于在整个可重配置单元阵列中分配片上存储器。在一个实施例中,pmu中的存储器内的地址计算对pmu数据路径执行,而核心计算在pcu内执行。

图5示出了可以用于控制可配置单元中的单元配置加载过程的状态机的一个示例。一般而言,单元配置加载过程在一个总线周期内从总线系统接收特定于可配置单元的单元文件的第一块(或子文件),在接收到单元文件的第二个块之前,在随后的以与总线周期相同的速率发生的移位器周期期间开始将接收的第一组块推入到串行链。在稍后的总线周期内从总线系统接收到特定于可配置单元的单元文件的第二块时,处理在将较早接收的块推入到串行链之后的周期期间开始将所接收的第二块推入到串行链。在配置加载过程的一些或所有轮次中,在可配置单元接收到多个有顺序的块中的第二块(在单元文件的块的顺序中的下一个)之前,第一块可以被可配置单元中的单元配置加载过程消费。

图5的状态机包括六个状态s0至s5。在状态s0(空闲),单元配置加载过程等待来自主agcu中的配置加载/卸载控制器的配置加载/卸载命令。配置加载/卸载控制器负责从/向片外存储器(140,图1)和向/从可配置单元的阵列(190,图1)加载和卸载配置数据。当在配置加载/卸载控制器处接收到加载命令时,单元配置加载过程进入状态s1。

在状态s1(等待静止),多个数据路径中的功能触发器被禁用,所以功能触发器不循环,并且标量输出、矢量输出和控制输出关闭,所以输出不驱动任何加载。如果接收到加载命令,则单元配置加载过程进入状态s2。当接收到卸载命令时,单元配置加载过程进入状态s4。

在状态s2(等待输入有效),单元配置加载过程等待输入fifo(610,图6)变为有效。当输入fifo变为有效时,输入fifo已经由总线系统接收到配置文件的配置数据块。例如,配置数据块可以包括128比特的加载数据,其在总线系统的矢量网络上接收并且矢量网络具有128比特的矢量总线宽度。当输入fifo变为有效时,单元配置加载过程进入状态s3。

在状态s3(加载移位),128比特的配置数据块首先从输入fifo在一个时钟周期内出队,然后128比特的配置数据块在128个时钟周期内被移位到输入移位寄存器(620,图6)中。输入移位寄存器可以具有与配置数据块相同的长度(例如,128比特),并且将配置数据块移位到输入移位寄存器中需要与配置数据块的长度相同数目的移位器时钟周期(例如,128个)。如上所述,在一些实施例中,移位器时钟和总线时钟(或总线周期)可以以相同的速率运行。

可配置单元中的配置数据存储库包括配置串行链(630、640,图6),其可以被配置为fifo链,以存储包括特定于可配置单元的多个配置数据块的单元文件。多个配置数据块包括第一配置数据块和最后配置数据块。输入移位寄存器中的配置数据块在随后的时钟周期内进一步串行移位到配置数据存储库中。参考图6进一步描述了配置数据存储。

在特定于可配置单元的单元文件的第一块在状态s3被移位到输入移位寄存器之后,单元配置加载过程确定第一配置数据块是否是可配置单元特有的最后配置数据块。如果是,则可配置单元的单元文件的加载完成,单元配置加载过程进入状态s0。如否,则单元配置加载过程进入状态s2,并且等待输入fifo对可配置单元特定的第二配置数据块变为有效。

当在状态s1接收到卸载命令时,单元配置加载过程进入状态s4。

在状态s4(卸载移位),来自配置数据存储库的配置数据块被移位到输出移位寄存器(650,图6)。配置数据块可以包括128比特的卸载数据。输出移位寄存器可以具有与配置数据块相同的长度(例如,128),并且将配置数据块从配置数据存储库移位到输出fifo需要与配置数据块的长度相同数目的移位器时钟周期(例如,128)。当配置数据块移位到输出移位寄存器时,单元配置加载过程进入状态s5(等待输出有效)。

在状态s5(等待输出有效),单元配置加载过程等待输出fifo(660,图6)变为有效。当输出fifo变为有效时,具有来自输出移位寄存器的128比特的配置数据块在一个时钟周期内插入到输出fifo。然后可以将输出fifo中的配置数据块发送到总线系统(图3)。

在状态s5将第一配置数据块移入到输出fifo之后,单元配置加载过程确定配置数据的第一块是否是配置数据存储库中的配置数据的最后一个块。如果是,则可配置单元的配置数据的卸载完成,单元配置加载过程进入状态s0。如否,则单元配置加载过程进入状态s4,并且来自配置数据存储库的第二配置数据块被串行移位到输出移位寄存器中。

图6是可配置单元中的配置存储库的逻辑表示。在本实施例中,可配置单元中的配置数据存储库(420,图4)包括配置串行链,该配置串行链包括第一移位寄存器链630和第二移位寄存器链640。第一移位寄存器链630包括一组寄存器或锁存器。第二移位寄存器链640包括另一组寄存器或锁存器(触发器)。在本实施例中,第一移位寄存器链和第二移位寄存器链串联连接以形成单个链。

配置文件包括可配置单元的阵列中的多个可配置单元中的每个可配置单元的多个配置数据块。配置数据块表示相应可配置单元的初始配置或开始状态。该系统中的配置加载操作是在可配置单元的阵列中设置配置数据的单元文件以允许所有可配置单元执行程序的处理。

第一移位寄存器链630中的寄存器组可以表示设置或运行程序的序列,包括对包含寄存器的可配置单元的操作的定义。这些寄存器可以寄存嵌套循环的数目、每个循环迭代器的限制、每一级要执行的指令、操作数的来源、以及输入和输出接口的网络参数。第二移位寄存器链中的寄存器组可以包含有关加载在可配置单元中的程序的逐周期运行状态的数据。

如图6的示例中所示,第一移位寄存器链630和第二移位寄存器链640串联连接,使得第一移位寄存器链的msb(最高有效比特)连接到第二个移位寄存器链的lsb(最低有效比特)。加载信号或卸载信号可以作为耦接到第一移位寄存器链的lsb和第二移位寄存器链的lsb的移位启用信号,以控制对第一移位寄存器链和第二移位寄存器链的加载/卸载操作。输入fifo610经由选择器670耦接到输入移位寄存器620。当加载信号被激活时,选择器670将输入移位寄存器620连接到配置数据存储库的输入(第一移位寄存器链630的lsb)。

当加载信号被激活时,输入移位寄存器620中的配置数据可被以为到配置串行链中的第一移位寄存器链630和第二移位寄存器链640。在此,加载信号可以作为输入移位寄存器、第一移位寄存器链和第二移位寄存器链的启用信号。加载操作可以重复,直到可配置单元的所有配置数据块加载到可配置单元中的配置数据存储库中。当串行链的长度与整数个的块(或者,子文件)的长度不同时,可以通过差值填充串中的第一个块,并且当最后一个块移入时,填充比特将被移出到链的末尾。例如,可配置单元中的配置数据存储库可以存储大小为760比特的单元文件。单元配置加载过程可以加载整数n个的块。在该示例中,n=6,并且数目n的块包括块5、块4、块3、块2、块1和块0。矢量总线的矢量宽度为128比特,配置数据块具有128比特,并且块可以在一个总线时钟周期内发送到一个可配置单元。n个块的大小为nx128=6*128=768比特,其中包括8个填充比特以匹配760比特的单元文件大小。

为了从错误中恢复,卸载操作可以检查每个可配置单元的状态。卸载操作可以保存重启所需的每个可配置单元的执行状态,并且在发生错误时使得应用程序能够重新启动。还允许出于调试目的而保存或传输可配置单元的状态。需要保存的状态至少包括部分的第一移位寄存器或第二移位寄存器的内容,并且可选地包括pmu存储器的内容。程序卸载还可能会需要卸载所有的第一移位寄存器和第二移位寄存器的状态。

输出fifo660耦接到输出移位寄存器650,该输出移位寄存器又耦接到配置数据存储库的输出(第二移位寄存器链640的msb)。对于卸载操作,当卸载信号被激活时,第二移位寄存器链640和第一移位寄存器链630中的配置数据可以被移位到输出移位寄存器650。当输出fifo660被激活时,输出移位寄存器650中的配置数据(例如,128比特)可以在一个时钟周期内插入到输出fifo660中。卸载操作可以重复,直到可配置单元中的配置数据存储中的所有配置数据块都被卸载到输出fifo中。

为了同步和传送由magcu中的配置加载控制器发出的配置加载命令的完成,在一个示例中实现了单线菊花链方案,该方案在链的每个组件中由菊花链逻辑(例如,图4中的菊花链逻辑493)支持。

该方案要求每个组件具有以下2个端口:

1.名为program_load_done_in的输入端口

2.名为program_load_done_out的输出端口

当组件完成执行由magcu发出的命令并且其program_load_done_in输入被驱动为高时,该组件将驱动其program_load_done_out信号。magcu将在已完成了用于执行命令的所有必要步骤时,通过驱动其program_load_done_out来启发菊花链。链中的最后组件将驱动其program_load_done_out,它将连接到magcu的program_load_done_in。magcu的program_load_done_in变高表示命令完成。将与所有组件的所有块(chunks)相对应的数据递送之后,magcu将其program_load_done_out端口驱动为高。当所有组件已完成了加载它们所有的配置比特之后,所有组件都会将它们相应的program_load_done_out端口驱动为高。

当magcu输入端口program_load_done_in被声明时,配置文件加载完成。

图7是示出了耦合到可重配置的数据处理器的主机的操作的流程图。在步骤711,主机(120,图1)经由pcie接口(130,图1)和顶级网络(115,图1)将可配置单元的阵列的配置文件发送到片外存储器(140,图1),或者以其他方式将配置文件存储在可配置处理器可访问的存储器中。

在步骤712,在将配置文件加载到存储器完成时,主机120将配置加载命令发送到处理器中的配置加载控制器(在该示例中,为主agcu的一部分)。主agcu可以实现一个寄存器,主机可以通过该寄存器将配置加载命令发送到配置加载控制器。配置加载命令可以识别可经由可配置处理器上的存储器接口访问的存储器中的位置。配置加载控制器然后可以响应于用于取回配置文件的命令而经由顶级网络生成一个或多个存储器访问请求。主机然后可以针对配置文件已被完全加载的信号监视可配置处理器(714)。当文件加载完成时,主机然后可以发起要由机器执行的功能(716)。

图8是示出了配置加载控制器的操作的流程图,该配置加载控制器可以是agcu的一部分或以其他方式与贴片中的可配置单元的阵列通信。配置加载控制器负责从片外存储器(140,图1)读取配置文件,并且将配置数据发送到可配置单元的阵列中的每个可配置单元。该流程图以配置加载控制器等待配置加载命令(810)开始。如上所述,配置加载命令标识配置文件,以及其在处理器可访问的存储器中的位置。

在接收到加载命令之后,在步骤811,配置加载控制器向连接到可重配置的数据处理器(110,图1)的存储器(140,图1)发出加载请求。在步骤812,配置加载控制器经由存储器接口在顶级网络上取回配置文件的块。在步骤813,配置加载控制器将配置文件的块以有序轮次分发到阵列级网络上的阵列中的可配置单元。当配置文件的所有块已被接收和分发时,配置加载控制器在步骤814生成分发完成信号(例如,其program_load_done_out)。配置加载控制器然后等待来自可配置单元的确认,即它们相应的单元文件已被加载,例如通过在步骤815声明其program_load_done_in来指示。在确认成功的配置加载后,配置加载控制器可以通知主机(816)。

图9示出了配置文件的一个示例组织。可以使用其他组织以及适合用于加载和卸载配置文件的特定协议的布置。在参考图9描述的示例中,可配置单元的阵列中的可配置单元包括交换机、pcu、pmu和agcu。这些可配置单元中的每个可配置单元包含表示设置或运行程序的顺序的一组寄存器。这些寄存器包括定义包含它的可配置单元的操作的数据,诸如嵌套循环的数目、每个循环迭代器的限制、每一级要执行的指令、操作数的来源、以及输入和输出接口的网络参数。另外,每个配置文件可以包括用于设置一组计数器中的上下文的数据,该一组计数器在每个嵌套循环中追踪其进度。

可执行的程序包含表示执行程序的可配置单元中的每个可配置单元的初始配置或开始状态的比特流。该比特流被称为比特文件,或在本文中被称为配置文件。程序加载是基于配置文件的内容在可配置单元中设置配置存储库以允许所有可配置单元执行程序的处理。程序卸载是从可配置单元卸载配置存储库并组装比特(在此被称为卸载配置文件)的处理。在本文中所描述的示例中,卸载配置文件具有相同的布置块或子文件,以及用于程序加载的配置文件。

配置文件包括用于可配置单元的阵列中的每个可配置单元的多个配置数据块,该块以匹配它们将被分发的顺序的方式在配置文件中布置。配置文件的该组织使得阵列配置加载过程能够基于块在配置文件中的位置将块路由到可配置单元。

如图9所示,配置文件(和以相同方式布置的卸载配置文件)包括多个可配置单元中的每个可配置单元的多个单元文件的数据块(block),单元文件具有多达m个(在该示例中,z4=6)个子文件,该子文件具有单元文件中的顺序(i)。在图9中,m为六,块从第一到第六排序(即,第一块至第六块对应于该索引中的块(0)至(5))。对块进行布置,使得针对加载或卸载配置文件中的所有单元文件的顺序(i)(i从0到m-1)的所有子文件存储在存储器的对应的地址空间的数据块(i)中(i从0到m-1)。顺序(0)的块被存储在包括地址a0至a1-1的数据块(0)中。在该示例中,交换机单元的顺序(0)的块在数据块(0)内的一组连续地址中。pcu的顺序(0)的块在数据块(0)内的一组连续地址中。pmu的顺序(0)的块在数据块(0)内的一组连续地址中。agcu的顺序(0)的块在一组连续地址中。顺序(1)的块被存储在包括地址a1到a2-1的数据块(1)中。在该示例中,交换机单元的顺序(1)的块被存储在数据块(1)内的一组连续地址中。pcu的顺序(1)的块在数据块(1)内的一组连续地址中。pmu的顺序(1)的块在数据块(1)内的一组连续地址中。agcu的顺序(1)的块在数据块(1)内的一组连续地址中。顺序3到5的块按照数据块(2)到(5)中的模式布置,如图9中所示。

如所见的那样,在该示例中,线性地址空间被分配在行边界上的配置文件的数据块内。在其他实施例中,线性地址空间可以在字边界或块边界上被分配。可以选择边界以匹配所使用的存储器的效率特性。因此,该示例中的配置文件包括具有连续行地址的存储器行。

而且,阵列包括多于一种类型的可配置单元,并且不同类型的可配置单元的单元文件包括不同数目的配置数据的子文件,并且其中,在地址空间的数据块(i)内,每种类型的可配置单元的子文件被存储在地址空间的数据块(i)内的一组连续地址中。

该阵列可以包括多于一种类型的可配置单元,并且不同类型的可配置单元的单元文件可以包括不同数目的配置数据块。例如,如图3所示,阵列中的可配置单元的类型可以包括交换单元、pcu(模式计算单元)、pmu(模式存储单元)和agcu(地址生成和合并单元)。

示例配置文件组织包括:

w(例如,图3中为28个)交换单元,每个单元需要z1个配置

比特的块;

x(例如,9)个pcu单元,每个单元需要z2个配置比特的块;

y(例如,9)个pmu单元,每个单元需要z3个配置比特的块;

z(例如,4)个agcu单元,每个单元需要z4个配置比特的块。

因此,第一类型的可配置单元的单元文件可以包括z1个块,并且第二类型的可配置单元的单元文件包括z2个块,其中z1小于z2。阵列配置加载过程可以包括取回这样的配置文件的段,在(i)从0到z1-1的z1轮次中,该段包括第一类型和第二类型的所有可配置单元的单元文件的块(i),然后取回这样的配置文件的段,在(i)从z1到z2-1的z2轮中,该段包括所有第二类型的可配置单元的单元文件的块(i)。第三类型的可配置单元的单元文件可以包括z3个块,第四类型的可配置单元的单元文件包括z4个块,其中z1小于z2,z2小于z3,并且z3小于z4。对于需要多于(i 1)个的块的所有不同类型的可配置单元,分发序列可以在该模式下继续:每个块(i)一个轮次。

如示例配置文件组织所示的那样,配置文件中的配置数据块以交错方式布置:

·第r轮次的每个交换单元的配置比特的2个块中的第一个(i=0);

·第r轮次的每pcu单元的配置比特的3个块中的第一个(i=0);

·第r轮次的每pmu单元的配置比特的5个块中的第一个(i=0);

·第r轮次的每agcu单元的配置比特的6个块中的第一个(i=0);

·第r轮次的每个交换单元的配置比特的2个块中的第二个(i=1);

·第r轮次的每个pcu单元的配置比特的3个块中的第二个(i=1);

·第r轮次的每个pmu单元的配置比特的5个块中的第二个(i=1);

·第r轮次的每个agcu单元的配置比特的6个块中的第二个(i=1);

·第r轮次的每个pcu单元的配置比特的3个块中的第三个(i=2);

·第r轮次的每个pmu单元的配置比特的5个块中的第三个(i=2);

·第r轮次的每个agcu单元的配置比特的6个块中的第三个(i=2);

·第r轮次的每个pmu单元的配置比特的5个块中的第四个(i=3);

·第r轮次的每个agcu单元的配置比特的6个块中的第四个(i=3);

·第r轮次的每个pmu单元的配置比特的5个块中的第五个(i=3);

·第r轮次的每个agcu单元的配置比特的6个块中的第五个(i=4);

·第r轮次的每个4个agcu单元的配置比特的6个块中的第六个(i=5)。

单元文件可以被组织成包括多个有顺序的块(或者,其他大小的子文件)。在一些实施例中,特定于不同可配置单元的单元文件可以具有不同数目的有顺序的块。对可配置单元的阵列的配置文件进行布置,使得单元文件的块与其他单元文件的相同顺序的块分组。而且,对配置文件进行布置,使得块在配置文件中的位置暗示块的阵列中的可配置单元及其在特定于可配置单元的单元文件中的顺序。

阵列配置加载过程可以取回这样的配置文件的段,(i)从0到z1-1(=1),该段包括第一类型(交换类型)、第二类型(pcu类型)、第三类型(pmu类型)和第四种类型(agcu类型)的所有可配置单元的单元文件的块(i)。在第一轮次中取回四种类型的所有可配置单元的单元文件的块(0),并且在第二轮次中取回四种类型的所有可配置单元的单元文件的块(1)。在第一轮次和第二轮次之后,第一类型(交换类型)的所有可配置单元的单元文件的所有(2)块都已被取回。第一、第二、第三种和第四类型的所有可配置单元的单元文件分别具有0、1、3和4个剩余要取回的块。

然后,阵列配置加载过程可以在第三轮次中取回这样的配置文件的段,该段包括第二、第三和第四类型的所有可配置单元的单元文件的块(i)。在第三轮次之后,第二类型(pcu类型)的所有可配置单元的单元文件的所有(3)块都已被取回。第一、第二、第三种和第四类型的所有可配置单元的单元文件分别具有0、0、2和3个剩余要取回的块。

然后,阵列配置加载过程可以在第四轮次中取回这样的配置文件的段,该段包括第三和第四类型的所有可配置单元的单元文件的块(i)。在第四轮次之后,第三类型(pmu类型)的所有可配置单元的单元文件的所有(4)块都已被取回。第一、第二、第三种和第四类型的所有可配置单元的单元文件分别具有0、0、1和2个剩余要取回的块。

然后,在第五和第六轮次中,阵列配置加载过程可以在第四轮次中取回这样的配置文件的段,从z3(=4)到z4-1(5),该段包括第三和第四类型的所有可配置单元的单元文件的块(i)。在第六轮次之后,第四类型(agcu类型)的所有可配置单元的单元文件的所有(6)块都已被取回。第一、第二、第三种和第四类型的所有可配置单元的单元文件分别具有0、0、0和0个剩余要取回的块。

以上述方式,阵列配置加载过程可以继续,直到第一、第二、第三和第四类型的所有可配置单元的单元文件没有剩余要取回的块为止。

阵列配置加载过程使用配置文件中的块的位置所暗示的地址经由阵列级网络将配置数据块路由到可配置单元。例如,198个交换机单元中的每个交换机单元的2个配置数据块中的第一个具有线性存储器地址0-12288,并且198个交换机单元中的每个交换机单元的2个配置数据块中的第二个具有线性存储器地址33792-46080。

在一些实施例中,配置文件的块可以无序地从存储器返回到配置加载控制器。配置文件中的块的位置可以用于将块路由到正确的可配置单元。因为分发顺序中的轮次的组织,所以可配置单元保证按顺序接收它们的单元文件的块。

图10是示出了用于针对与图2和图3的系统类似的系统执行阵列配置加载过程的逻辑的一个示例的状态机图,该过程包括:分发包含阵列中多个可配置单元的单元文件的配置文件,单位文件各自包括多个有顺序的块(或者,子文件);通过以n个轮次的序列(i的r(i)=0至n-1)经由总线系统将顺序(i)的一个单元块发送到多个可配置单元中的包括多达n个子文件的所有可配置单元,直到将配置文件中的单元文件分发到多个可配置单元中的可配置单元为止。

在该示例中,状态机包括六个状态s1至s6。在状态s1(空闲),配置加载控制器等待来自主机的配置加载命令。当接收到配置加载命令时,加载过程进入状态s2以开始执行分发序列的第一轮次r(0)。每个轮次遍历状态s2到s6。在本文中所描述的示例中,存在六个轮次,这是因为要分发到阵列中的可配置单元的块的最大数目为六。

在状态s2(交互请求),配置加载控制器经由顶级网络生成存储器访问请求,以取回相应交换机单元的配置单元文件的第轮次r(i)的状态s2的块,并且将取回到的块分发到相应交换单元。对于i=0,在轮次r(0)中,配置加载控制器针对相应交换单元的多个块中的块(0)生成存储器访问请求,并且将块(0)发送到相应交换单元。对于i=1,在轮次r(1)中,配置加载控制器针对相应交换单元的多个块中的块(1)生成存储器访问请求,并且将块发送到相应交换单元。在轮次r(i)中,当配置加载控制器针对相应交换单元的多个块中的块(i)生成了存储器访问请求,并且针对所有交换单元分发了块时,加载过程进入状态s3。

在状态s3(pcu请求),配置加载控制器经由顶级网络生成存储器访问请求,以取回相应pcu单元(模式计算单元)的配置单元文件的轮次r(i)的块,并且将取回到的块分发到相应pcu单元。在轮次r(i)的状态s3中,配置加载控制器针对相应pcu单元的多个块中的块(i)生成存储器访问请求,并且将块(i)发送到相应pcu单元。在轮次r(i)中,当配置加载控制器针对相应pcu单元的多个块中的块(i)生成了存储器访问请求并分发了块时,加载过程进入状态s4。

在状态s4(pmu请求),配置加载控制器经由顶级网络生成存储器访问请求,以取回可配置单元的阵列中的相应pmu单元(模式存储器单元)的配置单元文件的块,并且将取回到的块发送到相应pmu单元。在轮次r(i)的状态s4中,配置加载控制器针对相应pmu单元的多个块中的块(i)生成存储器访问请求,并且将块(i)发送到相应pmu单元。例如,对于i=0,在轮次r(0)中,配置加载控制器针对相应pmu单元的多个块中的块(0)生成存储器访问请求,并且将块(0)发送到相应pmu单元。对于i=1,在轮次r(1)中,配置加载控制器针对相应pmu单元的多个块中的块(1)生成存储器访问请求,并且将块(1)发送到相应pmu单元。在轮次r(i)中,当配置加载控制器针对相应pmu单元的多个块中的块(i)生成了存储器访问请求并分发了块时,加载过程进入状态s5。

在状态s5(agcu请求),配置加载控制器经由顶级网络生成存储器访问请求,以取回可配置单元的阵列中的相应agcu单元(地址生成和合并单元)的配置单元文件的块,并且将取回到的块发送到相应agcu单元。在轮次r(i)的状态s5中,配置加载控制器针对相应agcu单元的多个块中的块(i)生成存储器访问请求,并且将块(i)发送到相应agcu单元。在轮次r(i)的状态s5中,当配置加载控制器已针对相应agcu单元的多个块中的块(i)生成了存储器访问请求并分发了块时,加载过程进入轮次r(i)的状态s6。

在状态s6(响应等待),配置加载控制器等待以确保阵列中的可配置单元(交换机、pcu、pmu、agcu单元)准备好在下一轮次接收更多的配置数据块。如果交换单元的所有块都没有发送,则加载过程递增(i)并进入状态s2以开始下一轮次r(i 1)。如果交换单元的所块都被发送而pcu块的所有块都没有发送,则加载过程递增(i)并进入状态s3以开始下一轮r(i 1)。如果交换单元和pcu单元的所有块都被发送而pmu块的所有块都没有发送,则加载过程递增(i)并进入状态s4以开始下一轮次r(i 1)。如果交换单元、pcu单元和pmu单元的所有块都被发送而agcu块的所有块都没有发送,则加载过程递增(i)并进入状态s5以开始下一轮次r(i 1)。如果发送了所有可配置单元(交换、pcu、pmu、agcu单元)的所有块(即,所有轮次完成),则加载过程进入状态s1。

图11是示出了与图10的分发序列类似的分发序列的早期轮次的时序的时序图。在该示例中,配置单元文件的块具有数目为b个比特的数据(例如,b=128),分发序列中的轮次可以包括数目为x个的可配置单元,可配置单元的阵列可以包括数目为y的可配置单位(例如,y=148)。对于轮次r(0),x可以等于y。在随后的轮次中,x可以小于或等于y。

在该示例中,轮次r(0)包括y=148个可配置单元。对于轮次r(0)和r(1),x=y。在前两个轮次r(0)和r(1)之后,交换单元已接收了所有(2)它们的块,所以第三轮次r(2)包括少于128个可配置单元。

如图11的示例中所示,轮次第r(0),配置单元文件的第一块p11在第一总线周期c0中经由总线系统在可配置单元处被接收。然后,通过在可配置单元处的并行任务中串行移位,同时将轮次的其他块由配置加载控制器分发到其他可配置单元,第一块被加载到第一可配置单元“单元1”的配置存储库中,第一块p11中的b个比特的数据在b个时钟周期内(可以以与总线时钟相同的速率运行)。在第二总线周期c1内经由总线系统接收配置文件的第二块p21。然后,通过在b个时钟周期内串行移位第二块p21中的b个比特的数据,在并行任务中将第二块加载到第二可配置单元“单元2”的配置存储库中。在第三总线周期c2中经由总线系统接收配置文件的第三块p31。然后,通过在b个时钟周期内串行移位第三组块p31中的b个比特的数据,将第三块p31加载到第三可配置单元“单元3”的配置存储库中。该轮次继续进行,直到所有可配置单元接收到特定于它们的单元文件的第一个块为止。

轮次r(0)包括在阵列中的y个相应可配置单元(单元1……单元y)中分发配置文件的第一组y个块(p11、p21、p31……py1)。配置文件的块具有数目为b比特的数据,可配置单元的阵列具有数目为y的可配置单元。当轮次r(0)完成时,第一组中的y个配置文件的块(p11、p21、p31…………py1)已在y个总线周期(c0到cy-1)内在阵列中的y个可配置单元中接收到,并且第一块p11已在b个时钟周期内被加载或串行移位到第一可配置单元“单元1”的配置存储库中。b个时钟周期在第一个块p11被接收的第一时钟周期c0之后。

下一轮次r(1)包括在阵列中的y个相应可配置单元(单元1……单元y)中接收配置文件的第二组y块(p12、p22、p32……py2)。当轮次r(1)完成时,第二组中的y个配置文件的块(p12、p22、p32…………py2)已在y个时钟周期(cy到c2y-1)内在阵列中的y个相应可配置单元中接收到。当轮次r(1)完成时,第一可配置单元“单元1”的第二块p12已在轮次r(1)内在第一时钟周期(cy)之后的b个时钟周期内被加载,或串行移位到第一可配置单元“单元1”的配置存储库中。而且,当第二轮次完成时,在轮次r(0)内接收的配置文件的第一组y个块中的最后块py1已被加载或串行移位到最后可配置单元“单元y”的配置存储库中。

只要块中的比特的数目b(128)小于轮次中的可配置单元的数目x,可配置单元将在前一块已加载了之后接收单元配置文件的下一块,使得可配置单元应准备就绪,而无需停止序列。在该示例中,块中的比特的数目b为128,并且轮次r(0)中的可配置单元的数目x为x=y=148。由于将块中的128比特串行移位到可配置单元的配置数据存储库需要128个时钟周期,因此在移位完成之后可以有效地有20(y-b=148-128)个缓冲周期,确保第一可配置单元“unit1”准备好接受下一轮次r(1)中的下一块(p12)。当块中的比特的数目b大于轮次中的可配置单元的数目x时,可以在消费前一块的同时接收下一块。在此消费是指将块中的比特串行移位到可配置单元的配置数据存储库中。

通常,单元配置加载过程在一个总线周期内从总线系统接收特定于可配置单元的单元文件的第一块(或者,子文件),在接收下一轮次的单元文件的第二块之前,在随后的总线周期期间开始将接收到的第一块推入串行链,从总线系统接收特定于可配置单元的单元文件的第二块,用于稍后的总线周期内的下一轮次的序列,并且在将早先接收的块推入串行链之后,在序列的周期期间开始将接收到的第二块推入串行链。在一些轮次中,可以在接收下一块之前消费所有接收到的块。

由于不同类型的可配置单元可能具有不同数目的配置比特,因此可配置单元可能需要不同数目的块。一旦需要较少数目的块的可配置单元已加载了它们所有的配置比特,配置加载控制器就会停止向它们发送数据。这会导致更少的可配置单元(数目x)交错,并且可能导致可配置单元在完成处理前一块之前接收新的块。这可能会导致阵列级网络的背压(back-pressure)。

背压可以经由阵列级网络上的信用机制来处理。例如,每个输入fifo可以具有一个跳到跳(hop-to-hop)信用,所以如果pcu的输入fifo填满,那么阵列级网络中的任何交换机都不会尝试将配置数据发送到可以发送数据的该pcu的输入fifo,直到输入fifo清空一个条目并将信用返回给发送交换机为止。最终,当链路繁忙时,背压可能会阻止agcu发送数据。但是,一旦可配置单元消费了一个块的所有128个比特,它就会清空一个输入fifo条目,释放信用,然后发送方可以发送一个新的块(如果可用)。

图12是示出了可配置单元中的单元配置加载过程的流程图。在步骤1221,单元配置加载过程等待输入fifo(610,图6)变为有效。当有效时,输入fifo已经由用于配置可配置单元的总线系统接收到配置文件的配置数据块。当输入fifo有效时,流程进行到步骤1222。

在步骤1222,输入fifo出队。在步骤1223,来自输入fifo的配置数据块被并行加载到输入移位寄存器(620,图6)中。在步骤1224,输入移位寄存器中的配置数据块被移位到可配置单元的配置数据存储库中的配置串行链中。

在步骤1225,单元配置加载过程确定加载的配置数据块是否是可配置单元的最后配置数据块。如果是,则可配置单元的配置数据的加载完成。如否,则流程进行到步骤1221,并且单元配置加载过程等待输入fifo对于下一配置数据块变为有效。参考图5和图6进一步描述了可配置单元中的单元配置加载过程。

图13是用于针对与图2和图3的系统类似的系统执行阵列配置卸载过程的逻辑的一个示例的状态机图。

在该示例中,状态机包括三个状态s1至s3。在状态s1(空闲),配置卸载控制器等待来自主机的配置卸载命令。配置卸载控制器针对阵列配置卸载过程实现了两个计数“next_unld_req_count”和“next_unld_resp_count”。计数“next_unld_req_count”追踪下一卸载请求计数。计数“next_unld_resp_count”追踪下一卸载响应计数。在状态s1,两个计数都重置为初始值,诸如0。当接收到配置卸载命令时,卸载过程进入状态s2。

在状态s2(genreq),配置卸载控制器针对可配置单元的阵列中的每个可配置单元(包括,阵列中的交换单元、pcu、pmu和agcu)生成卸载请求。对于所生成的每个卸载请求,计数“next_unld_req_count”递增。将计数“next_unld_req_count”与预定数目program_unload_req_count进行比较,该数目表示可配置单元的阵列中可配置单元的总数。只要计数“next_unld_req_count”小于program_unload_req_count,卸载过程就停留在状态s2。当计数“next_unld_req_count”等于program_unload_req_count时,针对阵列中的每个可配置单元已生成了卸载请求,卸载过程进入状态s3。

在状态s3(响应等待),配置卸载控制器针对从阵列中的可配置单元接收到的每个响应递增计数“next_unld_resp_count”。响应包括可配置单元的配置数据的单元文件中的块(子文件)。在一些示例中,响应还可以包括pmu暂存数据。在卸载过程期间,响应被提供给可配置单元的矢量输出,并在矢量总线上发送到配置加载控制器。只要计数“next_unld_resp_count”小于program_unload_req_count,卸载过程就停留在状态s2。

在状态s3,卸载过程针对每个接收到的响应生成一个存储器地址,并且将每个接收到的响应与在顶级网络上生成的存储器地址一起插入。每个响应包括一个卸载块和一个序列id。存储器地址从伴随阵列级网络中承载块的分组的报头生成,包括块号、列标识符、行标识符和序列id中的组件标识符。组件标识符可以指示可配置单元是交换单元、pcu单元、pmu单元还是agcu单元。参考图3进一步描述了序列id。

当计数“next_unld_resp_count”等于program_unload_req_count时,已从阵列中的可配置单元中的每个可配置单元接收到响应并在顶级网络上插入,并且卸载过程转换回到状态s1。

在一个实施例中,交换单元中配置数据的线性存储器地址的顺序是交换单元的第一列中的每一行的第一块,然后是交换单元的第二列中的每一行的第一块,再然后是交换单元的第三列中的每一行的第一块,……,直到最后一列中的每一行的第一块。这将线性地址空间中的所有交换单元的第一块分组。其他类型的可配置单元的第一块在相邻地址空间中成组加载。然后,顺序是交换单元的第一列中的每一行的第二块,然后是交换单元的第二列中的每一行的第二块,再然后是第三列中的每一行的第二块,……,直到交换单元的最后一列中的最后一行中的最后一个块,并且对于所有类型的可配置单元的第二个块,依此类推。

使用上述交换单元中的配置数据的存储器地址的顺序,下面的伪代码说明了如何针对交换单元(comp_switch)生成线性存储器地址。伪代码使用4个输入:

comp_id:组件标识符;

comp_col:列标识符;

comp_row:行标识符;

comp_chunk:块编号;

并且产生输出:

linear_address:卸载块的线性存储器地址;

针对交换机单元的特定卸载块生成线性存储器地址的伪代码如下:

其中

·comp_switch指示交换单元;

·num_row_sw是所有交换单元的行的数目;

·comp_count_all所有可配置单元的总和。

为了针对pcu、pmu或agcu单元的特定卸载块生成线性存储器地址,可以使用类似的代码。一个区别在于,所有交换单元的行的数目与所有pcu的行的数目、所有pmu的行的数目、所有agcu的行的数目不同。另一个区别在于,交换单元的线性存储器地址可以从基地址(例如0)开始,而pcu、pmu和agcu的线性存储器地址分别从交换单元、pcu和pmu的最后一个块之后的地址开始。

图14是示出了可配置单元中的单元配置卸载过程的流程图。在步骤1431,来自配置数据存储库中的配置串行链的配置数据块被串行移位到输出移位寄存器(650,图6)中。流程进入步骤1432。

在步骤1432,单元配置卸载过程等待输出fifo(660,图6)或其他类型的输出缓冲电路变为有效。在步骤1433,当输出fifo变为有效时,来自输出移位寄存器的配置数据块被插入到输出fifo中。在步骤1434,输出fifo中的配置数据块被写入总线系统(图3)。

在步骤1435,单元配置卸载过程确定第一配置数据块是否是配置数据存储库中的最后配置数据块。如果是,则可配置单元的配置数据的卸载完成。如否,则流程返回到步骤1431,并且来自配置数据存储的第二配置数据块被串行移位到输出移位寄存器中。

虽然通过参考上面所详述的优选实施例和示例公开了本发明,但是应当理解,这些示例旨在说明而不是限制意义。预期本领域技术人员将容易想到修改和组合,这些修改和组合将在本发明的精神和所附权利要求的范围内。

转载请注明原文地址:https://doc.8miu.com/read-350313.html

最新回复(0)