掌桥专利:专业的专利平台
掌桥专利
首页

流式传输平台流和架构

文献发布时间:2023-06-19 11:26:00


流式传输平台流和架构

该专利文件的公开内容的一部分包含受版权保护的材料。版权所有者不反对任何人以专利和商标局专利文件或记录中出现的方式对专利文件或专利公开进行传真复制,但在任何情况下均保留所有版权。

技术领域

本公开涉及集成电路(IC),更具体涉及将数据流用于主机系统与硬件加速电路系统之间的通信以及用于硬件加速电路系统的内核电路之间的通信。

背景技术

硬件加速是指在硬件或电路系统中实现程序代码部分的功能性。硬件加速的程序代码在功能上等同于原始程序代码。代替使用处理器执行诸如可执行二进制文件之类的程序代码的编译版本,该程序代码被实现为被配置为提供与可执行二进制文件相同的功能性的电路系统。与使用某种处理器执行程序代码相比较,程序代码的硬件加速版本通常提供更高的性能。在一些情况下,程序代码被编译为在可编程IC内实现的电路设计。

发明内容

前述和其他实现方式各自可以可选地包括单独或组合的以下特征中的一个或多个特征或所有以下特征。

在一个或多个实施例中,一种系统包括主机系统和通过通信接口耦合到主机系统的IC。IC被配置为用于硬件加速。IC包括直接存储器访问电路,该直接存储器访问电路耦合到通信接口;内核电路;以及流业务管理器电路,该流业务管理器电路耦合到直接存储器访问电路和内核电路。流业务管理器电路被配置为控制在主机系统与内核电路之间交换的数据流。

在一个方面中,主机系统和IC通过交换分组化数据通信。

在另一方面中,IC包括互连电路系统,该互连电路系统连接流业务管理器电路和内核电路。

在另一方面中,内核电路是多个内核电路中的一个内核电路,并且流业务管理器电路被配置为交织提供给多个内核电路的数据流。

在另一方面中,该IC包括输入缓冲器,该输入缓冲器耦合到互连电路系统和内核电路,其中该输入缓冲器被配置为临时保存来自流业务管理器电路的分组化数据并且将该分组化数据转换为提供给内核电路的数据流。该IC还包括输出缓冲器,该输出缓冲器耦合到互连电路系统和内核电路,其中该输出缓冲器被配置为临时保存从内核电路输出的数据流并且将该数据流转换为分组化数据。

在另一方面中,主机系统包括处理器,该处理器耦合到存储器,其中处理器被配置为在存储器中实现与输入缓冲器相对应的写入队列和与输出缓冲器相对应的读取队列。写入队列存储描述符,这些描述符指定要流式传输到输入缓冲器的数据。读取队列存储描述符,这些描述符指定要从输出缓冲器流式传输到主机系统的存储器的数据。

在另一方面中,主机系统被配置为将具有带内指令的分组化数据发送到内核电路。

在一个或多个实施例中,一种方法包括:使用计算机硬件来选择容器文件,该容器文件包括指定内核电路的配置比特流以及用于内核电路的元数据;使用计算机硬件从容器文件中提取配置比特流并且加载IC内的配置比特流,以在IC中实现内核电路;以及使用计算机硬件从元数据确定管道特性,其中管道特性指定用于将数据从主机系统流式传输到内核电路的设置。该方法还可以包括:将直接从主机系统传送到内核电路的数据实现为分组化数据,该分组化数据被转换为数据流并且使用管道属性指定的设置提供给内核电路。

在一个方面中,该方法包括:实现另一数据传送作为另一数据流,该另一数据流指定从内核电路直接到主机系统的结果。

在另一方面中,实现另一数据传送包括:确定与位于主机系统中的内核电路相对应的写入队列是否具有用于接收完整数据分组的空间,并且响应于确定该写入队列确实具有空间,发起从内核电路到主机系统的数据传送。

在另一方面中,该方法包括:将设置发送到IC内的流业务管理器电路,其中流业务管理器电路实现设置以在主机系统与内核电路之间流式传输数据。

在另一方面中,该方法包括:在数据流内包括用于内核电路的带内指令。

在另一方面中,该方法包括:基于请求数据传送的用户应用所使用的数据类型来确定数据传送要实现为数据流。

在另一方面中,实现数据传送包括:确定耦合到IC内的内核电路的输入缓冲器是否具有用于接收数据的空间,以及响应于确定输入缓冲器确实具有空间而发起到内核电路的数据传送。

在一个或多个实施例中,IC包括通信接口,该通信接口耦合到主机系统;直接存储器访问电路,该直接存储器访问电路耦合到该通信接口;内核电路,该内核电路使用可编程电路系统实现;以及流业务管理器电路,该流业务管理器电路耦合到直接存储器访问电路和内核电路。流业务管理器电路被配置为控制在主机系统与内核电路之间交换的数据流。

在一个方面中,IC包括第一互连,该第一互连被配置为从流业务管理器电路接收分组化数据并且将分组化数据分发到内核电路;以及第二互连,该第二互连被配置为从内核电路接收数据并且将数据提供给流业务管理器电路。

在另一方面中,IC包括输入缓冲器,该输入缓冲器耦合到第一互连的输出端口和内核电路的输入端口,其中输入缓冲器被配置为临时存储分组化数据,将分组化数据转换为数据流,并且将数据流提供给内核电路。响应于确定输入缓冲器具有可用空间,流业务管理器电路发起到内核电路的数据传送。

在另一方面中,IC包括输出缓冲器,该输出缓冲器耦合到内核电路的输出端口和流业务管理器电路的输入端口,其中输出缓冲器被配置为临时存储从内核电路输出的数据流,将数据流转换为分组化数据,并且将分组化数据提供给第二互连。响应于确定主机系统中与输出缓冲器相对应的缓冲器具有可用空间并且输出缓冲器包括至少一个完整分组,流业务管理器电路发起从内核电路到主机系统的数据传送。

在另一方面中,内核电路是在可编程电路系统中实现的多个内核电路中的一个内核电路。流业务管理器电路耦合到多个内核电路中的每个内核电路,并且被配置为交织与多个内核电路交换的数据流。

在另一方面中,多个内核电路中的每个内核电路通过缓冲器和互连耦合到流业务管理器电路。流业务管理器电路实现轮询仲裁(round-robin arbitration)方案,以基于与每个相应内核电路相对应的缓冲器的空间可用性将数据流式传输到多个内核电路中的每个内核电路。

在一个或多个实施例中,IC包括第一内核电路,该第一内核电路在可编程电路系统中实现;第二内核电路,该第二内核电路在可编程电路系统中实现;以及流业务管理器电路,该流业务管理器电路耦合到第一内核电路和第二内核电路。流业务管理器电路被配置为控制在第一内核电路与第二内核电路之间交换的数据流。

在一个方面中,从第一内核电路发送到第二内核电路的选定数据流包括用于第二内核电路的带内指令。

在另一方面中,第一内核电路通过第一输入缓冲器和第一输出缓冲器耦合到第一互连,第二内核电路通过第二输入缓冲器和第二输出缓冲器耦合到第二互连,并且第一互连和第二互连耦合到流业务管理器。

在另一方面中,流业务管理器电路被配置为直接从耦合到集成电路的主机系统向第一内核电路或向第二内核电路提供选定数据流,并且从第一内核电路或第二内核电路向主机系统提供结果数据流。

在另一方面中,选定数据流包括用于第一内核电路或第二内核电路的带内指令。

在另一方面中,第一内核电路位于集成电路的第一管芯中,而第二内核电路位于集成电路的第二管芯中。

在另一方面中,流业务管理器电路位于第一管芯中。

在另一方面中,IC包括输入缓冲器,该输入缓冲器耦合到第二管芯内的第二内核电路的输入端口,并且被配置为临时存储流式传输到第二内核电路的数据;以及输出缓冲器,该输出缓冲器耦合到第一管芯内的第一内核电路的输出端口,并且被配置为临时存储从第一内核电路输出的数据。流业务管理器电路被配置为响应于确定输入缓冲器具有可用空间并且输出缓冲器正在存储数据,发起从第一内核电路到第二内核电路的数据传送。

在另一方面中,IC包括输入缓冲器,该输入缓冲器耦合到第一管芯内的第一内核电路的输入端口,并且被配置为临时存储流式传输到第一内核电路的数据;以及输出缓冲器,该输出缓冲器耦合到第二管芯内的第二内核电路的输出端口,并且被配置为临时存储从第二内核电路输出的数据。流业务管理器电路被配置为响应于确定输入缓冲器具有可用空间并且输出缓冲器正在存储数据,发起从第二内核电路到第一内核电路的数据传送。

在一个或多个实施例中,一种系统包括具有第一多个内核电路的第一IC;流业务管理器电路,该流业务管理器电路被配置为控制在第一多个内核电路中的不同内核电路之间交换的数据流;以及第一收发器和第二IC,该第二IC具有第二多个内核电路和卫星流业务管理器电路,该卫星流业务管理器电路被配置为控制在第二多个内核电路中的不同内核电路之间交换的数据流;以及第二收发器,该第二收发器耦合到第一收发器。流业务管理器电路和卫星流业务管理器电路被配置为交换在第一多个内核电路的选定内核电路和第二多个内核电路的选定内核电路之间传递的数据流。

在一个方面中,第一多个内核电路位于第一IC的不同管芯中,而第二多个内核电路位于第二IC的不同管芯中。

在另一方面中,在第一多个内核电路的选定内核电路与第二多个内核电路的选定内核电路之间交换的数据流包括用于第二内核电路的带内指令。

在另一方面中,流业务管理器电路被配置为直接从耦合到第一IC的主机系统向第一多个内核电路中的选定内核电路或第二多个内核电路中的选定内核电路提供选定数据流,并且从第一多个内核电路的选定内核电路或第二多个内核电路的选定内核电路向主机系统提供结果数据流。

在另一方面中,选定数据流包括用于第一内核电路或第二内核电路的带内指令。

在另一方面中,第一IC包括耦合到流业务管理器和第一多个内核电路的互连,并且第二IC包括耦合到卫星流业务管理器和第二多个内核电路的互连。

在另一方面中,流业务管理器电路和卫星流业务管理器电路被配置为响应于确定接收内核电路的输入缓冲器具有可用空间而交换数据流。

在另一方面中,第一IC包括第一多个管芯,其中第一多个内核电路跨越第一多个管芯分布。每个管芯包括互连,该互连耦合到流业务管理器和管芯内的第一多个内核电路中的特定内核电路。

在一个或多个实施例中,一种方法包括:通过流业务管理器电路系统监测用于分组的内核电路的输出缓冲器,其中响应于检测到发送内核电路的输出缓冲器正在存储分组,内核电路在至少一个IC的可编程电路系统中实现;通过流业务管理器电路确定用于该分组的接收内核电路;通过流业务管理器电路确定接收内核电路的输入缓冲器是否具有可用于存储分组的空间;以及响应于确定输入缓冲器确实具有可用于存储分组的空间,通过流业务管理器电路发起从发送内核电路的输出缓冲器到接收内核电路的输入缓冲器的流数据传送。

在一个方面中,在没有主机系统参与的情况下,执行流数据传送。

在另一方面中,流数据传送包括带内指令,该带内指令控制接收内核电路的操作。

提供本发明内容章节仅是为了引入某些概念,并非标识所要求保护的主题的任何关键特征或必要特征。根据附图和以下详细描述,本发明布置的其他特征将变得显而易见。

附图说明

在附图中,通过示例图示了本发明布置。然而,附图不应被解释为将本发明布置限制为仅示出的特定实现方式。在阅读以下具体实施方式并且参考附图后,各个方面和优点将变得显而易见。

图1图示了用于硬件加速的示例架构。

图2图示了图1的架构的另一示例实现方式。

图3图示了使用数据流在主机系统与硬件加速器的内核电路之间传送数据的示例方法。

图4图示了用于使用数据流在内核电路之间交换数据的示例架构。

图5图示了使用数据流在内核电路之间交换数据的示例方法。

图6图示了与本文中所描述的一个或多个实施例一起使用的示例系统。

图7图示了IC的示例架构。

具体实施方式

虽然本公开以限定新颖特征的权利要求书作为结论,但是应当相信,根据结合附图考虑说明书,可以更好地理解本公开中描述的各种特征。为了说明,提供了本文中所描述的一个或多个过程、机器、制造及其任何变型。本公开内容中所描述的特定结构和功能细节不应被解释为具有限制性,而仅仅是作为权利要求的基础并且作为用于教导本领域技术人员以实质上任何适当的详细结构来以不同方式采用所描述的特征的代表性基础。进一步地,在本公开内容内使用的术语和短语不旨在具有限制性,而是旨在提供所描述的特征的可理解描述。

本公开涉及IC,更具体涉及将数据流用于主机系统与硬件加速的电路系统之间的通信以及用于硬件加速电路系统的内核电路之间的通信。IC将硬件加速的电路系统实现为一个或多个内核电路。例如,每个内核电路表示硬件加速的程序代码。主机系统能够将一个或多个任务卸载到IC内实现的内核电路。这样做时,主机系统使用支持数据流的架构来传送要由内核电路操作的数据。内核电路能够使用数据流使能架构相互交换数据。内核电路还将数据(例如,结果)作为数据流传送到主机系统,该数据流在发送到主机系统之前被分组化。

在传统系统中,当将任务卸载到内核电路时,主机系统通过耦合到实现内核电路的IC的随机存取存储器(RAM)发起启动到内核电路的数据传送。然而,RAM虽然位于同一电路板(例如,加速器卡)上,但是与内核电路不在同一IC中。一旦数据传送到RAM,主机系统就会通知内核电路该数据已准备就绪。这意味着在完成到RAM的数据传送之前,内核电路无法开始对数据进行操作。从主机系统提供给内核电路的任何指令相对于数据均分开(例如,带外)提供。例如,命令通过与用于传达数据的物理接口不同的物理接口提供给内核电路。

在传统系统中,内核电路一旦被告知数据的可用性,就从RAM读取数据、处理数据、并且将结果写回到RAM。当内核电路完成将结果写入RAM时,内核电路将结果的可用性通知主机系统。然后,主机系统从RAM中取回结果。

根据本公开内所描述的本发明布置,使用数据流和分组化在主机系统与内核电路之间交换数据。由主机系统始发的数据直接发送到内核电路。同样,由内核电路始发的数据直接发送到主机系统。作为说明性且非限制性示例,从主机系统到内核电路的数据传送直接从主机系统流向内核电路。从主机系统传送的数据不会首先存储并累积在片外RAM中,然后再由内核电路读取。同样,从内核电路传送到主机系统的结果在被提供给主机系统之前,不会先存储并累积在片外RAM中。相反,数据直接从内核电路流向主机系统。通过在利用一个或多个较小的内部存储器缓冲器的IC内的数据路径执行流式传输。例如,存储器缓冲器的尺寸小于在主机系统与内核电路之间交换的数据量。

与传统系统相比较,如在本公开内描述的流式传输架构促进更快的数据传送、更少的等待时间、以及更有效的存储器使用。例如,内核电路可以在接收到少于全部数据后立即开始对数据进行操作,而不必等待首先将全部数据传送到片外RAM,然后再加载到内核电路中。这提高了整个系统的速度和等待时间。通过将数据从内核电路流式传输到主机系统,可以在速度和延迟方面获得相似益处。使用流式传输架构,从主机系统到内核电路的命令可以包括在数据流本身中,例如,带内,从而进一步减少系统等待时间。通过更高效地利用IC的内部存储器,需要较少的片外RAM,从而降低了系统和/或硬件加速器的功率要求。

在特定实施例中,内核电路还能够使用数据流彼此通信。所描述的与主机系统-内核电路通信有关的益处还可以通过使用用于在内核电路之间进行通信的数据流来获得。进一步地,通过在(多个)可编程IC中包括流式传输基础结构,内核电路能够使用不太复杂的基础结构彼此交换数据,例如,无需旨在彼此通信的内核电路之中的直接点到点通信链路的基础结构。

下文参考附图对本发明布置的其他方面进行更详细的描述。为了图示简单和清楚起见,附图中所示的元件未必按比例绘制。例如,为了清楚起见,元件中的一些元件的尺寸可能相对于其他元件被放大。进一步地,在认为适当的情况下,在附图中重复附图标记以指示对应类似或相同特征。

图1图示了用于硬件加速的示例架构100。架构100包括主机系统102和硬件加速器103。主机系统102被实现为计算机系统,诸如服务器或其他数据处理系统。硬件加速器103被实现为具有IC 104和附接到其的存储器106的电路板。例如,硬件加速器103可以被实现为具有边缘连接器的加速器卡,该加速器卡可以插入到主机系统102的可用外围插槽中。

虽然图1的示例使用IC 104外部的存储器(例如,RAM)描述,但是本文中所描述的与流式传输数据有关的实施例在IC 104包括足够片上存储器从而无需存储器106的情况下也是有效的并且可适用的。在IC 104包括足够片上或相同管芯存储器的情况下,当在准许内核电路对数据进行操作之前必须将数据整体传送到该存储器时,会出现与涉及外部存储器的问题相似的问题。尽管使用内部存储器比使用外部存储器更快,但是会出现诸如等待时间增加、对存储容量(存储器)增加的需求增加以及同步之类的问题,这些问题通过本文中所描述的流式传输使能实施例得以克服。

在一个或多个实施例中,IC 104被实现为可编程IC。在特定实施例中,IC 104使用与结合图7所描述的架构相同或相似的架构来实现。在图1的示例中,IC 104包括端点108、直接存储器访问电路(DMA)110、内核电路112、以及存储器控制器114。端点108是能够通过通信总线与主机系统102通信的接口。在说明性和非限制性示例中,通信总线可以被实现为外围部件互连快速(PCIe)总线。如此,端点108可以被实现为PCIe端点。然而,应当领会,可以使用其他通信总线,并且所提供的示例并非旨在具有限制性。因而,端点108可以被实现为用于通过通信总线通信的多种合适的接口中的任一接口。

端点108耦合到DMA 110。DMA 110也耦合到内核电路112和存储器控制器114(在图1中被缩写为“MC”)。在特定实施例中,DMA 110包括两个独立信道,这两个独立信道支持与端点108和内核电路112的双向通信。在图1的示例中,DMA 110通过一个或多个接口116耦合到内核电路112。如此,主机系统102能够通过端点108和DMA 110将数据作为分组化数据传送到内核电路112,该分组化数据在被提供给内核电路112之前被转换为一个或多个数据流。同样,内核电路112能够通过输出在通过DMA 110和端点108而被提供给主机系统102之前被分组化的数据流来将数据传送到主机系统102。结合图2对与数据传送有关的细节进行更详细的描述。一般而言,尽管依据数据流的大小,有时可能会出现将数据流转换为单个分组的场景(例如,在数据流传达的数据量较少的情况下),但是无论在主机系统102中始发还是由内核电路112始发的一个数据流都被转换为多个分组。

接口116的示例是流使能片上互连,诸如高级微控制器总线架构

在一个或多个实施例中,存储器控制器114耦合到存储器106。存储器106被实现为RAM。存储器控制器114可以是多端口的,并且耦合到DMA 110和内核电路112。存储器控制器114能够在DMA 110和/或内核电路112的控制下访问(例如,读取和/或写入)存储器106。例如,DMA 110通过存储器映射接口118耦合到存储器控制器114。同样,内核电路112通过存储器映射接口120耦合到存储器控制器114。DMA 110经由控制接口122耦合到内核电路112。在一个或多个实施例中,控制接口122被实现为AXI-Lite接口,该AXI-Lite接口被配置为提供与电路块的点到点双向通信。AXI-Lite可以用作内核电路112的控制接口。如所讨论的,提供AXI只是为了说明而非限制。

使用存储器映射接口118和120以及控制接口122,图1所图示的架构还能够支持通过存储器106在主机系统102与内核电路112之间的数据传送。例如,主机系统102将数据发送到存储器106。数据可以被提供给DMA 110,该DMA 110使用存储器控制器114将数据存储在存储器106内。如先前所描述的,数据累积并存储在存储器106中,直至完成数据传送。主机系统102可以通过控制接口122向内核电路112通知数据在存储器106中的可用性。内核电路112能够访问存储器控制器114以从存储器106读取数据。内核电路112生成结果,并且将结果存储在存储器106内。内核电路112通过控制接口122向主机系统102通知结果在存储器106中的可用性。

在其中数据使用存储器106传送到一个内核电路112或在IC 104中实现的多个内核电路的示例中,主机系统102负责在各个内核电路之间分配和共享存储器106。主机系统102通过控制接口122配置并启动内核电路。然而,控制接口122倾向于是具有显著等待时间的较慢接口。除了必须通过控制接口122与内核电路通信之外,主机系统102还必须管理并同步内核电路操作,这会给主机系统102增加大量开销。例如,主机系统102必须将数据传送与控制信号同步才能在(多个)适当时间启动和/或停止内核电路。

如所讨论的,在其他实施例中,IC 104包括足够的存储器资源,以使得存储器106被实现为IC 104内的内部存储器。在那种情况下,IC 104中所描述的电路块能够使用IC104内的接口电路系统来访问内部存储器,如此可以排除存储器控制器114。

在一个或多个实施例中,架构100被实现为通过分组化数据和数据流来支持主机系统102与内核电路112之间的直接通信。在那种情况下,可以省略存储器映射通信能力。例如,可以省略控制接口122、存储器映射接口118和120、以及存储器控制器114(可以视存储器106而定)。然而,在一个或多个其他实施例中,架构100被实现为既支持涉及存储器106的存储器映射通信又支持使用分组化数据和数据流的直接通信。例如,DMA 110可以支持两种类型的数据传送。进一步地,虽然图1的示例中图示了单个内核电路,但是可以实现多个内核电路,其中一些内核电路利用经由数据流与主机系统102的直接通信,而其他内核电路利用存储器106与主机系统102进行数据传送。在其他实施例中,可以实现内核电路以依据通过正在调用内核电路的主机系统102所执行的特定应用或由应用调用的特定功能来利用经由数据流的直接通信或用于数据传送的存储器106与内核电路通信。

本文中所描述的架构100和其他流式传输架构提供了配置并管理内核电路的更有效的方式。在特定实施例中,可以将指令与数据流的数据有效载荷一起带内提供给内核电路。当使用数据流时,将指令与数据一起包括在内(例如,“带内传输(in-banding)指令”)无需控制接口122,并且为内核电路通信提供了更有效的主机系统。

主机系统102能够执行包括一个或多个用户应用(例如,存储器映射用户应用124和/或流用户应用126)的软件框架。存储器映射用户应用124是由主机系统102执行的应用,该应用被配置为调用诸如内核电路112之类的内核电路,并且使用存储器映射接口118和120、控制接口122和存储器106与内核电路112交换数据。流用户应用126是由主机系统102执行的应用,该应用被配置为调用诸如内核电路112之类的内核电路,并且使用流接口116与内核电路112交换数据。

软件框架还包括运行时间128。运行时间128提供用于与IC 104通信的功能,例如,应用编程接口(API)。例如,运行时间128能够提供用于实现通过PCIe进行DMA传输的功能。在一个或多个实施例中,运行时间128能够提供对使用接口116在内核电路112与主机系统102之间流式传输数据的支持。在一个或多个其他实施例中,运行时间128能够提供对使用存储器106、存储器映射接口118和120以及控制接口122在内核电路112与主机系统102之间传送数据的支持。作为一个说明性示例,运行时间128能够支持存储器映射用户应用124的执行以及经由存储器106与内核电路112的数据传送,和/或支持流用户应用126的执行以及经由接口116与内核电路112的数据传送。

驱动器130能够控制主机系统102(未示出)内的端点。在PCIe连接的情况下,例如,主机系统102内的端点被实现为根联合体。因此,驱动器130能够实现并管理用于存储控制主机系统102与IC 104之间的数据传送的描述符的多个读取和写入队列。

在一个或多个实施例中,驱动器130能够将对到内核电路的大数据传送的请求(例如,流式数据传送)划分为称为分组的较小数据块的多个流传送。由驱动器130执行的这种数据划分或“将数据分组化为分组”在很大程度上从内核电路112隐藏。分组化允许在IC104中实现的互连结构通过交织去和/或往不同内核电路的分组来同时服务于多个内核电路。驱动器130能够确定分组尺寸,该分组尺寸足够大以有效地分摊分组化开销,而又不会太大,以至于分组在等待轮流发送和/或接收流式传输的数据的同时,使得内核电路停顿,而其他内核电路却正在传送流式传输的数据。

如通常所讨论的,控制接口122趋向于缓慢连接,其需要在所传达的控制信号与递送到内核电路112的数据之间进行同步。例如,如果控制接口122用于对数据流进行带外信号传递,则速度和/或同步要求经常导致在重新启动(多个)数据流之前,停止到内核电路的(多个)数据流以改变控制信号。

作为一个说明性且非限制性示例,考虑内核电路112实现加密操作的情况。提供给内核电路112的不同数据有效载荷通常需要用于加密的不同密钥。如果要使用控制接口122,则可能停止到内核电路112的数据流,经由控制接口112更新密钥,然后恢复(多个)数据流。这样的操作可能由主机系统102协调,这增加了主机系统102的开销。在本文中所描述的一个或多个实施例中,向内核电路112带内提供一个或多个指令。如此,新的和/或经更新的密钥可以带内包括在提供给内核电路112的数据流中。指令可以与有效载荷包括在一起或紧接在有效载荷之前包括。在特定实施例中,可以在每个分组的定制定义报头中指定指令。在当前示例中,主机系统102能够发送加密密钥作为内核电路112要对其操作的一个或多个分组的(多个)明文有效载荷的分组报头的一部分。如此,因为内核电路112无需停止和/或与控制接口122同步,所以与传统数据传送技术相比较,内核电路112能够有效操作,在这种情况下,为不同的有效载荷切换加密密钥,其中主机系统102没有产生同步开销并且等待时间得以减少。

图2图示了图1的架构100的另一示例实现方式。图2图示了结合图1所描述的高级视图中未图示的架构100的其他方面。然而,出于说明,图1所示的一些元件未在图2中图示,诸如由主机系统102、IC 104内的端点108和存储器控制器114以及存储器106执行的软件框架的选定元件。

在图2的示例中,示出了由主机系统102执行的软件框架的驱动器130。驱动器130能够实现多个队列202-1至202-8。驱动器130能够为在IC 104内实现的每个内核电路创建读取队列和写入队列。为了说明,被配置为写入队列的队列202被阴影化,而被配置为读取队列的队列202未被阴影化。由于IC 104实现四个内核电路234-1、234-2、234-3和234-4,所以驱动器130实现四个写入队列(例如,202-1、202-3、202-5和202-7)和四个读取队列(例如,202-2、202-4、202-6和202-8)。队列202中的每个队列202能够存储一个或多个描述符,其中每个描述符描述要执行的数据传送。存储在写入队列中的每个描述符描述了从主机系统102到内核电路234的数据传送,而存储在读取队列中的每个描述符描述了从内核电路234到主机系统102的数据传送。

如所指出的,DMA 110包括两个信道。写入信道支持从主机系统102到内核电路234的数据传送。写入信道包括写入电路204和仲裁电路206。写入电路204能够在将命令和/或数据转发到内核电路234之前,存储从主机系统102接收的命令和/或数据。读取信道支持从内核电路234到主机系统102的数据传送。读取信道包括读取电路208和仲裁电路210。读取电路208能够在将数据转发到主机系统102之前,存储从内核电路234接收的数据。

DMA 110在主机系统102的主机存储器(未示出)与缓冲器218、220、222、224、226、228、230和232之间移动数据。DMA 110获取并维护每个要传送分组的地址(例如,描述符)列表,并且形成端点108的命令和地址序列。在一个或多个实施例中,DMA 110是高度可配置的。因而,通过流业务管理器212执行针对DMA 110的业务管理和流动控制。流业务管理器212有效确保了所有内核电路234都具有对DMA 110的公平访问,以便与主机系统102进行数据传送。

流业务管理器212耦合到DMA 110以及互连214和216。流业务管理器212能够调节主机系统102与内核电路234之间的数据流/分组的流动。在图2的示例中,流业务管理器212包括控制器236、一个或多个缓冲器238、一个或多个数据移动器引擎240、流动到管道映射(映射)242、以及管道到路由映射(映射)244。

在特定实施例中,互连214和互连216实现图1的接口116。在图2的示例中,互连214被配置为从流业务管理器212接收分组化数据,并且将分组化数据路由到适当内核电路234。互连216被配置为从内核电路234接收分组化数据并且将分组化数据提供给流业务管理器212。

在图2的示例中,内核电路234通过缓冲器连接到互连214和互连216。内核电路234中的每个内核电路234具有被配置为通过对应输入缓冲器接收数据流的输入端口以及被配置为通过对应输出缓冲器发送数据流的输出端口。为了说明,输入缓冲器(例如,缓冲器218、222、226和230)被阴影化。输出缓冲器(例如,缓冲器220、224、228和232)未被阴影化。

内核电路234-1通过缓冲器218连接到互连214,并且通过缓冲器220连接到互连216。内核电路234-2通过缓冲器222连接到互连214,并且通过缓冲器224连接到互连216。内核电路234-3通过缓冲器226连接到互连214,并且通过缓冲器228连接到互连216。内核电路234-4通过缓冲器230连接到互连214,并且通过缓冲器232连接到互连216。

如所指出的,虽然互连214和216可以被实现为AXI流互连,但是本发明布置并不旨在局限于此。可以使用用于递送分组化数据的多种电路架构中的任一电路架构。可以用于实现互连214和216的其他示例电路架构包括但不限于交叉开关、多路复用总线、网状网络、和/或片上网络(NoC)。

输入缓冲器218、222、226和230中的每个输入缓冲器分别耦合到互连214和内核电路234-1、234-2、234-3和234-4的输入端口。在内核电路不能立即吸收或处理所接收的数据的情况下,每个输入缓冲器能够临时存储指向对应内核电路234的来自主机系统102的分组化数据。进一步地,每个输入缓冲器还能够将从主机系统102接收的分组化数据转换为提供给对应内核电路234的数据流。例如,每个输入缓冲器能够组合一个或多个分组的序列以生成可以提供给对应内核电路的数据流。

输出缓冲器220、224、228和232中的每个输出缓冲器分别耦合到互连216和内核电路234-1、234-2、234-3和234-4的输出端口。每个输出缓冲器能够临时保存从对应内核电路234输出的数据流,将数据流转换成分组化数据,并且经由互连216将分组化数据发送到主机系统102。在内核电路无法跟上流式传输基础架构的情况下,每个输出缓冲器能够存储数据。每个输出缓冲器例如能够将来自对应内核电路的数据流输出分离为一个或多个分组。

在一个或多个实施例中,输出缓冲器220、224、228和232能够提供内核标记信息以标识源内核电路和/或目的地内核电路。例如,输出缓冲器能够添加标记信息作为追加报头。由输出缓冲器执行的标记允许分组内的数据放置或路由到主机存储器中的适当位置或适当内核电路。例如,与内核电路234相对应的每个输出缓冲器能够使用源内核标识符来标记每个分组并且将该分组发送到互连216。互连216将分组递送到流业务管理器212和DMA引擎110。DMA引擎110将分组化数据移动到主机存储器。

为了说明,描述了内核电路234-1。应当领会,内核电路234-2、234-3和234-4可以以相同或相似方式操作。在图2的示例中,内核电路234-1的输入端口通过缓冲器218连接到互连214。内核电路234-1的输出端口通过缓冲器220连接到互连216。为了说明,写入队列202-1映射到输入缓冲器218;并且读取队列202-2映射到输出缓冲器220。一般而言,每个队列202映射到缓冲器218-232中的一个缓冲器。然而,缓冲器218-232可以映射到队列202中的一个以上的队列。为了说明,队列202-1和202-2与缓冲器218和220相对应;队列202-3和202-4与缓冲器222和224相对应;队列202-5和202-6与缓冲器226和228相对应;以及队列202-7和202-8与缓冲器230和232相对应。

在图2的示例中,主机系统102执行被配置为用于进行数据流式传输的用户应用。为了建立与内核电路234的连接,主机系统102创建一对队列202。作为一个说明性示例,用户应用可以调用运行时间128所提供的功能,该功能使得驱动器130创建分别与缓冲器218和220相对应的一对队列202-1和202-2。一旦创建了该对队列202,主机处理器便能够调用其他功能来配置DMA 110(未示出)内的控制寄存器以及流业务管理器212的映射242和244,以使在该示例中,可以在主机系统102与内核电路234-1之间流式传输数据。

在执行用户应用时,主机系统102将描述符放置在指定用于向内核电路234-1发送(例如,写入)数据的指令的队列202-1内,并且视情况而定,将描述符放置在指定用于从内核电路234-1接收(例如,读取)数据的指令的读取队列202-2内。在特定实施例中,驱动器130能够对要发送到IC 104的数据进行分组化,并且向DMA 110通知要获取的队列202中可用的描述符的数目。DMA 110将该信息传达到流业务管理器212。

流业务管理器212使用映射242和映射244维护队列202到缓冲器218至232的映射。使用所存储的映射,流业务管理器212确定队列202-1与缓冲器218相对应而队列202-2与缓冲器220相对应。获知队列202-1中可用的描述符的控制器236能够访问用于内核电路234-1的输入端口的缓冲器218。控制器236确定缓冲器218是否具有可用于接收数据的空间,如果是,则确定可以被接收并存储在缓冲器218中的数据量。

在一个或多个实施例中,DMA 110能够确定队列202中的每个队列202的容量并且通知控制器236。例如,写入电路204能够确定队列202-1、202-3、202-5和202-7中的每个队列中的描述符的数目。读取电路208能够确定队列202-2、202-4、202-6和202-8中的每个队列的描述符的数目。读取电路204和写入电路208能够向流业务管理器212通知相应队列202中的描述符的数目。进一步地,写入电路204和读取电路208能够在流业务管理器212的控制下从队列202中取回描述符。

在流业务管理器212内,(多个)缓冲器238存储通过DMA 110从队列202中取回的描述符。例如,控制器236能够依据(多个)缓冲器238内可用的空间量来请求DMA 110取回特定数目的描述符。DMA 110将所取回的描述符提供给流业务管理器212。如此,流业务管理器212能够在(多个)缓冲器238内内部存储在队列202中的每个队列202中存储的描述符的子集。

在一个或多个实施例中,描述符的格式或语法指示形成一个分组需要多少个描述符以及该分组中的字节的数目。响应于确定缓冲器218具有可用于接收数据的空间,控制器236评估存储在与内核电路234-1相对应的(多个)缓冲器238中的描述符(例如,其中从队列202-1中取回描述符),并且基于(多个)描述符自身内的数据来确定执行以取回足够数量的数据(例如,(多个)分组)以存储在缓冲器218中并且不会超出缓冲器218的可用空间的描述符的数目。

在一个或多个实施例中,数据移动器引擎240中的每个数据移动器引擎能够从主机系统102取回数据,并且经由DMA 110将数据发送到主机系统102。数据移动器引擎240能够同时操作。控制器236能够将要从(多个)缓冲器238执行的描述符指派到数据移动器引擎240中的可用引擎。每个数据移动器引擎240通过获取相应描述符中的每个描述符所指定的数据来处理所指派的描述符。例如,数据移动器引擎240能够经由互连214将(多个)描述符所指定的取回的分组化数据发送到缓冲器218。如所指出的,输入缓冲器218能够存储分组化数据,将分组化数据转换为数据流,并且将数据流提供给内核电路234-1。

流业务管理器212的分组处置能力允许可以以交织方式取回可能与不同数据流相对应的分组。针对N个不同数据流,可以以交织方式从主机系统102取回分组(或将该分组发送到主机系统102)。

流业务管理器212能够执行针对内核电路234中的每个内核电路所描述的操作。如此,流业务管理器212能够连续监测每个内核电路234的输入缓冲器并且响应于首先确定输入缓冲器具有接收和存储数据的空间,仅发起到缓冲器的数据传送。换句话说,控制器236能够连续确定队列202中的哪些描述符具有IC 104中的具有足够可用空间的对应缓冲器,然后执行这种描述符。

在任何给定时间,连接IC 104和主机系统102的通信总线能够同时携载多个描述符和/或正在获取的数据。互连214和216中的每个互连能够一次传达单个分组。在特定实施例中,与不同内核电路相对应的仲裁电路206能够实现轮询仲裁方案,以一次传递一个分组。在其他实施例中,仲裁电路206可以使用不同的仲裁方案。因为流业务管理器212仅对在输入缓冲器中具有可用空间的那些内核电路234执行描述符(发起读取请求),所以从流仲裁206接收的分组传递到目标内核电路234的预期输入缓冲器,并且保证没有任何背压。由于预先分配了输入缓冲器中的空间,所以保证了用于接收分组化数据的空间。

流业务管理器212还能够指令DMA 110以交织方式获取数据。作为一个说明性示例,基于哪些内核电路繁忙以及输入缓冲器中的可用空间,控制器236请求DMA 110取回用于内核电路234-1的一个或多个分组,然后请求取回用于内核电路234-2的一个或多个分组,依此类推。流业务管理器212在内核电路234之中执行仲裁,从而获知内核电路234中的每个内核电路的繁忙程度以及每个内核电路234的每个相应输入缓冲器内有多少数据存储可用。在特定实施例中,控制器236将写入队列202中的每个写入队列的前“N”个描述符本地存储在(多个)缓冲器238中,并且执行轮询仲裁方案,从而检查每个内核电路的每个输入缓冲器的可用空间。

当从内核电路234向主机系统102传送数据时,架构100能够以相似方式操作。例如,流业务管理器212能够存储读取队列202-2、202-4、202-6和202-8中的每个读取队列的前“N”个描述符。流业务管理器212能够确定结果数据在内核电路234的输出队列中何时可用。响应于确定与包含所存储的结果的输出缓冲器相对应的描述符可用,控制器236发起使用可用数据移动器引擎240从输出缓冲器到主机系统102的数据传送。描述符的可用性指示主机系统102具有用于从内核电路接收结果的可用空间。

为了说明,内核电路234-1能够对来自输入缓冲器218的数据进行操作。内核电路234-1将结果数据作为数据流输出到输出缓冲器220。流业务管理器212(例如,控制器236)能够监测输出缓冲器,以确定何时数据可用,例如,输出缓冲器中至少一个完整数据分组可用并且对应读取队列的可用空间足以存储数据(例如,至少一个完整分组)。响应于确定输出缓冲器220具有可用数据并且确定描述符在对应读取队列202-2中可用(可以在流业务管理器212中的描述符238中对其进行取回并缓存),控制器236发起通过互连216从输出缓冲器220到DMA 110以及到主机系统102的数据传送。输出缓冲器216在将数据发送到互连216并继续到主机系统102之前将数据流转换为分组化数据。在一个或多个实施例中,仲裁210能够实施轮询仲裁。在其他实施例中,仲裁210能够实现其他仲裁技术。仲裁技术(无论是轮询还是其他方式)都实现了来自内核电路234的数据流和/或分组的交织或旋转。

在其中在IC内实现多个流式传输使能的内核电路的实施例中,每个活动内核电路都接收IC的数据传送带宽的一部分。多个流式传输使能的内核电路的并发操作通常意味着这些内核电路被设计为在数据片段到达每个相应内核电路时对数据片段进行操作,而非在计算开始之前对整个完成的数据传送进行操作。对较小数据片段进行操作的能力使本文中所描述的流式传输使能的内核电路更快访问数据,从而有助于降低等待时间,提高性能,降低数据存储要求,降低总体成本,以及降低功耗。

当在向DMA 110发送数据和/或从DMA 110接收数据的不同内核电路之中进行交织(或旋转)时,流业务管理器212能够确保互连组构(例如,互连214、216)不会被缓慢内核电路阻塞。这至少部分通过使用缓冲器218-232来实现。在一个实施例中,缓冲器218至232中的每个缓冲器的尺寸被设计为存储至少一个完整数据分组。如所讨论的,除非内核电路的输入缓冲器中的缓冲器空间可用,否则不会发送指向内核电路的数据。一旦分组的突发到达输入缓冲器,内核电路便能够清空内核电路自己的时间表上的缓冲器,而不会对互连214上的业务造成负面影响,从而防止被称为“行头阻塞”的拥塞条件。同样,从内核电路指向主机系统102的数据不从内核电路跨越互连216发送,直至完整分组已经传送到输出缓冲器。

一旦数据传送开始,内核电路的输出缓冲器就专用于互连216。如果内核电路在分组中间落后或停止发送数据,则互连模块216不能切换到服务另一内核电路,直至互连模块216已经接收到整个分组,从而锁定互连216并且防止其他内核电路将数据发送到主机系统。如果省略了输出缓冲器,则一个内核电路可能会对其他内核电路的性能产生不利影响。根据本文中所描述的发明性布置,每个输出缓冲器能够在尝试将数据发送到互连216之前接收并存储最少的整个分组。该特征确保一旦分组的传输开始,则传输的完成便于与互连216一样快并且上游基础结构可以吸收传送,而与内核电路行为或内核电路输出数据速率无关。

在一个或多个实施例中,内核电路和缓冲器使用可编程电路系统实现。如此,仅为实际上在IC 104中实现的内核电路创建缓冲器。当部署少数内核电路时,IC 104的电路资源不会浪费在输入缓冲器和/或输出缓冲器上。资源使用随着在IC 104中实现的内核电路的数目而缩放。在特定实施例中,通过流业务管理器212所管理的缓冲器信用系统来调节跨越互连214、216的数据传送。

在一个或多个实施例中,运行时间128能够提供可以由用户应用调用的多种应用编程接口(API),以支持使用数据流直接与内核电路的通信。以下是运行时间128所提供的示例API的列表。

clCreateHostPipe-An OpenCL API-创建用于流式传输读取类型的数据缓冲器或写入类型的数据缓冲器,也被称为“流式传输管道”。

clEnqueueWritePipeBuffer-将分组直接排队到流式传输管道以进行写入(到内核电路的数据传送)。

clEnqueueReadPipeBuffer-将分组直接排队到流式传输管道以进行读取(从内核电路的数据传送)。

运行时间128还可以提供用于创建、破坏、启动、停止和修改读取和/或写入队列对的API:

struct xclQueueContext

xclCreateWriteQueue-在主机系统中创建写入队列。在主机系统中分配资源并且发起用于DMA 110的写入队列以发出设备请求。返回创建的写入队列的队列句柄,以供将来访问。

xclCreateReadQueue-在主机系统中创建读取队列。在主机系统中分配资源并且发起用于DMA 110的读取队列以发出“来自设备”请求。返回用于所创建的读取队列的队列句柄,以供将来访问。

xclDestroyQueue-破坏所指定的读取队列/写入队列并且回收用于实现所破坏的读取队列/写入队列的资源。

xclModifyQueue-修改所指定的读取队列/写入队列的参数。

xclStartQueue-使所指定的读取队列/写入队列进入运行状态,在该运行状态下,队列能够开始接受并处理DMA请求。

xclStopQueue-使所指定的读取队列/写入队列进入发起状态。刷新所有未决DMA请求。

运行时间128还可以提供用于发出对内核电路的写入和从内核电路的读取的API,诸如:

struct xclQueueRequest

struct xclWRBuffer

xclWriteQueue-写入指定队列。

xclReadQueue-从指定队列中读取。

驱动器130还可以提供支持DMA 110的操作的API,例如:

streamq_create()

streamq_destroy()

streamq_write()/streamq_read

在一个或多个实施例中,运行时间128为与IC 104有关的输入操作/输出操作提供输入/输出控制(IOCTL)系统呼叫,可以调用该IOCTL系统呼叫来创建、破坏、开始、停止和修改读取请求和/或写入请求。在特定实施例中,这些系统呼叫对于在主机系统102中执行的用户空间应用不可用。运行时间128还可以提供便携式操作系统接口(POSIX)读取/写入功能和异步I/O(AIO)读取/写入功能,这些功能可用于在主机系统102内执行的用户空间应用。

执行包括硬件编译器/系统链接器的电子设计自动化(EDA)应用的系统能够在实现内核的设计流程(例如,高级综合、综合、放置、路由和/或配置比特流生成)期间将内核参量映射到队列。生成映射信息,并且将该映射信息与指定内核电路的配置比特流(例如,部分配置比特流)一起存储在容器文件内。容器文件存储在主机系统102中,以在IC 104内使用并实现。

当主机系统102使用IC 104取回容器文件以从容器文件实现配置比特流时,主机系统102还能够提取包括在编译期间生成的映射信息的元数据。一旦在IC 104中实现映射信息,就将其提供给运行时间128,以用于建立通信路径以在主机系统102和内核电路之间路由数据流。

EDA应用能够基于用于内核的程序代码内的“管道”数据构造的使用来生成内核电路(例如,指定内核电路的配置比特流),该内核电路被配置为使用数据流代替涉及片外RAM或内部RAM的存储器映射事务来进行数据传送。例如,响应于检测到管道数据结构,EDA应用能够生成必要硬件基础结构和/或支持使用数据流的数据传送的电路系统,如结合图1和图2所描述的。下文提供了OpenCL中指定的内核示例作为示例1。

示例1

_kernel void(pipe p1,pipe p2){

data;//This"gentype"can map to AXI width of,e.g.,512bytes.

While(read_pipe(p1,&data)!=t_last_bool())

{

Write_pipe(p2,data);//"false"is the boolean suggested

}

Write_pipe(p2,"t_last");//write out the t_last

当编译上述示例内核时,EDA应用生成针对p1和p2的映射信息。映射信息包括寄存器设置,该寄存器设置用于配置流业务管理器212(例如,通过将这样的设置存储在映射242和244中)和DMA 110(通过存储在其中的控制寄存器中),以便一旦在IC 104中实现,便在主机系统102与诸如内核电路234-1之类的特定内核电路之间适当路由数据流。在一个示例中,映射信息指定每个管道绑定到的特定route_id和flow_id和/或与管道p1和p2有关的静态信息。该映射数据作为元数据存储在用于指定从内核(例如,程序代码)生成的内核电路的配置比特流的容器文件内。

例如,为了将数据从主机系统102的存储器发送到内核电路234-1,运行时间128和/或驱动器130将操作指派到p1,并且将p1绑定到队列结构202-1。主机系统102从内部表中查找内核电路234-1的route_id。route_id指定内核电路234-1的位置。主机系统102使用管道p1和相关队列202-1来配置DMA 110的控制寄存器。主机系统102创建条目,该条目将用于内核电路234-1的route_id与队列202-1和管道p1相关。在一个或多个实施例中,流业务管理器212响应于接收到与管道p1相对应的数据,能够使用正确route_id标记属于p1的内核电路绑定数据。给定使用该route_id标记的数据,流业务管理器212和互连214能够经由缓冲器218将数据递送到内核电路234-1。

同样,为了将数据从内核电路234-1传送到主机系统102内的存储器,运行时间128和/或驱动器130能够将该操作指派给p2并且将p2绑定到队列202-1。主机系统102查找用于标记来自内核电路234-1的主机绑定数据的flow_id。在一个或多个实施例中,内核电路234-1能够使用适当flow_id标记出站数据。在一个或多个其他实施例中,缓冲器220包括能够使用适当flow_id标记出站数据的电路系统。主机系统102使用管道p2配置DMA 110并且将管道p2与队列202-2相关联。主机系统102还创建条目,该条目将用于内核电路234-1(例如,缓冲器220)的flow_id与用于数据传送的队列202-2和管道p2相关。当将该数据转发到DMA 110时,流业务管理器212还能够将使用flow_id标记的主机绑定业务绑定到管道p2。

一旦DMA 110和流业务管理器212两者均被配置为进行数据传送,命令DMA 110就根据上述示例1开始操作。

图3图示了使用数据流在主机系统与硬件加速器的内核电路之间传送数据的示例方法300。方法300可以在主机系统在存储器内存储一个或多个容器文件的状态下开始。每个容器文件包括一个或多个配置比特流和对应元数据。配置比特流中的每个配置比特流(其可以是部分配置比特流)指定一个或多个内核电路。

在框305中,主机系统选择容器文件。为了说明的目的,容器文件包括配置比特流以及用于配置比特流的元数据。配置比特流可以是部分配置比特流。在一个或多个实施例中,主机系统响应于用户应用请求通过由容器文件中的配置比特流指定的内核电路实现的硬件加速功能性而选择容器文件。用户应用可以指定要从存储器中选择或取回并且在硬件加速器中实现的特定容器文件。

在框310中,主机系统从容器文件中提取配置比特流。主机系统将配置比特流加载到硬件加速器的IC(例如,IC 104)中。通过将配置比特流加载到硬件加速器的IC中,由配置比特流指定的内核电路系统在IC内物理实现,并且可用于执行主机系统所请求的任务。

在框315中,主机系统从元数据中确定一个或多个管道特性。例如,主机系统从选定容器文件中提取用于配置比特流的元数据。元数据包括内核被编译时生成的映射信息。映射数据包括可以用于配置DMA 110和流业务管理器212的一个或多个管道特性。例如,管道特性可以包括设置,例如,寄存器设置,诸如route_id和/或flow_id,该设置可以加载到DMA 110和/或流业务管理器中,以建立用于在主机系统与由从选定容器文件中提取的配置比特流实现的一个或多个内核电路之间交换数据的路由。

在一个或多个实施例中,用于配置比特流的元数据包括在设计流程期间生成的附加信息,该附加信息允许流业务管理器更有效地操作。例如,元数据可以指定特定于每个内核的信息,例如,设置。如此,使用元数据,流业务管理器能够在每个内核电路的基础上来调整数据如何流式传输到内核电路和/或从内核电路流式传输到主机系统。例如,元数据可以指定内核电路的工作数据集的大小(其与分组尺寸相对应)、每个数据集内核电路所需的计算时间、内核电路所需的预先获取量等。在操作期间,流业务管理器可以根据用于该特定内核电路的元数据来调整为内核取回的数据量以及预先获取量。

作为框315的一部分,主机系统能够将设置(例如,所描述的管道特性和/或其他信息)发送到流业务管理器和/或DMA,以配置数据路径用于在所实现的内核电路与主机系统之间流式传输数据。例如,主机系统调用驱动器和/或运行时间中可用的一个或多个功能来配置数据路径。该功能例如将设置写入DMA的控制寄存器和流业务管理器的映射。流业务管理器可以包括可以使用本文中说描述的设置写入的附加控制寄存器。

在框320中,主机系统使用设置将数据作为数据流直接从主机系统直接传送到内核电路。例如,主机系统将一个或多个描述符添加到与目标内核电路的输入缓冲器相对应的驱动器中的写入队列中。DMA能够取回描述符中的一个或多个描述符并且将所取回的描述符提供给流业务管理器。流业务管理器将描述符临时存储在内部缓冲器内。如所讨论的,流业务管理器能够监测用于目标内核电路的输入缓冲器的状态,并且当输入缓冲器内的空间可用时,使用其中包含的可用数据移动器引擎执行与目标内核电路的输入缓冲器相对应的描述符中的一个或多个描述符。如此,DMA 110以分组形式从主机存储器取回数据。流业务管理器将数据流式传输到目标内核电路的输入缓冲器。如所示出的,输入缓冲器能够将分组化数据转换为流式数据。

在一个或多个实施例中,传送到目标内核电路的数据包括其中嵌入的用于内核电路的一个或多个指令。在这方面,命令被称为与或相对于数据“带内”。通过在数据流内包括用于内核电路的指令,无需提供用于内核电路的单独信号传输来开始和/或停止内核电路的操作。这样的操作可以由一个或多个数据流中包括的带内指令来发起。在特定实施例中,内核电路和/或主机系统能够交换连续数据流或可选地散布有指令(例如,命令或状态信息)的数据流。

在一个或多个实施例中,主机系统能够基于请求数据传送的用户应用所使用的数据类型和/或用户应用所调用的特定API来确定数据传送要被实现为数据流。

在框325中,主机系统使用管道特性将其他数据传送作为数据流从内核电路直接传送到主机系统。例如,主机系统将一个或多个描述符添加到与目标内核电路的输出缓冲器相对应的驱动器的读取队列中。如所指出的,DMA能够取回描述符中的一个或多个描述符,并且将所取回的描述符提供给流业务管理器。流业务管理器将描述符临时存储在内部缓冲器内。流业务管理器能够监测内核电路的输出缓冲器的状态,并且当输出缓冲器内的数据流可用时,使用其中包含的可用数据移动器引擎执行与目标内核电路的输出缓冲器相对应的描述符中的一个或多个描述符。如此,流业务管理器的数据移动器引擎从目标内核电路的输出缓冲器中取回分组化数据,并且将分组化数据提供给DMA。如所指出的,输出缓冲器将数据流转换为分组化数据。DMA通过通信总线将分组化数据提供给主机存储器。

图4图示了用于使用数据流在内核电路之间交换数据的示例架构400。架构400支持其中应用需要多个大型且复杂的内核电路并且附加IC用于增强主IC所提供的可编程电路系统的用例。主IC被配置为支持经由端点和DMA与主机系统的通信。主IC还包括流业务管理器。在一个或多个实施例中,流业务管理器能够将用于内核电路的分组化数据路由到几个不同端口中的一个端口,其中每个端口连接到独立互连。将内核电路划分为不同互连允许内核电路位于IC的不同物理区域中,例如,在多管芯IC的情况下,位于不同管芯中。进一步地,不同互连隔离不同区域的内核电路而互不干扰。这种划分允许使用多管芯IC,还可以使用次级IC。

架构400包括IC 104和IC 402。在一个或多个实施例中,IC 104和402耦合到同一电路板,例如,硬件加速器,该硬件加速器可以包括RAM(未示出)。在图4的示例中,IC 104和402中的每个IC被实现为多管芯IC。IC 104包括管芯404和406。IC 402包括管芯408和410。管芯404、406、408和410中的每个管芯被实现为包括可编程电路系统,如本文中结合图7所更详细地描述的。在特定实施例中,管芯404、406、408和410中的一个或多个管芯包括一个或多个硬连线电路块。在一个示例中,管芯404、406、408和410中的每个管芯被实现为现场可编程门阵列(FPGA)。

在图4的示例中,管芯404和406包括在同一封装内,而管芯408和410包括在不同封装内。IC 104和IC 402可以使用多种可用多管芯技术中的任一多管芯技术来实现。在一个或多个实施例中,管芯404和406安装在中介层上,该中介层包括能够在管芯404和406之间传达信号的导线。同样,管芯408和410安装在中介层上,该中介层包括能够在管芯408和410之间传达信号的导线。管芯可以使用多个焊料凸块或另一连接技术来安装。中介层包括多个通过孔,该通过孔允许选定信号例如在多管芯IC封装的外部传递到衬底。

为了说明的目的,管芯404和408被阴影化,以更好图示每个相应管芯中包括的不同电路块。在图4的示例中,管芯404和408分别包括管芯406和410中未包括的附加电路块。例如,管芯404包括端点108、DMA 110、流业务管理器212和收发器442,而管芯406则不。在一个或多个实施例中,端点108、DMA 110和/或收发器442中的一个或多个被实现为硬连线电路块。在特定实施例中,端点108、DMA 110和/或收发器442在可编程电路系统中实现。这些电路结构不在管芯406内重复。同样,管芯408包括收发器444和卫星流业务管理器412,而管芯410则不包括。这些结构不在管芯410中重复。

在图4的示例中,端点108、DMA 110和流业务管理器212基本上如结合图1和图2所描述的那样实现。然而,在图4的示例中,流业务管理器212包括附加I/O端口。例如,流业务管理器212包括连接到收发器442的附加I/O端口。进一步地,流业务管理器212的一个或多个I/O端口耦合到管芯406,并且具体耦合到互连416。在一个或多个实施例中,互连414和互连416各自表示互连214的实例和互连216的实例。如此,管芯404和406中的每个管芯都包括互连214和互连216的实例。如所图示的,内核电路234和对应缓冲器遍布在管芯404和406上。

管芯408包括收发器444、卫星流业务管理器412、互连418、缓冲器422、424、426和428、以及内核电路440-1和440-2。在特定实施例中,互连418表示互连214的另一实例和互连216的另一实例。管芯410包括互连420、缓冲器432、434、436和438、以及内核电路440-3和440-4。同样,互连420表示互连214的另一实例和互连216的另一实例。在一个或多个实施例中,收发器444被实现为硬连线电路块。在特定实施例中,收发器444在可编程电路系统中实现。

在图4的示例中,IC 104能够充当主设备,在于管芯404包括端点108以与主机系统102通信。进一步地,流业务管理器212能够通过收发器442和444与卫星流业务管理器412通信。在一个或多个实施例中,收发器442和444实现包括多个串行数据通道的高速点到点互连。收发器442和444所形成的连接在流业务管理器212与卫星流业务管理器412之间交换数据。进一步地,收发器442和444能够提供附加缓冲层以隐藏附加等待时间以免跨越IC边界。在图4的示例中,流业务管理器212和卫星流业务管理器412发送并接收分组化数据。在一个或多个实施例中,收发器442和444能够序列化在流业务管理器212与卫星流业务管理器412之间交换的串流分组,用于从一个收发器向另一收发器传输并且反序列化所传输的数据以在IC 104和402内进行发送和/或处置的目的。同样,收发器442和444能够序列化在流业务管理器212与卫星流业务管理器412之间交换的信用消息,用于从一个收发器向另一收发器传输并且反序列化这样的消息以在IC 104和/或IC 402内进行发送和/或处置的目的。

使用架构400,主机系统102能够将DMA 110、流业务管理器212和卫星流业务管理器412配置为路由分组化数据。例如,流业务管理器212能够将任何必要映射数据和/或设置传递到卫星流业务管理器412上。一旦配置,主机系统102便能够将任务卸载到IC 104和/或IC 402。另外,主机系统102能够将任务指向内核电路234中的一个或多个内核电路234和/或内核电路440中的一个或多个内核电路440。

鉴于在图2的示例中,内核电路234包括在单个管芯中,在图4的示例中,内核电路234跨越管芯404和406分布。同样,内核电路440跨越管芯408和410分布。虽然流业务管理器212允许将数据同时提供给多个内核电路,但是流业务管理器212也能够建立内核电路234之间的连接(例如,234-1至234-2或反之亦然;234-1或234-2至234-3或234-4;234-3至234-4或反之亦然;234-3或234-4至234-2或234-1)。例如,在内核电路最初没有被配置为彼此直接通信的情况下,流业务管理器212能够允许内核电路将数据流式传输到另一内核电路,无论是在相同管芯中还是在同一IC中的不同管芯中。同样,卫星流业务管理器418能够允许内核电路将数据流式传输到另一内核电路,无论是在同一管芯中还是同一IC的不同管芯中(例如,440-1或440-2至440-3或440-4;440-1至440-2或反之亦然;440-3至440-4或反之亦然;440-3或440-4至440-1或440-2)。视情况而定,通过流业务管理器212和/或卫星流业务管理器412控制位于不同管芯和/或不同IC中的内核电路之间交换的数据,并且该数据必须流经流业务管理器212和/或卫星流交通管理器412。

在另一实施例中,当数据在位于同一管芯中的内核电路之间交换时,视情况而定,数据可以绕开但在流业务管理器212和/或卫星流业务管理器412的控制下从发送内核电路流到互连并且从互连流到接收内核电路。在任一情况下,发送内核电路的输出缓冲器将从发送内核电路输出的数据流转换为分组化数据,而接收内核电路的输入缓冲器将分组化数据转换为数据流以供接收内核电路消耗。

流业务管理器212还能够与卫星流业务管理器412通信。卫星流业务管理器412的实现与流业务管理器212基本相似。流业务管理器212与卫星流业务管理器412之间经由收发器442和444的通信允许一个IC中的内核电路将数据流式传输到不同IC中的内核电路(例如,234-1或234-2至440-1或440-2;234-1或234-2至440-3或440-4;234-3或234-4至440-1或440-2;234-3或234-4至440-3或440-4;440-1或440-2至234-1或234-2;440-1或440-2至234-3或234-4;440-3或440-4至234-1或234-2;440-3或440-4至234-3或234-4)。

尽管如此,内核电路还可以被实现为彼此直接通信。在那种情况下,内核电路在这种能力内置的情况下在可编程电路系统内创建并实现。这种连接在图4中图示,内核电路234-3能够直接与内核234-4通信以向其提供数据结果而无需使用流业务管理器212。在内核电路位于不同管芯和/或不同IC中的情况下,需要流业务管理器212和/或卫星流业务管理器412。

在许多情况下,内核电路(例如,由这种内核电路执行的操作)串联链接在一起。数据可以按步骤从一个内核电路传递到另一内核电路,在这些步骤中,每个不同的内核电路均被定制为执行不同操作。在使用存储器映射接口的其他实现方式中,无论存储器是在IC内部还是在IC外部,主机系统都必须跟踪(多个)上游内核电路的进度,以便及时启动(多个)下游内核电路,例如,当检测到(多个)上游内核电路的操作时。在一些情况下,如果下游内核电路无法访问与上游内核电路相同的存储器,则主机系统还必须将数据从上游内核电路复制到下游内核。这种类型的架构导致主机系统102内的软件中的大量开销,并且经常导致硬件(内核电路)的未充分利用。

本公开内所描述的流式传输架构使用从内核电路传递到内核电路的数据流内的带内指令,从而允许一个内核电路将数据直接传递到另一内核电路,其中指令包括在数据流中,从而在不涉及主机系统102的情况下,通过多个内核电路实现数据的链式处理。流式传输架构减少了施加在主机系统上的开销,并且更有效地利用硬件资源。

应当理解,流业务管理器电路系统能够将来自主机系统102的数据提供给在IC102或IC 402中实现的内核电路中的任一内核电路。提供给IC 104中的内核电路的来自主机系统102的分组化数据传递通过端点108、DMA 110和流业务管理器212。从IC 104中的内核电路输出的数据流(例如,结果数据流)经由流业务管理器212、DMA 110和端点108传递到主机系统102。提供给IC 402中的内核电路的主机系统102传递通过端点108、DMA 110、流业务管理器212、收发器442和444、以及卫星流业务管理器412。从IC 402中的内核电路输出的数据流(例如,结果数据流)传递通过卫星流业务管理器412、收发器444和442、流业务管理器212、DMA 110、以及端点108。在向IC 402中的内核电路发送和/或接收分组化数据时,无论是在IC 102中实现还是在IC 402中实现,主机系统102都可以基本按照结合图2的描述进行操作,其中输入驱动器130生成用于每个内核电路的读取和写入队列。

图1、图2和图4中图示的架构允许上游内核电路将数据流式传输到任何可用下游内核电路,而无需支持每个可能的内核电路对之间的直接连接的更复杂的互连电路系统。图1、图2和图4的架构通过使上游内核电路将数据输出到流业务管理器电路系统来实现该能力(为了描述的目的,“流业务管理器电路系统”是指流业务管理器、卫星流业务管理器或以协调方式操作的两者)。流业务管理器电路系统将数据路由到下游内核。由于数据由流业务管理器电路系统使用信用来调节,因此无需大存储和转发缓冲器。进一步地,主机系统102不参与数据传送。作为一个说明性和非限制性示例,上游内核电路(例如,发送内核电路)执行压缩,而下游内核电路执行加密。上游内核电路将得到的压缩数据发送到流业务管理器电路系统,该流业务管理器电路系统将已经由发送内核电路的输出缓冲器分组化的数据路由到下游内核电路,例如,接收内核电路。接收内核电路的输入缓冲器将分组化数据转换为数据流。下游内核电路可以将得到的加密数据提供回给流业务管理器电路系统,该流业务管理器电路系统然后可以将加密数据路由到又一内核电路或将加密数据提供给主机系统102。

由于放置和路由工具不必考虑上游和下游内核电路的相对放置,所以本公开内所描述的流式传输架构还允许EDA应用的放置和路由功能(如由数据处理系统执行)更有效地操作(需要更少的时间来完成)。当通过数据流交换数据的两个或更多个内核电路位于不同管芯和/或不同IC中时,这点尤其重要。

在没有本公开内所描述的示例流式传输架构的情况下,则需要在旨在进行通信的每对内核电路之中实现直接内核到内核路由。这种类型的连接性使内核电路的放置和布线受到显著约束以满足时序要求,并且在跨越管芯和/或IC边界时变得更加困难。进一步地,使用本文中所描述的架构提供了所描述的灵活性,同时还为所实现的内核电路实现了更高的时钟速度。在每对可能内核电路对之间使用点到点连接的架构可能需要可编程电路系统的诸多资源,以致结果实现方式可能在比使用本文中所描述的示例流式传输架构所能达到的时钟频率更慢的时钟频率下进行操作。

在图4的示例中,IC 104和IC 402均被实现为多管芯IC。在一个或多个其他实施例中,IC 104和402中的一个或两个IC被实现为包括收发器的单管芯IC。

图5图示了使用数据流在内核电路之间交换数据的示例方法500。方法500可以在主机系统已经将任务卸载到硬件加速器内的内核电路的状态下开始。在一个或多个实施例中,方法500在执行图3的框305至320之后的状态下和/或针对数据传送中涉及的每个IC开始。在图5的示例中,内核电路(在本文中被称为发送内核电路)在操作链中执行一个操作,其中每个操作由不同内核电路执行。

在框505中,发送内核电路将数据流输出或存储在附接到输出端口的输出缓冲器中。在框510中,流业务管理器电路系统检测发送内核电路的输出缓冲器中存储的数据流。如结合图2所描述的,流业务管理器电路系统能够监测缓冲器的状态。在一个或多个实施例中,数据流包括指定数据的目的地的信息。在该示例中,目的地不是主机系统,而是被称为接收内核电路的另一内核电路。在一个或多个其他实施例中,流业务管理器电路系统被配置为例如使用如先前所描述的映射数据将数据从发送内核电路路由到另一目的地,诸如接收内核电路和/或主机系统。在框515中,流业务管理器电路确定接收内核电路。例如,流业务管理器电路系统能够读取发送内核电路的输出缓冲器中存储的数据流并且确定指定的接收内核电路。在另一示例中,流业务管理器基于存储在其中的映射数据(例如,特定内核电路输出到目的地的映射)来确定接收内核电路。

在框520中,流业务管理器电路系统确定接收内核电路的输入缓冲器是否具有的可用空间足以存储来自发送内核电路的数据流。在框525中,响应于确定接收内核电路的输入缓冲器具有足够的空间,流业务管理器电路系统发起从发送内核电路到接收内核电路的数据传送。如果执行跨IC数据传送,则流业务管理器电路系统通过(多个)互连和/或收发器将数据从发送内核电路的输出缓冲器传送到接收内核电路的输入缓冲器。在一个或多个实施例中,当在同一管芯中的内核电路之间传送数据时,数据可以在流业务管理器电路系统的控制下通过相关互连发送,而无需传递通过流业务管理器电路系统。

在特定实施例中,来自发送内核电路的数据流在数据流内包括一个或多个带内指令。在一个示例中,指令包括在从发送内核电路到接收内核电路的数据流(或分组化数据)的有效载荷部分中。如所讨论的,发送内核电路的输出缓冲器将数据流转换为分组化数据用于发送到接收内核电路。接收内核电路的输入缓冲器将所接收的分组化数据转换为提供给接收内核电路的数据流。

在图5的示例中,应当领会,数据流可以从管芯404中的内核电路发送到管芯406中的内核电路,或可以从管芯406中的内核电路发送到管芯404中的内核电路。同样,数据流可以从管芯408中的内核电路发送到管芯410中的内核电路,或可以从管芯410中的内核电路发送到管芯408中的内核电路。

图5的示例参考流业务管理器电路系统。在这方面,方法500可以在流业务管理器执行所描述的操作的情况下(例如,在发送内核电路和接收内核电路两者均在IC 104中的情况下)、在卫星流业务管理器执行所描述的操作的情况下(在发送内核电路和接收内核电路都在IC 402中的情况下)、或在流业务管理器和卫星流业务管理器两者均执行操作的情况下(例如,在发送内核电路和接收内核电路在不同IC中的情况下)来执行。在后一情况下,应当领会,流业务管理器和卫星流业务管理器中的每个管理器都与位于同一IC中的内核电路交互。

例如,在发送内核电路和接收内核电路位于不同IC中的情况下,流业务管理器和卫星流业务管理器能够经由收发器442和444通信,以确定内核电路的输入缓冲器和输出缓冲器的状态。例如,流业务管理器能够确定IC 104中的缓冲器的状态,而卫星流业务管理器能够确定IC 402中的缓冲器的状态。流业务管理器能够从卫星流业务管理器请求IC 402中的任何缓冲器的状态,该卫星流业务管理器通过(多个)所请求的状态做出响应。同样,卫星流业务管理器能够从流业务管理器请求IC 104中任何缓冲器的状态,该流业务管理器通过(多个)所请求的状态做出响应。流业务管理器和卫星流业务管理器之间的通信支持发送内核电路和接收内核电路位于IC 104的同一管芯中或IC 104的不同管芯中、位于IC 402的同一管芯中或IC402的不同管芯中、或位于不同IC中。

图6图示了与本文中所描述的一个或多个实施例一起使用的示例系统600。系统600是可以用于实现计算机、服务器、诸如膝上型计算机或平板计算机之类的便携式计算机、或其他数据处理系统的计算机硬件的示例。例如,系统600是主机系统102和/或执行EDA应用以生成如本文中所描述的容器文件的另一系统的示例实现方式。

在图6的示例中,系统600包括至少一个处理器605。处理器605通过接口电路615耦合到存储器610。系统600能够在存储器610内存储计算机可读指令(也称为“程序代码”)。存储器610是计算机可读存储介质的示例。处理器605能够执行经由接口电路系统615从存储器610访问的程序代码。

存储器610可以包括一个或多个物理存储器设备,诸如例如,本地存储器和大容量存储设备。本地存储器是指在程序代码的实际执行期间通常使用的(多个)非永久性存储器设备。本地存储器的示例包括RAM和/或适于在程序代码执行期间由处理器使用的各种类型的RAM中的任一RAM(例如,动态RAM或“DRAM”或静态RAM或“SRAM”)。大容量存储设备是指永久性数据存储设备。大容量存储设备的示例包括但不限于硬盘驱动器(HDD)、固态驱动器(SSD)、闪存、只读存储器(ROM)、可擦可编程只读存储器(EPROM)、电可擦可编程只读存储器(EEPROM)、或其他合适存储器。系统600还可以包括一个或多个高速缓冲存储器(未示出),该一个或多个高速缓冲存储器提供至少一些程序代码的临时存储以减少在执行期间必须从大容量存储设备取回程序代码的次数。

存储器610能够存储程序代码和/或数据。在一个或多个实施例中,当系统600实现诸如主机系统102之类的系统时,存储器610能够存储并执行与结合图1所描述的框架相同或相似的框架。该框架还可以包括操作系统。一个或多个容器还可以存储在存储器610中,用于在通过接口电路系统615附接到系统600的硬件加速器625内实现。硬件加速器625包括一个或多个IC,该一个或多个IC的架构与结合图7所描述的架构相同或相似。

在一个或多个其他实施例中,系统600实现执行EDA应用的EDA系统。因此,系统600能够处理指定内核的程序代码,以视情况而定生成被指定为配置比特流或部分配置比特流的内核电路。系统600在容器文件内包括(多个)配置比特流。进一步地,系统600能够生成映射信息并且将映射信息包括在容器文件内作为元数据。在系统600实现EDA系统的实施例中,可以包括或可以不包括硬件加速器625。

系统600(例如,处理器605)能够执行本文中所描述的操作系统、应用和/或框架以执行本公开内所描述的操作。如此,存储器610中存储的指令和/或数据可以被认为是系统600的集成部分。进一步地,应当领会,系统600(例如,处理器605)使用、生成和/或操作的任何数据是功能性数据结构,该功能性数据结构当用作系统的一部分时会赋予功能性。

接口电路系统615的示例包括但不限于系统总线和输入/输出(I/O)总线。接口电路系统615可以使用多种总线架构中的任一总线架构来实现。总线架构的示例可以包括但不限于增强工业标准架构(EISA)总线、加速图形端口(AGP)、视频电子标准协会(VESA)本地总线、通用串行总线(USB)、以及PCIe总线。

系统600还可以包括一个或多个I/O设备620,该一个或多个I/O设备620耦合到接口电路系统615。I/O设备620可以直接或通过中间I/O控制器耦合到系统600,例如,接口电路615系统。I/O设备620的示例包括但不限于键盘、显示设备、指示设备、一个或多个通信端口、以及网络适配器。网络适配器是指使得系统600能够通过中间专用网络或公共网络耦合到其他系统、计算机系统、远程打印机和/或远程存储设备的电路系统。调制解调器、电缆调制解调器、以太网卡和无线收发器是可以与系统600一起使用的不同类型的网络适配器的示例。

依据所实现的特定类型的设备和/或系统,系统600可以包括比图6所更少的部件或图6中未图示的其他部件。另外,所包括的特定操作系统、(多个)应用和/或I/O设备可能会基于系统类型而发生变化。进一步地,说明性部件的一个或多个说明性部件可以并入另一部件中或以其他方式形成另一部件的一部分。例如,处理器可以包括至少一些存储器。系统600可以用于实现单个计算机或多个联网或互连计算机,每个联网或互连计算机都使用图6的架构或与其相似的架构来实现。

一些IC(被称为可编程IC)可以被编程为执行指定功能。可以编程的IC的一个示例是FPGA。FPGA通常包括可编程图块阵列。这些可编程区块可以包括例如输入/输出块(IOB)、可配置逻辑块(CLB)、专用RAM块(BRAM)、乘法器、数字信号处理块(DSP)、处理器、时钟管理器、延迟锁定环(DLL)等。

每个可编程图块通常包括可编程互连电路系统和可编程逻辑电路系统。可编程互连电路系统通常包括通过可编程互连点(PIP)互连的许多不同长度的互连线。可编程逻辑电路系统使用可编程元件来实现用户设计的逻辑,该可编程元件可以包括例如函数发生器、寄存器、算术逻辑等。

通常通过将配置数据流加载到内部配置存储器单元中来对可编程互连系统和可编程逻辑电路系统进行编程,该内部配置存储器单元定义了如何配置可编程元件。可以从存储器(例如,从外部PROM)读取配置数据,或该配置数据通过外部设备写入FPGA中。然后,各个存储单元的集体状态确定FPGA的功能。

另一类型的可编程IC是复杂可编程逻辑设备或CPLD。CPLD包含两个或更多个“功能块”,它们通过互连开关矩阵连接在一起并且连接到输入/输出(I/O)资源。CPLD的每个功能块都包括两级AND/OR结构,该两级AND/OR结构与用于可编程逻辑阵列(PLA)和可编程阵列逻辑(PAL)设备的结构相似。在CPLD中,配置数据通常片上存储在非易失性存储器中。在一些CPLD中,配置数据片上存储在非易失性存储器中,然后作为初始配置(编程)序列的一部分下载到易失性存储器中。

对于所有这些可编程IC,设备的功能由为此目的提供给设备的数据位控制。数据位可以存储在易失性存储器(例如,静态存储器单元,如同在FPGA和一些CPLD中一样)、非易失性存储器(例如,FLASH存储器,如同在一些CPLD中一样)或任何其他类型的存储器单元中。

通过应用诸如金属层之类的处理层来对其他可编程IC进行编程,该处理层以可编程方式互连设备上的各个元件。这些可编程IC被称为掩模可编程设备。可编程IC还可以以其他方式(例如,使用熔丝或反熔丝技术)来实现。短语“可编程IC”可以包括但不限于这些设备,并且还可以涵盖仅部分可编程的设备。例如,一种类型的可编程IC包括硬编码晶体管逻辑和以可编程方式互连硬编码晶体管逻辑的可编程开关结构的组合。

图7图示了用于IC的示例架构700。在一个方面中,架构700可以在可编程IC内实现。例如,架构700可以用于实现FPGA。架构700还可以表示IC的片上系统(SoC)类型。SoC是包括执行程序代码的处理器和一个或多个其他电路的IC。其他电路可以被实现为硬连线电路系统、可编程电路系统和/或其组合。电路可以彼此协作和/或与处理器协作操作。

如所示出的,架构700包括几种不同类型的可编程电路系统,例如,逻辑块。例如,架构700可以包括大量不同的可编程图块,这些可编程图块包括多千兆位收发器(MGT)701、可配置逻辑块(CLB)702、BRAM 703、输入/输出块(IOB)704、配置和时钟逻辑(CONFIG/CLOCKS)705、数字信号处理块(DSP)706、专用I/O块707(例如,配置端口和时钟端口)、以及其他可编程逻辑708,诸如数字时钟管理器、模数转换器、系统监测逻辑等。

在一些IC中,每个可编程图块包括可编程互连元件(INT)711,该可编程互连元件具有与每个相邻图块中的对应INT 711的标准连接。因此,INT 711一起实现了所图示的IC的可编程互连结构。每个INT 711还包括与同一图块内的可编程逻辑元件之间的连接,如图7顶部包括的示例所示。

例如,CLB 702可以包括可配置逻辑元件(CLE)712,该可配置逻辑元件712可以被编程为实现用户逻辑以及单个INT 711。BRAM 703除一个或多个INT 711外还可以包括BRAM逻辑元件(BRL)713。通常,图块中包含的INT 711的数目取决于图块的高度。如所描画的,BRAM图块具有与五个CLB相同的高度,但是还可以使用其他数目(例如,四个)。除适当数目的INT 711之外,DSP图块706还可以包括DSP逻辑元件(DSPL)714。除了INT 711的一个实例之外,IOB 704还可以包括例如I/O逻辑元件(IOL)715的两个实例。连接到IOL 715的实际I/O焊盘可能不局限于IOL 715的区域。

在图7所描绘的示例中,例如由区域705、707和708形成的管芯中心附近的柱形区域可以用于配置、时钟和其他控制逻辑。从该列延伸的水平区域709可以用于在可编程IC的整个宽度上分发时钟和配置信号。

利用图7所图示的架构的一些IC包括使规则列状结构分裂的附加逻辑块,这些附加逻辑块构成该IC的大部分。附加逻辑块可以是可编程块和/或专用电路系统。例如,被描绘为PROC 110的处理器块跨越了若干列的CLB及BRAM。

在一个方面中,PROC 710可以被实现为专用电路系统,例如,硬连线处理器,该专用电路系统被制作为实现IC的可编程电路系统的管芯的一部分。PROC 710可以表示多种不同的处理器类型和/或系统中的任一个,从复杂性上说,涵盖从单个处理器(例如,能够执行程序代码的单个核心)到具有一个或多个核心、模块、协处理器、接口等的完整处理器系统。

在另一方面中,可以从架构700中省略PROC 710,并且使用所描述的可编程块中的其他种类的可编程块的一个或多个可编程块来替换。进一步地,这样的块可以用于形成“软处理器”,在于可编程电路系统的各个块可以用于形成可以执行程序代码的处理器,PROC710也是如此。

短语“可编程电路系统”是指IC内的可编程电路元件,例如,本文中所描述的各种可编程或可配置电路块或图块;以及互连电路系统,该互连电路系统根据加载到IC中的配置数据选择性地耦合各种电路块、图块和/或元件。例如,PROC 710外部的图7所示的电路块(诸如,CLB 702)被认为是IC的可编程电路系统。

一般而言,在将配置数据加载到IC中之前,才建立可编程电路系统的功能性。配置位集合可以用于对诸如FPGA之类的IC的可编程电路系统进行编程。(多个)配置为通常被称为“配置比特流”。一般而言,如果不先将配置比特流加载到IC中,则可编程电路系统将无法操作或无法运转。配置比特流有效地实现了可编程电路系统内的特定电路设计。电路设计规定例如可编程电路块的功能方面以及各种可编程电路块之间的物理连接性。

被“硬连线”或“硬化”(即,不可编程)的电路系统被制造为IC的一部分。与可编程电路系统不同,在通过加载配置比特流制造IC之后,就不会实现硬连线电路系统或电路块。硬连线电路系统通常被认为具有例如专用电路块和互连,这些电路块和互连无需先将配置比特流加载到IC(例如,PROC 710)中即可实现功能。

在一些实例中,硬连线电路可以具有一个或多个操作模式,该一个或多个操作模式可以根据IC内的一个或多个存储元件中存储的寄存器设置或值来设置或选择。可以例如通过将配置比特流加载到IC中来设置操作模式。尽管具有这种能力,但是因为硬连线电路系统当被制造为IC的一部分时,是可操作的并且具有特定功能,硬连线电路系统不被认为是可编程电路系统。

在SoC的情况下,配置比特流可以指定要在可编程电路系统中实现的电路系统以及要由PROC 710或软处理器执行的程序代码。在一些情况下,架构700包括专用配置处理器,该专用配置处理器将配置比特流加载到适当配置存储器和/或处理器存储器。专用配置处理器不执行用户指定的程序代码。在其他情况下,架构700可以利用PROC 710来接收配置比特流,将配置比特流加载到适当配置存储器中,和/或提取程序代码以用于执行。

图7旨在说明可以用于实现包括可编程电路系统(例如,可编程组构)的IC的示例架构。例如,一列中逻辑块的数目、列的相对宽度、列的数目和次序、列中包含的逻辑块的类型、逻辑块的相对尺寸、以及图7的顶部处包括的互连/逻辑实现方式仅是说明性的。例如,在实际IC中,无论CLB出现在何处,通常都包括一个以上的相邻列的CLB,以促进用户电路设计的有效实施。然而,相邻CLB列的数目可能会随IC的整体尺寸而发生变化。进一步地,IC内诸如PROC 710之类的块的尺寸和/或位置仅为了说明,并非旨在作为限制。

如所讨论的,使用架构700或与其相似的架构实现的IC可以用于实现本文中所描述的流式传输架构。在一个或多个实施例中,端点108、DMA 110、流业务管理器212、卫星流业务管理器412、互连214和216、缓冲器218-232和内核电路234可以使用可编程电路系统来实现。在一个或多个其他实施例中,诸如端点108、DMA 110和/或互连之类的电路块中的选定电路块可以被实现为硬化电路块或硬连线电路块。在一个或多个实施例中,输入缓冲器和/或输出缓冲器可以被实现为AXI4-流数据FIFO。

在特定实施例中,与使用较慢的片外RAM相反,可以使用可用存储器资源(例如,BRAM)或IC 104内可用的其他相似电路块来实现被描述为位于IC 104中的任何缓冲器或队列。例如,缓冲器218-232、业务流管理器212中的队列和/或DMA 110中的队列可以使用IC上可用的存储器资源来实现。

为了说明而非限制,提供了本文中所描述的架构。例如,IC可以包括图中所示的更少个或更多个内核电路。进一步地,在IC内实现的驱动器和缓冲器中的队列的数目将基于使用IC的可编程电路系统实现的内核电路的数目来发生变化。

为了说明,对特定术语进行阐述,以提供对本文中所公开的各种发明概念的透彻理解。然而,本文中所使用的术语仅为了描述本发明布置的特定方面,并非为了进行限制。

如本文中所定义的,除非上下文另有明确指出,否则单数形式“一”、“一个”和“该”旨在也包括复数形式。

如本文中所定义的,术语“大约”意指接近正确或精确,值或量接近但不精确。例如,术语“大约”可能意指所列举的特点、参数或值在精确特点、参数或值的预先确定的量之内。

如本文中所定义的,除非另有明确指出,否则术语“至少一个”、“一个或多个”和“和/或”是操作时为结合和分开两者的开放式表达。例如,表达中的每个表达“A、B和C中的至少一个”、“A、B或C中的至少一个”、“A、B和C中的一个或多个”、“A、B或C的一个或多个”、以及“A、B和/或C”意指“单独的A、单独的B、单独的C、A和B一起、A和C一起、B和C一起、或A、B和C一起。

如本文中所定义的,术语“自动地”意指没有用户干预。如本文中所定义的,术语“用户”意指人类。

如本文中所定义的,术语“计算机可读存储介质”意指包含或存储供指令执行系统、装置或设备使用或与其结合使用的程序代码的存储介质。如本文中所定义的,“计算机可读存储介质”本身并非暂态传播信号。计算机可读存储介质可以是但不限于电子存储设备、磁性存储设备、光学存储设备、电磁存储设备、半导体存储设备、或前述的任何合适组合。如本文中所描述的,各种形式的存储器是计算机可读存储介质的示例。计算机可读存储介质的更具体示例的非详尽列表可以包括:便携式计算机磁盘、硬盘、RAM、只读存储器(ROM)、可擦可编程只读存储器(EPROM或闪存)、电可擦可编程只读存储器(EEPROM)、静态随机存取存储器(SRAM)、便携式光盘只读存储器(CD-ROM)、数字多功能磁盘(DVD)、存储棒、软盘等。

如本文中所定义的,依据上下文,术语“如果”意指“何时”或“在……时”或“响应于(in response to)”或“响应于(responsive to)”。因此,依据上下文,短语“如果确定”或“如果检测到[所陈述的条件或事件]”可以被解释为意指“在确定时”或“响应于确定”或“在检测到[所陈述的条件或事件]时”或“响应于检测到[所陈述的条件或事件]”或“响应于检测到[所陈述的条件或事件]”。

如本文中所定义的,术语“响应于”和如上文所描述的相似语言(例如,“如果”、“何时”或“在......时”)意指容易对动作或事件做出响应或反应。响应或反应自动执行。因此,如果“响应于”第一动作而执行第二动作,则第一动作的发生与第二动作的发生之间存在因果关系。术语“响应于”指示因果关系。

如本文中所定义的,术语“一个实施例”、“一实施例”、“一个或多个实施例”、“特定实施例”或相似语言意指结合该实施例所描述的特定特征、结构或特点包括在本公开中所描述的至少一个实施例中。因此,在整个本公开中的短语“在一个实施例中”、“在一实施例中”、“在一个或多个实施例中”、“在特定实施例中”和相似语言的出现可以但不一定全部是指同一实施例。在本公开内,术语“实施例”和“布置”可互换使用。

如本文中所定义的,术语“处理器”意指能够执行程序代码中包含的指令的至少一个硬件电路。硬件电路可以是集成电路。处理器的示例包括但不限于中央处理单元(CPU)、阵列处理器、矢量处理器、数字信号处理器(DSP)、以及控制器。

如本文中所定义的,术语“输出”意指在物理存储元件(例如,设备)中存储、写入显示器或其他外围输出设备、向另一系统发送或传输、导出等。

如本文中所定义的,术语“基本上”意指无需精确实现所叙述的特点、参数或值,而是意指包括例如公差、测量误差、测量精度限制、以及本领域技术人员已知的其他因素在内的偏差或变化可以以不排除该特点旨在提供的效果的量出现。

本文中可以使用术语第一、第二等来描述各个元件。因为除非另有指出或上下文另有明确指出,否则这些术语仅用于区分一个元件与另一元件,所以这些元件不应受这些术语的限制。

计算机程序产品可以包括一个或多个计算机可读存储介质,该一个或多个计算机可读存储介质其上具有计算机可读程序指令,用于使得处理器执行本文中所描述的本发明布置的各方面。在本公开内,术语“程序代码”与术语“计算机可读程序指令”可互换使用。本文中所描述的计算机可读程序指令可以从计算机可读存储介质下载到相应计算/处理设备,或经由网络(例如,互联网、LAN、WAN和/或无线网络)下载到外部计算机或外部存储设备。该网络可以包括铜传输电缆、光学传输纤维、无线传输、路由器、防火墙、交换机、网关计算机和/或包括边缘服务器的边缘设备。每个计算/处理设备中的网络适配器卡或网络接口从网络接收计算机可读程序指令,并且转发计算机可读程序指令以存储在相应计算/处理设备内的计算机可读存储介质中。

用于执行本文中所描述的本发明布置的操作的计算机可读程序指令可以是汇编程序指令、指令集架构(ISA)指令、机器指令、机器相关指令、微代码、固件指令、或以一种或多种编程语言(包括面向对象的编程语言和/或过程编程语言)的任何组合编写的源代码或对象代码。计算机可读程序指令可以包括状态设置数据。计算机可读程序指令可以完全在用户计算机上、部分在用户计算机上、作为独立软件封装、部分在用户计算机上且部分在远程计算机上、或完全在远程计算机或服务器上执行。在后一场景中,远程计算机可以通过任何类型的网络(包括LAN或WAN)连接到用户的计算机,或可以与外部计算机(例如,使用互联网服务提供商通过互联网)建立连接。在一些情况下,包括例如可编程逻辑电路系统、FPGA或PLA的电子电路系统可以通过利用计算机可读程序指令的状态信息个性化电子电路系统来执行计算机可读程序指令,以便执行本文中所描述的本发明布置的各方面。

本文中参考方法、装置(系统)和计算机程序产品的流程图和/或框图对本发明布置的某些方面进行了描述。应当理解,流程图图示和/或框图的每个框以及流程图图示和/或框图中的框的组合可以由计算机可读程序指令(例如,程序代码)来实现。

这些计算机可读程序指令可以提供给通用计算机、专用计算机、或其他可编程数据处理设备的处理器,以产生机器,使得经由计算机的处理器或其他可编程数据处理装置执行的指令创建用于实现流程图和/或框图的一个或多个框中指定的功能/动作的器件。这些计算机可读程序指令还可以存储在计算机可读存储介质中,该计算机可读存储介质可以指导计算机、可编程数据处理装置和/或其他设备以特定方式运转,从而使得其中存储有指令的计算机可读存储介质包括制品,该制品包括实现在流程图和/或框图的一个或多个框中指定的操作的各方面的指令。

计算机可读程序指令还可以加载到计算机、其他可编程数据处理设备、或其他设备上,以使得在计算机、其他可编程设备、或其他设备上执行一系列操作,以产生计算机实现的过程,使得在计算机、其他可编程装置、或其他设备上执行的指令实现在流程图和/或框图的一个或多个框中指定的功能/动作。

附图中的流程图和框图图示了根据本发明布置的各个方面的系统、方法和计算机程序产品的可能实现方式的架构、功能性和操作。在这方面,流程图或框图中的每个框可以表示指令的模块、片段或部分,该模块、片段或部分包括用于实现指定操作的一个或多个可执行指令。

在一些备选实现方式中,框中指出的操作可以不按图中指出的次序发生。例如,依据所涉及的功能性,连续示出的两个框可以基本上同时执行,或框有时可以按相反次序执行。在其他示例中,框通常可以按数字升序执行,而在其他示例中,一个或多个框可以按变序执行,其中在后续框或没有紧接其后的其他框中存储并利用结果。还应当指出,框图和/或流程图说明的每个框以及框图和/或流程图说明中的框的组合可以由执行指定功能或动作或进行特殊用途的硬件和计算机指令的组合的基于硬件的专用系统来实现。

可以在以下权利要求中找到的所有器件或步骤加上功能元件的对应结构、材料、动作和等同物旨在包括用于与如明确要求保护的其他要求保护的元件组合执行功能的任何结构、材料或动作。

本文中所提供的本发明布置的描述是出于说明的目的,并非旨在穷举或局限于所公开的形式和示例。选取本文中所使用的术语是为了解释本发明布置的原理、对市场上发现的技术的实际应用或技术改进,和/或使得本领域的其他普通技术人员能够理解本文中所公开的本发明布置。在没有背离所描述的本发明布置的范围和精神的情况下,修改和变化对本领域普通技术人员而言是显而易见的。因而,在指示这样的特征和实现方式的范围时,应当参考以下权利要求,并非参考前述公开内容。

相关技术
  • 流式传输平台流和架构
  • 基于核心平台系统与局域网子平台系统群架构的信息发布与传输系统
技术分类

06120112919230