设备中的数据处理引擎布置
技术领域
本公开涉及集成电路设备(器件),并且更具体地涉及包括数据处理引擎和/或数据处理引擎阵列的设备。
背景技术
可编程集成电路(IC)是指包括可编程电路装置的一种IC。可编程IC的示例是现场可编程门阵列(FPGA)。FPGA的特征在于包含可编程电路块。可编程电路块的示例包括但不限于输入/输出块(IOB)、可配置逻辑块(CLB)、专用随机访问存储器块(BRAM)、数字信号处理块(DSP)、处理器、时钟管理器和延迟锁定循环(DLL)。
通过将有时被称为配置位流的配置数据加载到设备中,可以在可编程IC的可编程电路装置内物理地实现电路设计。配置数据可以被加载到设备的内部配置存储器单元中。各个配置存储器单元的集体状态确定可编程IC的功能。例如,一旦加载了配置数据,则由各种可编程电路块执行的特定操作以及可编程IC的可编程电路块之间的连通性由配置存储器单元的集体状态来限定。
发明内容
在一个或多个实施例中,设备可以包括多个数据处理引擎。每个数据处理引擎可以包括核心和存储器模块。每个核心可以被配置为访问相同数据处理引擎中的存储器模块和多个数据处理引擎中的至少一个其它数据引擎内的存储器模块。
在一个或多个实施例中,方法可以包括:第一数据处理引擎的第一核心生成数据,第一核心将数据写入第一数据处理引擎内的第一存储器模块,以及第二数据处理引擎的第二核心从第一存储器模块读取数据。
在一个或多个实施例中,设备可以包括多个数据处理引擎、子系统以及片上系统(SoC)接口块,片上系统(SoC)接口块耦合到多个数据处理引擎和子系统。SoC接口块可以被配置为在子系统与多个数据处理引擎之间交换数据。
在一个或多个实施例中,用于SoC接口块的图块可以包括存储器映射的交换器,存储器映射的交换器被配置为向相邻的图块提供配置数据的第一部分并且向多个数据处理引擎中的数据处理引擎提供配置数据的第二部分。图块可以包括流交换器,流交换器被配置为向至少一个相邻的图块提供第一数据并且向多个数据处理引擎中的数据处理引擎提供第二数据。图块可以包括事件广播电路装置,事件广播电路装置被配置为接收在图块内生成的事件和来自图块外部电路装置的事件,其中事件广播电路装置是可编程的,以将事件中的选择的事件提供给选择的目的地。图块可以包括接口电路装置,接口电路装置将存储器映射的交换器、流交换器和事件广播电路装置耦合到包括图块的设备的子系统。
在一个或多个实施例中,设备可以包括多个数据处理引擎。数据处理引擎中的每个数据处理引擎可以包括核心和存储器模块。多个数据处理引擎可以被组织在多个行中。每个核心可以被配置为通过对多个数据处理引擎中的其它相邻的数据处理引擎的存储器模块的共享的访问来与相邻的数据处理引擎通信。
在一个或多个实施例中,设备可以包括多个数据处理引擎。数据处理引擎中的每个数据处理引擎可以包括:存储器池,存储器池具有多个存储器体;多个核心,各自被耦合到存储器池并且被配置为访问多个存储器体;存储器映射的交换器,存储器映射的交换器被耦合到存储器池以及至少一个相邻的数据处理引擎的存储器映射的交换器;以及流交换器,流交换器被耦合到多个核心中的每个核心并且被耦合到至少一个相邻的数据处理引擎的流交换器。
提供本发明内容部分仅是为了引入某些概念,而不是标识所要求保护的主题的任何关键特征或必要特征。根据附图和以下详细描述,本发明布置的其它特征将变得显而易见。
附图说明
在附图中以示例的方式示出了本发明的布置。然而,附图不应被解释为将本发明的布置限制为仅示出的特定实现。在阅读以下详细描述并参考附图后,各个方面和优点将变得显而易见。
图1示出了包括数据处理引擎(DPE)阵列的设备的示例。
图2A、2B、2C和2D示出了用于具有一个或多个DPE阵列的设备的示例架构。
图3示出了对于包括DPE阵列的设备的另一个示例架构。
图4A和图4B示出了具有一个或多个DPE阵列的设备的多管芯实现的示例。
图5A、5B、5C、5D、5E、5F和5G示出了具有DPE阵列的设备的示例多管芯实现。
图6示出了用于DPE阵列的DPE的示例架构。
图7示出了多个DPE之间的示例连通性。
图8示出了图6的示例DPE架构的另外的方面。
图9示出了DPE的核心的级联接口的示例连通性。
图10A、10B、10C、10D和10E示出了DPE之间的连通性的示例。
图11示出了DPE内的事件处理电路装置的示例。
图12示出了用于DPE的另一个示例架构。
图13示出了用于DPE阵列的示例架构。
图14A、14B和14C示出了对于实现片上系统(SoC)接口块的图块示例架构。
图15示出了SoC接口块的图块的可编程逻辑接口的示例实现。
图16示出了SoC接口块的图块的片上网络(NoC)流接口的示例实现。
图17示出了SoC接口块的图块的直接存储器访问(DMA)引擎的示例实现。
图18示出了用于多个DPE的示例架构。
图19示出了用于多个DPE的另一个示例架构。
图20示出了配置DPE阵列的示例方法。
图21示出了DPE阵列的操作的示例方法。
图22示出了DPE阵列的操作的另一个示例方法。
图23示出了DPE阵列的操作的另一个示例方法。
图24示出了DPE阵列的操作的另一个示例方法。
具体实施方式
尽管本公开以限定新颖性特征的权利要求做结论,但是可以认为,结合附图考虑本说明书将更好地理解本公开内描述的各种特征。为了说明的目的,提供了本文描述的过程、机器、制造及其任何变型。在本公开内描述的特定结构和功能细节不应被解释为限制性的,而仅仅是作为权利要求的基础,并且作为教导本领域技术人员以实际上任何适当的详细结构来各方面地采用所描述的特征的代表性基础。另外,在本公开内使用的术语和短语不旨在限制,而是提供所描述的特征的可理解的描述。
本公开涉及包括一个或多个数据处理引擎(DPE)和/或DPE阵列的集成电路设备(器件)。DPE阵列是指多个硬连线电路块。多个电路块可以是可编程的。DPE阵列可以包括多个DPE和片上系统(SoC)接口块。通常,DPE包括能够提供数据处理能力的核心。DPE还包括能够由DPE中的核心或多个核心访问的存储器模块。在特定实施例中,DPE的存储器模块还可以由DPE阵列的不同DPE中的一个或多个核心访问。
DPE还可以包括DPE互连。DPE互连是指能够实现与DPE阵列的其它DPE的通信和/或与包括DPE阵列的设备的不同子系统的通信的电路装置。DPE互连还可以支持DPE的配置。在特定实施例中,DPE互连能够传输控制数据和/或调试数据。
可以使用多种不同架构中的任何一种架构来组织DPE阵列。在一个或多个实施例中,DPE阵列可以被组织在一个或多个行中以及在一个或多个列中。在一些情况下,DPE的列和/或行是对准的。在一些实施例中,每个DPE可以包括耦合到存储器模块的单个核心。在其它实施例中,DPE阵列中的一个或多个DPE或每个DPE可以被实现为包括耦合到存储器模块的两个或多个核心。
在一个或多个实施例中,DPE阵列被实现为同质结构,其中每个DPE与彼此相同。在其它实施例中,DPE阵列被实现为异质结构,其中DPE阵列包括两个或多个不同类型的DPE。例如,DPE阵列可以包括具有单个核心的DPE、具有多个核心的DPE、具有其中包括不同类型的核心的DPE、和/或具有不同物理架构的DPE。
DPE阵列可以被实现为各种尺寸。例如,DPE阵列可以被实现为跨越设备的管芯的整个宽度和/或长度。在另一个示例中,DPE阵列可以被实现为跨越这种管芯的整个宽度和/或长度的一部分。在另外的实施例中,可以在管芯内实现不止一个DPE阵列,其中DPE阵列中的不同的DPE阵列被分布到管芯上的不同区域,具有不同尺寸、具有不同形状、和/或具有如本文所述的不同架构(例如,对准的行和/或列、同质和/或异质)。另外,DPE阵列可以包括DPE的不同数目的行和/或DPE的不同数目的列。
DPE阵列可以与设备内的多种子系统中的任何一种子系统一起使用,并且被耦合到设备内的多种子系统中的任何一种子系统。这种子系统可以包括但不限于处理器和/或处理器系统、可编程逻辑和/或片上网络(NoC)。在特定实施例中,NoC可以是可编程的。可以被包括在设备中并且被耦合到DPE阵列的子系统的另外的示例可以包括但不限于:专用集成电路(ASIC)、硬连线电路块、模拟和/或混合信号电路装置、图形处理单元(GPU)和/或通用处理器(例如,中央处理单元或CPU)。CPU的示例是具有x86类型的架构的处理器。在本说明书中,术语“ASIC”可以指IC、管芯和/或包括与另一种类型或多种类型的电路结合的专用电路的管芯的一部分;和/或指完全由专用电路形成的IC和/或管芯。
在特定实施例中,可以使用单个管芯架构来实现包括一个或多个DPE阵列的设备。在那种情况下,DPE阵列和与DPE阵列一起使用的任何其它子系统被实现在设备的相同管芯上。在其它实施例中,包括一个或多个DPE阵列的设备可以被实现为包括两个或多个管芯的多管芯设备。在一些多管芯设备中,DPE阵列或多个DPE阵列可以被实现在一个管芯上,而一个或多个其它子系统被实现在一个或多个其它管芯中。在其它多管芯设备中,DPE阵列或多个DPE阵列可以被实现在与多管芯设备的一个或多个其它子系统结合的一个或多个管芯中(例如,其中DPE阵列被实现在与至少一个子系统相同的管芯中)。
如本公开内描述的DPE阵列能够实现优化的数字信号处理(DSP)架构。DSP架构能够有效地执行各种不同的操作中的任何一种操作。由该架构可以执行的操作类型的示例包括但不限于与无线电、决策反馈均衡(DFE)、5G/基带、无线回程、机器学习、汽车驾驶员辅助、嵌入式视觉、电缆访问和/或雷达相关的操作。与利用常规的可编程(例如,FPGA类型)电路的其它解决方案相比,本文所述的DPE阵列能够执行这样的操作,同时消耗更少的功率。另外,与利用常规的可编程电路装置的其它解决方案相比,可以使用较少的管芯面积实现基于DPE阵列的解决方案。DPE阵列还能够执行本文所述的操作,同时满足可预测的和有保证的数据吞吐量和延迟指标。
下面参考附图更详细地描述本发明的布置的另外的方面。为了简化说明的目的,附图中所示的元件不必按比例绘制。例如,为了清楚起见,一些元件的尺寸可能相对于其它元件被放大。进一步,在认为适当的情况下,在附图中重复参考数字以指示对应的、类似或相似的特征。
图1示出了包括DPE阵列102的设备100的示例。在图1的示例中,DPE阵列102包括SoC接口块104。设备100还包括一个或多个子系统106-1至106-N。在一个或多个实施例中,设备100被实现为片上系统(SoC)类型的设备。通常,SoC是指包括两个或多个能够相互交互的子系统的IC。作为示例,SoC可以包括执行程序代码的处理器和一个或多个其它电路。其它电路可以被实现为硬连线电路装置、可编程电路装置、其它子系统和/或其任何组合。电路可以彼此协作和/或与处理器协作地操作。
DPE阵列102由多个互连的DPE形成。DPE中的每个DPE都是硬连线电路块。每个DPE可以是可编程的。SoC接口块104可以包括一个或多个图块。SoC接口块104的图块中的每个图块可以是硬连线的。SoC接口块104的每个图块可以是可编程的。SoC接口块104提供DPE阵列102(例如,DPE)与SoC的其它部分(诸如,设备100的子系统106)之间的接口。例如,子系统106-1至106-N可以表示:一个或多个处理器和/或处理器系统(例如,CPU、通用处理器和/或GPU)、可编程逻辑、NoC、ASIC、模拟和/或混合信号电路装置和/或硬连线电路块或其任何组合。
在一个或多个实施例中,使用单管芯架构实现设备100。在那种情况下,DPE阵列102和至少一个子系统106可以被包括或被实现在单个管芯中。在一个或多个其它实施例中,使用多管芯架构实现设备100。在那种情况下,可以在两个或多个管芯两端实现DPE阵列102和子系统106。例如,DPE阵列102可以被实现在一个管芯中而子系统106可以被实现在一个或多个其它管芯中。在另一个示例中,SoC接口块104可以被实现在与DPE阵列102的DPE不同的管芯中。在又一示例中,DPE阵列102和至少一个子系统106可以被实现在相同管芯中,而其它子系统和/或其它DPE阵列可以被实现在其它管芯中。以下结合图2、图3、图4和图5更详细地描述了单管芯和多管芯架构的另外的示例。
图2A、图2B、图2C和图2D(统称为“图2”)示出了用于包括一个或多个DPE阵列102的设备的示例架构。更特别地,图2示出了用于设备100的单管芯架构的示例。出于说明的目的,在图2中未示出SoC接口块104。
图2A示出了用于包括单个DPE阵列的设备100的示例架构。在图2A的示例中,DPE阵列102被实现在具有子系统106-1的设备100中。DPE阵列102和子系统106-1被实现在相同管芯中。DPE阵列102可以延伸穿过设备100的管芯的整个宽度或部分地延伸穿过设备100的管芯。如图所示,DPE阵列102被实现在设备100的顶部区域中。然而,应当理解,DPE阵列102可以被实现在设备100的另一个区域中。这样,图2A中的DPE阵列102的放置和/或尺寸不旨在作为限制。DPE阵列102可以通过SoC接口块104(未示出)被耦合到子系统106-1。
图2B示出了用于包括多个DPE阵列的设备100的示例架构。在图2B的示例中,多个DPE阵列被实现并且被描绘为DPE阵列102-1和DPE阵列102-2。图2B示出了可以与子系统106-1一起在设备100的相同管芯中实现的多个DPE阵列。DPE阵列102-1和/或DPE阵列102-2可以延伸穿过设备100的管芯的整个宽度或仅部分地延伸穿过设备100的管芯。如图所示,DPE阵列102-1被实现在设备100的顶部区域中而DPE阵列102-2被实现在设备100的底部区域中。如所指出的,图2B中的DPE阵列102-1和102-2的放置和/或尺寸不旨在作为限制。
在一个或多个实施例中,DPE阵列102-1和DPE阵列102-2可以是基本相似或相同的。例如,DPE阵列102-1在尺寸、形状、DPE的数目以及在每个相应的DPE阵列中的DPE是同质的还是相同类型以及顺序的方面可以与DPE阵列102-2相同。在一个或多个其它实施例中,DPE阵列102-1可以与DPE阵列102-2不同。例如,DPE阵列102-1在尺寸、形状、DPE的数目、核心的类型以及在每个相应的DPE阵列中的DPE是同质的还是不同类型和/或顺序的方面可以与DPE阵列102-2不同。
在一个或多个实施例中,DPE阵列102-1和DPE阵列102-2中的每个DPE阵列经由其自身的SoC接口块(未示出)被耦合到子系统106-1。例如,第一SoC接口块可以被包括并且被用于将DPE阵列102-1耦合到子系统106-1,而第二SoC接口块可以被包括并且被用于将DPE阵列102-2耦合到子系统106-1。在另一个实施例中,单个SoC接口块可以被用于将DPE阵列102-1和DPE阵列102-2两者都耦合到子系统106-1。在后一种情况下,例如,DPE阵列中的一个DPE阵列可以不包括SoC接口块。该阵列中的DPE可以使用另一个DPE阵列的SoC接口块耦合到子系统106-1。
图2C示出了用于包括多个DPE阵列和多个子系统的设备100的示例架构。在图2C的示例中,多个DPE阵列被实现并且被描绘为DPE阵列102-1和DPE阵列102-2。图2C示出了多个DPE阵列可以被实现在设备100的相同管芯中并且DPE阵列102的放置或位置可以变化。另外,DPE阵列102-1和102-2在相同的管芯中被实现为子系统106-1和106-2。
在图2C的示例中,DPE阵列102-1和DPE阵列102-2不延伸通过设备100的管芯的整个宽度。相反,DPE阵列102-1和102-2中的每个DPE阵列部分地延伸通过设备100的管芯,并且同样被实现在设备100的管芯的宽度的一部分的区域中。像图2B的示例一样,图2C的DPE阵列102-1和DPE阵列102-2可以基本相似或相同,或可以不同。
在一个或多个实施例中,DPE阵列102-1和DPE阵列102-2中的每个DPE阵列经由其自身的SoC接口块(未示出)被耦合到子系统106-1和/或子系统106-2。在说明性和非限制性示例中,第一SoC接口块可以被包括并且被用于将DPE阵列102-1耦合到子系统106-1,而第二SoC接口块可以被包括并且被用于将DPE阵列102-2耦合到子系统106-2。在那种情况下,每个DPE阵列与设备100的可用子系统的子集通信。在另一个示例中,第一SoC接口块可以被包括并且被用于将DPE阵列102-1耦合到子系统106-1和106-2,而第二SoC接口块可以被包括并且被用于耦合DPE阵列102-2和子系统106-1和106-2。在又一示例中,单个SoC接口块可以被用于将DPE阵列102-1和DPE阵列102-2两者耦合到子系统106-1和/或子系统106-2。如所指出的,图2C中的DPE阵列102-1和102-2的放置和/或大小不旨在作为限制。
图2D示出了用于包括多个DPE阵列和多个子系统的设备100的另一个示例架构。在图2D的示例中,多个DPE阵列被实现并且被描绘为DPE阵列102-1和DPE阵列102-2。图2D还示出了多个DPE阵列可以被实现在设备100的相同管芯中,并且DPE阵列102的放置和/或位置可以变化。在图2D的示例中,DPE阵列102-1和DPE阵列102-2不延伸穿过设备100的管芯的整个宽度。相反,DPE阵列102-1和102-2中的每个DPE阵列被实现在设备100的管芯的宽度的一部分的区域中。另外,图2D的设备100包括在与DPE阵列102-1和102-2相同的管芯内的子系统106-1、106-2、106-3和106-4。像图2B的示例一样,图2D的DPE阵列102-1和DPE阵列102-2可以基本相似或相同,或可以不同。
在图2D的示例中,DPE阵列和子系统间的连通性可以变化。在一些情况下,DPE阵列可以仅被耦合到设备100中的可用子系统的子集。在其它情况下,DPE阵列可以被耦合到设备100中的不止一个子系统或每个子系统。
图2的示例被提供用于说明而非限制的目的。具有单个管芯的设备可以包括位于管芯的不同区域中的一个或多个不同的DPE阵列。DPE阵列的数目、放置和/或尺寸可以变化。另外,DPE阵列可以相同或不同。一个或多个DPE阵列可以与本公开内描述的不同类型的子系统中的一个或多个子系统和/或其任何组合相结合来实现。
在一个或多个实施例中,两个或多个DPE阵列可以被配置为彼此直接地通信。例如,DPE阵列102-1可以能够与DPE阵列102-2和/或与附加的DPE阵列直接地通信。在特定实施例中,DPE阵列可以通过一个或多个SoC接口块与DPE阵列102-2和/或与其它DPE阵列通信。
图3示出了用于设备100的另一个示例架构。在图3的示例中,DPE阵列102被实现为包括SoC接口块104的DPE 304的二维阵列。可以使用在下文中更详细地描述的多种不同架构中的任何一种架构来实现DPE阵列102。出于说明而非限制的目的,图3示出了如结合图19更详细地描述的以对准的行和对准的列布置的DPE 304。然而,在其它实施例中,DPE 304可以被布置,其中选择的行和/或列中的DPE相对于相邻的行和/或列中的DPE被水平地反转或翻转。结合图18描述DPE的水平反转的示例。在一个或多个其它实施例中,DPE的行和/或列可以相对于相邻的行和/或列偏移。一个或多个或所有DPE 304可以被实现为包括如结合图6和图8总体描述的单个核心或被实现为包括如结合图12总体描述的两个或多个核心。
SoC接口块104能够将DPE 304耦合到设备100的一个或多个其它子系统。在一个或多个实施例中,SoC接口块104被耦合到相邻的DPE 304。例如,SoC接口块104可以被直接地耦合到DPE阵列102中的DPE的底部行中的每个DPE 304。在说明中,SoC接口块104可以被直接地连接到DPE 304-1、304-2、304-3、304-4、304-5、304-6、304-7、304-8、304-9和304-10。
图3被提供用于说明的目的。在其它实施例中,SoC接口块104可以位于DPE阵列102的顶部处、在DPE阵列102的左侧(例如,作为列)、在DPE阵列102的右侧(例如,作为列)、或在DPE阵列102中和DPE阵列102的周围的多个位置处(例如,作为DPE阵列102内的一个或多个中间的行和/或列)。取决于SoC接口块104的布局和位置,耦合到SoC接口块104的特定DPE可以变化。
出于说明而非限制的目的,如果SoC接口块104位于DPE 304的左侧,则SoC接口块104可以被直接地耦合到包括DPE 304-1、DPE304-11、DPE 304-21和DPE 304-31的DPE的左列。如果SoC接口块104位于DPE 304的右侧,则SoC接口块104可以被直接地耦合到包括DPE304-10、DPE 304-20、DPE 304-30和DPE 304-40的DPE的右列。如果SoC接口块104位于DPE304的顶部处,则SoC接口块104可以被耦合到包括DPE 304-31、DPE 304-32、DPE 304-33、DPE304-34、DPE 304-35、DPE 304-36、DPE 304-37、DPE 304-38、DPE304-39和DPE 304-40的DPE的顶行。如果SoC接口块104位于多个位置处,则直接地连接到SoC接口块104的特定DPE可以变化。例如,如果SoC接口块被实现为DPE阵列102内的行和/或列,直接地耦合到SoC接口块104的DPE可以是在SoC接口块104的一个或多个或每一侧上的与SoC接口块104相邻的那些DPE。
DPE 304通过DPE互连(未示出)被互连,当总体上考虑时,DPE互连形成DPE互连网络。这样,SoC接口块104能够通过与直接地连接到SoC接口块104的DPE阵列102的一个或多个选择的DPE304通信并且利用在每个相应的DPE 304内实现的DPE互连而形成的DPE互连网络来与DPE阵列102的任何一个DPE 304通信。
SoC接口块104能够将DPE阵列102内的每个DPE 304与设备100的一个或多个其它子系统耦合。出于说明的目的,设备100包括子系统(例如,子系统106)诸如:NoC 308、可编程逻辑(PL)310、处理器系统(PS)312、和/或硬连线电路块314、316、318、320和/或322中的任何一个硬连线电路块。例如,SoC接口块104能够在选择的DPE 304与PL 310之间建立连接。SoC接口块104还能够在选择的DPE 304与NoC 308之间建立连接。通过NoC 308,选择的DPE304能够与PS 312和/或硬连线电路块320和322通信。选择的DPE304能够经由SoC接口块104和PL 310与硬连线电路块314-318通信。在特定实施例中,SoC接口块104可以被直接地耦合到设备100的一个或多个子系统。例如,SoC接口块104可以被直接地耦合到PS 312和/或其它硬连线电路块。在特定实施例中,硬连线电路块314-322可以被认为是ASIC的示例。
在一个或多个实施例中,DPE阵列102包括单个时钟域。其它子系统(诸如,NoC308、PL 310、PS 312和各种硬连线电路块)可以在一个或多个单独的或不同的时钟域中。而且,DPE阵列102可以包括可以被用于与子系统中的其它子系统接合的附加的时钟。在特定的实施例中,SoC接口块104包括时钟信号发生器,时钟信号发生器能够生成可以被提供或分配给DPE阵列102的DPE 304的一个或多个时钟信号。
DPE阵列102可以通过将配置数据加载到内部配置存储器单元(本文也称为“配置寄存器”)中来编程,内部配置存储器单元定义了DPE 304与SoC接口块104之间的连通性以及DPE 304和SoC接口块104如何操作。例如,DPE 304和SoC接口块104被编程为用于特定的DPE 304或一组DPE 304与子系统进行通信。类似地,DPE被编程为用于一个或多个特定的DPE 304与一个或多个其它DPE 304通信。可以通过将配置数据分别地加载到DPE 304和SoC接口块104内的配置寄存器中来编程DPE 304和SoC接口块104。在另一个示例中,作为SoC接口块104的一部分的时钟信号发生器可以使用配置数据被编程,以改变提供给DPE阵列102的时钟频率。
NoC 308提供到PL 310、PS 312以及到硬连线电路块(例如,电路块320和322)中的选择的电路块的连通性。在图3的示例中,NoC308是可编程的。在与其它可编程电路装置一起使用的可编程NoC的情况下,要通过NoC 308路由的网络是未知的,直到创建用于在设备100内的实现的用户电路设计。可以通过将配置数据加载到内部配置寄存器来编程NoC308,内部配置寄存器定义了如何配置NoC308内的元件(诸如交换器和接口),以及如何操作以在交换器之间以及NoC接口之间传递数据。
NoC 308被制造为设备100的一部分,并且尽管在物理上不可修改,但是可以被编程为在用户电路设计的不同主电路与不同从电路之间建立连通性。就这一点而言,NoC 308能够适应不同的电路设计,其中每个不同的电路设计具有可以通过NoC 308耦合的在设备100中的不同位置处实现的主电路与从电路的不同组合。NoC 308可以被编程为在用户电路设计的主电路与从电路之间路由数据,例如应用数据和/或配置数据。例如,NoC 308可以被编程将PL 310内实现的用户指定的电路装置与PS 312耦合、经由SoC接口块104与DPE 304中的不同的DPE耦合、与不同的硬连线电路块耦合、和/或与设备100外部的不同电路和/或系统耦合。
PL 310是可以被编程为执行指定功能的电路装置。作为示例,PL310可以被实现为现场可编程门阵列(FPGA)电路。PL 310可以包括可编程电路块的阵列。PL 310内的可编程电路块的示例包括但不限于:输入/输出块(IOB)、可配置逻辑块(CLB)、专用随机访问存储器块(BRAM)、数字信号处理块(DSP)、时钟管理器和/或延迟锁定循环(DLL)。
PL 310内的每个可编程电路块通常包括可编程互连电路装置和可编程逻辑电路装置两者。可编程互连电路装置通常包括通过可编程互连点(PIP)互连的许多不同长度的互连线。通常,互连线被配置为(例如,基于每根导线)提供基于每一位的连通性(例如,每一根导线传输信息的单个位)。可编程逻辑电路装置使用可编程元件实现用户设计的逻辑,例如,可编程元件可以包括:查找表、寄存器、运算逻辑等。可以通过将配置数据加载到内部配置存储器单元中来编程可编程互连电路装置和可编程逻辑电路装置,内部可编程存储器单元定义可编程元件如何配置和操作。
在图3的示例中,在两个单独的部分中示出了PL 310。在另一个示例中,PL 310可以被实现为可编程电路装置的统一区域。在又一个示例中,PL 310可以被实现为可编程电路装置的不止两个不同区域。PL 310的特定组织并不旨在作为限制。
在图3的示例中,PS 312被实现为被制造为设备100的一部分的硬连线电路装置。PS 312可以被实现为或包括多种不同处理器类型中的任何一种处理器类型。例如,PS 312可以被实现为单独的处理器,例如能够执行程序代码的单个核心。在另一个示例中,PS 312可以被实现为多核处理器。在又一示例中,PS 312可以包括一个或多个核心、模块、协处理器、接口和/或其它资源。可以使用各种不同类型的架构中的任何一种架构来实现PS 312。可以被用于实现PS 312的示例架构可以包括但不限于:ARM处理器架构、x86处理器架构、GPU架构、移动处理器架构、DSP架构或能够执行计算机可读指令或程序代码的其它合适的架构。
电路块314-322可以被实现为各种不同的硬连线电路块中的任何一种硬连线电路块。硬连线电路块314-322可以被定制以执行专用的功能。电路块314-322的示例包括但不限于输入/输出块(IOB)、收发器或其它专用的电路块。如所指出的,电路块314-322可以被认为是ASIC的示例。
图3的示例示出了可以在包括单个管芯的设备中实现的架构。尽管DPE阵列102被示出为占据设备100的整个宽度,但是在其它实施例中,DPE阵列102可以占据小于设备100的整个宽度和/或位于设备100的不同区域中。另外,包括的DPE 304的数目可以变化。这样,DPE 304的列和/或行的特定数目可以与图3所示的不同。
在一个或多个实施例中,设备(诸如,设备100)可以包括位于设备100的不同区域中的两个或多个DPE阵列102。例如,附加的DPE阵列可以位于电路块320和322的下方。
如所指出的,图2-图3示出了用于包括单个管芯的设备的示例架构。在一个或多个其它实施例中,设备100可以被实现为包括一个或多个DPE阵列102的多管芯设备。
图4A和图4B(共同称为“图4”)示出了设备100的多管芯实现的示例。多管芯设备是包括在单个封装内的两个或多个管芯的设备或IC。
图4A示出了设备100的地形图。在图4A的示例中,设备100被实现为通过堆叠多个管芯形成的“堆叠管芯”类型的设备。设备100包括中介层402、管芯404、管芯406和衬底408。管芯404和406中的每个管芯被附接到中介层402的表面(例如,顶表面)。在一方面,管芯404和406被附接到使用倒装芯片技术的中介层402。中介层402被附接到衬底408的顶表面。
在图4A的示例中,中介层402是具有平坦的表面的管芯,管芯404和406被水平地堆叠在平坦的表面上。如图所示,管芯404和406并排位于中介层402的平坦的表面上。在图4A中的中介层402上所示的管芯的数目是出于说明而非限制的目的。在其它实施例中,可以在中介层402上安装不止两个管芯。
中介层402为管芯404和406中的每个管芯提供公共的安装表面和电耦合。中介层402的制造可以包括一个或多个工艺步骤,工艺步骤允许一个或多个导电层的沉积,一个或多个导电层被图案化以形成导线。这些导电层可以由铝、金、铜、镍、各种硅化物和/或其它合适的材料形成。可以使用允许一个或多个电介质层或绝缘层(诸如,二氧化硅)的沉积的一个或多个附加的工艺步骤来制造中介层402。中介层402还可以包括通孔和直通通孔(TV)。TV可以是直通硅通孔(TSV)、直通玻璃通孔(TGV)、或根据被用于实现中介层402及其衬底的特定材料的其它通孔结构。如果中介层402被实现为无源管芯,则中介层402可以仅具有各种类型的焊料凸块、通孔、导线、TV和凸块下金属化(UBM)。如果被实现为有源管芯,则中介层402可以包括参考电气器件(诸如,包括P-N结的晶体管、二极管等)形成一个或多个有源器件的附加的工艺层。
管芯404和406中的每个管芯可以被实现为无源管芯或包括一个或多个有源器件的有源管芯。例如,当被实现为有源管芯时,可以在管芯404和/或管芯406中的一个或两个管芯中实现一个或多个DPE阵列。在一个或多个实施例中,管芯404可以包括一个或多个DPE阵列,而管芯406实现本文所述的不同的子系统中的任何一种子系统。本文提供的示例是出于说明的目的而不是限制性的。例如,设备100可以包括不止两个管芯,其中管芯具有不同的类型和/或功能。
图4B是图4A的设备100的横截面侧视图。图4B示出了沿着切割线4B-4B截取的图4A的设备100的视图。管芯404和406中的每个管芯都经由焊料凸块410电气地和机械地耦合到中介层402的第一平坦表面。在一个示例中,焊料凸块410被实现为微型凸块。另外,各种其它技术中的任何一种技术都可以被用于将管芯404和406附接到中介层402。例如,键合导线或边缘导线可以被用于将管芯404和406机械地和电气地附接到中介层402。在另一个示例中,可以使用粘合剂材料将管芯404和406机械地附接到中介层402。如图4B所示,使用焊料凸块410将管芯404和406附接到中介层402是出于说明而非限制的目的。
中介层402包括在中介层402中以虚线或点线示出的一个或多个导电层412。使用如前所述的各种金属层中的任何一个金属层来实现导电层412。导电层412被处理以形成图案化的金属层,图案化的金属层实现中介层402的导线414。在中介层402内实现的耦合至少两个不同管芯(例如,管芯404和406)的导线被称为管芯间导线。图4B示出了出于说明目的被认为是管芯间导线的导线414。导线414在管芯404与管芯406之间传递管芯间信号。例如,导线414中的每一条导线将在管芯404下方的焊料凸块410与在管芯406下方的焊料凸块410耦合,从而允许管芯404与管芯406之间的管芯间信号的交换。导线414可以是数据线或电源线。电源线可以是承载电压电势的导线或者具有接地或参考电压电势的导线。
可以使用通孔416将导电层412中的不同的导电层耦合在一起。通常,通孔结构被用于实现竖直导电路径(例如,垂直于设备的处理层的导电路径)。就这一点而言,与焊料凸块410接触的导线414的竖直部分被实现为通孔416。使用多个导电层以实现中介层402内的互连允许在中介层402内路由更多数目的信号并且实现更复杂的信号路由。
焊料凸块418可以被用于机械地和电气地将中介层402的第二平坦表面耦合到衬底408。在特定实施例中,焊料凸块418可以被实现为可控塌陷芯片连接(C4)球。衬底408包括导电路径(未示出),导电路径将不同的焊料凸块418耦合到在衬底408下方的一个或多个节点。因此,焊料凸块418中的一个或多个焊料凸块通过衬底408内的电路装置或导线将中介层402内的电路装置耦合到设备100外部的节点。
TV 420是形成竖直横向(例如,如果不是中介层420的整个部分,则延伸通过中介层402的大部分)的电连接的通孔。TV 420(例如,导线和通孔)可以由各种不同的导电材料中的任何一种导电材料形成,包括但不限于:铜、铝、金、镍、各种硅化物和/或其它合适的材料。如图所示,TV 420中的每个TV从中介层402的底表面一直延伸到中介层402的导电层412。TV 420通过一个或多个导电层412结合一个或多个通孔416还可以被耦合到焊料凸块410。
图5A、图5B、图5C、图5D、图5E、图5F和图5G(统称为“图5”)示出了设备100的示例多管芯实现。图5的示例可以如结合图4所描述的示例来实现。
参考图5A,管芯404包括一个或多个DPE阵列102,而管芯406实现PS 312。
参考图5B,管芯404包括一个或多个DPE阵列102,而管芯406实现ASIC 504。ASIC504可以被实现为适于执行特定或专用操作的各种不同定制电路中的任何一种定制电路。
参考图5C,管芯404包括一个或多个DPE阵列102,而管芯406实现PL 310。
参考图5D,管芯404包括一个或多个DPE阵列102,而管芯406实现模拟和/或混合(模拟/混合)信号电路装置508。模拟/混合信号电路装置508可以包括一个或多个无线接收器、无线发射器、放大器、模拟数字转换器、数字模拟转换器或其它模拟和/或数字电路装置。
图5E、图5F和图5G示出了具有三个管芯404、406和510的设备100的示例。参考图5E,设备100包括管芯404、406和510。管芯404包括一个或多个DPE阵列102。管芯406包括PL310。管芯510包括ASIC 504。
参考图5F,管芯404包括一个或多个DPE阵列102。管芯406包括PL 310。管芯510包括模拟/混合信号电路装置508。
参考图5G,管芯404包括一个或多个DPE阵列102。管芯406包括ASIC 504。管芯510包括模拟/混合信号电路装置508。在一个或多个实施例中,PS(例如,PS 312)是ASIC的示例。
在图5的示例中,管芯406和/或510中的每个管芯被描绘为包括特定类型的子系统。在其它实施例中,管芯404、406和/或510可以包括与一个或多个DPE阵列102结合的一个或多个子系统。另外,管芯404、406和/或510可以包括两个或多个不同类型的子系统。这样,管芯404、406和/或510中的任何一个或多个管芯可以包括与以任何组合的一个或多个子系统相结合的一个或多个DPE阵列102。
在一个或多个实施例中,可以使用相同IC制造技术(例如,特征尺寸)来实现中介层402和管芯404、406和/或510。在一个或多个其它实施例中,可以使用特定IC制造技术来实现中介层402,而可以使用不同IC制造技术来实现管芯404、406和/或510。在又一其它实施例中,可以使用与用于实现中介层402的IC制造技术相同或不同的不同IC制造技术来实现管芯404、406和/或510。通过使用用于不同管芯和/或中介层的不同IC制造技术,可以将成本更低和/或更可靠的IC制造技术用于某些管芯,而能够生产较小特征尺寸的其它IC制造技术可以被用于其它管芯。例如,可以使用更成熟的制造技术来实现中介层402,而能够形成较小特征尺寸的其它技术可以被用于实现有源管芯和/或包括DPE阵列102的管芯。
图5的示例示出了包括安装在中介层上的两个或多个管芯的设备100的多管芯实现。示出的管芯的数目是为了说明的目的而非限制。在其它实施例中,设备100可以包括安装在中介层402上的不止三个管芯。
在一个或多个其它实施例中,可以使用图4的堆叠的管芯架构之外的架构来实现设备100的多管芯版本。例如,设备100可以被实现为多芯片模块(MCM)。可以使用安装在电路板上的一个或多个预封装的IC来实现设备100的MCM实现,其中电路板具有旨在模仿现有芯片封装的形状因数和/或封装。在另一个示例中,可以通过将两个或多个管芯集成在高密度互连衬底上来实现设备100的MCM。在又一个示例中,设备100的MCM实现可以被实现为“芯片堆叠”封装。
结合在单个管芯设备或多管芯设备中实现的一个或多个其它子系统一起使用本文所述的DPE阵列,可以提高设备的处理能力而保持较低的面积使用和功耗。例如,一个或多个DPE阵列可以被用于硬件加速特定操作和/或执行从本文所述的设备的一个或多个子系统卸载的功能。例如,当与PS一起使用时,DPE阵列可以被用作硬件加速器。PS可以卸载将由DPE阵列或DPE阵列的一部分执行的操作。在其它示例中,DPE阵列可以被用于执行计算资源密集型操作,诸如生成要被提供给模拟/混合信号电路装置的数字预失真。
应当理解的是,本文结合图1、2、3、4和/或5描述的DPE阵列和/或其它子系统的各种组合中的任何一种组合都可以在单个管芯类型的设备或多管芯类型的设备中实现。
在本文所述的各种示例中,SoC接口块在DPE阵列内被实现。在一个或多个其它实施例中,SoC接口块可以在DPE阵列的外部被实现。例如,SoC接口块可以被实现为电路块(例如独立电路块),该电路块与实现多个DPE的电路块分开。
图6示出了用于DPE阵列102的DPE 304的示例架构。在图6的示例中,DPE 304包括核心602、存储器模块604和DPE互连606。
核心602提供DPE 304的数据处理能力。核心602可以被实现为多种不同处理电路中的任何一种处理电路。在图6的示例中,核心602包括可选的程序存储器608。在一个或多个实施例中,核心602被实现为能够执行程序代码(例如,计算机可读指令)的处理器。在那种情况下,程序存储器608被包括并且能够存储由核心602执行的指令。例如,核心602可以被实现为CPU、DSP、矢量处理器或能够执行指令的其它类型的处理器。可以使用本文所述的各种CPU和/或处理器架构中的任何一种来实现核心。在另一个示例中,核心602被实现为超长指令字(VLIW)矢量处理器或DSP。
在特定实施例中,程序存储器608被实现为专用于核心602的专用程序存储器。程序存储器608可以仅由相同的DPE 304的核心使用。因此,程序存储器608可以仅由核心602访问并且不与任何其它DPE或另一个DPE的部件共享。程序存储器608可以包括用于读取和写入操作的单个端口。程序存储器608可以支持程序压缩并且可以使用下面更详细描述的DPE互连606的存储器映射的网络部分来寻址。例如,经由DPE互连606的存储器映射的网络,程序存储器608可以被加载有可以由核心602执行的程序代码。
在一个或多个实施例中,程序存储器608能够支持一种或多种错误检测和/或错误校正机制。例如,程序存储器608可以被实现为通过添加奇偶校验位来支持奇偶校验。在另一个示例中,程序存储器608可以是能够检测和校正各种类型的数据损坏的纠错码(ECC)存储器。在另一个示例中,程序存储器608可以支持ECC和奇偶校验。提供本文描述的不同类型的错误检测和/或错误校正是为了说明的目的,并且不旨在限制所描述的实施例。除了列出的那些以外,其它错误检测和/或错误校正技术可以与程序存储器608一起使用。
在一个或多个实施例中,核心602可以具有定制的架构以支持专用指令集。例如,核心602可以针对无线应用而被定制并且被配置为执行无线专用指令。在另一个示例中,核心602可以针对机器学习被定制并且被配置为执行机器学习专用指令。
在一个或多个其它实施例中,核心602被实现为专用于执行一个特定操作或多个特定操作的硬连线电路装置(诸如,强化知识产权(IP)核心)。在那种情况下,核心602可以不执行程序代码。在核心602不执行程序代码的实施例中,可以省略程序存储器608。作为说明性和非限制性示例,核心602可以被实现为强化的前向纠错(FEC)引擎或其它电路块。
核心602可以包括配置寄存器624。配置寄存器624可以被加载有配置数据以控制核心602的操作。在一个或多个实施例中,可以基于被加载到配置寄存器624中的配置数据来激活和/或停用核心602。在图6的示例中,经由在下面更详细地描述的DPE互连606的存储器映射网络,配置寄存器624是可寻址的(例如,可以被读取和/或写入)。
在一个或多个实施例中,存储器模块604能够存储由核心602使用或由核心602生成的数据。例如,存储器模块604能够存储应用数据。存储器模块604可以包括读取/写入存储器(诸如,随机存取存储器)。因此,存储器模块604能够存储可以由核心602读取和消耗的数据。存储器模块604也能够存储由核心602写入的数据(例如,结果)。
在一个或多个其它实施例中,存储器模块604能够存储可以由DPE阵列内的其它DPE的一个或多个其它核心使用和/或生成的数据(例如,应用数据)。DPE的一个或多个其它核心还可以从存储器模块604读取和/或写入存储器模块604。在特定实施例中,可以从存储器模块604读取或写入存储器模块604的其它核心可以是一个或多个相邻的DPE的核心。与DPE 304共享边缘或边界(例如,邻近的)的另一个DPE被称为是相对于DPE 304的“相邻的”DPE。通过允许核心602和来自相邻的DPE的一个或多个其它核心读取和/或写入存储器模块604,存储器模块604实现共享存储器,共享存储器支持能够访问存储器模块604的不同DPE和/或核心之间的通信。
参考图3,例如,DPE 304-14、304-16、304-5和304-25被认为是DPE 304-15的相邻的DPE。在一个示例中,DPE 304-16、304-5和304-25中的每个DPE内的核心能够读取和写入DPE 304-15内的存储器模块。在特定实施例中,仅那些与存储器模块邻近的相邻的DPE可以访问DPE 304-15的存储器模块。例如,尽管DPE 304-14与DPE304-15邻近,但是DPE 304-14可能不与DPE 304-15的存储器模块邻近,因为DPE 304-15的核心可能位于DPE 304-14的核心与DPE304-15的存储器模块之间。同样地,在特定实施例中,DPE 304-14的核心可以不访问DPE 304-15的存储器模块。
在特定实施例中,DPE核心是否能够访问另一个DPE的存储器模块取决于被包括在存储器模块中的存储器接口的数目以及这种核心是否被连接到存储器模块的存储器接口中的一个可用存储器接口。在以上示例中,DPE 304-15的存储器模块包括四个存储器接口,其中DPE 304-16、304-5和304-15中的每个DPE的核心被连接到这种存储器接口。DPE 304-15本身的核心602被连接到第四存储器接口。每个存储器接口可以包括一个或多个读取和/或写入信道。在特定实施例中,每个存储器接口包括多个读取信道和多个写入信道,使得附接到其上的特定核心能够同时地读取和/或写入在存储器模块604内的多个存储器体。
在其它示例中,可以使用不止四个存储器接口。这样的其它存储器接口可以被用于允许在DPE 304-15的对角线上的DPE访问DPE304-15的存储器模块。例如,如果DPE(诸如,DPE 304-14、304-24、304-26、304-4和/或304-6)中的核心还被耦合到DPE 304-15中的存储器模块的可用存储器接口,这种其它DPE还能够访问DPE 304-15的存储器模块。
存储器模块604可以包括配置寄存器636。配置寄存器636可以被加载有配置数据以控制存储器模块604的操作。在图6的示例中,经由在下面更详细地描述的DPE互连606的存储器映射的网络,配置寄存器636(和624)是可寻址的(例如,可以被读取和/或写入)。
在图6的示例中,DPE互连606专用于DPE 304。DPE互连606促进包括DPE 304与DPE阵列102的一个或多个其它DPE之间的通信和/或与设备100的其它子系统通信的各种操作。DPE互连606还使能DPE 304的配置、控制和调试。
在特定实施例中,DPE互连606被实现为片上互连。片上互连的示例是高级微控制器总线架构(AMBA)可扩展接口(AXI)总线(例如,或交换器)。AMBA AXI总线是用于在电路块和/或系统之间建立片上连接的嵌入式微控制器总线接口。本文提供AXI总线作为互连电路装置的示例,互连电路装置可以与本公开内描述的发明性布置一起使用,并且同样地不旨在作为限制。互连电路装置的其它示例可以包括其它类型的总线、交叉开关和/或其它类型的交换器。
在一个或多个实施例中,DPE互连606包括两个不同的网络。第一网络能够与DPE阵列102的其它DPE和/或设备100的其它子系统交换数据。例如,第一网络能够交换应用数据。第二网络能够交换数据,诸如用于DPE的配置数据、控制数据和/或调试数据。
在图6的示例中,DPE互连606的第一网络由流交换器626和一个或多个流接口形成。如图所示,流交换器626包括多个流接口(在图6中缩写为“SI”)。在一个或多个实施例中,每个流接口可以包括一个或多个主接口(master)(例如,主接口或输出)和/或一个或多个从接口(slave)(例如,从接口或输入)。每个主接口可以是具有特定位宽的独立输出。例如,被包括在流接口中的每个主接口可以是独立的AXI主接口。每个从接口可以是具有特定位宽的独立输入。例如,被包括在流接口中的每个从接口可以是独立的AXI从接口。
流接口610-616被用于与DPE阵列102中的其它DPE和/或SoC接口块104通信。例如,流接口610、612、614和616中的每个流接口能够沿不同的基本方向通信。在图6的示例中,流接口610与左侧(西方)的DPE通信。流接口612与上方(北方)的DPE通信。流接口614与右侧(东方)的DPE通信。流接口616与下方(南方)的DPE或SoC接口块104通信。
流接口628被用于与核心602通信。例如,核心602包括连接到流接口628的流接口638,从而允许核心602经由DPE互连606直接地与其它DPE 304通信。例如,核心602可以包括使得核心602能够经由流接口638直接地发送和/或接收数据的指令或硬连线电路装置。流接口638可以是阻塞的或非阻塞的。在一个或多个实施例中,在核心602试图从空流读取或写入满流的情况下,核心602可能停顿。在其它实施例中,试图从空流读取或写入满流不会导致核心602停顿。相反,核心602可以继续执行或操作。
流接口630被用于与存储器模块604通信。例如,存储器模块604包括连接到流接口630的流接口640,从而允许其它DPE经由DPE互连606与存储器模块604通信。流交换器626能够允许非相邻的DPE和/或未被耦合到存储器模块604的存储器接口的DPE经由DPE互连网络与核心602和/或存储器模块604通信,DPE互连网络由DPE阵列102的相应的DPE 304的DPE互连形成。
再次参考图3并且使用DPE 304-15作为参考点,流接口610被耦合到并且能够与位于DPE 304-14的DPE互连中的另一个流接口通信。流接口612被耦合到并且能够与位于DPE304-25的DPE互连中的另一个流接口通信。流接口614被耦合到并且能够与位于DPE304-16的DPE互连中的另一个流接口通信。流接口616被耦合到并且能够与位于DPE 304-5的DPE互连中的另一个流接口通信。这样,核心602和/或存储器模块604还能够经由DPE中的DPE互连与DPE阵列102内的DPE中的任何一个DPE通信。
流交换器626还被用于与子系统(诸如,PL 310和/或NoC 308)接合。通常,流交换器626可以被编程为用作电路交换流互连或分组交换流互连。电路交换流互连能够实现适用于DPE间的高带宽通信的点对点专用流。分组交换流互连允许共享流,以将多个逻辑流时分多路复用到一个物理流上,以用于中带宽通信。
流交换器626可以包括配置寄存器(在图6中缩写为“CR”)634。可以借助于DPE互连606的存储器映射网络将配置数据写入配置寄存器634。被加载到配置寄存器634中的配置数据指示DPE 304将与哪些其它DPE和/或子系统(例如,NoC 308、PL 310和/或PS 312)通信,并且是否将这种通信建立为电路交换点对点连接或分组交换连接。
应当理解,图6所示的流接口的数目是出于说明而非限制的目的。在其它实施例中,流交换器626可以包括更少的流接口。在特定实施例中,流交换器626可以包括促进对设备中的其它部件和/或子系统的更多的流接口。例如,附加的流接口可以被耦合到其它非相邻的DPE(诸如,DPE 304-24、304-26、304-4和/或304-6)。在一个或多个其它实施例中,可以包括流接口以将DPE(诸如DPE 304-15)耦合到位于一个或多个DPE之外的其它DPE。例如,可以包括一个或多个流接口,以允许DPE 304-15直接地耦合到DPE 304-13、DPE 304-16或其它非相邻的DPE中的流接口。
DPE互连606的第二网络由存储器映射的交换器632形成。存储器映射的交换器632包括多个存储器映射的接口(在图6中缩写为“MMI”)。在一个或多个实施例中,每个存储器映射的交换器可以包括一个或多个主接口(例如,主接口接口或输出)和/或一个或多个从接口(例如,从接口接口或输入)。每个主接口可以是具有特定位宽的独立输出。例如,被包括在存储器映射的接口中的每个主接口可以是独立的AXI主接口。每个从接口可以是具有特定位宽的独立输入。例如,被包括在存储器映射的接口中的每个从接口可以是独立的AXI从接口。
在图6的示例中,存储器映射的交换器632包括存储器映射的接口620、622、642、644和646。应当理解,存储器映射的交换器632可以包括附加的或更少的存储器映射的接口。例如,对于可以使用存储器映射的交换器632读取和/或写入的DPE的每个部件,存储器映射的交换器632可以包括被耦合到这种部件的存储器映射的接口。另外,部件本身可以包括存储器映射的接口,存储器映射的接口被耦合到存储器映射的交换器632中的对应的存储器映射的接口,以促进存储器地址的读取和/或写入。
存储器映射的接口620和622可以被用于交换用于DPE 304的配置数据、控制数据和调试数据。在图6的示例中,存储器映射的接口620能够接收被用于配置DPE 304的配置数据。存储器映射的接口620可以从位于DPE 304下方的DPE或从SoC接口块104接收配置数据。存储器映射的接口622能够将由存储器映射的接口620接收的配置数据转发到DPE 304上方的一个或多个其它DPE、核心602(例如,程序存储器608和/或配置寄存器624)、存储器模块604(例如,存储器模块604内的存储器和/或配置寄存器636)、和/或流交换器626内的配置寄存器634。
在特定实施例中,存储器映射的接口620与下面将在本文描述的SoC接口块104的DPE或图块通信。存储器映射的接口622与上方的DPE通信。再次参考图3并且使用DPE 304-15作为参考点,存储器映射的接口620被耦合到并且能够与位于DPE 304-5的DPE互连中的另一个存储器映射的接口通信。存储器映射的接口622被耦合到并且能够与位于DPE 304-25的DPE互连中的另一个存储器映射的接口通信。在一个或多个实施例中,存储器映射的交换器632从南向北传送控制和/或调试数据。在其它实施例中,存储器映射的交换器632还能够将数据从北传递到南。
存储器映射的接口646可以被耦合到存储器模块604中的存储器映射的接口(未示出),以促进存储器模块604内的配置寄存器636和/或存储器的读取和/或写入。存储器映射的接口644可以被耦合到核心602中的存储器映射的接口(未示出),以促进程序存储器608和/或配置寄存器624的读取和/或写入。存储器映射的接口642可以被耦合到配置寄存器634以读取和/或写入配置寄存器634。
在图6的示例中,存储器映射的交换器632能够与上方(例如,向北)和下方(例如,向南)的电路装置通信。在一个或多个其它实施例中,存储器映射的交换器632包括附加的存储器映射的接口,附加的存储器映射的接口被耦合到左侧和/或右侧的DPE的存储器映射的交换器的存储器映射的接口。使用DPE 304-15作为参考点,这种附加的存储器映射的交换器可以连接到位于DPE 304-14和/或304-16中的存储器映射的交换器,从而促进在水平方向以及竖直方向上的DPE间的配置数据、控制数据和调试数据的通信。
在其它实施例中,存储器映射的交换器632可以包括附加的存储器映射的接口,附加的存储器映射的接口被连接到相对于DPE 304的对角线的DPE中的存储器映射的交换器。例如,使用DPE 304-15作为参考点,这种附加的存储器映射的接口可以被耦合到位于DPE304-24、304-26、304-4和/或304-6中的存储器映射的交换器,从而促进DPE对角线之间的配置信息、控制信息和调试信息的通信。
取决于DPE 304的位置,DPE互连606被耦合到每个相邻的DPE和/或SoC接口块104的DPE互连。DPE 304的DPE互连共同形成DPE互连网络(DPE互连网络可以包括流网络和/或存储器映射网络)。可以通过加载通过存储器映射的交换器的配置数据来编程每个DPE的流交换器的配置寄存器。通过配置,流交换器和/或流接口被编程为与一个或多个其它DPE304和/或SoC接口块104中的其它端点建立分组交换或电路交换的连接。
在一个或多个实施例中,DPE阵列102被映射到处理器系统(诸如PS 312)的地址空间。因此,DPE 304内的任何配置寄存器和/或存储器可以经由存储器映射的接口被访问。例如,可以经由存储器映射的交换器632读取和/或写入存储器模块604中的存储器、程序存储器608、核心602中的配置寄存器624、存储器模块604中的配置寄存器636、和/或配置寄存器634。
在图6的示例中,存储器映射的接口能够接收用于DPE 304的配置数据。配置数据可以包括:被加载到程序存储器608(如果包括)中的程序代码、用于加载到配置寄存器624、634和/或636中的配置数据,和/或被加载到存储器模块604的存储器(例如,存储器体)中的数据。在图6的示例中,配置寄存器624、634和636被示出为位于特定电路结构内,配置寄存器旨在控制(例如)核心602、流交换器626和存储器模块604。图6的示例仅出于说明目的并且示出了可以借助于将配置数据加载到对应的配置寄存器中来编程核心602、存储器模块604和/或流交换器626内的元件。在其它实施例中,尽管控制分布在整个DPE 304中的部件的操作,但是配置寄存器可以被合并在DPE 304的特定区域内。
因此,可以通过将配置数据加载到配置寄存器634中来编程流交换器626。配置数据编程流交换器626和/或流接口610-616和/或流接口628-630,以用作两个不同的DPE和/或其它子系统之间的电路交换流接口,或者用作被耦合到选择的DPE和/或其它子系统的分组交换流接口。因此,通过将合适的配置数据加载到配置寄存器634中来编程由流交换器626建立的与其它流接口的连接,以建立DPE 304内的、与其它DPE和/或与设备100的其它子系统之间的实际连接或应用数据路径。
图7示出了多个DPE 304之间的示例连通性。在图7的示例中,图6中所示的架构被用于实现DPE 304-14、304-15、304-24和304-25中的每个DPE。图7示出了实施例,其中流接口被互连在相邻的DPE间(在每一侧上以及上方和下方),并且其中存储器映射的接口被连接到上方DPE和下方DPE。为了说明的目的,未示出流交换器和存储器映射的交换器。
如所指出的,在其它实施例中,可以包括附加的存储器映射的接口,以在如图所示的竖直方向和水平方向上耦合DPE。另外,存储器映射的接口可以支持在竖直方向和/或水平方向上的双向通信。
存储器映射的接口620和622能够实现共享的交易交换网络,其中交易从存储器映射的交换器传播到存储器映射的交换器。例如,存储器映射的交换器中的每个存储器映射的交换器能够基于地址动态地路由交易。交易可以在任何给定的存储器映射的交换器处停顿。存储器映射的接口620和622允许设备100的其它子系统访问DPE 304的资源(例如,部件)。
在特定实施例中,设备100的子系统能够经由存储器映射的接口620和/或622读取DPE的任何寄存器和/或存储器元件的内部状态。通过存储器映射的接口620和/或622,设备100的子系统能够读取和/或写入程序存储器608以及读取和/或写入DPE 304内的任何配置寄存器。
流接口610-616(例如,流交换器626)能够以从源到目的地的有保证的和固定的延迟来提供确定的吞吐量。在一个或多个实施例中,流接口610和614能够接收四个32位流并且输出四个32位流。在一个或多个实施例中,流接口614能够接收四个32位流并且输出六个32位流。在特定实施例中,流接口616能够接收四个32位流并且输出四个32位流。每个流接口的流的数目和流的尺寸被提供用于说明而非限制的目的。
图8示出了图6的示例架构的另外的方面。在图8的示例中,未示出与DPE互连的有关的细节。图8示出了核心602通过共享存储器与其它DPE的连通性。图8还示出了存储器模块604的附加的方面。出于说明的目的,图8参考DPE304-15。
如图所示,存储器模块604包括多个存储器接口802、804、806和808。在图8中,存储器接口802和808被缩写为“MI”。存储器模块604还包括多个存储器体812-1至812-N。在特定实施例中,存储器模块604包括八个存储器体。在其它实施例中,存储器模块604可以包括更少或更多的存储器体812。在一个或多个实施例中,每个存储器体812是单端口的,从而允许每个时钟周期对每个存储器体的多达一次的访问。在存储器模块604包括八个存储器体812的情况下,这种配置支持每个时钟周期的八个并行访问。在其它实施例中,每个存储器体812是双端口或多端口,从而允许每个时钟周期大量的并行访问。
在一个或多个实施例中,存储器模块604能够支持一种或多种错误检测和/或错误校正机制。例如,存储器体812可以被实现为通过附加的奇偶校验位来支持奇偶校验。在另一个示例中,存储器体812可以是能够检测和校正各种类型的数据损坏的ECC存储器。在另一个示例中,存储器体812可以支持ECC和奇偶校验两者。提供本文描述的不同类型的错误检测和/或错误校正是为了说明目的,并且不旨在限制所描述的实施例。除了列出的那些技术以外,其它错误检测和/或错误校正技术可以与存储器模块604一起使用。
在一个或多个其它实施例中,可以基于每个存储器体812来实现错误检测和/或错误校正机制。例如,一个或多个存储器体812可以包括奇偶校验,而存储器体812中的一个或多个其它存储器体可以被实现为ECC存储器。另外,存储器体812中的其它存储器体可以支持ECC和奇偶校验两者。这样,错误检测和/或错误校正的不同组合可以由不同的存储器体812和/或存储器体812的组合支持。
在图8的示例中,存储器体812-1至812-N中的每个存储器体具有相应的仲裁器814-1至814-N。仲裁器814中的每个仲裁器能够响应于检测的冲突而生成停顿信号。每个仲裁器814可以包括仲裁逻辑。另外,每个仲裁器814可以包括交叉开关。因此,任何主接口都能够写入存储器体812中的任何特定的一个或多个存储器体。如结合图6所指出的,存储器模块604可以包括与存储器映射的交换器632的存储器映射的接口646通信的存储器映射的接口(未示出)。存储器模块604中的存储器映射的接口可以被连接到耦合DMA引擎816的存储器模块604中的通信线、存储器接口802、804、806和808、以及仲裁器814,以便读取和/或写入存储器体812。
存储器模块604还包括直接存储器访问(DMA)引擎816。在一个或多个实施例中,DMA引擎816包括至少两个接口。例如,一个或多个接口能够从DPE互连606接收输入数据流并且将接收的数据写入存储器体812。一个或多个其它接口能够经由DPE互连606的流接口从存储器体812读取数据并且发送数据。例如,DMA引擎816可以包括图6的流接口640。
存储器模块604能够用作能够由多个不同的DPE访问的共享存储器。在图8的示例中,存储器接口802经由被包括在核心602中的核心接口828被耦合到核心602。存储器接口802向核心602提供通过仲裁器814对存储器体812的访问。存储器接口804被耦合到DPE304-25的核心。存储器接口804向DPE 304-25的核心提供对存储器体812的访问。存储器接口806被耦合到DPE 304-16的核心。存储器接口806向DPE 304-16的核心提供对存储器体812的访问。存储器接口808被耦合到DPE 304-5的核心。存储器接口808向DPE 304-5的核心提供对存储器体812的访问。因此,在图8的示例中,与DPE304-15的存储器模块604具有共享的边界的每个DPE都能够读取和写入存储器体812。在图8的示例中,DPE 304-14的核心不具有对DPE 304-15的存储器模块604的直接访问。
存储器映射的交换器632能够将数据写入存储器体812。例如,存储器映射的交换器632可以被耦合到位于存储器模块604中的存储器映射的接口(未示出),存储器映射的接口进而被耦合到仲裁器814。这样,被存储在存储器模块604中的特定数据可以作为配置过程、控制过程和/或调试过程的一部分被控制,例如被写入。
核心602能够经由核心接口830、832和834访问其他相邻的DPE的存储器模块。在图8的示例中,核心接口834被耦合到DPE 304-25的存储器接口。因此,核心602能够经由核心接口834和DPE 304-25的存储器模块内包含的存储器接口访问DPE 304-25的存储器模块。核心接口832被耦合到DPE 304-14的存储器接口。因此,核心602能够经由核心接口832和被包含在DPE 304-14的存储器模块内的存储器接口访问DPE 304-14的存储器模块。核心接口830被耦合到DPE304-5内的存储器接口。因此,核心602能够经由核心接口830和DPE304-5的存储器模块内包含的存储器接口访问DPE 304-5的存储器模块。如所讨论的,核心602能够经由核心接口828和存储器接口802访问DPE 304-15内的存储器模块604。
在图8的示例中,核心602能够读取和写入与DPE 304-15中的核心602共享边界的DPE的存储器模块中的任何一个存储器模块(例如,DPE 304-25、304-14和304-5)。在一个或多个实施例中,核心602能够将DPE 304-25、304-15、304-14和304-5内的存储器模块视为单个连续的存储器。核心602能够假设该连续存储器模型而生成用于读取和写入的地址。核心602能够基于所生成的地址将读取和/或写入请求引导至适当的核心接口828、830、832和/或834。
在一个或多个其它实施例中,存储器模块604包括可以被耦合到其它DPE的附加的存储器接口。例如,存储器模块604可以包括被耦合到DPE 304-24、304-26、304-4和/或304-5的核心的存储器接口。在一个或多个其它实施例中,存储器模块604可以包括一个或多个存储器接口,一个或多个存储器接口被用于连接到不是相邻的DPE的DPE的核心。例如,这种附加的存储器接口可以被连接到在相同行、相同列或对角线方向上被一个或多个其它DPE与DPE 304-15分隔开的DPE的核心。这样,如图8所示,存储器模块604中的存储器接口的数目以及与该存储器接口连接的特定DPE是为了说明而非限制的目的。
如所指出的,核心602能够基于这种操作的地址通过核心接口828、830、832和/或834以正确的方向映射读取和/或写入操作。当核心602生成用于存储器访问的地址,核心602能够对该地址解码以确定方向(例如,要被访问的特定DPE),并且将该存储器操作以确定的方向转发到正确的核心接口。
因此,核心602能够经由共享存储器与DPE 304-25的核心通信,该共享存储器可以是DPE 304-25内的存储器模块和/或DPE 304-15的存储器模块604。核心602能够经由共享存储器与DPE 304-14的核心通信,该共享存储器是DPE 304-14内的存储器模块。核心602能够经由共享存储器与DPE 304-5的核心通信,该共享存储器是DPE304-5内的存储器模块和/或DPE 304-15的存储器模块604。另外,核心602能够经由共享存储器与DPE 304-16的核心通信,共享存储器是DPE 304-15内的存储器模块604。
如所讨论的,DMA引擎816可以包括一个或多个流至存储器接口(例如,流接口640)。通过DMA引擎816,可以从设备100内的其它源接收应用数据并且存储在存储器模块604中。例如,可以借助于流交换器626从与DPE 304-15共享边界和/或不与DPE 304-15共享边界的其它DPE接收数据。还可以通过DPE的流交换器借助于SoC接口块104从设备100的其它子系统(例如,NoC 308、硬连线电路块、PL 310和/或PS 312)接收数据。DMA引擎816能够从流交换器接收这种数据,并且将该数据写入存储器模块604内的适当的存储器体或多个存储器体812。
DMA引擎816可以包括一个或多个存储器至流的接口(例如,流接口630)。通过DMA引擎816,可以从存储器模块604的存储器体或多个存储器体812读取数据并且经由流接口将数据发送到其它目的地。例如,DMA引擎816能够经由流交换器从存储器模块604读取数据并且将这种数据发送到其它DPE,其它DPE借助于流交换器与DPE 304-15共享边界和/或不与DPE 304-15共享边界。DMA引擎816还能够经由流交换器和SoC接口块104将这种数据发送到其它子系统(例如,NoC 308、硬连线电路块、PL 310和/或PS 312)。
在一个或多个实施例中,DMA引擎816可以由DPE 304-15内的存储器映射的交换器632编程。例如,DMA引擎816可以由配置寄存器636控制。可以使用DPE互连606的存储器映射的交换器632写入配置寄存器636。在特定实施例中,DMA引擎816可以由DPE304-15内的流交换器626控制。例如,DMA引擎816可以包括控制寄存器,控制寄存器可以由(例如,经由流接口640)与其连接的流交换器626写入。取决于被加载到配置寄存器624、634和/或636内的配置数据,可以将经由DPE互连606内的流交换器626接收的流连接到存储器模块604中的DMA引擎816和/或直接地连接到核心602。取决于被加载到配置寄存器624、634和/或636内的配置数据,可以从DMA引擎816(例如,存储器模块604)和/或核心602发送流。
存储器模块604还可以包括硬件同步电路装置820(在图8中缩写为“HSC”)。通常,硬件同步电路装置820能够同步不同的核心(例如,相邻的DPE的核心)、图8的核心602、DMA引擎816和可以经由DPE互连606通信的其它外部主接口(例如,PS 312)的操作。作为说明性而非限制性的示例,硬件同步电路装置820能够同步访问不同DPE中的两个不同的核心,例如访问存储器模块604中的共享的缓冲区。
在一个或多个实施例中,硬件同步电路装置820可以包括多个不同的锁定。硬件同步电路装置820中包括的锁定的特定数目可以取决于能够访问存储器模块的实体的数目,但是并不旨在作为限制。在特定实施例中,每个不同的硬件锁定可以具有能够处理同时请求的仲裁器。另外,每个硬件锁定能够处理每个时钟周期的新请求。硬件同步电路装置820可以具有多个请求者,诸如:核心602、来自DPE304-25、304-16和304-5中的每个DPE的核心、DMA引擎816和/或经由DPE互连606通信的主接口。例如,请求者在访问存储器的特定部分之前,从本地硬件同步电路装置获取对存储器模块中的存储器的特定部分的锁定。请求者可以释放锁定,以便另一个请求者可以在访问存储器的相同部分之前获取锁定。
在一个或多个实施例中,硬件同步电路装置820能够同步由多个核心对存储器模块604的访问,并且尤其对存储器体812的访问。例如,硬件同步电路装置820能够同步图8中所示的核心602、DPE304-25的核心、DPE 304-16的核心和到图8的存储器模块604的DPE304-5的核心的访问。在特定实施例中,硬件同步电路装置820能够同步用于任何核心的对存储器体812的访问,该核心能够经由存储器接口802、804、806和/或808直接地访问存储器模块604。例如,能够访问存储器模块604的每个核心(例如,图8的核心602以及一个或多个相邻的DPE的核心)可以访问硬件同步电路装置820,以在访问存储器模块604中的存储器的特定部分之前请求并获取锁定,并且随后释放锁定,以便一旦核心获取锁定,允许另一个核心访问存储器的该部分。以类似的方式,核心602能够访问硬件同步电路装置820、DPE 304-14内的硬件同步电路装置、DPE 304-25内的同步电路和DPE304-5内的硬件同步电路装置以请求和获取锁定,以便访问每个相应的DPE的存储器模块中的存储器的部分并且随后释放锁定。硬件同步电路装置820通过调节和同步对DPE的存储器模块的访问来有效地管理DPE之间的共享的存储器的操作。
还可以经由DPE互连606的存储器映射的交换器632来访问硬件同步电路装置820。在一个或多个实施例中,锁定交易被实现为针对资源的原子获取(例如,测试是否解锁或设置锁定)和释放(例如,未设置锁定)操作。硬件同步电路装置820的锁定提供了有效地转移在两个参与者之间的资源的所有权的方式。该资源可以是各种电路部件中的任何一种部件,诸如,本地存储器中的缓冲区(例如,在存储器模块604中的缓冲区)。
尽管硬件同步电路装置820能够同步对存储器的访问以支持通过共享存储器的通信,但是硬件同步电路装置820也能够同步各种其它资源中的任何一种资源和/或包括其它DPE和/或其它核心的代理。例如,由于硬件同步电路装置820提供了共享的锁定池,所以可以由DPE(例如,DPE的核心)使用锁定,以开始和/或停止另一个DPE或核心的操作。例如,硬件同步电路装置820的锁定可以基于配置数据被分配用于不同的目的,诸如根据由DPE阵列102实现的特定应用,可能需要同步不同的代理和/或资源。
在特定实施例中,对硬件同步电路装置820的锁定的DPE访问和DMA访问是阻塞的。在无法立即获取锁定的情况下,这种访问能够使请求核心或DMA引擎停顿。一旦硬件锁定可用,则核心或DMA引擎获取锁定并且自动注销。
在实施例中,存储器映射访问可以是非阻塞的,使得存储器映射主接口能够轮询硬件同步电路装置820的锁定的状态。例如,存储器映射的交换器可以将锁定“获取”请求作为正常的存储器读取操作发送给硬件同步电路装置820。读取的地址可以对锁定的标识符和其它请求数据进行编码。例如,响应于读取请求的读取数据可以发信号通知获取请求操作的成功。作为存储器读取发送的“获取”可以循环发送直到成功。在另一个示例中,硬件同步电路装置820可以发出事件,使得当请求的锁定的状态改变时,存储器映射主接口接收中断。
因此,当两个相邻的DPE通过存储器模块604共享数据缓冲区时,包括缓冲区的特定存储器模块604内的硬件同步电路装置820同步访问。通常,但不是必须,可以对存储器块进行双缓冲以提高吞吐量。
在两个DPE不相邻的情况下,两个DPE不能访问公共存储器模块。在那种情况下,可以经由数据流来传输应用数据(在本公开中,术语“数据流”和“流”可以不时地互换使用)。这样,本地DMA引擎能够将从基于本地存储器传输的传输转换为基于流的传输。在那种情况下,核心602和DMA引擎816能够使用硬件同步电路装置820进行同步。
核心602还能够访问相邻的DPE的硬件同步电路装置(例如硬件同步电路装置的锁定),以促进共享存储器的通信。这样,在这种其它或相邻的DPE中的硬件同步电路装置能够在相邻的DPE的核心之间同步对资源(例如,存储器)的访问。
PS 312能够经由存储器映射的交换器632与核心602通信。例如,PS 312能够通过启动存储器读取和写入来访问存储器模块604和硬件同步电路装置820。在另一个实施例中,当锁定的状态改变时,硬件同步电路装置820还可以向PS 312发送中断,以避免由硬件同步电路装置820的PS 312的轮询。PS 312还能够经由流接口与DPE 304-15通信。
本文提供的与发送存储器映射请求和/或传输的实体有关的示例是出于说明而非限制的目的。在特定实施例中,DPE阵列102的外部的任何实体都能够发送存储器映射请求和/或传输。例如,在PL 310、ASIC或如本文所述的DPE阵列102外部的其它电路装置中实现的电路块能够向DPE 304发送存储器映射请求和/或传输,并且能够访问这种DPE内的存储器模块的硬件同步电路装置。
除了通过共享存储器模块与相邻的DPE通信并且经由DPE互连606与相邻和/或不相邻的DPE通信之外,核心602还可以包括级联接口。在图8的示例中,核心602包括级联接口822和824(在图8中缩写为“CI”)。级联接口822和824能够提供与其它核心的直接通信。如图所示,核心602的级联接口822直接地从DPE 304-14的核心接收输入数据流。经由级联接口822接收的数据流可以被提供给核心602内的数据处理电路装置。核心602的级联接口824能够将输出数据直接地发送到DPE 304-16的核心。
在图8的示例中,级联接口822和级联接口824中的每个级联接口可以包括用于缓冲的先进先出(FIFO)接口。在特定实施例中,级联接口822和824能够传输宽度为数百位的数据流。级联接口822和824的特定位宽不旨在作为限制。在图8的示例中,级联接口824被耦合到核心602内的累加寄存器836(在图8中缩写为“AC”)。级联接口824能够输出累加寄存器836的内容,并且每个时钟周期都如此。累加存储器836可以存储由核心602内的数据处理电路装置生成和/或操作的数据。
在图8的示例中,可以基于被加载到配置寄存器624中的配置数据来编程级联接口822和824。例如,基于配置寄存器624,级联接口822可以被激活或被停用。类似地,基于配置寄存器624,级联接口824可以被激活或被停用。级联接口822可以独立于级联接口824被激活和/或被停用。
在一个或多个其它实施例中,级联接口822和824由核心602控制。例如,核心602可以包括对级联接口822和/或824进行读取/写入的指令。在另一个示例中,核心602可以包括硬连线电路装置,硬连线电路装置能够读取和/或写入级联接口822和/或824。在特定实施例中,级联接口822和824可以由核心602的外部的实体控制。
在本公开内描述的实施例中,DPE 304不包括高速缓存存储器。通过省略高速缓存存储器,DPE阵列102能够实现可预测的(例如,确定性的)性能。另外,由于不需要维持位于不同DPE中的高速缓存之间的一致性,因此避免了可观的处理开销。
根据一个或多个实施例,DPE 304的核心602不具有输入中断。因此,DPE 304的核心602能够不间断地操作。省略对DPE 304的核心602的输入中断还允许DPE阵列102实现可预测的(例如,确定性的)性能。
在一个或多个DPE 304通过外部读取-写入(例如,DDR)存储器中的共享缓冲区与在PS 312、PL 310、硬连线电路块和/或设备100的另一个子系统(例如,ASIC)中实现的外部代理通信的情况下,可以使用PS 312中的一致性互连来实现一致性机制。在这些情况下,DPE阵列102与外部代理之间的应用数据传输可以遍历NoC 308和/或PL 310两者。
在一个或多个实施例中,DPE阵列102可以在功能上隔离成一个或多个DPE的多个组。例如,可以经由配置数据来启用和/或禁用特定的存储器接口以创建DPE的一个或多个组,其中每个组包括DPE阵列102的DPE中的一个或多个DPE(例如,子集)。在另一个示例中,可以为每个组独立地配置流接口,以便与组中的DPE的其它核心和/或与指定的输入源和/或输出目的地通信。
在一个或多个实施例中,核心602能够经由存储器映射的接口支持调试功能。如所讨论的,程序存储器608、存储器模块604、核心602、DMA引擎816、流交换器626和DPE的其它部件被存储器映射。存储器映射寄存器可以由能够产生存储器映射请求的任何源(诸如,PS312、PL 310和/或IC内的平台管理控制器)读取和/或写入。请求可以通过SoC接口模块104到达DPE阵列102内的预期DPE或目标DPE。
经由DPE内的存储器映射的交换器,可以执行诸如暂停核心、恢复核心、单步执行核心和/或复位核心的功能。另外,可以针对多个不同的DPE启动这样的操作。例如,可以执行的其它示例调试操作包括:经由本文描述的存储器映射的接口读取状态和/或设置硬件同步电路装置820和/或DMA引擎816的状态。
在一个或多个实施例中,DPE的流接口能够生成可以从DPE阵列102输出的跟踪信息。例如,流接口可以被配置为从DPE阵列102提取跟踪信息。跟踪信息可以被生成为分组交换流,分组交换流包含时间戳数据标记事件发生和/或执行流的有限分支跟踪。在一个方面中,由DPE生成的跟踪可以使用SoC接口块104和NoC 308被推送到PL 310中实现的本地跟踪缓冲区或者被推送到外部RAM。在另一个方面中,由DPE生成的跟踪可以被发送到片上实现的调试子系统。
在特定实施例中,每个DPE的每个核心602和存储器模块604可以包括附加的流接口,附加的流接口能够将跟踪数据直接输出到流交换器626。用于跟踪数据的流接口可以是已经讨论的那些接口的补充。流交换器626可以被配置为将跟踪数据引导到分组交换流上,使得来自不同DPE的多个核心和存储器模块的跟踪信息可以在单个数据流上行进。如所指出的,DPE互连网络的流部分可以被配置为将跟踪数据经由PL 310发送到片上调试系统、经由SoC接口块104发送到外部存储器、或经由NoC 308直接地发送到千兆位收发器。可能生成的不同类型的跟踪流的示例包括:程序计数器(PC)跟踪流,程序计数器(PC)跟踪流在分支指令处产生与PC中的每个变化相反的PC值;以及应用数据跟踪流,包括DPE内(例如,经由相应的跟踪数据流来自核心和/或存储器模块)的中间结果。
图9示出了多个DPE中的核心的级联接口的示例连通性。在图9的示例中,仅示出了DPE的核心602。为了说明的目的,省略了DPE的其它部分(诸如,DPE互连和存储器模块)。
如图所示,核心借助于结合图8描述的级联接口串行连接。核心602-1被耦合到核心602-2,核心602-2被耦合到核心602-3,核心602-3被耦合到核心602-4。因此,应用数据能够直接从核心602-1传播到核心602-2,到核心602-3,到核心602-4。核心602-4在下一行中被上耦合到核心602-8。核心602-8被耦合到核心602-7,核心602-7被耦合到核心602-6,核心602-6被耦合到核心602-5。因此,应用数据能够直接从核心602-4传播到核心608-8,到核心602-7,到核心602-6,到核心602-5。核心602-5在下一行中上耦合到核心602-9。核心602-9耦合到核心602-10,核心602-10耦合到核心602-11,核心602-11耦合到核心602-12。因此,应用数据能够直接从核心602-5传播到核心602-9,到核心602-10,到核心602-11,到核心602-12。核心602-12在下一行中被上耦合到核心602-16。核心602-16被耦合到核心602-15,核心602-15耦合到核心602-14,核心602-14耦合到核心602-13。因此,应用数据能够直接从核心602-12传播到核心602-16,到核心602-15,到核心602-14,到核心602-13。
图9旨在说明DPE的核心的级联接口如何从DPE阵列内的DPE的一个行耦合到DPE的另一个行。所示的核心(例如,DPE)的列和/或行的特定数目不旨在作为限制。图9示出了使用级联接口的核心之间的连接可以以“S”形或之字形在DPE的行的交替端进行。
在DPE阵列102实现DPE 304的两个或多个不同集群的实施例中,DPE的第一集群通过级联和/或流接口不耦合到DPE的第二集群。例如,如果DPE的第一两行形成第一集群并且DPE的第二两行形成第二集群,则核心602-5的级联接口可以被编程为被禁用,以便不将数据传递到核心602-9的级联输入。
在结合图8和图9描述的示例中,每个核心被示出为具有用作输入的级联接口和用作输出的级联接口。在一个或多个其它实施例中,级联接口可以被实现为双向接口。在特定实施例中,核心可以包括附加的级联接口,使得核心可以经由级联接口直接与上方、下方、左侧和/或右侧的其它核心通信。如所指出的,这种接口可以是单向的或双向的。
图10A、图10B、图10C、图10D和图10E示出了DPE间的连通性的示例。图10A示出了使用共享存储器的DPE之间的示例连通性。在图10A的示例中,在核心602-15中实现的功能或内核(例如,在DPE和/或DPE阵列中实现的用户电路设计)使用DPE 304-15中的核心接口和存储器接口来操作并将数据1005(例如,应用数据)放置在存储器模块604-15中。DPE 304-15和DPE 304-16是相邻的DPE。因此,核心602-16能够基于从存储器模块604-15中的硬件同步电路装置(未示出)获取用于包括数据1005的缓冲区的锁定访问来自存储器模块604-15的数据1005。由核心602-15和602-16对存储器模块604-15的共享的访问促进了高速交易处理,因为不需要将数据从一个存储器物理地转移到另一个存储器,以使核心602-16对应用数据进行操作。
图10B示出了使用流交换器的DPE间的示例连通性。在图10B的示例中,DPE 304-15和304-17是不相邻的DPE,并且同样地由一个或多个中间的DPE隔开。在核心602-15中实现的功能或内核操作数据1005并将数据1005放置在存储器模块604-15中。存储器模块604-15的DMA引擎816-15基于对用于在存储器模块604-15内存储数据1005的缓冲区的锁定的获取来检索数据1005。DMA引擎816-15经由DPE互连的流交换器将数据1005发送到DPE 304-17。存储器模块604-17内的DMA引擎816-17能够从DPE 304-17内的流交换器检索数据1005,并且在从存储器模块604-17中的硬件同步电路装置获取用于存储器模块604-17内的缓冲区的锁定之后,将数据1005存储在存储器模块604-17的缓冲区内。可以通过加载配置数据来对图10B中所示的连通性编程,以将DPE 304-15和304-17内的相应的流交换器和DMA引擎816-15和816-17配置为如所描述地操作。
图10C示出了使用流交换器的DPE间的连通性的另一个示例。在图10C的示例中,DPE 304-15和DPE 304-17是非相邻的DPE,并且被一个或多个中间的DPE隔开。图10C示出了可以经由流交换器从DMA 816-15直接向另一个DPE的核心提供数据1005。如图所示,DMA816-15将数据1005放置在DPE 304-15的流交换器上。核心602-17能够使用包括在其中的流接口直接从DPE 304-17中的流交换器接收数据1005,而数据1005没有遍历到存储器模块604-17中。可以通过加载配置数据来对图10C中所示的连通性编程,以将DPE304-15和304-17和DMA 816-15的相应的流交换器配置为如所描述地操作。
通常,图10C示出了DMA到核心的数据传输的示例。应当理解,还可以实现核心到DMA的数据传输。例如,核心602-17能够经由包括在其中的流接口以及DPE 304-17的流交换器向DPE 304-15发送数据。DMA引擎816-15能够从包括在DPE 304-15中的流交换器提取数据,并且将数据存储在存储器模块604-15中。
图10D示出了使用流交换器的DPE之间的连通性的另一个示例。参照图10D,每个不同的、不相邻的DPE的核心602-15、602-17和602-19能够经由每个相应的DPE的流接口直接地彼此通信。在图10D的示例中,核心602-15能够向核心602-17和核心602-19广播相同的数据流。可以借助于加载配置数据来对包括核心602-15、602-17和602-19每个相应的DPE内的流接口的广播功能编程,以配置所述的相应的流交换器和/或流接口。在一个或多个其它实施例中,核心602-15能够将数据多播到其它DPE的核心。
图10E示出了使用流交换器和级联接口的DPE间的连通性的示例。参照图10E,DPE304-15和DPE 304-16是相邻的DPE。在一些情况下,内核可能会被拆分为在多个核心上运行。在那种情况下,一个子内核的中间累积结果可以经由级联接口传输到下一个核心中的子内核。
在图10E的示例中,核心602-15经由流交换器接收数据1005并且对数据1005进行操作。核心602-15生成中间结果数据1010并且将中间结果数据1010从其中的累积寄存器直接输出到核心602-16。在特定实施例中,核心602-15的级联接口能够在DPE 304-15的每个时钟周期内传输累加器值。由核心602-15接收的数据1005还经由DPE互连中的流交换器传播到核心602-16,从而允许核心602-16对数据1005(例如,原始数据)和由核心602-15生成的中间结果数据1010两者进行操作。
在图10的示例中,在水平方向上示出了数据流的发送、数据流的广播和/或数据流的多播。应当理解,数据流可以从DPE被发送、广播和/或多播到DPE阵列中的任何其它DPE。这样,基于加载到每个这样的DPE中的配置数据,可以按照到达预期目的地DPE所需的对角线向左、向右、向上、向下和/或向DPE发送、广播或多播数据流。
图11示出了DPE内的事件处理电路装置的示例。DPE可以包括事件处理电路装置,事件处理电路装置与其它DPE的事件处理电路装置互连。在图11的示例中,事件处理电路装置被实现在核心602中以及存储器模块604内。核心602可以包括事件广播电路装置1102和事件逻辑1104。存储器模块604可以包括单独的事件处理电路装置,事件处理电路装置包括事件广播电路装置1106和事件逻辑1108。
事件广播电路装置1102可以被连接到图11所示的示例DPE的上方和下方的相邻的DPE的核心中的每个核心内的事件广播电路装置。事件广播电路装置1102还可以被连接到图11所示的示例DPE的左侧的相邻的DPE的存储器模块内的事件广播电路装置。如图所示,事件广播电路装置1102被连接到事件广播电路装置1106。事件广播电路装置1106可以被连接到图11所示的示例DPE的上方和下方的相邻的DPE的存储器模块中的每个存储器模块内的事件广播电路装置。事件广播电路装置1106还可以被连接到图11所示的示例DPE的右侧的相邻的DPE的核心内的事件广播电路装置。
以这种方式,DPE的事件处理电路装置可以在DPE阵列内形成独立的事件广播网络。DPE阵列内的事件广播网络可以独立于DPE互连网络而存在。另外,通过将合适的配置数据加载到配置寄存器624和/或536中,可以单独地配置事件广播网络。
在图11的示例中,事件广播电路装置1102和事件逻辑1104可以由配置寄存器624配置。事件广播电路装置1106和事件逻辑1108可以由配置寄存器636配置。配置寄存器624和636可以经由DPE互连606的存储区映射交换器被写入。在图11的示例中,配置寄存器624编程事件逻辑1104,以检测在核心602内发生的特定类型的事件。例如,加载到配置寄存器624中的配置数据确定多个不同类型的预定事件中的哪些事件是由事件逻辑1104检测的。事件的示例可以包括但不限于核心602的读取操作的开始和/或结束、核心602的写入操作的开始和/或结束、以及核心602执行的其它操作的发生。类似地,配置寄存器636编程事件逻辑1108,以检测存储器模块604内发生的特定类型的事件。事件的示例可以包括但不限于DMA引擎816的读取操作的开始和/或结束、DMA引擎816的写入操作的开始和/或结束、停顿以及存储器模块604执行的其它操作的发生。例如,加载到配置寄存器636中的配置数据确定多个不同类型的预定事件中的哪些事件是由事件逻辑1108检测的。应当理解,事件逻辑1104和/或事件逻辑1108能够检测源于和/或相对于DMA引擎816、存储器映射的交换器632、流交换器626、存储器模块604的存储器接口、核心602的核心接口、核心602的级联接口和/或位于DPE中的其它部件的事件。
配置寄存器624还能够编程事件广播电路装置1102,而配置寄存器636能够编程事件广播电路装置1106。例如,加载到配置寄存器624中的配置数据可以确定由事件广播电路装置1102从其它事件广播电路装置接收的事件中的哪些事件被传播到其它事件广播电路装置和/或SoC接口块104。配置数据还可以指定由事件逻辑1104内部地生成的哪些事件被传播到其它事件广播电路装置和/或SoC接口块104。
类似地,加载到配置寄存器636中的配置数据可以确定由事件广播电路装置1106从其它事件广播电路装置接收的事件中的哪些事件被传播到其它事件广播电路装置和/或SoC接口块104。配置数据还可以指定由事件逻辑1108内部地生成的哪些事件被传播到其它事件广播电路装置和/或SoC接口块104。
因此,由事件逻辑1104生成的事件可以被提供给事件广播电路装置1102并且可以被广播给其它DPE。在图11的示例中,事件广播电路装置1102能够将无论内部地生成的或从其它DPE接收的事件广播到上方的DPE、到左侧的DPE、到下方的DPE或SoC接口块104。事件广播电路装置1102还能够将事件广播到存储器模块604内的事件广播电路装置1106。
由事件逻辑1108生成的事件可以被提供给事件广播电路装置1106并且可以被广播到其它DPE。在图11的示例中,事件广播电路装置1106能够将无论内部地生成的或从其它DPE接收的事件广播到上方的DPE、到右侧的DPE、到下方的DPE或SoC接口块104。事件广播电路装置1106还能够将事件广播到核心602内的事件广播电路装置1102。
在图11的示例中,位于核心中的事件广播电路装置与位于上方和/或下方的相邻的DPE的核心中的事件广播电路装置竖直地通信。在DPE紧接(或相邻)在SoC接口模块104上方的情况下,该DPE的核心中的事件广播电路装置能够与SoC接口块104通信。类似地,位于存储器模块中的事件广播电路装置与位于上方和/或下方相邻的DPE的存储器模块中的事件广播电路装置竖直地通信。在DPE紧接(例如,相邻)在SoC接口块104上方的情况下,该DPE的存储器模块中的事件广播电路装置能够与SoC接口块104通信。事件广播电路装置还能够与紧邻事件广播电路装置左侧和/或右侧的事件广播电路装置通信,而不管这种事件广播电路装置是否位于另一个DPE中和/或核心或存储器模块内。
一旦配置寄存器624和636被写入,事件逻辑1104和1108能够在后台运行。在特定实施例中,事件逻辑1104仅响应于在核心602内检测的特定条件生成事件;并且,事件逻辑1108仅响应于在存储器模块604内检测的特定条件生成事件。
图12示出了用于DPE 304的另一个示例架构。在图12的示例中,DPE 304包括多个不同核心并且可以被称为“集群”类型的DPE架构。在图12中,DPE 304包括核心1202、1204、1206和1208。核心1202-1208中的每个核心通过核心接口1210、1212、1214和1216(在图12中简称为“核心IF”)分别地被耦合到存储器池1220。核心接口1210-1216中的每个核心接口通过交叉开关1224耦合到多个存储器体1222-1至1222-N。通过交叉开关1224,核心1202-1208中的任何一个核心能够访问存储器体1222-1至1222-N中的任何一个存储器体。这样,在图12的示例架构内,核心1202-1208能够经由存储器池1220的共享的存储器体1222彼此通信。
在一个或多个实施例中,存储器池1220可以包括32个存储器体。提供包括在存储器池1220中的存储器体的数目是出于说明而非限制的目的。在其它实施例中,包括在存储器池1220中的存储器体的数目可以不止32或少于32。
在图12的示例中,DPE 304包括存储器映射的交换器1226。存储器映射的交换器1226包括多个存储器映射的接口(未示出),存储器映射的接口能够在每个基本方向(例如,北方、南方、西方和东方)上耦合到相邻的DPE内的存储器映射的交换器并且耦合到存储器池1220。每个存储器映射的接口可以包括一个或多个主接口以及一个或多个从接口。例如,存储器映射的交换器1226通过存储器映射的接口被耦合到交叉开关1224。存储器映射的交换器1226能够如结合本公开内的其它示例DPE描述的那样传输配置数据、控制数据和调试数据。这样,存储器映射的交换器1226能够加载DPE 304中的配置寄存器(未示出)。在图12的示例中,DPE 304可以包括用于控制流交换器1232、核心1202-1208和DMA引擎1234的操作的配置寄存器。
在图12的示例中,存储器映射的交换器1226能够在四个基本方向中的每个基本方向上通信。在其它实施例中,存储器映射的交换器1226能够仅在向北和向南方向上通信。在其它实施例中,存储器映射的交换器1226可以包括附加的存储器映射的接口,附加的存储器映射的接口允许存储器映射的交换器1226与不止四个其它实体通信,从而允许与在对角线方向上的其它DPE和/或其它非相邻的DPE通信。
DPE 304还包括流交换器1232。流交换器1232包括多个流接口(未示出),流接口能够耦合到在每个基本方向(例如,北方、南方、西方和东方)上的相邻的DPE中的流交换器并且耦合到核心1202-1208。每个流交换器可以包括一个或多个主接口以及一个或多个从接口。流交换器1232还包括耦合到DMA引擎1234的流接口。
DMA引擎1234通过接口(IF)1218被耦合到交叉开关1224。DMA引擎1234可以包括两个接口。例如,DMA引擎1234可以包括存储器至流接口,存储器至流接口能够从存储器体1222中的一个或多个存储器体读取数据并且在流交换器1232上发送数据。DMA引擎1234还可以包括流至存储器接口,流至存储器接口经由流交换器1232接收数据并且将数据存储在存储器体1222中的一个或多个存储器体内。接口中的每个接口,无论存储器至流接口或流至存储器接口,可以支持一个输入/输出流或多个并发输入/输出流。
图12的示例架构支持经由存储器映射的交换器1226和流交换器1232两者的DPE间通信。如图所示,存储器映射的交换器1226能够与上方、下方、左侧和右侧的相邻的DPE的存储器映射的交换器通信。类似地,流交换器1232能够与上方、下方、左侧和右侧的相邻的DPE的流交换器通信。
在一个或多个实施例中,存储器映射的交换器1226和流交换器1232两者都能够支持在其它(相邻的和非相邻的)DPE的核心之间的数据传输,以共享应用数据。存储器映射的交换器1226还能够支持出于配置DPE 304的目的的配置数据、控制数据和调试数据的传输。在特定实施例中,流交换器1232支持应用数据的传输,而存储器映射的交换器1226仅支持配置数据、控制数据和调试数据的传输。
在图12的示例中,如前所述,核心1202-1208经由级联接口被串行地连接。另外,核心1202被耦合到图12的DPE的左侧的相邻的DPE中的最右侧核心的级联接口(例如,输出),而核心1208被耦合到图12的DPE的右侧的相邻的DPE中的最左侧核心的级联接口(例如,输入)。如图9所示,使用集群架构的DPE的级联接口可以被逐行地连接。在一个或多个其它实施例中,代替水平级联连接和/或除了水平级联连接之外,一个或多个核心1202-1208可以经由级联接口被连接到上方和/或下方的相邻的DPE中的核心。
图12的示例架构可以被用于实现DPE并且形成如本文所述的DPE阵列。与本公开内描述的其它示例DPE架构相比,图12的示例架构使可用于核心的存储器的数目增加。因此,对于核心需要访问更大数目的存储器的应用,可以使用图12的架构,图12的架构将多个核心集群在单个DPE内。为了说明的目的,取决于图12的DPE 304的配置,不需要使用所有核心。因此,一个或多个(例如,少于DPE304的所有核心1202-1208)可以访问存储器池1220并且可以访问比基于加载到图12的示例中的配置寄存器(未示出)的配置数据的情况下更大数目的存储器。
图13示出了用于图1的DPE阵列102的示例架构。在图13的示例中,SoC接口块104提供了在DPE 304与设备100的其它子系统之间的接口。SoC接口块104将DPE集成到设备中。SoC接口块104能够将配置数据传输到DPE 304,将事件从DPE 304传输到其它子系统,将事件从其它子系统传输到DPE 304,生成中断并且将中断传输到DPE阵列102外部的实体,在其它子系统与DPE 304之间传输应用数据,和/或在其它子系统与DPE 304之间传输跟踪数据和/或调试数据。
在图13的示例中,SoC接口块104包括多个互连的图块。例如,SoC接口块104包括图块1302、1304、1306、1308、1310、1312、1314、1316、1318和1320。在图13的示例中,图块1302-1320被排成一行。在其它实施例中,图块可以被布置成列、网格或另一种布局。例如,SoC接口块104可以被实现为DPE 304的左侧上的一列图块、DPE 304的右侧上的一列图块、DPE304的列之间的一列图块等。在另一个实施例中,SoC接口块104可以位于DPE阵列102上方。SoC接口块104可以被实现为使得图块位于DPE阵列102的下方、DPE阵列102的左侧、DPE阵列102的右侧和/或DPE阵列102的上方的任何组合中。就这一点而言,图13被提供用于说明而非限制的目的。
在一个或多个实施例中,图块1302-1320具有相同的架构。在一个或多个其它实施例中,可以利用两个或多个不同架构来实现图块1302-1320。在特定实施例中,可以使用不同架构来实现SoC接口块104内的图块,其中每个不同的图块架构支持与不同类型的子系统或设备100的子系统的组合的通信。
在图13的示例中,图块1302-1320被耦合使得数据可以从一个图块被传播到另一个图块。例如,数据可以从图块1302通过图块1304、1306传播,并且沿着图块的线向下到图块1320。类似地,数据可以沿反方向从图块1320传播到图块1302。在一个或多个实施例中,图块1302-1320中的每个图块能够用作用于多个DPE的接口。例如,图块1302-1320中的每个图块能够用作用于DPE阵列102的DPE 304的子集的接口。每个图块向其提供接口的DPE的子集可以互斥,以使得SoC接口块104的不止一个图块不向DPE提供接口。
在一个示例中,图块1302-1320中的每个图块提供用于DPE 304的列的接口。出于说明的目的,图块1302向列A的DPE提供接口。图块1304向列B的DPE提供接口等。在每一种情况下,图块包括到DPE的列中的相邻的DPE的直接连接,在该示例中是底部的DPE。例如,参考列A,图块1302被直接地连接到DPE 304-1。列A内的其它DPE可以与图块1302通信,但可以通过相同列中的中间DPE的DPE互连进行通信。
例如,图块1302能够从另一个源(诸如,PS 312、PL 310)和/或另一个硬连线电路块(例如,ASIC块)接收数据。图块1302能够将寻址到列A中的DPE的数据的那些部分提供给这种DPE,而将寻址到其它列中的DPE(例如,对于图块1302不是接口的DPE)的数据发送到图块1304上。图块1304可以执行相同或相似的处理,其中将从图块1302接收的寻址到列B中的DPE的数据提供给这种DPE,而将寻址到其它列中的DPE的数据发送到图块1306上,依此类推。
以这种方式,数据可以在SoC接口块104的图块之间传播,直到到达用作用于数据被寻址到的DPE(例如,“目标DPE”)的接口的图块为止。用作用于目标DPE的接口的图块能够使用DPE的存储器映射的交换器和/或DPE的流交换器将数据定向到目标DPE。
如前所述,列的使用是示例实现。在其它实施例中,SoC接口块104的每个图块能够提供到DPE阵列102的一行DPE的接口。在SoC接口块104被实现为一列图块的情况下,无论是在DPE 304的左侧、右侧或列之间都可以使用这种配置。在其它实施例中,每个图块向其提供接口的DPE的子集可以是少于DPE阵列102的所有DPE的任何组合。例如,DPE 304可以被分配给SoC接口块104的图块。这种DPE的特定物理布局可以基于由DPE互连建立的DPE的连通性而变化。例如,图块1302可以提供到DPE 304-1、304-2、304-11和304-12的接口。SoC接口块104的另一个图块可以提供到四个其它DPE的接口,等等。
图14A、14B和14C示出了用于实现SoC接口块104的图块的示例架构。图14A示出了图块1304的示例实现。图14A中示出的架构还可以被用于实现SoC接口块104中包括的任何其它图块。
图块1304包括存储器映射的交换器1402。存储器映射的交换器1402可以包括用于在多个不同方向中的每个方向上通信的多个存储器映射的接口。作为说明性且非限制性的示例,存储器映射的交换器1402可以包括一个或多个存储器映射的接口,其中存储器映射的接口具有主接口,主接口竖直地连接到紧邻上方的DPE的存储器映射的接口。这样,存储器映射的交换器1402能够用作DPE中的一个或多个DPE的存储器映射的接口的主接口。在特定示例中,存储器映射的交换器1402可以用作用于DPE的子集的主接口。例如,存储器映射的交换器1402可以用作用于图块1304上方的DPE列(例如,图13的列B)的主接口。应当理解,存储器映射的交换器1402可以包括附加的存储器映射的接口,以连接到DPE阵列102内的多个不同电路(例如DPE)。存储器映射的交换器1402的存储器映射的接口还可以包括能够与位于图块1304上方的电路(例如,一个或多个DPE)通信的一个或多个从接口。
在图14A的示例中,存储器映射的交换器1402可以包括一个或多个存储器映射的接口,存储器映射的接口促进在水平方向上与相邻的图块(例如,图块1302和1306)中的存储器映射的交换器的通信。为了说明的目的,存储器映射的交换器1402可以经由存储器映射的接口在水平方向上被连接到相邻的图块,其中每个这样的存储器映射的接口包括一个或多个主接口和/或一个或多个从接口。因此,存储器映射的交换器1402能够将数据(例如,配置数据、控制数据和/或调试数据)从一个图块移动到另一个图块,以到达正确的DPE和/或多个DPE的子集并且将数据引导至目标DPE,无论这种DPE是在图块1304上方的列中还是在用于用作接口的SoC接口块104的另一个图块的另一个子集中。例如,如果从NoC 308接收存储器映射的交易,则存储器映射的交换器1402能够将交易水平地分布到(例如)SoC接口模块104内的其它图块。
存储器映射的交换器1402还可以包括具有耦合到图块1304内的配置寄存器1436的一个或多个主接口和/或从接口的存储器映射的接口。通过存储器映射的交换器1402,配置数据可以被加载到配置寄存器1436中以控制由图块1304内的部件执行的各种功能和操作。图14A、14B和14C示出了配置寄存器1436与图块1304的一个或多个元件之间的连接。然而,应当理解,配置寄存器1436可以控制图块1304的其它元件,并且因此具有到这种其它元件的连接,尽管这种连接未在图14A、14B和/或14C中示出。
存储器映射的交换器1402可以包括经由桥接器1418耦合到NoC接口1426的存储器映射的接口。存储器映射的接口可以包括一个或多个主接口和/或从接口。桥接器1418能够将从NoC 308传输的存储器映射的数据(例如,配置数据、控制数据和/或调试数据)转换成可以由存储器映射的交换器1402接收的存储器映射的数据。
图块1304还可以包括事件处理电路装置。例如,图块1304包括事件逻辑1432。事件逻辑1432可以由配置寄存器1436配置。在图14A的示例中,事件逻辑1432被耦合到控制、调试和跟踪(CDT)电路1420。加载到配置寄存器1436的配置数据定义了可以在图块1304内本地检测到的特定事件。事件逻辑1432能够检测每个配置寄存器1436的各种不同事件,事件源自和/或涉及DMA引擎1412、存储器映射的交换器1402、流交换器1406、位于PL接口1410的先进先出(FIFO)存储器、和/或NoC流接口1414。事件的示例可以包括但不限于DMA完成传输、锁定释放、锁定获取、PL传输结束或与通过图块1304的数据流的开始或结束有关的其它事件。事件逻辑1432可以将这种事件提供给事件广播电路装置1404和/或CDT电路1420。例如,在另一个实施例中,事件逻辑1432可以不具有到CDT电路1420的直接连接,而是经由事件广播电路装置1404到CDT电路1420的连接。
图块1304包括事件广播电路装置1404和事件广播电路装置1430。事件广播电路装置1404和事件广播电路装置1430中的每个事件广播电路装置在DPE阵列102的事件广播网络、SoC接口块104的其它图块与设备100的PL 310之间提供接口。事件广播电路装置1404被耦合到相邻的或邻近的图块1302的事件广播电路装置并且被耦合到事件广播电路装置1430。事件广播电路装置1430被耦合到相邻的或邻近的图块1306的事件广播电路装置。在一个或多个其它实施例中,SoC接口块104的图块被布置在网格或阵列中,事件广播电路装置1404和/或事件广播电路装置1430可以被连接到位于图块1304上方和/或下方的其它图块中的事件广播电路装置。
在图14A的示例中,事件广播电路装置1404被耦合到紧邻图块1304DPE(例如,列B中,DPE 304-2紧接在图块1304上方)的核心中的事件广播电路装置。事件广播电路装置1404还被耦合到PL接口1410。事件广播电路装置1430被耦合到紧邻图块1304的DPE(例如,列B中,DPE 304-2紧接在图块1304上方)的存储器模块中的事件广播电路装置。尽管未示出,但是在另一个实施例中,事件广播电路装置1430还可以被耦合到PL接口1410。
事件广播电路装置1404和事件广播电路装置1430能够将由事件逻辑1432内部生成的事件、从SoC接口块104的其它图块接收的事件和/或从列B中的DPE(或DPE阵列102的其它DPE)接收的事件发送到其它图块上。事件广播电路装置1404还能够经由PL接口1410将这种事件发送到PL 310。在另一个示例中,事件可以使用PL接口块1410从事件广播电路装置1404被发送到设备100中的其它块和/或子系统(诸如,位于DPE阵列102的外部的ASIC和/或PL电路块)。进一步,PL接口1410可以从PL 310接收事件并且将这种事件提供给事件广播交换器1404和/或流交换器1406。在一方面,事件广播电路装置1404能够经由PL接口1410将从PL 310接收的任何事件发送到SoC接口块104的其它图块和/或发送到列B中的DPE和/或DPE阵列102的其它DPE。在另一个示例中,从PL 310接收的事件可以从事件广播电路装置1404被发送到设备100中的其它块和/或子系统(诸如,ASIC)。因为可以在SoC接口块104中的图块之间广播事件,因此通过遍历SoC接口模块104中的图块和到目标(例如,预期的)DPE的事件广播电路装置,事件可以到达DPE阵列102中的任何DPE。例如,在由包括目标DPE的图块管理的DPE的列(或子集)下方的SoC接口块104的图块中的事件广播电路装置可以将事件传播到目标DPE。
在图14A的示例中,事件广播电路装置1404和事件逻辑1432被耦合到CDT电路1420。事件广播电路装置1404和事件逻辑1432能够将事件发送到CDT电路1420。CDT电路1420能够将接收的事件分组并且将来自事件广播电路装置1404和/或事件逻辑1432的事件发送到流交换器1406。在特定实施例中,事件广播电路装置1430可以被连接到流交换器1406和/或同样被连接到CDT电路1420。
在一个或多个实施例中,事件广播电路装置1404和事件广播电路装置1430能够从图14A所示的一个或多个或所有方向(例如,经由图14A中所示的连接中的任何连接)收集广播事件。在特定实施例中,事件广播电路装置1404和/或事件广播电路装置1430能够执行信号的逻辑“或”并且沿一个或多个或所有方向(例如,包括到CDT电路1420)转发结果。来自事件广播电路装置1404和事件广播电路装置1430的每个输出都可以包括位掩码,位掩码可以通过加载到配置寄存器1436的配置数据来配置。位掩码确定分别在每个方向上广播的事件。例如,这种位掩码可以消除不必要的或重复的事件传播。
中断处理器1434被耦合到事件广播电路装置1404,并且能够接收从事件广播电路装置1404广播的事件。在一个或多个实施例中,中断处理器1434可以通过加载到配置寄存器1436的配置数据被配置,以响应于从事件广播电路装置1404选择的事件(例如,DPE生成的事件、图块1304内生成的事件和/或PL 310生成的事件)和/或事件的组合来生成中断。中断处理器1434能够基于到PS 312和/或到设备100内的其它设备级管理块来生成中断。这样,中断处理器1434能够基于由中断处理器1434生成的中断来通知PS 312和/或这种其它设备级管理块在DPE阵列102中发生的事件、在SoC接口块104的图块中发生的事件和/或在PL 310中发生的事件。
在特定实施例中,中断处理器1434可以通过直接连接被耦合到中断处理器或PS312的中断端口和/或其它设备级管理块。在一个或多个其它实施例中,中断处理器1434可以通过另一个接口耦合到PS312和/或其它设备级管理块。
PL接口1410耦合到设备100的PL 310并且为其提供接口。在一个或多个实施例中,PL接口410提供DPE阵列时钟与PL时钟之间的异步时钟域交叉。PL接口1410还可以提供电平转换器和/或隔离单元,以与PL电源轨集成。在特定实施例中,PL接口1410可以被配置为提供具有FIFO支持的32位、64位和/或128位接口以处理反压。PL接口1410的特定宽度可以由加载到配置寄存器1436的配置数据控制。在图14A的示例中,PL接口1410直接地被耦合到一个或多个PL互连块1422。在特定实施例中,PL互连块1422被实现为耦合到位于PL 310中的互连电路装置的硬连线电路块。
在一个或多个其它实施例中,PL接口1410被耦合到其它类型的电路块和/或子系统。例如,PL接口1410可以被耦合到ASIC、模拟/混合信号电路装置和/或其它子系统。这样,PL接口1410能够在图块1304与这种其它子系统和/或块之间传输数据。
在图14A的示例中,图块1304包括流交换器1406。流交换器1406通过一个或多个流接口被耦合到相邻的或邻近的图块1302的流交换器并且被耦合到相邻的或邻近的图块1306的流交换器。每个流接口可以包括一个或多个主接口和/或一个或多个从接口。在特定实施例中,每一对相邻的流交换器能够在每个方向上经由一个或多个流交换数据。流交换器1406还通过一个或多个流接口被耦合到列B中的紧接在图块1304上方的DPE(例如,DPE304-2)中的流交换器。如所讨论的,流接口可以包括一个或多个流从接口和/或流主接口。流交换器1406还经由流多路复用器/多路分解器1408(在图14A中简称为流复用器/解复用器)被耦合到PL接口1410、DMA引擎1412和/或NoC流接口1414。例如,流交换器1406可以包括一个或多个流接口,流接口被用于通过流多路复用器/多路分解器1408与PL接口1410、DMA引擎1412和/或NoC流接口1414中的每个进行通信。
在一个或多个其它实施例中,取决于包括的流接口的数据和/或图块和/或图块1304周围的DPE和/或其它电路块的布置,流交换器1406可以在其它方向上和/或对角线方向上被耦合到其它电路块。
在一个或多个实施例中,流交换器1406由加载到配置寄存器1436的配置数据配置。例如,流交换器1406可以被配置为基于配置数据支持分组交换和/或电路交换操作。另外,配置数据限定了流交换器1406与其通信的特定DPE和/或DPE阵列102内的DPE。在一个或多个实施例中,配置数据限定了流交换器1406与其通信的特定DPE和/或DPE阵列102的DPE(例如,列B内的DPE)的子集。
流多路复用器/多路分解器1408能够将从PL接口1410、DMA引擎1412和/或NoC流接口1414接收的数据引导到流交换器1406。类似地,流多路复用器/多路分解器1408能够将从流交换器1406接收的数据导向到PL接口1410、DMA引擎1412和/或引导到NoC流接口1414。例如,流多路复用器/多路分解器1408可以由存储在配置寄存器1436中的配置数据编程,以将选择的数据路由到PL接口1410,将选择的数据路由到DMA引擎1412,其中这种数据在NoC308之上作为存储器映射的交易被发送,和/或将选择的数据路由到NoC流接口1414,其中该数据在NoC 308之上作为数据流或多个数据流被发送。
DMA引擎1412能够用作主接口以通过选择器块1416将数据引导到NoC 308中并且到NoC接口1426上。DMA引擎1412能够从DPE接收数据并且将这种数据作为存储器映射的数据交易提供给NoC 308。在一个或多个实施例中,DMA引擎1412包括硬件同步电路装置,硬件同步电路装置可以被用于将包括在DMA引擎1412中的多个信道和/或在DMA引擎1412内的信道与主接口同步,主接口轮询并驱动锁定请求。例如,主接口可以是PS 312或PL 310内实现的设备。主接口也可以接收由DMA引擎1412内的硬件同步电路装置生成的中断。
在一个或多个实施例中,DMA引擎1412能够访问外部存储器。例如,DMA引擎1412能够从DPE接收数据流并且将通过NoC 308到外部存储器的数据流发送到位于SoC内的存储器控制器。然后,存储器控制器将以数据流接收的数据引导到外部存储器(例如,如由DMA引擎1412请求的那样开始外部存储器的读取和/或写入)。类似地,DMA引擎1412能够从外部存储器接收数据,其中数据可以被分布到SoC接口块104的其它图块和/或向上分布到目标DPE中。
在特定实施例中,DMA引擎1412包括可以使用DPE全局控制设置寄存器(DPE GCS寄存器)1438设置的安全位。外部存储器可以被划分为不同的区域或分区,其中DPE阵列102仅被允许访问外部存储器的特定区域。DMA引擎1412内的安全位可以被设置,使得DPE阵列102借助于DMA引擎1412仅能够访问每个安全位所允许的外部存储器的特定区域。例如,由DPE阵列102实现的应用可以被限制为仅访问外部存储器的特定区域,被限制为仅从外部存储器的特定区域读取,和/或被限制为使用该机制完全写入外部存储器。
控制对外部存储器的访问的DMA引擎1412内的安全位可以被实现为整体控制DPE阵列102或可以以更细粒度的方式实现,其中可以在每个DPE的基础上(例如,逐个核心或以核心组为基础)指定和/或控制对外部存储器的访问,核心组被配置为以协调方式操作,例如以实现内核和/或其它应用。
NoC流接口1414能够经由NoC接口1426从NoC 308接收数据,并且将到流的数据转发到多路复用器/多路分解器1408。NoC流接口1414还能够从流多路复用器/多路分解器1408接收数据并且通过选择器块1416将数据转发到NoC接口1426。选择器块1416可配置为将数据从DMA引擎1412或从NoC流接口1414传递到NoC接口1426。
CDT电路1420能够在图块1304内执行控制操作、调试操作和跟踪操作。关于调试,位于图块1304中的寄存器中的每个寄存器被映射到经由存储器映射的交换器1402可访问的存储器映射上。例如,CDT电路1420可以包括诸如以下电路装置:跟踪硬件、跟踪缓冲区、性能计数器和/或停顿逻辑。CDT电路1420的跟踪硬件能够采集跟踪数据。CDT电路1420的跟踪缓冲区能够缓冲跟踪数据。CDT电路1420还能够将跟踪数据输出到流交换器1406。
在一个或多个实施例中,CDT电路1420能够收集数据(例如,跟踪数据和/或调试数据),打包这种数据,然后通过流交换器1406输出打包的数据。例如,CDT电路1420能够输出打包的数据并且将这种数据提供给流交换器1406。附加地,在调试期间经由通过相应的图块的存储器映射的交换器1402的存储器映射的交易可以读取或写入配置寄存器1436或其它寄存器。类似地,在概要分析期间经由通过相应的图块的存储器映射的交换器1402的存储器映射的交易可以读取或写入CDT电路1420内的性能计数器。
在一个或多个实施例中,CDT电路1420能够接收由事件广播电路装置1404(或事件广播电路装置1430)传播的任何事件或由耦合到CDT电路1420的事件广播电路装置1404的接口所利用的每个位掩码的选择的事件。CDT电路1420还能够接收由事件逻辑1432生成的事件。例如,CDT电路1420能够从PL 310、DPE 304、图块1304(例如,事件逻辑1432和/或事件广播交换器1404)和/或SoC接口块104的其它图块接收广播事件。CDT电路1420能够将多个这种事件打包(例如,分组)到数据包中,并且将分组的事件与时间戳相关联。CDT电路1420还能够在流交换器1406之上将分组的事件发送到图块1304外部的目的地。可以借助于流交换器1406和流多路复用器/多路分解器1408通过PL接口1410、DMA引擎1412和/或NoC流接口1414发送事件。
DPE GCS寄存器1438可以存储被用于启用或禁用对DPE阵列102的安全访问和/或来自DPE阵列102的安全访问的DPE全局控制设置/位(本文也称为“安全位”)。可以经由将在下面结合图14C更详细地描述的SoC安全/初始化接口来编程DPE GCS寄存器1438。从SoC安全/初始化接口接收的安全位可以经由图14A中示出的总线从一个图块传播到SoC接口块104的下一个图块。
在一个或多个实施例中,到DPE阵列102(例如,使用NoC 308)内的外部存储器映射的数据传输是不安全或不可信的。在没有设置DPE GCS寄存器1438内的安全位的情况下,能够借助于存储器映射的数据传输(例如,在NoC 308之上)通信的设备100中的任何实体能够与DPE阵列102通信。通过设置DPE GCS寄存器1438内的安全位,可以限定允许与DPE阵列102通信的特定实体,使得只有能够生成安全通信量的指定的实体可以与DPE阵列102通信。
例如,存储器映射的交换器1402的存储器映射的接口能够与NoC308通信。存储器映射的数据传输可以包括附加的边带信号,例如指定交易是安全或不安全的位。当DPE GCS寄存器1438内的安全位被设置时,则进入SoC接口块104的存储器映射的交易必须具有边带信号,边带信号被设置以指示从NoC 308到达SoC接口块104的存储器映射的交易是安全的。当到达SoC接口块104的存储器映射的交易没有设置边带位并且在DPE GCS寄存器1438内设置了安全位,则SoC接口块104不允许交易进入或传递到DPE 304。
在一个或多个实施例中,SoC包括用作信任根的安全代理(例如,电路)。当DPE GCS寄存器1438的安全位被设置时,安全代理能够配置SoC内不同实体(例如,电路)的权限,以设置存储器映射的交易内的边带位,以便访问DPE阵列102。在配置SoC时,安全代理将权限授予可以在PL 310或PS 312中实现的不同主接口,从而使这种主接口具有在(或不在)NoC308之上向DPE阵列102发布安全交易的能力。
图14B示出了图块1304的另一个示例实现。图14B中示出的示例架构还可以被用于实现SoC接口块104中包括的任何其它图块。图14B的示例示出了图14A中示出的架构的简化版本。图14B的图块架构提供了DPE与设备100内其它子系统和/或块之间的连通性。例如,图14B的图块1304可以提供DPE与PL 310、模拟/混合信号电路块、ASIC或本文描述的其它子系统之间的接口。图14B的图块架构不提供到NoC 308的连通性。因此,省略了DMA引擎1412、NoC接口1414、选择器块1416、桥接器1418和流多路复用器/多路分解器1408。这样,可以使用SoC的较小面积来实现图14B的图块1304。另外,如图所示,流交换器1406被直接地耦合到PL接口1410。
为了配置来自NoC 308的DPE,图14B的示例架构不能接收存储器映射的数据(例如,配置数据),用于从从NoC 308配置DPEs。这种配置数据可以经由存储器映射的交换器1402从相邻的图块接收并且被引导到图块1304管理的DPE的子集(例如,向上进入图14B的图块1304上方的DPE的列)。
图14C示出了图块1304的另一个示例实现。在特定实施例中,图14C中示出的架构可以被用于仅实现SoC接口块104内的一个图块。例如,图14C中示出的架构可以被用于实现SoC接口块104内的图块1302。图14C中示出的架构类似于图14B中示出的架构。在图14C中,附加的部件,诸如:SoC安全/初始化接口1440、时钟信号生成器1442以及全局定时器1444,被包括在内。
在图14C的示例中,SoC安全/初始化接口1440提供了用于SoC接口块104的另外的接口。在一个或多个实施例中,SoC安全/初始化接口1440被实现为NoC外围互连。SoC安全/初始化接口1440能够提供对用于DPE阵列102(未示出)的全局复位寄存器和对DPE GCS寄存器1438的访问。在特定实施例中,DPE GCS寄存器1438包括用于时钟信号生成器1442的配置寄存器。如图所示,SoC安全/初始化接口1440能够将安全位提供到DPE GCS寄存器1438,并且将安全位传播到SoC接口块104的其它图块中的其它DPE GCS寄存器1438。在特定实施例中,SoC安全/初始化接口1440实现对于SoC接口块104的单个从端点。
在图14C的示例中,时钟信号生成器1442能够生成一个或多个时钟信号1446和/或一个或多个复位信号1450。时钟信号1446和/或复位信号1450可以被分配到DPE 304中的每个DPE和/或被分配到DPE阵列102的SoC接口块104的其它图块。在一个或多个实施例中,时钟信号生成器1442可以包括一个或多个锁相环电路(PLL)。如图所示,时钟信号生成器1442能够接收参考时钟信号,参考时钟信号由DPE阵列102外部并位于SoC上的另一个电路生成。时钟信号生成器1442能够基于接收的参考时钟信号生成时钟信号1446。
在图14C的示例中,通过SoC安全/初始化接口1440配置时钟信号生成器1442。例如,可以通过将数据加载到DPE GCS寄存器1438中来配置时钟信号生成器1442。这样,可以通过将适当的配置数据通过SoC安全/初始化接口1440写入DPE GCS寄存器1438来设置DPE阵列102的一个时钟频率或多个时钟频率和复位信号1450的生成。出于测试目的,时钟信号1446和/或复位信号1450还可以被直接地路由到PL 310。
SoC安全/初始化接口1440可以被耦合到SoC控制/调试(电路)块(例如,未示出的设备100的控制和/或调试子系统)。在一个或多个实施例中,SoC安全/初始化接口1440能够将状态信号提供到SoC控制/调试块。作为说明性而非限制性示例,SoC安全/初始化接口1440能够将从时钟信号生成器1440的内部生成的“PLL锁定”信号提供到SoC控制/调试块。PLL锁定信号可以指示PLL何时获取参考时钟信号上的锁定。
SoC安全/初始化接口1440能够经由接口1448接收指令和/或数据。数据可以包括本文描述的安全位、时钟信号生成器配置数据和/或可以写入DPE GCS寄存器1438的其它数据。
全局定时器1444能够与CDT电路1420接合。例如,全局定时器1444可以被耦合到CDT电路1420。全局定时器1444能够提供由CDT电路1420使用用于跟踪所用的时间戳事件的信号。在一个或多个实施例中,全局定时器1444可以被耦合到SoC接口电路装置104的图块中的其它图块内的CDT电路1420。例如,全局定时器1444可以被耦合到图14A、14B和/或14C的示例图块中的CDT电路1420。全局定时器1444还可以被耦合到SoC控制/调试块。
共同参考图14A、14B和14C的架构,图块1304能够使用各种不同的数据路径与DPE304通信。在一个示例中,图块1304能够使用DMA引擎1412与DPE 304通信。例如,图块1304能够使用DMA引擎1412与DPE阵列102的一个或多个DPE的DMA引擎(例如,DMA引擎816)通信。通信可以从DPE流到SoC接口块104的图块,或者从SoC接口块104的图块流到DPE。在另一个示例中,DMA引擎1412能够借助于相应的DPE内的流交换器与DPE阵列102的一个或多个DPE的核心通信。通信可以从核心流到SoC接口块104的图块和/或从SoC接口块104的图块流到DPE阵列102的一个或多个DPE的核心。
图15示出了PL接口1410的示例实现。在图15的示例中,PL接口1410包括多个信道,信道根据使用的特定图块架构将PL 310耦合到流交换器1406和/或流多路复用器/多路分解器1408。PL接口1410内的图15中示出的信道的特定数目是出于说明而非限制的目的。在其它实施例中,PL接口1410可以包括比图15中示出的信道更少或更多的信道。另外,尽管PL接口1410被示出为连接到PL 310,但是在一个或多个其它实施例中,PL接口1410能够耦合到一个或多个其它子系统和/或电路块。例如,PL接口1410还可以耦合到ASIC、模拟/混合信号电路装置和/或其它电路或子系统。
在一个或多个实施例中,PL 310以与DPE 304不同的参考电压和不同的时钟速度操作。因此,在图15的示例中,PL接口1410包括多个移位和隔离电路1502以及多个异步FIFO存储器1504。信道中的每个信道包括移位隔离电路1502和异步FIFO存储器1504。信道的第一子集将数据从PL 310(和/或其它电路)传输到流交换器1406和/或流多路复用器/多路分解器1408。信道的第二子集将数据从流交换器1406和/或流多路复用器/多路分解器1408传输到PL 310和/或其它电路装置。
移位和隔离电路1502能够在不同电压的域之间接合。在这种情况下,移位和隔离电路1502能够提供在PL 310和/或其它电路装置的工作电压与DPE 304的工作电压之间转换的接口。异步FIFO存储器1504能够在两个不同的时钟域之间接合。在这种情况下,异步FIFO存储器1504能够提供在PL 310和/或其它电路装置的时钟速率与DPE304的时钟速率之间转换的接口。
在一个或多个实施例中,异步FIFO存储器1504具有对DPE阵列102的32位接口。异步FIFO存储器1504与移位和隔离电路1502之间的连接以及移位和隔离电路1502与PL 310之间的连接在宽度上是可编程的(例如,可配置的)。例如,异步FIFO存储器1504与移位和隔离电路1502之间的连接以及移位和隔离电路1502与PL 310之间的连接可以在宽度上被配置为32位、64位或128位。如所讨论的,PL接口1410可以借助于存储器映射开关1402将配置数据写入配置寄存器1436以实现所描述的位宽来配置。使用存储器映射的交换器1402,在PL 310的一侧上的异步FIFO存储器1504的一侧可以被配置为使用32位、64位或128位。本文提供的位宽是出于说明的目的。在其它实施例中,可以使用其它位宽。在任何情况下,可以根据加载到配置寄存器1436中的配置数据来更改用于各种部件描述的宽度。
图16示出了NoC流接口1414的示例实现。DPE阵列102具有使用DPE中的流接口经由NoC 308进行通信的两种通用方式。在一方面,DPE能够使用流交换器1406访问DMA引擎1412。DMA引擎1412能够将来自NoC 308的存储器映射的交易转换为数据流以发送到DPE,并且将来自DPE的数据流转换为存储器映射的交易以在NoC308之上发送。在另一方面,数据流可以被引导到NoC流接口1414。
在图16的示例中,NoC流接口1414包括将NoC 308耦合到流交换器1406和/或流多路复用器/多路分解器的多个信道。每个信道可以包括FIFO存储器以及放大电路或缩小电路。信道的第一子集将数据从NoC 308传输到流交换器1406和/或流多路复用器/多路分解器1408。信道的第二子集将数据从流交换器1406和/或流多路复用器/多路分解器1408传输到NoC 308。NoC流接口1414内的图16中所示的信道的特定数目是出于说明而非限制的目的。在其它实施例中,NoC流接口1414可以包括比图16中所示的信道更少或更多的信道。
在一个或多个实施例中,放大电路1608(在图16中简称为“US电路”)中的每个放大电路能够接收数据流并且增加接收的数据流的宽度。例如,每个放大电路1608可以接收32位数据流并且将128位数据流输出到对应的FIFO存储器1610。FIFO存储器1610中的每个FIFO存储器被耦合到仲裁和多路复用器电路1612。仲裁和多路复用器电路1612能够使用特定的仲裁方案或优先级(例如,循环或其它方式)在接收的数据流之间进行仲裁,以将结果输出数据流提供到NoC接口1426。仲裁和多路复用器电路1612能够在每个时钟周期处理和接受新的请求。可以在NoC 308本身内处理DPE 304和NoC308之间的时钟域交叉。在一个或多个其它实施例中,可以在SoC接口块104内处理DPE 304与NoC 308之间的时钟域交叉。例如,可以在NoC流接口1414中处理时钟域交叉。
多路分解器1602能够从NoC 308接收数据流。例如,多路分解器1602可以被耦合到NoC接口1426。出于说明的目的,来自NoC接口1426的数据流在宽度上可以是128位。如前所述,可以在NoC 308内和/或NoC流接口1414内处理DPE 304与NoC 308之间的时钟域交叉。多路分解器1602能够将接收的数据流转发到FIFO存储器1604中的一个FIFO存储器。多路分解器1602向其提供数据流的特定FIFO存储器1604可以在数据流本身内被编码。FIFO存储器1604被耦合到缩小电路1606(在图16中简称为“DS电路”)。在使用时分复用进行缓冲之后,缩小电路1606能够将接收的流缩小到较小的宽度。例如,缩小电路1606可以将流从128位宽度缩小到32位宽度。
如图所示,根据使用的SoC接口块104的图块的特定架构,缩小电路1606和放大电路1608被耦合到流交换器1406或流多路复用器/多路分解器1408。提供图16是为了说明而非限制的目的。部件的顺序和/或连通性在信道中(例如,放大/缩小电路和FIFO存储器可以改变)。
在一个或多个其它实施例中,如结合图15所述,PL接口1410可以包括如结合图16所述的放大电路和/或缩小电路。例如,在将数据从PL310(或其它电路)传输到流交换器1406和/或到流多路复用器/多路分解器1408的每个信道中可以包括缩小电路。在将数据从流交换器1406和/或流多路复用器/多路分解器1408传输到PL 310(或其它电路)的每个信道中可以包括放大电路。
在一个或多个其它实施例中,尽管被示出为独立元件,但是每个缩小电路1606可以与对应的FIFO存储器1604组合,例如,作为单个块或电路。类似地,每个放大电路1608可以与对应的FIFO存储器1610组合,例如,作为单个块或电路。
图17示出了DMA引擎1412的示例实现。在图17的示例中,DMA引擎1412包括DMA控制器1702。DMA控制器1702可以被划分为两个单独的模块或接口。每个模块能够独立于其它模块运行。DMA控制器1702可以包括映射到流接口(接口)1704的存储器和到存储器映射的接口(接口)1706的流。接口1704和接口1706中的每个接口可以包括两个或多个单独的信道。因此,DMA引擎1412能够经由接口1706从流交换器1406接收两个或多个输入流,并且经由接口1704向流交换器1406发送两个或多个输出流。DMA控制器1702还可以包括主存储器映射的接口1714。主存储器映射的接口1714将NoC 308耦合到接口1704和接口1706。
DMA引擎1412还可以包括硬件同步电路装置1710和缓冲器描述符寄存器文件1708。可以经由多路复用器1712访问硬件同步电路装置1710和缓冲器描述符寄存器文件1708。这样,可以经由控制接口外部地访问硬件同步电路装置1710和缓冲器描述符寄存器文件1708两者。这种控制接口的示例包括但不限于来自DPE的存储器映射的接口或控制流接口。DPE的控制流接口的示例是从DPE的核心输出的流接口。
硬件同步电路装置1710可以被用于将包括在DMA引擎1412中的多个信道和/或DMA引擎1412内的信道与轮询并驱动锁定请求的主接口同步。例如,主接口可以是PS 312或在PL 310内实现的设备。在另一个示例中,当锁定可用时,主接口还可以接收由DMA引擎1412内的硬件同步电路装置1710生成的中断。
可以由存储在缓冲器描述符寄存器文件1708内的缓冲器描述符定义DMA传输。接口1706能够基于缓冲器描述符中的信息来请求向NoC 308的读取传输。基于用于流交换器的配置,寄存器可以将从接口1704到流交换器1406的输出流配置为分组交换或电路交换。
图18示出了用于多个DPE的示例架构。示例架构示出了可以被包括在DPE阵列102中的DPE 304。图18的示例架构可以被称为棋盘架构。图18的示例架构允许DPE的核心使用共享的存储器与其它DPE的多达八个其它核心进行通信(例如,总共九个核心经由共享的存储器通信)。在图18的示例中,每个DPE 304可以如结合图6、7和8所描述地实现。这样,每个核心602能够访问四个不同的存储器模块604。每个存储器604可以由多达四个不同的核心602访问。
如图所示,DPE阵列102包括行1、2、3、4和5。行1-5中的每个行包括三个DPE 304。图18中所示的每个行中的DPE 304的特定数目和行的数目是出于说明而非限制的目的。参照行1、3和5,这些行中的每个DPE的核心位于存储器模块的左侧。参考行2和4,这些行中的每个DPE的核心位于存储器模块的右侧。实际上,与行1、3和5中的DPE的定向相比,行2和4中的DPE的定向是水平反转或水平翻转的。如每个交替的行中所示,DPE的定向反转。
在图18的示例中,DPE 304在列中对准。但是,相邻的行中的核心和存储器模块未在列中对准。图18的架构是异构架构的示例,其中基于DPE位于的特定行来不同地实现DPE。由于DPE 304的水平倒置,相邻的行中的核心未对准。相邻的行中的核心彼此偏移。类似地,相邻的行中的存储器模块未对准。相邻的行中的存储器模块彼此偏移。然而,交替行中的核心与交替行中的存储器模块对准。例如,行1、3和5的核心和存储器模块(例如,在列中)竖直地对准。类似地,行2和4的核心和存储器模块(例如,在列中)竖直地对准。
出于说明的目的,DPE 304-2、304-4、304-5、304-7、304-8、304-9、304-10、304-11和304-14的核心被视为组的一部分并且能够经由共享的存储器进行通信。箭头示出了图18的示例架构如何使用共享的存储器来支持与不同的DPE中的多达八个其它核心通信的核心。例如,参考DPE 304-8,核心602-8能够访问存储器模块604-11、604-7、604-8和604-5。通过存储器模块604-11、核心602-8能够与核心602-14、602-10和602-11通信。通过存储器模块604-7,核心602-8能够与核心602-7、602-4和602-10通信。通过存储器模块604-8,核心602-8能够与核心602-9、602-11和602-5通信。通过存储器模块604-5,核心602-8能够与核心602-4、602-5和602-2通信。
在图18的示例中,除了核心602-8之外,该组中有四个不同的核心,它们能够访问该组的共享的存储器模块的两个不同的存储器模块。其余的四个内核仅共享该组的共享的存储器模块的一个存储器模块。该组的共享的存储器模块包括存储器模块604-5、604-7、604-8和604-11。例如,核心602-10、602-11、602-4和602-5中的每个核心能够访问两个不同的存储器模块。核心602-10能够访问存储器模块604-11和604-7。核心602-11能够访问存储器模块604-11和604-8。核心602-4能够访问存储器模块604-5和604-7。核心602-5能够访问存储器模块604-5和604-8。
在图18的示例中,总共九个DPE的多达九个核心能够通过共享的存储器通信,而无需利用DPE阵列102的DPE互连网络。如所讨论的,核心602-8能够将存储器模块604-11、604-7、604-5和604-8视为统一的存储器空间。
核心602-14、602-7、602-9和602-2仅能够访问组的共享的存储器的一个存储器模块。核心602-14能够访问存储器模块604-11。核心602-7能够访问存储器模块604-7。核心602-9能够访问存储器模块604-8。核心602-2能够访问存储器模块604-5。
如前所述,在其它实施例中,其中为每个存储器模块提供不止四个存储器接口,核心可能使用图18的架构经由共享的存储器与不止八个其它核心通信。
在一个或多个其它实施例中,DPE的某些行和/或列可以相对于其它行偏移。例如,行2和4可以从与行1、3和/或5的起始不对准的位置开始。例如,行2和4可以相对于行1、3和/或5的起始向右移位。
图19示出了用于多个DPE的另一个示例架构。示例架构示出了可以被包括在DPE阵列102中的DPE 304。图19中示出的示例架构可以被称为网格架构。图19的示例架构允许DPE的核心使用共享的存储器与其它DPE的多达十个其它的核心通信(例如,总共11个核心经由共享的存储区通信)。在图19的示例中,每个DPE 304可以如结合图6、7和8所描述地实现。这样,每个核心602能够访问四个不同的存储器模块604。每个存储器模块604可以由多达四个不同的核心602访问。
如图所示,DPE阵列102包括行1、2、3、4和5。行1-5中的每个行包括三个DPE 304。图19中所示的每个行中的DPE 304的特定数目和行的数目是出于说明而非限制的目的。在图19的示例中,DPE304在列中竖直地对准。行1、2、3、4和5中的每个行具有与DPE的每个其它行对准的相同的起始点。另外,在每个相应的DPE 304内的核心602和存储器模块604的布置是相同的。换句话说,核心602被竖直地对准。类似地,存储器模块604被竖直地对准。
为了说明的目的,DPE 304-2、304-4、304-5、304-6、304-7、304-8、304-9、304-10、304-11、304-12和304-14的核心被视为组的一部分并且能够经由共享的存储器通信。箭头示出了图19的示例架构如何使用共享的存储器来支持核心与不同的DPE中的多达十个其它核心通信。例如,参考DPE 304-8,核心602-8能够访问存储器模块604-11、604-8、604-5和604-9。通过存储器模块604-11,核心602-8能够与核心602-14、602-10和602-11通信。通过存储器模块604-8,核心602-8能够与核心602-7、602-11和602-5通信。通过存储器模块604-5,核心602-8能够与核心602-4、602-10和602-2通信。通过存储器模块604-9,核心602-8能够与核心602-12、602-9和602-6通信。
在图19的示例中,除了核心602-8之外,组核心中的两个不同的核心能够访问该组的共享的存储器模块的两个存储器模块。该组的共享的存储器模块包括存储器模块604-5、604-8、604-9和604-11。该组的剩余八个核心共享仅一个存储器模块。例如,核心602-11和602-5中的每个核心能够访问两个不同的存储器模块。核心602-11能够访问存储器模块604-11和604-8。存储器模块604-14不被视为共享的存储器的组的一部分,因为存储器模块604-14不能够由核心604-8访问。核心602-5能够访问存储器模块604-5和604-8。存储器模块604-2不被视为共享的存储器模块的组的一部分,因为存储器模块604-2不能够由核心602-8访问。
核心602-14、602-10、602-12、602-7、602-9、602-4、602-6和602-2仅能够访问组的共享的存储器模块的一个存储器模块。核心602-14能够访问存储器模块604-11。核心602-10能够访问存储器模块604-11。核心602-12能够访问存储器模块604-9。核心602-7能够访问存储器模块604-8。核心602-9能够访问存储器模块604-9。核心602-4能够访问存储器模块604-5。核心602-6能够访问存储器模块604-9。核心602-2能够访问存储器模块604-5。
在图19的示例中,11个DPE的多达11个核心能够通过共享的存储器通信,而无需利用DPE阵列102的DPE互连网络。如所讨论的,核心602-8能够将存储器模块604-11、604-9、604-5和604-8视为统一的存储器空间。
如前所述,在其它实施例中,其中为每个存储器模块提供不止四个存储器接口,核心可能使用图19的架构经由共享的存储器与不止10个其它核心通信。
图20示出了配置DPE阵列的示例方法2000。方法2000被提供用于说明的目的而不旨在限制本公开内描述的发明性布置。
在框2002中,用于DPE阵列的配置数据被加载到设备中。可以从各种不同源中的任何一个源提供配置数据,无论是计算机系统(例如,主机)、片外存储器还是其它合适的源。
在框2004中,配置数据被提供给SoC接口块。在特定实施例中,配置数据经由NoC提供。SoC接口块的图块能够接收配置数据并且将配置数据转换为存储器映射的数据,可以将存储器映射的数据提供给图块内包含的存储器映射的交换器。
在框2006中,配置数据在SoC接口块的图块之间传播到特定图块,特定图块用作到目标DPE的接口或提供对目标DPE的接口。目标DPE是配置数据被寻址的DPE。例如,配置数据包括指定应当将配置数据的不同部分引导到的特定DPE的地址。SoC接口块的图块内的存储器映射的交换器能够将配置数据的不同部分传播到特定图块,特定图块用作针对目标DPE(例如,包括目标DPE的DPE的子集)的接口。
在框2008中,用作针对目标DPE的接口的SoC接口块的图块能够将针对目标DPE的配置数据的部分引导到目标DPE。例如,提供接口到一个或多个目标DPE的图块能够将配置数据的部分引导到图块向其提供接口的DPE的子集中。如上所述,DPE的子集包括一个或多个目标DPE。由于每个图块接收配置数据时,图块能够确定是否将配置数据的任何部分寻址到图块向其提供接口的DPE的相同子集中的其它DPE。图块将寻址到DPE的子集中的DPE的任何配置数据引导到这种DPE。
在框2010中,配置数据被加载到目标DPE中以编程DPE包括在其中的元件。例如,配置数据被加载到配置寄存器中以编程目标DPE的元件,诸如:流接口、核心(例如,流接口、级联接口、核心接口)、存储器模块(例如,DMA引擎、存储器接口、仲裁器等)、广播事件交换器和/或广播逻辑。配置数据还可以包括可执行的程序代码,程序代码可以被加载到核心的程序存储器中和/或被加载到存储器模块的存储器体中。
应当理解,接收的配置数据还可以包括寻址到SoC接口块104的图块中的一个或多个图块或所有图块的部分。在那种情况下,相应的图块内的存储器映射的交换器能够将配置数据传输到适当的(例如,目标)图块,提取这种数据,并且将这种数据写入相应的图块内的适当的配置寄存器。
图21示出了DPE阵列的操作的示例方法2100。方法2100被提供用于说明的目的而不旨在限制本公开内描述的发明性布置。方法2100在DPE和/或SoC接口块已经加载配置数据的状态下开始。为了说明的目的,参考了图3。
在框2102中,DPE 304-15(例如,“第一DPE”)的核心602-15(例如,“第一核心”)生成数据。生成的数据可以是应用数据。例如,核心602-15可以对存储在能够由核心访问的存储器模块中的数据进行操作。存储器模块可以在DPE 304-15中或在如本文所述的不同的DPE中。例如,可以已经使用SoC接口块104从设备的另一个DPE和/或另一个子系统接收数据。
在框2104中,核心602-15将数据存储在DPE 304-15的存储器模块604-15中。在框2106中,相邻的DPE(例如,DPE 304-25、304-16和/或304-5)中的一个或多个核心从DPE304-15的存储器模块604-15读取数据。相邻的DPE中的核心可以在进一步的计算中利用从存储器模块604-15读取的数据。
在框2108中,DPE 304-15可选地经由流接口将数据发送到一个或多个其它DPE。向其发送数据的DPE可以是不相邻的DPE。例如,DPE 304-15能够从存储器模块604-15将数据发送到一个或多个其它DPE,诸如:DPE 304-35、304-36等。如所讨论的,在一个或多个实施例中,DPE 304-15能够经由DPE阵列102的DPE互连网络中的流接口广播和/或多播应用数据。在另一个示例中,发送到不同的DPE的数据可以是数据的不同部分,其中数据的每个不同部分旨在用于不同的目标DPE。尽管在图21中未示出,但是核心602-15还能够使用级联接口和/或使用流交换器直接从核心将数据发送到DPE阵列102的另一个核心和/或DPE。
在框2110中,核心602-15可选地经由级联接口将数据发送到相邻的核心和/或从相邻的核心接收数据。该数据可以是应用数据。例如,核心602-15能够经由级联接口直接从DPE 304-14的核心602-14接收数据和/或直接将数据发送到DPE 304-16的核心602-16。
在框2112中,DPE 304-15可选地经由SoC接口块将数据发送到一个或多个子系统和/或从一个或多个子系统接收数据。数据可以是应用数据。例如,DPE 304-15能够将数据经由NoC 308发送到PS 312,发送到PL 310中实现的电路,经由PL 310发送到选择的硬连线电路块,和/或发送到其它外部子系统(诸如,外部存储器)。类似地,DPE 304-15能够经由SoC接口块从这种其它子系统接收应用数据。
图22示出了DPE阵列的操作的另一个示例方法2200。方法2200被提供用于说明的目的而非旨在限制本发明内描述的发明性布置。方法2200在DPE阵列已经被加载有配置数据的状态下开始。
在框2202中,第一核心(例如,第一DPE内的核心)从硬件同步电路装置请求对存储器的目标区域的锁定。例如,第一核心能够从硬件同步电路装置请求用于位于第一DPE(例如,与第一核心相同的DPE)中的存储器模块内的存储器的目标区域的锁定,或请求用于位于与第一核心不同的DPE中的存储器模块内的存储器的目标区域的锁定。第一核心能够从位于与要访问的存储器的目标区域相同的DPE中的特定硬件同步电路装置装置请求锁定。
在框2204中,第一核心获取请求锁定。例如,硬件同步电路装置向第一核心授予对于存储器的目标区域的请求锁定。
在框2206中,响应于获取的锁定,第一核心将数据写入存储器中的目标区域。例如,如果存储器的目标区域在第一DPE中,则第一核心能够经由位于第一DPE内的存储器模块内的存储器接口将数据写入存储器中的目标区域。在另一个示例中,在存储器的目标区域位于与第一核心不同的DPE中的情况下,第一核心能够使用本文描述的各种技术将数据写入存储器的目标区域。例如,第一核心可以经由结合图10描述的机制中的任何一种机制将数据写入存储器的目标区域。
在框2208中,第一核心释放对存储器的目标区域上的锁定。在框2210中,第二核心请求对包含由第一核心写入的数据的存储器的目标区域上的锁定。第二核心可以位于与存储器的目标区域相同的DPE中,或者位于与存储器的目标区域不同的DPE中。第二核心从向第一核心授予锁定的相同的硬件同步电路装置请求锁定。在框2212中,第二核心从硬件同步电路装置获取锁定。硬件同步电路装置将锁定授予第二核心。在框2214中,第二核心能够访问来自存储器的目标区域的数据并且利用该数据用于处理。在框2216中,例如,当不再需要访问存储器的目标区域时,第二核心释放对存储器的目标区域的锁定。
结合访问存储器的区域来描述图22的示例。在特定实施例中,第一核心能够将数据直接写入存储器的目标区域。在其它实施例中,第一核心能够将数据从存储器的源区域(例如,在第一DPE中)移动到存储器的目标区域(例如,位于第二或不同的DPE中)。在那种情况下,第一核心在存储器的源区域和存储器的目标区域上获取锁定,以便执行数据传输。
在其它实施例中,第一核心能够获取针对第二核心的锁定,以便停顿第二核心的操作,然后释放该锁定以允许第二核心的操作继续。例如,除了获取在存储器的目标区域上的锁定之外,第一核心还可以获取在第二核心上的锁定,以便在数据被写入到由第二核心使用的存储器的目标区域时停顿第二核心的操作。一旦第一核心完成了数据写入,则第一核心可以释放存储器的目标区域上的锁定以及第二核心上的锁定,从而一旦第二核心获取了存储器的目标区域上的锁定,则允许第二核心对数据进行操作。
在又一其它实施例中,如图10C所示,第一核心能够开始将数据从相同的DPE中的存储器模块例如经由存储器模块中的DMA引擎直接地传输到另一个核心。
图23示出了DPE阵列的操作的另一个示例方法。方法2300被提供用于说明性的目的而非旨在限制本公开内描述的发明性布置。方法2300在DPE阵列已经被加载有配置数据的状态下开始。
在框2302中,第一核心将数据放入包含在其中的累积寄存器中。例如,第一核心可能正在执行计算,其中计算的一些部分(无论中间结果还是最终结果)被直接地提供给另一个核心。在那种情况下,第一核心能够将要发送到第二核心的数据加载到包含在其中的累积寄存器内。
在框2304中,第一核心将来自包含在其中的累积寄存器的数据从第一核心的级联接口输出发送到第二核心。在框2306中,第二核心在第二核心的级联接口输入上从第一核心接收数据。然后第二核心可以处理数据或将数据存储在存储器中。
在一个或多个实施例中,可以通过配置数据的加载来控制核心对级联接口的利用。例如,可以根据基于配置数据的特定应用的需要在核心的连续对之间启用或禁用级联接口。在特定实施例中,在启用级联接口的情况下,可以基于被加载到核心的程序存储器中的程序代码来控制级联接口的使用。在其它情况下,可以通过专用电路装置以及被包含在核心中的配置寄存器来控制级联接口的使用。
图24示出了DPE阵列的操作的另一个示例方法。方法2400被提供用于说明的目的而不旨在限制本公开内描述的发明性布置。方法2400在DPE阵列已经加载配置数据的状态下开始。
在框2402中,第一DPE内的事件逻辑局部地检测第一DPE内的一个或多个事件。可以从核心、从存储器模块或从核心和存储器模块两者检测事件。在框2404中,第一DPE内的事件广播电路装置基于加载到第一DPE中的配置数据广播事件。广播电路装置能够广播在框2402中生成的、事件中的选择的事件。事件广播电路装置还能够广播可以从DPE阵列102内的一个或多个其它DPE接收的选择的事件。
在框2406中,来自DPE的事件被传播到SoC接口块内的图块。例如,事件可以通过DPE在四个基本方向中的每个方向上以由配置数据确定的模式和/或路由传播。特定DPE内的广播电路装置可以被配置为将事件向下传播到SoC接口块中的图块。
在框2408中,SoC接口块的图块内的事件逻辑可选地生成事件。在框2410中,SoC接口块的图块可选地将事件广播到SoC接口块内的其它图块。SoC接口块的图块内的广播电路装置能够将利用图块自身生成的事件和/或从其它源(例如,无论SoC接口块的其它图块还是DPE)接收的事件中的选择的事件广播到SoC接口块的其它图块。
在框2412中,SoC接口块的图块可选地生成一个或多个中断。例如,中断可以由中断处理器1434生成。响应于接收的特定事件、事件的组合和/或随时间变化的事件的序列,中断处理器能够生成一个或多个中断。中断处理器可以将生成的中断发送到其它电路(诸如,PS 312)和/或发送到在PL 310内实现的电路。
在框2414中,SoC接口块的图块可选地将事件发送到一个或多个其它电路。例如,CDT电路1420能够将事件分组并且将事件从SoC接口块的图块发送到PS 312、到PL 310内的电路、到外部存储器、或到具有SoC的另一个目的地。
在一个或多个实施例中,PS 312能够响应由SoC接口块104的图块生成的中断。例如,PS 312能够响应于接收的特定中断复位DPE阵列102。在另一个示例中,PS 312能够响应于特定中断重新配置DPE阵列102或DPE阵列102的部分(例如,执行部分重新配置)。在另一个示例中,PS 312能够采取其它动作,诸如,将新数据加载到DPE的不同存储器模块中以供这种DPE内的核心使用。
在图24的示例中,PS 312响应于中断而执行操作。在其它实施例中,PS 312可以用作用于DPE阵列102的全局控制器。PS 312能够控制应用参数,应用参数存储在存储器模块中并且在运行期间由DPE阵列102的一个或多个DPE(例如,核心)使用。作为说明性和非限制性示例,一个或多个DPE可以用作实现滤波器的内核。在那种情况下,PS 312能够执行程序代码,程序代码允许PS 312在DPE阵列102的运行期间(例如,在运行时动态地)计算和/或修改滤波器的系数。PS 312可以响应于在SoC内检测的特定条件和/或信号来计算和/或更新系数。例如,PS 312能够响应于一些检测的条件计算用于滤波器的新的系数和/或将这种系数写入应用存储器(例如,写入一个或多个存储器模块)。可能导致PS 312将数据(诸如,系数)写入存储器模块的条件的示例包括但不限于:从DPE阵列102接收特定数据,从SoC接口块接收中断,从DPE阵列102接收事件数据,从SoC外部的源接收信号,从SoC内部接收另一个信号,和/或从SoC内部的源或从SoC的外部的源接收新的和/或更新的系数。PS 312能够计算新的系数和/或将新的系数写入应用数据,例如由一个或多个核心利用的存储器模块。
在另一个实施例中,PS 312能够执行调试器应用,调试器应用能够执行诸如DPE的启动、停止和/或单步执行的动作。PS 312可以经由NoC 308控制DPE的启动、停止和/或单步执行。在其它示例中,在PL 310中实现的电路也能够使用调试操作来控制DPE的操作。
为了解释的目的,阐述了特定的术语以提供对本文公开的各种发明概念的透彻理解。然而,本文使用的术语仅出于描述本发明布置的特定方面的目的,而不旨在限制。
如本文定义的,除非上下文另外明确地指出,否则单数形式“一”、“一个”和“该”也旨在包括复数形式。
如本文定义的,除非上下文另外明确地指出,否则术语“至少一个”、“一个或多个”和“和/或”是开放式的表达式,该表达式在操作上是结合的和分离的两者。例如,表达式“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一起。
如本文定义的,术语“自动地”是指没有人为干预。
如本文定义的,取决于上下文,术语“如果”是指“当……时”或“在……时”或“响应于”或“响应”。因此,取决于上下文,短语“如果确定”或“如果检测到[所陈述的条件或事件]”可以被解释为表示“在确定时”或“响应于确定”或“在检测[所陈述的条件或事件]时”或“响应于检测[所陈述的条件或事件]”或“响应检测[所陈述的条件或事件]”。
如本文定义的,术语“响应于”和如上所述的类似语言,例如“如果”、“当……时”或“在……时”是指容易对动作或事件做出响应或做出反应。响应或反应是自动执行的。因此,如果“响应”第一动作而执行第二动作,则在第一动作的发生与第二动作的发生之间存在因果关系。术语“响应”指示因果关系。
如本文定义的,术语“一个实施例”、“实施例”、“一个或多个实施例”、“特定实施例”或类似的语言是指与被包括在本公开内描述的至少一个实施例中的实施例结合的特定特征、结构或特性。因此,贯穿本公开的短语“在一个实施例中”、“在实施例中”、“在一个或多个实施例中”、“在特定实施例中”和类似语言的出现可以但不一定都指相同的实施例。在本公开内,术语“实施例”和“布置”可互换使用。
如本文定义的,术语“基本上”是指不需要精确地实现所列举的特性、参数或值,但是,偏差或变化(包括例如公差、测量误差、测量精度限制以及本领域技术人员已知的其它因素),可能以不排除该特性旨在提供的效果的量而发生。
本文可以使用术语第一、第二等来描述各种元件。这些元件不应受这些术语的限制,因为除非另有说明或上下文另有明确地说明,否则这些术语仅被用于将一个元件与另一个元件区分开。
附图中的流程图和框图示出了根据本发明的布置的各个方面的系统、设备和/或方法的可能实现的架构、功能和操作。在一些备选的实现中,框中指出的操作可以不按图中指出的顺序发生。例如,取决于所涉及的功能,连续示出的两个框可以基本上同时执行或者有时可以以相反的顺序执行。在其它示例中,通常可以以增加的数字顺序来执行框,而在其它示例中,可以以变化的顺序来执行一个或多个框,并且在随后的或不立即跟随的其它框中将结果存储和利用。
可以在下面的权利要求中找到的所有装置或步骤加上功能元件的对应的结构、材料、动作和等同物旨在包括用于执行与具体要求保护的其它要求保护的元件组合的功能的任何结构、材料或动作。
在一个或多个实施例中,设备可以包括多个DPE。每个DPE可以包括核心和存储器模块。每个核心可以被配置为访问相同的DPE中的存储器模块以及多个DPE中的至少一个其它DPE内的存储器模块。
在一方面,每个核心可以被配置为访问多个相邻的DPE的存储器模块。
在另一方面,多个DPE的核心可以被直接地耦合。
在另一方面,多个DPE中的每个DPE是硬连线的和可编程的电路块。
在另一方面,每个DPE可以包括互连电路装置,互连电路装置包括被配置为与从多个DPE选择的一个或多个DPE通信的流交换器。流交换器可以是可编程的,以与一个或多个选择的DPE(例如,其它DPE)通信。
设备还可以包括子系统和被配置将多个DPE耦合到设备的子系统的SoC接口块。在一个方面中,子系统包括可编程逻辑。在另一个方面中,子系统包括被配置为执行程序代码的处理器。在又一个方面中,子系统包括专用集成电路和/或模拟/混合信号电路装置装置。
在另一个方面中,流交换器被耦合到SoC接口块并且被配置为与设备的子系统通信。
在另一个方面中,每个DPE的互连电路装置可以包括耦合到SoC接口块的存储器映射的交换器,其中存储器映射的交换器被配置为从SoC接口块通信用于编程DPE的配置数据。存储器映射的交换器可以被配置为与SoC接口块通信控制数据或调试数据中的至少一个数据。
在另一个方面中,多个DPE可以由事件广播网络互连。
在另一个方面中,SoC接口块可以被配置为在子系统与多个DPE的事件广播网络之间交换事件。
在一个或多个实施例中,方法可以包括第一数据处理引擎的第一核心生成数据,第一核心将数据写入第一数据处理引擎内的第一存储器模块,并且第二数据处理引擎的第二核心从第一存储器模块读取数据。
在一个方面中,方法可以包括第一DPE和第二DPE,第一DPE和第二DPE是相邻的DPE。
在另一个方面中,方法可以包括第一核心,第一核心能够通过级联接口将进一步的应用数据提供给第二核心。
在另一个方面中,方法可以包括第一核心,第一核心能够通过流交换器将进一步的应用数据提供给第三DPE。
在另一个方面中,方法可以包括编程第一DPE以与包括第二DPE的选择的其它DPE通信。
在一个或多个实施例中,设备可以包括多个数据处理引擎、子系统和被耦合到多个数据处理引擎和子系统的SoC接口块。SoC接口块可以被配置为在子系统与多个数据处理引擎之间交换数据。
在一个方面中,子系统包括可编程逻辑。在另一个方面中,子系统包括被配置为执行程序代码的处理器。在另一个方面中,子系统包括专用集成电路和/或模拟/混合信号电路装置。
在另一个方面中,SoC接口块包括多个图块,其中每个图块被配置为与多个DPE的子集通信。
在另一个方面中,每个图块可以包括存储器映射的交换器,存储器映射的交换器被配置为将配置数据的第一部分提供给至少一个相邻的图块,并且被配置为将配置数据的第二部分提供给多个DPE的子集中的至少一个子集。
在另一个方面中,每个图块可以包括流交换器,流交换器被配置为将第一数据提供给至少一个相邻的图块并且被配置为将第二数据提供给多个DPE中的至少一个DPE。
在另一个方面中,每个图块可以包括事件广播电路装置,事件广播电路装置被配置为接收在图块内生成的事件和来自图块外部的电路装置的事件,其中事件广播电路装置是可编程的,以将事件中选择的事件提供给选择的目的地。
在另一个方面中,SoC接口块可以包括控制、调试和跟踪电路,控制、调试和跟踪电路被配置为将选择的事件分组并且将经分组的选择的事件提供给子系统。
在另一个方面中,SoC接口块可以包括将事件广播电路装置耦合到子系统的接口。
在一个或多个实施例中,用于SoC接口块的图块可以包括存储器映射的交换器,存储器映射的交换器被配置为将配置数据的第一部分提供给相邻的图块,并且被配置为将配置数据的第二部分提供给多个数据处理引擎中的数据处理引擎。图块可以包括流交换器,流交换器被配置为将第一数据提供给至少一个相邻的图块并且被配置为将第二数据提供给多个数据处理引擎中的数据处理引擎。图块可以包括事件广播电路装置,事件广播电路装置被配置为接收在图块内生成的事件和来自图块外部电路电路的事件,其中事件广播电路装置是可编程的,以将事件中的选择的事件提供给选择的目的地。图块可以包括接口电路装置,接口电路装置将存储器映射的交换器、流交换器和事件广播电路装置耦合到包括图块的设备的子系统。
在一个方面中,子系统包括可编程逻辑。在另一个方面中,子系统包括被配置为执行程序代码的处理器。在另一个方面中,子系统包括专用集成电路和/或模拟/混合信号电路装置。
在另一个方面中,事件广播电路装置是可编程的,以将图块内生成的事件或从多个DPE中的至少一个DPE接收的事件提供给子系统。
在另一个方面中,事件广播电路装置是可编程的,以将子系统内生成的事件提供给至少一个相邻的图块或提供给多个DPE中的至少一个DPE。
在另一个方面中,图块可以包括中断处理器,中断处理器被配置为基于从事件广播电路装置接收的事件选择性地向设备的处理器生成中断。
在另一个方面中,图块可以包括时钟生成电路,时钟生成电路被配置为生成被分配到多个DPE的时钟信号。
在另一个方面中,接口电路装置可以包括流多路复用器/多路分解器、可编程逻辑接口、直接存储器访问引擎和NoC流接口。流多路复用器/多路分解器可以将流交换器耦合到可编程逻辑接口、直接存储器访问引擎和片上网络流接口。流多路复用器/多路分解器可以是可编程的,以在流交换器、可编程逻辑接口、直接存储器访问引擎和NoC流接口之间路由数据。
在另一个方面中,图块可以包括耦合到DMA引擎和NoC流接口的交换器,其中交换器选择性地将DMA引擎或NoC流接口耦合到NoC。图块还可以包括将NoC与存储器映射的交换器耦合的桥接电路。桥接电路被配置为将来自NoC的数据转换为存储器映射的交换器可用的格式。
在一个或多个实施例中,设备可以包括多个数据处理引擎。数据处理引擎中的每个数据处理引擎可以包括核心和存储器模块。多个数据处理器引擎可以被组织在多个行中。每个核心可以被配置为通过对多个数据处理引擎中的其它相邻的数据处理引擎的存储器模块的共享的访问来与相邻的数据处理引擎通信。
在一方面,每个DPE的存储器模块包括存储器和到存储器的多个存储器接口。多个存储器接口中的第一存储器接口可以被耦合到相同的DPE内的核心,并且多个存储器接口中的每个其它存储器接口可以被耦合到多个DPE中的不同的DPE的核心。
在另一个方面中,多个DPE可以还被组织在多个列中,其中列中的多个DPE的核心被对准并且列中的多个DPE的存储器模块被对准。
在另一个方面中,选择的DPE的存储器模块可以包括:第一存储器接口,被耦合到紧接在选择的DPE上方的DPE的核心;第二存储器接口,被耦合到选择的DPE内的核心;第三存储器接口,被耦合到紧邻选择的DPE的DPE的核心;以及第四存储器接口,被耦合到紧接在选择的DPE下方的DPE的核心。
在另一个方面中,选择的DPE被配置为经由对存储器模块的共享的访问与多个DPE中的至少十个DPE的组通信。
在另一个方面中,该组中的至少两个DPE被配置为访问多个DPE中的至少十个DPE的组的不止一个存储器模块。
在另一个方面中,DPE的多个行可以包括第一行和第二行,第一行包括多个DPE的第一子集,第二行包括DPE的第二子集,其中第二行的每个DPE的定向相对于第一行的每个DPE的定向而水平地反转。
在另一个方面中,选择的DPE的存储器模块可以包括:第一存储器接口,被耦合到紧接在选择的DPE上方的DPE的核心;第二存储器接口,被耦合到选择的DPE内的核心;第三存储器接口,被耦合到紧邻选择的DPE的DPE的核心;以及第四存储器接口,被耦合到紧接在选择的DPE下方的DPE的核心。
在另一个方面中,选择的DPE可以被配置为经由对存储器模块的共享的访问与多个DPE中的至少八个DPE的组通信。
在另一方面中,其中组的至少四个DPE被配置为访问所述多个DPE中的至少八个DPE的组的不止一个存储器模块。
在一个或多个实施例中,设备可以包括多个数据处理引擎。数据处理引擎中的每个数据处理引擎可以包括:存储器池,存储器池具有多个存储器体;多个核心,各自被耦合到存储器池并且被配置为访问多个存储器体;存储器映射的交换器,存储器映射的交换器被耦合到存储器池和至少一个相邻的数据处理引擎的存储器映射的交换器;以及流交换器,流交换器被耦合到多个核心中的每个核心并且被耦合到至少一个相邻的数据处理引擎的流交换器。
在一方面,存储器池可以包括交叉开关和接口,交叉开关被耦合到多个存储器体中的每个存储器体,接口被耦合到多个核心中的每个核心以及被耦合到交叉开关。
在另一个方面中,每个DPE可以包括耦合到存储器池和流交换器的直接存储器访问引擎,其中直接存储器访问引擎被配置为将来自存储器池的数据提供给流交换器并且将来自流交换器的数据写入存储器池。
在另一个方面中,存储器池可以包括被耦合到交叉开关和直接存储器访问引擎的另外的接口。
在另一个方面中,多个核心中的每个核心具有对多个存储器体的共享的访问。
在另一个方面中,在每个DPE内,存储器映射的交换器可以被配置为接收用于编程DPE的配置数据。
在另一个方面中,流交换器是可编程的,以基于配置数据与多个DPE中的不同的DPE建立连接。
在另一个方面中,每个图块内的多个核心可以被直接地耦合。
在另一个方面中,在每个DPE内,多个核心中的第一核心可以被直接地耦合到第一相邻的DPE中的核心,并且多个核心中的最后一个核心被直接地耦合到第二相邻的DPE中的核心。
在另一个方面中,多个核心中的每个核心可以能够被编程以被停用。
本文提供的发明性布置的描述是出于说明的目的,而非旨在穷举性的或限于所公开的形式和示例。本文使用的术语被选择用于解释发明性布置的原理,对市场上发现的技术的实际应用或对技术的改进,和/或使本领域的其他普通技术人员能够理解本文公开的发明性布置。在不脱离所描述的发明性布置的范围和精神的情况下,修改和变化对本领域普通技术人员而言是显而易见的。因此,应参考所附权利要求,而不是前面的公开,以指示这种特征和实现的范围。