首页> 中国专利> 异构可编程设备的硬件-软件设计流程

异构可编程设备的硬件-软件设计流程

摘要

对于指定了以下项的应用:用于在设备的数据处理引擎(DPE)阵列内实现的软件部分、和用于在设备的可编程逻辑(PL)内实现的硬件部分,生成应用的逻辑架构和第一接口解决方案,该第一接口解决方案指定逻辑资源到DPE阵列与可编程逻辑之间的接口电路块的硬件的映射。基于逻辑架构和第一接口解决方案构建硬件部分的框图。在框图上执行实现流程。编译应用的软件部分以在DPE阵列的一个或多个DPE中实现。

著录项

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2022-05-06

    实质审查的生效 IPC(主分类):G06F 7/544 专利申请号:2020800358119 申请日:20200511

    实质审查的生效

说明书

本专利文件的公开内容的一部分包含受版权保护的材料。版权所有者不反对任何人对专利文件或专利公开的传真复制,因为它出现在专利商标局专利文件或记录中,但除此之外保留所有版权。

技术领域

本公开涉及集成电路(IC),并且更具体地涉及实现包括异构可编程IC内的硬件部分和软件部分的应用。

背景技术

可编程集成电路(IC)是指包括可编程逻辑的一种IC。可编程IC的一个示例是现场可编程门阵列(FPGA)。FPGA的特征在于包括可编程电路块。可编程电路块的示例包括但不限于:输入/输出块(IOB)、可配置逻辑块(CLB)、专用随机存取存储器块(BRAM)、数字信号处理块(DSP)、处理器、时钟管理器和延迟锁定环路(DLL)。

现代可编程IC已经发展为包括与一个或多个其他子系统结合的可编程逻辑。例如,一些可编程IC已经发展为包括可编程逻辑和硬连线处理器系统两者的片上系统或“SoC”。其他种类的可编程IC包括附加和/或不同子系统。可编程IC中包括的子系统的日益多样化给在这些器件中实现应用提出了挑战。具有基于硬件的子系统和基于软件的子系统(例如,可编程逻辑电路系统和处理器)两者的IC的常规设计流程,依赖于硬件设计人员首先为IC创建单片硬件设计。硬件设计被用作随后创建、编译和执行软件设计的平台。这种方法通常具有过度的局限性。

在其他情况下,软件和硬件设计过程可以解耦。然而,硬件和软件设计过程的解耦并没有提供以下项的指示:软件要求或IC中各个子系统之间的接口的布局。因此,硬件和软件设计过程可能无法集中在IC中应用的可行实现上。

发明内容

在一个方面,一种方法可以包括:对于指定用于在设备的数据处理引擎(DPE)阵列内实现的软件部分、以及用于在设备的可编程逻辑(PL)内实现的硬件部分的应用,使用处理器生成应用的逻辑架构和第一接口解决方案,该第一接口解决方案指定逻辑资源到DPE阵列与可编程逻辑之间的接口电路块的硬件的映射。该方法可以包括基于逻辑架构和第一接口解决方案构建硬件部分的框图,并且使用处理器在框图上执行实现流程。该方法可以包括使用处理器编译应用的软件部分以在DPE阵列的一个或多个DPE中实现。

在另一方面,一种系统包括被配置为发起操作的处理器。该操作可以包括:对于指定用于在设备的DPE阵列内实现的软件部分和用于在设备的PL内实现的硬件部分的应用,生成应用的逻辑架构和第一接口解决方案,该第一接口解决方案指定逻辑资源到DPE阵列与PL之间的接口电路块的硬件的映射。该操作可以包括基于逻辑架构和第一接口解决方案构建硬件部分的框图,在框图上执行实现流程,并且编译应用的软件部分用以在DPE阵列的一个或多个DPE中实现。

在另一方面,一种计算机程序产品包括其上存储有程序代码的计算机可读存储介质。该程序代码由计算机硬件可执行以发起操作。该操作可以包括:对于指定用于在设备的DPE阵列内实现的软件部分和用于在设备的PL内实现的硬件部分的应用,生成应用的逻辑架构和第一接口解决方案,该第一接口解决方案指定逻辑资源到DPE阵列与PL之间的接口电路块的硬件的映射。该操作可以包括基于逻辑架构和第一接口解决方案构建硬件部分的框图,在框图上执行实现流程,并且编译应用的软件部分用以在DPE阵列的一个或多个DPE中实现。

在另一方面,一种方法可以包括:对于具有用于在设备的DPE阵列中实现的软件部分、以及用于在设备的PL中实现的硬件部分的应用,使用执行硬件编译器的处理器、基于接口块解决方案在硬件部分上执行实现流程,该接口块解决方案将软件部分所使用的逻辑资源映射到将DPE阵列耦合到PL的接口块的硬件。该方法可以包括:响应于在实现流程期间不满足设计度量,使用执行硬件编译器的处理器将接口块约束提供给DPE编译器。该方法还可以包括:响应于接收到接口块约束,使用执行DPE编译器的处理器生成已更新接口块解决方案、并且将已更新接口块解决方案从DPE编译器提供给硬件编译器。

在另一方面,一种系统包括被配置为发起操作的处理器。该操作可以包括:对于具有用于在设备的DPE阵列中实现的软件部分、以及用于在设备的PL中实现的硬件部分的应用,使用硬件编译器基于接口块解决方案在硬件部分上执行实现流程,该接口块解决方案将软件部分所使用的逻辑资源映射到将DPE阵列耦合到PL的接口块的硬件。该操作可以包括:响应于在实现流程期间不满足设计度量,使用硬件编译器向DPE编译器提供接口块约束。该操作还可以包括:响应于接收到接口块约束,使用DPE编译器生成已更新接口块解决方案、并且将已更新接口块解决方案从DPE编译器提供给硬件编译器。

在另一方面,一种计算机程序产品包括其上存储有程序代码的计算机可读存储介质。该程序代码由计算机硬件可执行以发起操作。该操作可以包括:对于具有用于在设备的DPE阵列中实现的软件部分、以及用于在设备的PL中实现的硬件部分的应用,使用硬件编译器基于接口块解决方案在硬件部分上执行实现流程,该接口块解决方案将软件部分所使用的逻辑资源映射到将DPE阵列耦合到PL的接口块的硬件。该操作可以包括:响应于在实现流程期间不满足设计度量,使用硬件编译器将接口块约束提供给DPE编译器。该操作还可以包括:响应于接收到接口块约束,使用DPE编译器生成已更新接口块解决方案、并且将已更新接口块解决方案从DPE编译器提供给硬件编译器。

在另一方面,方法可以包括:对于指定用于在设备的DPE阵列内实现的软件部分、以及用于在设备的PL内实现的具有HLS内核的硬件部分的应用,使用处理器生成第一接口解决方案,该第一接口解决方案将软件部分所使用的逻辑资源映射到耦合DPE阵列和PL的接口块的硬件资源。该方法可以包括使用处理器生成连接图表,该连接图表指定要在DPE阵列中实现的软件部分的HLS内核和节点之间的连接,并且使用处理器基于连接图表和HLS内核生成框图,其中框图是可合成的。该方法还可以包括使用处理器基于第一接口解决方案在框图上执行实现流程,并且使用处理器编译应用的软件部分用以在DPE阵列的一个或多个DPE中实现。

在另一方面,一种系统包括被配置为发起操作的处理器。该操作可以包括:对于指定用于在设备的DPE阵列内实现的软件部分、以及用于在设备的PL内实现的具有HLS内核的硬件部分的应用,生成第一接口解决方案,该第一接口解决方案将软件部分所使用的逻辑资源映射到耦合DPE阵列和PL的接口块的硬件资源。该操作可以包括生成连接图表,该连接图表指定要在DPE阵列中实现的软件部分的HLS内核和节点之间的连接,并且基于连接图表和HLS内核生成框图,其中框图是可合成的。该操作还可以包括基于第一接口解决方案在框图上执行实现流程,并且编译应用的软件部分用以在DPE阵列的一个或多个DPE中实现。

在另一方面,一种计算机程序产品包括其上存储有程序代码的计算机可读存储介质。该程序代码由计算机硬件可执行以发起操作。该操作可以包括:对于指定用于在设备的DPE阵列内实现的软件部分、以及用于在设备的PL内实现的具有HLS内核的硬件部分的应用,生成第一接口解决方案,该第一接口解决方案将软件部分所使用的逻辑资源映射到耦合DPE阵列和PL的接口块的硬件资源。该操作可以包括生成连接图表,该连接图表指定要在DPE阵列中实现的软件部分的HLS内核和节点之间的连接,并且基于连接图表和HLS内核生成框图,其中框图是可合成的。该操作还可以包括基于第一接口解决方案在框图上执行实现流程,并且编译应用的软件部分以在DPE阵列的一个或多个DPE中实现。

提供本“发明内容”部分仅是为了介绍某些概念,而不是确定所要求保护的主题的任何关键或基本特征。根据附图和以下详细描述,本发明布置的其他特征将是清楚的。

附图说明

在附图中通过示例的方式示出了本发明的布置。然而,附图不应当解释为将本发明的布置仅限于所示的特定实现。通过阅读以下详细描述并且参考附图,各个方面和优点将变得清楚。

图1示出了与本文中描述的一个或多个实施例一起使用的计算节点的示例。

图2示出了片上系统(SoC)类型的集成电路(IC)的示例架构。

图3示出了图2的DPE阵列的数据处理引擎(DPE)的示例架构。

图4示出了图3的示例架构的另外方面。

图5示出了DPE阵列的另一示例架构。

图6示出了DPE阵列的SoC接口块的瓦片的示例架构。

图7示出了图1的片上网络(NoC)的示例实现。

图8是描绘通过NoC进行的图1的SoC中的端点电路之间的连接的框图。

图9是描绘根据另一示例的NoC的框图。

图10示出了对NoC进行编程的示例方法。

图11示出了对NoC进行编程的另一示例方法。

图12示出了在端点电路之间通过NoC进行的示例数据路径。

图13示出了处理与NoC相关的读取/写入请求和响应的示例方法。

图14示出了NoC主单元的示例实现。

图15示出了NoC从单元的示例实现。

图16示出了由结合图1描述的系统可执行的示例软件架构。

图17A和图17B示出了使用如结合图1描述的系统被映射到SoC上的应用的示例。

图18示出了已经映射到SoC上的另一应用的示例实现。

图19示出了由结合图1描述的系统可执行的另一示例软件架构。

图20示出了用以在SoC中实现应用的执行设计流程的示例方法。

图21示出了用以在SoC中实现应用的执行设计流程的另一示例方法。

图22示出了硬件编译器与DPE编译器之间的示例通信方法。

图23示出了处理SoC接口块解决方案的示例方法。

图24示出了用于在SoC中实现的应用的另一示例。

图25示出了由DPE编译器生成的SoC接口块解决方案的示例。

图26示出了由DPE编译器接收的可路由SoC接口块约束的示例。

图27示出了不可路由SoC接口块约束的示例。

图28示出了其中DPE编译器忽略来自图27的软类型SoC接口块约束的示例。

图29示出了不可路由SoC接口块约束的另一示例。

图30示出了图29的DPE节点的示例映射。

图31示出了不可路由SoC接口块约束的另一示例。

图32示出了图31的DPE节点的示例映射。

图33示出了由图1的系统可执行的另一示例软件架构。

图34示出了用以在SoC中实现应用的执行设计流程的另一示例方法。

图35示出了用以在SoC中实现应用的执行设计流程的另一示例方法。

具体实施方式

虽然本公开以定义新颖特征的权利要求结束,但是相信,通过结合附图考虑描述将能够更好地理解本公开内描述的各种特征。提供本文中描述的(多个)过程、(多个)机器、(多个)制造及其任何变体是为了说明的目的。本公开中描述的具体结构和功能细节不应当被解释为限制,而仅被解释为权利要求的基础以及教导本领域技术人员以不同方式使用实际上任何适当详细结构中描述的特征的代表性基础。此外,本公开中使用的术语和短语并非旨在进行限制,而是提供对所描述的特征的可理解的描述。

本公开涉及集成电路(IC),并且更具体地涉及实现包括异构可编程IC内的硬件部分和软件部分的应用。异构可编程IC的示例是一种器件,例如集成电路,该器件包括本文中称为“可编程逻辑”或“PL”的可编程电路以及多个硬连线可编程数据处理引擎(DPE)。多个DPE可以布置成阵列,该阵列通过片上系统(SoC)接口块通信地链接到IC的PL。如本公开中定义的,DPE是硬连线且可编程的电路块,该电路块包括能够执行程序代码的核心和耦合到该核心的存储器模块。如本公开内容中更详细地描述的,DPE能够彼此通信。

旨在在所描述的设备中实现的应用包括使用设备的PL实现的硬件部分、以及在设备的DPE阵列中实现并且由其执行的软件部分。该设备还可以包括能够执行另外的程序代码(例如,应用的另一软件部分)的硬连线处理器系统或“PS”。例如,PS包括中央处理单元或“CPU”或能够执行程序代码的其他硬连线处理器。因此,应用还可以包括旨在由PS的CPU执行的另外的软件部分。

根据本公开中描述的创造性布置,提供了可以由数据处理系统执行的设计流程。设计流程能够在包括PL、DPE阵列和/或PS的异构可编程IC内实现应用的硬件部分和软件部分两者。IC还可以包括可编程的片上网络(NoC)。

在一些实现中,应用被指定为包括多个互连节点的数据流图表。数据流图表的节点被指定用于在DPE阵列内或在PL内实现。例如,在DPE中实现的节点最终被映射到DPE阵列中的特定DPE。被用于应用的由阵列的每个DPE执行的目标代码被生成,以实现(多个)节点。例如,在PL中实现的节点可以在PL中合成和实现,或者使用预先构建的核心(例如,寄存器传输级或“RTL”核心)来实现。

本发明的布置提供用以在IC的不同异构子系统中实现的示例设计流程,该示例设计流程能够协调应用的不同部分的构建和集成。示例设计流程内的不同阶段以特定子系统为目标。例如,设计流程的一个或多个阶段以在PL中实现应用的硬件部分为目标,而设计流程的一个或多个其他阶段以在DPE阵列中实现应用的软件部分为目标。尽管如此,设计流程的一个或多个其他阶段以在PS中实现应用的另一软件部分为目标。设计流程的其他阶段以通过NoC在不同子系统和/或电路块之间实现路由或数据传输为目标。

与不同子系统相对应的示例设计流程的不同阶段可以由子系统特定的不同编译器执行。例如,软件部分可以使用DPE编译器和/或PS编译器来实现。要在PL中实现的硬件部分可以由硬件编译器实现。NoC的路由可以由NoC编译器实现。各种编译器能够在实现由应用指定的相应子系统的同时彼此通信和交互,以便收敛到其中在IC中可行地实现该应用的解决方案。例如,编译器能够在操作期间交换设计数据以收敛到其中满足了为应用而指定的设计度量的解决方案。此外,所实现的解决方案(例如,在设备中该应用的实现)是其中将应用的各个部分映射到设备中的相应子系统、并且不同子系统之间的接口一致且相互商定的解决方案。

使用本公开中描述的示例设计流程,一种系统能够在与其他情况(例如,其中应用的所有部分在设备上共同实现的情况)相比更短的时间内(例如,更少的运行时间)在异构可编程IC内实现应用。此外,本公开中描述的示例设计流程实现了在异构可编程IC中应用的最终实现的可行性和质量(例如,设计度量的收敛,例如定时、面积、功率等),这通常优于使用其他常规技术获取的结果,在常规技术中,应用的每个部分完全独立地映射并且然后拼接或组合在一起。示例设计流程至少部分通过以下方式来实现这些结果:在本文中描述的依赖于不同子系统之间的共享接口约束的松散耦合联合收敛技术。

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

图1示出了计算节点100的示例。计算节点100可以包括主机数据处理系统(主机系统)102和硬件加速板104。计算节点100仅是可以与硬件加速板一起使用的计算环境的一个示例实现。在这点上,计算节点100可以独立使用,用作裸机服务器,用作计算集群的一部分、或用作云计算环境内的云计算节点。图1并非旨在暗示对本文中描述的示例的使用范围或功能的任何限制。计算节点100是能够执行本公开中描述的与在SoC 200内实现应用相关的各种操作的系统和/或计算机硬件的示例。例如,计算节点100可以用于实现电子设计自动化(EDA)系统。

主机系统102可以与很多其他通用或专用计算系统环境或配置一起操作。可以适合与主机系统102一起使用的计算系统、环境和/或配置的示例包括但不限于:个人计算机系统、服务器计算机系统、瘦客户端、胖客户端、手持或膝上型设备、多处理器系统、基于微处理器的系统、机顶盒、可编程消费电子器件、网络PC、小型计算机系统、大型计算机系统,以及包括上述系统或设备中的任何一种等的分布式云计算环境。

如图所示,主机系统102以计算设备的形式示出,例如计算机或服务器。主机系统102可以被实践作为独立设备、在集群中或在分布式云计算环境中,其中任务由通过通信网络链接的远程处理设备执行。在分布式云计算环境中,程序模块可以位于本地和远程计算机系统存储介质两者中,包括存储器存储设备。主机系统102的组件可以包括但不限于:一个或多个处理器106(例如,中央处理单元)、存储器108和将包括存储器108在内的各种系统组件耦合到处理器106的总线110。(多个)处理器106可以包括能够执行程序代码的多种处理器中的任何一种。示例处理器类型包括但不限于具有x86类型架构(IA-32、IA-64等)、电源架构、ARM处理器等的处理器。

总线110表示多种类型的通信总线结构中的一种或多种,包括存储器总线或存储器控制器、外围总线、加速图形端口和使用各种可用总线架构中的任何一种的处理器或本地总线。作为示例而非限制,这样的架构包括工业标准架构(ISA)总线、微通道架构(MCA)总线、增强型ISA(EISA)总线、视频电子标准协会(VESA)本地总线、外围组件互连(PCI))总线和PCI快速(PCIe)总线。

主机系统102通常包括多种计算机可读介质。这样的介质可以是主机系统102可访问的任何可用介质,并且可以包括易失性介质、非易失性介质、可移动介质和/或不可移动介质的任何组合。

存储器108可以包括易失性存储器形式的计算机可读介质,诸如随机存取存储器(RAM)112和/或高速缓冲存储器114。主机系统102还可以包括其他可移动/不可移动的易失性/非易失性计算机系统存储介质。例如,可以提供存储系统116以用于从不可移动的非易失性磁介质(未示出并且通常称为“硬盘驱动器”)读取和向其写入。尽管未示出,但是可以提供用于从可移动的非易失性磁盘(例如,“软盘”)读取和向其写入的磁盘驱动器、以及用于从可移动的非易失性光盘(诸如CD-ROM、DVD-ROM或其他光学介质)读取或向其写入的光盘驱动器。在这种情况下,每个都可以通过一个或多个数据媒体接口连接到总线110。如下文将进一步描绘和描述的,存储器108可以包括至少一个计算机程序产品,该至少一个计算机程序产品具有被配置为执行本公开中描述的功能和/或操作的一组(例如,至少一个)程序模块(例如,程序代码)。

作为示例而非限制,具有一组(至少一个)程序模块120的程序/实用程序118可以存储在存储器108中,并且操作系统、一个或多个应用程序、其他程序模块和程序数据也可以存储在存储器108中。程序模块120通常执行如本文中描述的本发明的实施例的功能和/或方法。例如,程序模块120可以包括一个或多个应用以及用于与硬件加速板104和/或SoC200通信的驱动程序或守护程序。

程序/实用程序118由处理器106可执行。程序/实用程序118以及由处理器106使用、生成和/或操作的任何数据项是在被处理器106采用时赋予功能的功能数据结构。如本公开中定义的,“数据结构”是物理存储器内数据模型的数据组织的物理实现。因此,数据结构由存储器中的特定电或磁结构元素形成。数据结构对存储在存储器中的数据强加物理组织,如使用处理器而被执行的应用所使用的。

主机系统102可以包括通信地链接到总线110的一个或多个输入/输出(I/O)接口128。(多个)I/O接口128允许主机系统102与外部设备通信,耦合到允许(多个)用户与主机系统102交互的外部设备,耦合到允许主机系统102与其他计算设备通信的外部设备,等等。例如,主机系统102可以通过(多个)I/O接口128通信地链接到显示器130和硬件加速板104。主机系统102可以经由(多个)I/O接口128耦合到其他外部设备,诸如键盘(未示出)。I/O接口128的示例可以包括但不限于:网卡、调制解调器、网络适配器、硬件控制器等。

在示例实现中,I/O接口128是PCIe适配器,主机系统102通过I/O接口128与硬件加速板104通信。硬件加速板104可以实现为耦合到主机系统102的电路板,例如卡。硬件加速板104可以例如插入到卡槽(例如,主机系统102的可用总线和/或PCIe槽)中。

硬件加速板104包括SoC 200。SoC 200是异构可编程IC,并且因此具有多个异构子系统。结合图2更详细地描述SoC 200的示例架构。硬件加速板104还包括耦合到SoC 200的易失性存储器134和也耦合到SoC 200的非易失性存储器136。易失性存储器134可以实现为RAM并且被认为是SoC 200的“本地存储器”,而在主机系统102内的存储器108不被认为相对SoC 200是本地的,而是相对主机系统102是本地的。在一些实现中,易失性存储器134可以包括多个千兆字节的RAM,例如64GB的RAM。非易失性存储器136的示例包括闪存。

在图1的示例中,计算节点100能够对SoC 200的应用进行操作并且在SoC 200内实现该应用。该应用可以包括与SoC 200中可用的不同异构子系统相对应的硬件部分和软件部分。通常,计算节点100能够将应用映射到SoC 200上以供SoC 200执行。

图2示出了SoC 200的示例架构。SoC 200是可编程IC和集成可编程设备平台的示例。在图2的示例中,所示出的SoC 200的各种不同子系统或区域可以在单个集成封装内提供的单个管芯上实现。在其他示例中,不同子系统可以在作为单个集成封装而提供的多个互连管芯上实现。

在该示例中,SoC 200包括多个区域,该多个区域具有带有不同功能的电路系统。在该示例中,SoC 200可选地包括数据处理引擎(DPE)阵列202。SoC 200包括可编程逻辑(PL)区域214(以下称为(多个)PL区域或PL)、处理系统(PS)212、片上网络(NoC)208和一个或多个硬连线电路块210。DPE阵列202被实现为多个互连的硬连线的可编程的处理器,这些处理器具有与SoC 200的其他区域的接口。

PL 214是可以被编程以执行指定功能的电路系统。作为示例,PL 214可以实现为现场可编程门阵列类型的电路系统。PL 214可以包括可编程电路块阵列。PL 214内的可编程电路块的示例包括但不限于:可配置逻辑块(CLB)、专用随机存取存储器块(BRAM和/或UltraRAM或URAM)、数字信号处理块(DSP)、时钟管理器和/或延迟锁定环路(DLL)。

PL 214内的每个可编程电路块通常包括可编程互连电路系统和可编程逻辑电路系统两者。可编程互连电路系统通常包括大量的通过可编程互连点(PIP)互连的不同长度的互连线。通常,互连线被配置(例如,以每条线为基础)为提供以每比特为基础的连接(例如,其中每条线传送一位信息)。可编程逻辑电路系统使用可编程元件实现用户设计的逻辑,可编程元件可以包括例如查找表、寄存器、算术逻辑等。可编程互连和可编程逻辑电路系统可以通过将配置数据加载到定义可编程元件如何配置和操作的内部配置存储器单元中来被编程。

PS 212实现为硬连线电路系统,该硬连线电路系统被制造为SoC 200的一部分。PS212可以实现为或包括各种不同处理器类型中的任何一种,每个处理器类型都能够执行程序代码。例如,PS 212可以实现为个体处理器,例如能够执行程序代码的单个核心。在另一示例中,PS 212可以实现为多核处理器。在又一示例中,PS 212可以包括一个或多个核心、模块、协处理器、接口和/或其他资源。PS 212可以使用多种不同类型的架构中的任何一种来实现。可以用于实现PS 212的示例架构可以包括但不限于:ARM处理器架构、x86处理器架构、GPU架构、移动处理器架构、DSP架构、能够执行计算机可读指令或程序代码的其他合适的架构、和/或不同处理器和/或处理器架构的组合。

NoC 208包括用于在SoC 200中的端点电路之间共享数据的互连网络。端点电路可以设置在DPE阵列202、PL区域214、PS 212和/或硬连线电路块210中。NoC 208可以包括具有专用交换的高速数据路径。在一个示例中,NoC 208包括水平路径、竖直路径或水平路径和竖直路径两者。图1所示的区域的布置和数目只是一个示例。NoC 208是SoC 200内可用于连接所选的组件和/或子系统的公共基础设施的示例。

NoC 208提供与PL 214、PS 212,以及所选的硬连线电路块210的连接。NoC 208是可编程的。在与其他可编程电路系统一起使用的可编程NoC的情况下,通过NoC 208要被路由的网络和/或数据传输是未知的,直到创建用于在SoC 200内实现的用户电路设计。NoC208可以通过将配置数据加载到内部配置寄存器中来被编程,该配置数据定义NoC 208内的元素(诸如交换机和接口)如何配置和操作,以在交换机之间以及NoC接口之间传递数据。

NoC 208被制造为SoC 200的一部分,并且虽然物理上不可修改,但可以被编程以在用户电路设计的不同主电路与不同从电路之间建立连接。例如,NoC 208可以包括多个可编程交换机,该多个可编程交换机能够建立连接用户指定的主电路和从电路的分组交换网络。在这点上,NoC 208能够适应不同的电路设计,其中每个不同电路设计具有在SoC 200中的不同位置实现的主电路和从电路的不同组合,该主电路和从电路可以由NoC 208耦合。NoC 208可以被编程以在用户电路设计的主电路和从电路之间路由数据,例如应用数据和/或配置数据。例如,NoC 208可以被编程以将在PL 214内实现的由不同用户指定的电路系统与以下项耦合:PS 212和/或DPE阵列202、不同硬连线电路块、和/或SoC 200外部的不同电路和/或系统。

硬连线电路块210可以包括输入/输出(I/O)块和/或收发器,以用于向SoC 200、存储器控制器等外部的电路和/或系统发送和接收信号。不同I/O模块的示例可以包括单端和伪差分I/O以及高速差分时钟收发器。此外,硬连线电路块210可以被实现以执行特定功能。硬连线电路块210的附加示例包括但不限于:密码引擎、数模转换器、模数转换器等。SoC200内的硬连线电路块210在本文中可以不时地指代专用块。

在图2的示例中,PL 214示出在两个分开的区域中。在另一示例中,PL 214可以实现为可编程电路系统的统一区域。在又一示例中,PL 214可以实现为可编程电路系统的两个以上的不同区域。PL 214的特定组织并非旨在作为限制。在这点上,SoC 200包括一个或多个PL区域214、PS 212和NoC 208。

在其他示例实现中,SoC 200可以包括位于IC的不同区域中的两个或更多个DPE阵列202。在其他示例中,SoC 200可以实现为多管芯IC。在这种情况下,每个子系统可以在不同管芯上实现。不同管芯可以使用多种可用多管芯IC技术中的任何一种通信地链接,例如将管芯并排堆叠在中介层上,使用堆叠管芯架构(其中IC实现为多芯片模块(MCM)),等等。在多管芯IC示例中,应当理解,每个管芯可以包括单个子系统、两个或更多个子系统、一个子系统和另一部分子系统、或其任何组合。

DPE阵列202实现为包括SoC接口块206的DPE 204的二维阵列。DPE阵列202可以使用将在以下更详细地描述的多种不同架构中的任何一种来实现。出于说明而非限制的目的,图2示出了以对准的行和对准的列布置的DPE 204。然而,在其他实施例中,DPE 204可以被布置为在所选的行和/或列中的DPE相对于相邻行和/或列中的DPE水平反转或翻转。在一个或多个其他实施例中,DPE的行和/或列可以相对于相邻的行和/或列偏移。一个或多个或所有DPE 204可以实现为包括一个或多个核心,每个核心能够执行程序代码。DPE 204的数目、DPE 204的特定布置和/或DPE 204的取向并不旨在被限制。

SoC接口块206能够将DPE 204耦合到SoC 200的一个或多个其他子系统。在一个或多个实施例中,SoC接口块206耦合到相邻DPE 204。例如,SoC接口块206可以直接耦合到DPE阵列202中的底部DPE行中的每个DPE 204。在说明中,SoC接口块206可以直接连接到DPE204-1、204-2、204-3、204-4、204-5、204-6、204-7、204-8、204-9和204-10。

图2是为了说明的目的而提供的。在其他实施例中,SoC接口块206可以位于DPE阵列202的顶部、DPE阵列202的左侧(例如,作为一列)、DPE阵列202的右侧(例如,作为一列),或在DPE阵列202中和周围的多个位置处(例如,作为DPE阵列202内的一个或多个居间行和/或列)。取决于SoC接口块206的布局和位置,耦合到SoC接口块206的特定DPE可以变化。

出于说明的目的,如果SoC接口块206位于DPE 204左侧,则SoC接口块206可以直接耦合到包括DPE 204-1、DPE 204-11、DPE 204-21和DPE 204-31的左侧DPE列。如果SoC接口块206位于DPE 204右侧,则SoC接口块206可以直接耦合到包括DPE 204-10、DPE 204-20、DPE 204-30和DPE 204-40的右侧DPE列。如果SoC接口块206位于DPE 204的顶部,则SoC接口块206可以耦合到包括DPE 204-31、DPE 204-32、DPE 204-33、DPE 204-34、DPE 204-35、DPE204-36、DPE 204-37、DPE 204-38、DPE 204-39和DPE 204-40的顶部DPE行。如果SoC接口块206位于多个位置,则直接连接到SoC接口块206的特定DPE可以变化。例如,如果SoC接口块被实现为DPE阵列202内的行和/或列,则直接耦合到SoC接口块206的DPE可以是在SoC接口块206的一侧或多侧或每一侧与SoC接口块206相邻的DPE。

DPE 204通过DPE互连(未示出)被互连,当共同考虑时,该DPE互连形成DPE互连网络。这样,SoC接口块206能够通过以下方式来与DPE阵列202的任何DPE 204通信:与被直接连接到SoC接口块206的DPE阵列202中的一个或多个所选的DPE 204通信,并且利用由在每个相应DPE 204内实现的DPE互连形成的DPE互连网络。

SoC接口块206能够将DPE阵列202内的每个DPE 204与SoC 200的一个或多个其他子系统耦合。例如,SoC接口块206能够将DPE阵列202耦合到NoC 208和PL 214。这样,DPE阵列202能够与在PL 214、PS 212、和/或硬连线电路块210中的任何一个中实现的电路块通信。例如,SoC接口块206能够在所选的DPE 204与PL 214之间建立连接。SoC接口块206还能够在所选的DPE 204与NoC 208之间建立连接。通过NoC 208,所选的DPE 204能够与PS 212和/或硬连线电路块210通信。所选的DPE 204能够经由SoC接口块206和PL 214与硬连线电路块210通信。在特定实施例中,SoC接口块206可以直接耦合到SoC 200的一个或多个子系统。例如,SoC接口块206可以直接耦合到PS 212和/或硬连线电路块210。

在一个或多个实施例中,DPE阵列202包括单个时钟域。诸如NoC 208、PL 214、PS212和各种硬连线电路块210等其他子系统可以在一个或多个单独的或不同的时钟域中。尽管如此,DPE阵列202可以包括可以用于与子系统中的其他子系统对接的附加时钟。在特定实施例中,SoC接口块206包括能够生成一个或多个时钟信号的时钟信号发生器,该一个或多个时钟信号可以被提供或分配给DPE阵列202的DPE 204。

DPE阵列202可以通过将配置数据加载到内部配置存储器单元(本文中也称为“配置寄存器”)来被编程,该内部配置存储器单元定义DPE 204和SoC接口块206之间的连接以及DPE 204和SoC接口块206如何操作。例如,对于与子系统通信的特定DPE 204或一组DPE204,(多个)DPE 204和SoC接口块206被编程来这样做。类似地,对于与一个或多个其他DPE204通信的一个或多个特定DPE 204,DPE被编程来这样做。(多个)DPE 204和SoC接口块206可以通过分别将配置数据加载到(多个)DPE 204和SoC接口块206内的配置寄存器来被编程。在另一示例中,作为SoC接口块206的一部分的时钟信号发生器可以使用配置数据可编程,以改变提供给DPE阵列202的时钟频率。

图3示出了图2的DPE阵列202的DPE 204的示例架构。在图3的示例中,DPE 204包括核心302、存储器模块304和DPE互连306。每个DPE 204被实现为SoC 200上的硬连线可编程电路块。

核心302提供DPE 204的数据处理能力。核心302可以实现为多种不同处理电路中的任何一种。在图3的示例中,核心302包括可选的程序存储器308。在示例实现中,核心302被实现为能够执行程序代码(例如,计算机可读指令)的处理器。在这种情况下,程序存储器308被包括在内并且程序存储器308能够存储由核心302执行的指令。核心302例如可以实现为CPU、GPU、DSP、向量处理器、或能够执行指令的其他类型的处理器。核心302可以使用本文中描述的各种CPU和/或处理器架构中的任何一种来实现。在另一示例中,核心302被实现为超长指令字(VLIW)向量处理器或DSP。

在特定实现中,程序存储器308被实现为专用程序存储器,该专用程序存储器为核心302私有(例如,由核心302独占访问)。程序存储器308只能被同一DPE 204的核心使用。因此,程序存储器308只能由核心302访问并且不与任何其他DPE或另一DPE的组件共享。程序存储器308可以包括用于读取和写入操作的单个端口。程序存储器308可以支持程序压缩并且可以使用下面更详细描述的DPE互连306的存储器映射网络部分来寻址。例如,经由DPE互连306的存储器映射网络,程序存储器308可以被加载可以由核心302执行的程序代码。

核心302可以包括配置寄存器324。配置寄存器324可以加载有配置数据以控制核心302的操作。在一个或多个实施例中,核心302可以基于加载到配置寄存器324中的配置数据来被激活和/或停用。在图3的示例中,配置寄存器324可以经由以下更详细描述的DPE互连306的存储器映射网络来寻址(例如,可以被读取和/或写入)。

在一个或多个实施例中,存储器模块304能够存储由核心302使用和/或生成的数据。例如,存储器模块304能够存储应用数据。存储器模块304可以包括读取/写入存储器,例如随机存取存储器(RAM)。因此,存储器模块304能够存储可以由核心302读取和消耗的数据。存储器模块304还能够存储由核心302写入的数据(例如,结果)。

在一个或多个其他实施例中,存储器模块304能够存储可以由DPE阵列内的其他DPE的一个或多个其他核心使用和/或生成的数据,例如应用数据。DPE的一个或多个其他核心也可以从存储器模块304读取和/或向其写入。在特定实施例中,可以从存储器模块304读取和/或向其写入的其他核心可以是一个或多个相邻DPE的核心。与DPE 204共享边框或边界(例如,相邻的)的另一DPE被称为相对于DPE 204的“相邻”DPE。通过允许核心302和来自相邻DPE的一个或多个其他核心读取和/或写入存储器模块304,存储器模块304实现共享存储器,该共享存储器支持在不同DPE和/或核心之间的能够访问存储器模块304的通信。

参考图2,例如,DPE 204-14、204-16、204-5和204-25被认为是DPE 204-15的相邻DPE。在一个示例中,在DPE 204-16、204-5和204-25中的每个DPE内的核心,能够读取和写入在DPE 204-15内的存储器模块。在特定实施例中,只有与存储器模块相邻的相邻DPE可以访问DPE 204-15的存储器模块。例如,虽然与DPE 204-15相邻,但DPE 204-14可能不与DPE204-15的存储器模块相邻,因为DPE 204-15的核心可以位于DPE 204-14的核心与DPE 204-15的存储器模块之间。这样,在特定实施例中,DPE 204-14的核心可能不会访问DPE 204-15的存储器模块。

在特定实施例中,DPE的核心是否能够访问另一DPE的存储器模块,取决于存储器模块中包括的存储器接口的数目以及这样的核心是否连接到存储器模块的可用存储器接口。在以上示例中,DPE 204-15的存储器模块包括四个存储器接口,其中DPE 204-16、204-5和204-25中的每个的核心连接到这样的存储器接口。DPE 204-15内的核心302本身连接到第四存储器接口。每个存储器接口可以包括一个或多个读取和/或写入通道。在特定实施例中,每个存储器接口包括多个读取通道和多个写入通道,使得附接到其的特定核心能够同时读取和/或写入存储器模块304内的多个组。

在其他示例中,可以使用多于四个的存储器接口。这样的其他存储器接口可以被用于允许DPE 204-15的对角线上的DPE访问DPE 204-15的存储器模块。例如,如果诸如DPE204-14、204-24、204-26、204-4和/或204-6等DPE中的核心也耦合到DPE 204-15中的存储器模块的可用存储器接口,则这样的其他DPE也将能够访问DPE 204-15的存储器模块。

存储器模块304可以包括配置寄存器336。配置寄存器336可以加载有配置数据以控制存储器模块304的操作。在图3的示例中,配置寄存器336(和324)可以经由以下更详细描述的DPE互连306的存储器映射网络来寻址(例如,可以被读取和/或写入)。

在图3的示例中,DPE互连306特定于DPE 204。DPE互连306促进各种操作,包括DPE204与DPE阵列202的一个或多个其他DPE之间的通信和/或与SoC 200的其他子系统的通信。DPE互连306进一步实现DPE 204的配置、控制和调试。

在特定实施例中,DPE互连306被实现为片上互连。片上互连的一个示例是高级微控制器总线架构(AMBA)可扩展接口(AXI)总线(例如,或交换机)。AMBAAXI总线是一种用于在电路块和/或系统之间建立片上连接的嵌入式微控制器总线接口。本文中提供AXI总线作为可以与本公开中描述的发明布置一起使用的互连电路系统的示例,并且因此不旨在作为限制。互连电路系统的其他示例可以包括其他类型的总线、交叉开关和/或其他类型的交换机。

在一个或多个实施例中,DPE互连306包括两个不同网络。第一网络能够与DPE阵列202的其他DPE和/或SoC 200的其他子系统交换数据。例如,第一网络能够交换应用数据。第二网络能够交换用于(多个)DPE的数据,例如配置、控制和/或调试数据。

在图3的示例中,DPE互连306的第一网络由流交换机326和一个或多个流接口(未示出)形成。例如,流交换机326包括用于连接到核心302、存储器模块304、存储器映射交换机332、上方的DPE、左侧的DPE、右侧的DPE和下方的DPE中的每个的流接口。每个流接口可以包括一个或多个主机接口和一个或多个从机接口。

流交换机326能够允许非相邻DPE和/或未耦合到存储器模块304的存储器接口的DPE,经由DPE互连网络与核心302和/或存储器模块304通信,DPE互连网络由DPE阵列202的相应DPE 204的DPE互连形成。

再次参考图2并且使用DPE 204-15作为参考点,流交换机326耦合到位于DPE 204-14的DPE互连中的另一流交换机,并且能够与其通信。流交换机326耦合到位于DPE 204-25的DPE互连中的另一流交换机,并且能够与其通信。流交换机326耦合到位于DPE 204-16的DPE互连中的另一流交换机,并且能够与其通信。流交换机326耦合到位于DPE 204-5的DPE互连中的另一流交换机,并且能够与其通信。因此,核心302和/或存储器模块304还能够经由DPE中的DPE互连与DPE阵列202内的任何DPE通信。

流交换机326还可以用于接口连接到子系统,例如PL 214和/或NoC 208。通常,流交换机326被编程为作为电路交换流互连或分组交换流互连进行操作。电路交换流互连能够实现适用于DPE之间高带宽通信的点对点专用流。分组交换流互连允许共享流以将多个逻辑流时分复用到一个物理流上以进行中等带宽通信。

流交换机326可以包括配置寄存器(在图3中缩写为“CR”)334。配置数据可以通过DPE互连306的存储器映射网络被写入配置寄存器334。加载到配置寄存器334中的配置数据指示DPE 204将与哪些其他DPE和/或子系统(例如,NoC 208、PL 214和/或PS 212)通信、以及这样的通信被建立作为电路交换点对点连接还是作为分组交换连接。

DPE互连306的第二网络由存储器映射交换机332形成。存储器映射交换机332包括多个存储器映射接口(未示出)。每个存储器映射接口可以包括一个或多个主机和一个或多个从机。例如,存储器映射交换机332包括用于连接到核心302、存储器模块304、DPE 204上方的DPE中的存储器映射交换机和DPE 204下方的DPE中的存储器映射交换机中的每个的存储器映射接口。

存储器映射交换机332被用于传送DPE 204的配置、控制和调试数据。在图3的示例中,存储器映射交换机332能够接收用于配置DPE 204的配置数据。存储器映射交换机332可以从位于DPE 204下方的DPE和/或从SoC接口块206接收配置数据。存储器映射交换机332能够将所接收的配置数据转发到DPE 204上方的一个或多个其他DPE、核心302(例如,程序存储器308和/或配置寄存器324)、存储器模块304(例如,存储器模块304内的存储器、和/或配置寄存器336)、和/或流交换机326内的配置寄存器334。

取决于DPE 204的位置,DPE互连306耦合到每个相邻DPE的DPE互连和/或SoC接口块206。总的来说,DPE 204的DPE互连形成DPE互连网络(其可以包括流网络和/或存储器映射网络)。每个DPE的流交换机的配置寄存器可以通过以下方式来被编程:经由存储器映射的交换机加载配置数据。通过配置、流交换机和/或流接口被编程为与其他端点建立连接,无论是分组交换连接还是电路交换连接,无论该其他端点是在一个或多个其他DPE 204中和/或在SoC接口块206中。

在一个或多个实施例中,DPE阵列202被映射到诸如PS 212等处理器系统的地址空间。因此,DPE 204内的任何配置寄存器和/或存储器可以经由存储器映射接口来访问。例如,存储器模块304中的存储器、程序存储器308、核心302中的配置寄存器324、存储器模块304中的配置寄存器336、和/或配置寄存器334可以经由存储器映射交换机332被读取和/或写入。

在图3的示例中,存储器映射交换机332能够接收DPE 204的配置数据。配置数据可以包括加载到程序存储器308(如果包括)中的程序代码、用于加载到配置寄存器324、334和/或336中的配置数据、和/或要加载到存储器模块304的存储器(例如,存储器组)中的数据。在图3的示例中,配置寄存器324、334和336被示出为位于配置寄存器旨在控制的特定电路结构(例如,核心302、流交换机326和存储器模块304)内。图3的示例仅用于说明的目的,并且说明核心302、存储器模块304和/或流交换机326内的元件可以通过将配置数据加载到对应配置寄存器中来被编程。在其他实施例中,尽管对组件操作的控制贯穿DPE 204分布,但配置寄存器可以合并在DPE 204的特定区域内。

因此,可以通过将配置数据加载到配置寄存器334中来对流交换机326进行编程。配置数据对流交换机326进行编程以在两个不同DPE和/或其他子系统之间以电路交换模式进行操作,或者在所选的DPE和/或其他子系统之间以分组交换模式进行操作。因此,由流交换机326建立的与其他流接口和/或交换机的连接,通过将合适的配置数据加载到配置寄存器334中来被编程,用以在DPE 204内与其他DPE和/或与IC 300的其他子系统建立实际连接或应用数据路径。

图4示出了图3的示例架构的另外的方面。在图4的示例中,与DPE互连306有关的细节未示出。图4示出了核心302通过共享存储器与其他DPE的连接。图4还说明了存储器模块304的附加方面。为了说明,图4参考DPE 204-15。

如图所示,存储器模块304包括多个存储器接口402、404、406和408。在图4中,存储器接口402和408缩写为“MI”。存储器模块304还包括多个存储器组412-1至412-N。在特定实施例中,存储器模块304包括八个存储器组。在其他实施例中,存储器模块304可以包括更少或更多的存储器组412。在一个或多个实施例中,每个存储器组412是单端口的,从而允许每个时钟周期对每个存储器组进行多达一次访问。在存储器模块304包括八个存储器组412的情况下,这种配置支持每个时钟周期八次并行访问。在其他实施例中,每个存储器组412是双端口或多端口的,从而允许每个时钟周期更多次数的并行访问。

在图4的示例中,存储器组412-1至412-N中的各自具有相应仲裁器414-1至414-N。每个仲裁器414能够响应于检测到冲突而生成停顿信号。每个仲裁器414可以包括仲裁逻辑。此外,每个仲裁器414可以包括交叉开关。因此,任何主机都能够写入任何特定的一个或多个存储器组412。如结合图3所述,存储器模块304连接到存储器映射交换机332,从而促进数据到存储器组412的读取和写入。因此,存储在存储器模块304中的特定数据可以被控制,例如写入,作为通过存储器映射交换机332进行的配置、控制和/或调试过程的一部分。

存储器模块304还包括直接存储器存取(DMA)引擎416。在一个或多个实施例中,DMA引擎416包括至少两个接口。例如,一个或多个接口能够从DPE互连306接收输入数据流并且将所接收的数据写入存储器组412。一个或多个其他接口能够从存储器组412读取数据并且经由DPE互连306的流接口(例如,流交换机)将数据发送出去。例如,DMA引擎416可以包括用于访问图3的流交换机326的流接口。

存储器模块304能够作为共享存储器来操作,共享存储器可以被多个不同的DPE访问。在图4的示例中,存储器接口402经由核心302中包括的核心接口428耦合到核心302。存储器接口402通过仲裁器414向核心302提供对存储器组412的访问。存储器接口404耦合到DPE 204-25的核心。存储器接口404为DPE 204-25的核心提供对存储器组412的访问。存储器接口406耦合到DPE 204-16的核心。存储器接口406为DPE 204-16的核心提供对存储器组412的访问。存储器接口408耦合到DPE 204-5的核心。存储器接口408为DPE 204-5的核心提供对存储器组412的访问。因此,在图4的示例中,与DPE 204-15的存储器模块304具有共享边界的每个DPE能够读取和写入存储器组412。在图4的示例中,DPE 204-14的核心不能直接访问DPE 204-15的存储器模块304。

核心302能够经由核心接口430、432和434访问其他相邻DPE的存储器模块。在图4的示例中,核心接口434耦合到DPE 204-25的存储器接口。因此,核心302能够经由核心接口434和DPE 204-25的存储器模块内包含的存储器接口,来访问DPE 204-25的存储器模块。核心接口432耦合到DPE 204-14的存储器接口。因此,核心302能够经由核心接口432和DPE204-14的存储器模块内包含的存储器接口,来访问DPE 204-14的存储器模块。核心接口430耦合到DPE 204-5内的存储器接口。因此,核心302能够经由核心接口430和DPE 204-5的存储器模块内包含的存储器接口来访问DPE 204-5的存储器模块。如上所述,核心302能够经由核心接口428和存储器接口402,来访问DPE 204-15内的存储器模块304。

在图4的示例中,核心302能够读取和写入与DPE 204-15中的核心302共享边界的DPE(例如,DPE 204-25、204-14和204-5)的任何存储器模块。在一个或多个实施例中,核心302能够将DPE 204-25、204-15、204-14和204-5内的存储器模块视为单个连续存储器(例如,单个地址空间)。因此,核心302对这样的DPE的存储器模块进行读取和/或写入的过程,与核心302读取和/或写入存储器模块304的过程相同。核心302能够生成用于读取和写入的地址,假定该连续存储器模型情况。核心302能够基于所生成的地址将读取和/或写入请求引导到适当的核心接口428、430、432和/或434。

如上所述,核心302能够基于这样的操作的地址通过核心接口428、430、432和/或434在正确的方向上映射读取和/或写入操作。当核心302生成用于存储器访问的地址时,核心302能够解码该地址以确定该方向(例如,要访问的特定DPE)并且在所确定的方向上将存储器操作转发到正确的核心接口。

因此,核心302能够经由共享存储器与DPE 204-25的核心进行通信,该共享存储器可以是DPE 204-25内的存储器模块和/或DPE 204-15的存储器模块304。核心302能够经由共享存储器与DPE 204-14的核心进行通信,该共享存储器是DPE 204-14内的存储器模块。核心302能够经由共享存储器与DPE 204-5的核心进行通信,该共享存储器可以是DPE 204-5内的存储器模块和/或DPE 204-15的存储器模块304。此外,核心302能够经由共享存储器与DPE 204-16的核心进行通信,该共享存储器是DPE 204-15内的存储器模块304。

如上所述,DMA引擎416可以包括一个或多个流到存储器的接口。通过DMA引擎416,可以从SoC 200内的其他源接收应用数据并且将其存储在存储器模块304中。例如,可以通过流交换机326从与DPE 204-15共享边界和/或不共享边界的其他DPE接收数据。也可以通过DPE的流交换机通过SoC接口框206从SoC的其他子系统(例如,NoC 208、硬连线电路块210、PL 214和/或PS 212)接收数据。DMA引擎416能够从流交换机接收这样的数据,并且将该数据写入存储器模块304内的一个或多个适当的存储器组412。

DMA引擎416可以包括一个或多个存储器到流的接口。通过DMA引擎416,可以从存储器模块304的一个或多个存储器组412读取数据并且经由流接口将数据发送到其他目的地。例如,DMA引擎416能够从存储器模块304读取数据,并且通过流交换机将这样的数据发送到与DPE 204-15共享和/或不共享边界的其他DPE。DMA引擎416还能够通过流交换机和SoC接口框206将这样的数据发送到其他子系统(例如,NoC 208、硬连线电路块210、PL 214和/或PS 212)。

在一个或多个实施例中,DMA引擎416通过在DPE 204-15内的存储器映射交换机332来编程。例如,DMA引擎416可以由配置寄存器336控制。配置寄存器336可以使用DPE互连306的存储器映射交换机332来被写入。在特定实施例中,DMA引擎416可以由DPE 204-15内的流交换机326控制。例如,DMA引擎416可以包括控制寄存器,该控制寄存器可以由连接到其的流交换机326写入。取决于加载到配置寄存器324、334和/或336中的配置数据,经由在DPE互连306内的流交换机326接收的流,可以连接到存储器模块304中的DMA引擎416和/或直接连接到核心302。取决于加载到配置寄存器324、334和/或336中的配置数据,可以从DMA引擎416(例如,存储器模块304)和/或核心302发送流。

存储器模块304还可以包括硬件同步电路系统420(在图4中缩写为“HSC”)。一般而言,硬件同步电路系统420能够同步不同核心(例如,相邻DPE的核心)、图4的核心302、DMA引擎416、和可以经由DPE互连306进行通信的其他外部主机(例如,PS 212)的操作。作为说明性和非限制性示例,硬件同步电路系统420能够同步DPE 204-15中的两个不同核心、流交换机、存储器映射接口和/或DMA、和/或访问存储器模块304中的同一(例如,共享)缓冲器的不同DPE。

在两个DPE不相邻的情况下,这两个DPE不能访问公共存储器模块。在这种情况下,应用数据可以经由数据流来传输(术语“数据流”和“流”在本公开中可以不时地互换使用)。因此,本地DMA引擎能够将传输从基于本地存储器的传输转换为基于流的传输。在这种情况下,核心302和DMA引擎416能够使用硬件同步电路系统420进行同步。

PS 212能够经由存储器映射交换机332与核心302通信。例如,PS 212能够通过发起存储器读取和写入来访问存储器模块304和硬件同步电路系统420。在另一实施例中,硬件同步电路系统420还可以在锁定的状态改变时向PS 212发送中断,以避免由硬件同步电路系统420的PS 212进行轮询。PS 212还能够经由流接口与DPE 204-15通信。

除了经由DPE互连306通过共享存储器模块和相邻和/或非相邻DPE与相邻DPE进行通信,核心302还可以包括级联接口。在图4的示例中,核心302包括级联接口422和424(在图4中缩写为“CI”)。级联接口422和424能够提供与其他核心的直接通信。如图所示,核心302的级联接口422直接从DPE 204-14的核心接收输入数据流。经由级联接口422接收的数据流,可以被提供给核心302内的数据处理电路系统。核心302的级联接口424能够直接向DPE204-16的核心发送输出数据流。

在图4的示例中,级联接口422和级联接口424中的各自可以包括用于缓冲的先进先出(FIFO)接口。在特定实施例中,级联接口422和424能够传送宽度可以为数百位的数据流。级联接口422和424的特定位宽不旨在作为限制。在图4的示例中,级联接口424耦合到核心302内的累加器寄存器436(在图4中缩写为“AC”)。级联接口424能够输出累加器寄存器436的内容并且可以在每个时钟周期都这样做。累加寄存器436可以存储由核心302内的数据处理电路系统生成和/或操作的数据。

在图4的示例中,级联接口422和424可以基于加载到配置寄存器324中的配置数据来被编程。例如,基于配置寄存器324,级联接口422可以被激活或停用。类似地,基于配置寄存器324,级联接口424可以被激活或停用。级联接口422可以独立于级联接口424被激活和/或停用。

在一个或多个其他实施例中,级联接口422和424由核心302控制。例如,核心302可以包括用于读取/写入级联接口422和/或424的指令。在另一示例中,核心302可以包括能够读取和/或写入级联接口422和/或424的硬连线电路系统。在特定实施例中,级联接口422和424可以由核心302外部的实体控制。

在本公开中描述的实施例中,DPE 204不包括高速缓冲存储器。通过省略高速缓冲存储器,DPE阵列202能够实现可预测的(例如,确定性的)性能。此外,由于不需要保持位于不同DPE中的高速缓冲存储器之间的一致性,因此避免了显著的处理开销。

根据一个或多个实施例,DPE 204的核心302不具有输入中断。因此,DPE 204的核心302能够不间断地操作。省略对DPE 204的核心302的输入中断,还允许DPE阵列202实现可预测的(例如,确定性的)性能。

图5示出了DPE阵列的另一示例架构。在图5的示例中,SoC接口块206提供DPE 204与SoC 200的其他子系统之间的接口。SoC接口块206将DPE集成到设备中。SoC接口块206能够将配置数据传送到DPE 204,将事件从DPE 204传送到其他子系统,将事件从其他子系统传送到DPE 204,生成中断并且将中断传送到DPE阵列202外部的实体,在其他子系统与DPE204之间传送应用数据,和/或在其他子系统与DPE 204之间传送跟踪和/或调试数据。

在图5的示例中,SoC接口块206包括多个互连瓦片。例如,SoC接口块206包括瓦片502、504、506、508、510、512、514、516、518和520。在图5的示例中,瓦片502-520被组织成一行。在其他实施例中,瓦片可以被布置成列、网格或另一布局。例如,SoC接口块206可以实现为在DPE 204左侧、在DPE 204右侧、在DPE 204列之间等的一列瓦片。在另一实施例中,SoC接口块206可以位于DPE阵列202上方。SoC接口块206可以实现为使得瓦片位于DPE阵列202下方、DPE阵列202左侧、DPE阵列202右侧和/或DPE阵列202上方的任何组合。在这点上,图5是出于说明而非限制的目的而提供的。

在一个或多个实施例中,瓦片502-520具有相同的架构。在一个或多个其他实施例中,瓦片502-520可以用两个或更多个不同架构来实现。在特定实施例中,可以使用不同架构来实现SoC接口块206内的瓦片,其中每个不同瓦片架构支持与SoC 200的不同类型的子系统或子系统组合的通信。

在图5的示例中,瓦片502-520被耦合使得数据可以从一个瓦片传播到另一瓦片。例如,数据可以从瓦片502传播通过瓦片504、506,并且沿着瓦片行向下传播到瓦片520。类似地,数据可以在相反方向上从瓦片520传播到瓦片502。在一个或多个实施例中,瓦片502-520中的每个能够作为多个DPE的接口进行操作。例如,瓦片502-520中的每个能够作为DPE阵列202的DPE 204的子集的接口进行操作。每个块提供与其的接口的DPE子集可以是互斥的,使得没有DPE通过SoC接口块206的一个以上的瓦片被提供接口。

在一个示例中,瓦片502-520中的每个为一列DPE 204提供接口。为了说明的目的,瓦片502提供与列A的DPE的接口。瓦片504提供与列B的DPE的接口,等等。在每种情况下,瓦片包括与DPE列中的相邻DPE的直接连接,在该示例中,该DPE是底部DPE。例如,参考列A,瓦片502直接连接到DPE 204-1。列A内的其他DPE可以与瓦片502通信,但是通过同一列中的居间DPE的DPE互连来这样做。

例如,瓦片502能够从诸如PS 212、PL 214和/或另一硬连线电路块210(诸如专用电路块)等另一源接收数据。瓦片502能够将寻址到A列中的DPE的数据的那些部分提供给这样的DPE,同时将寻址到其他列中的DPE(例如,瓦片502不是其接口的DPE)的数据发送到瓦片504上。瓦片504可以执行相同或类似的处理,其中从瓦片502接收的寻址到列B中的DPE的数据被提供给这样的DPE,同时将寻址到其他列中的DPE的数据发送到瓦片506,等等。

以这种方式,数据可以从SoC接口块206的瓦片到瓦片进行传播,直到到达如下的瓦片,该瓦片用作数据被寻址到的DPE(例如,“(多个)目标DPE”)的接口。用作(多个)目标DPE的接口的瓦片,能够使用DPE的存储器映射交换机和/或DPE的流交换机,将数据定向到(多个)目标DPE。

如上所述,使用列是示例实现。在其他实施例中,SoC接口块206的每个瓦片能够提供与DPE阵列202的一行DPE的接口。这样的配置可以在以下情况下使用:SoC接口块206被实现为瓦片列,无论是在DPE 204的左侧、右侧或列之间。在其他实施例中,DPE子集可以是少于DPE阵列202的所有DPE的任何组合,每个瓦片提供到DPE子集的接口。例如,DPE 204可以分配到SoC接口块206的瓦片。这样的DPE的特定物理布局可以基于由DPE互连建立的DPE的连接而变化。例如,瓦片502可以提供与DPE 204-1、204-2、204-11和204-12的接口。SoC接口块206的另一瓦片可以提供与四个其他DPE的接口,等等。

图6示出了SoC接口块206的瓦片的示例架构。在图6的示例中,示出了SoC接口块206的两种不同类型的瓦片。瓦片602被配置为用作DPE与仅PL 214之间的接口。瓦片610被配置为用作DPE与NoC 208之间以及DPE与PL 214之间的接口。SoC接口块206可以包括使用如针对瓦片602和瓦片610所示的这两种架构的瓦片的组合,或者在另一示例中,可以包括仅具有如针对瓦片610所示的架构的瓦片。

在图6的示例中,瓦片602包括连接到PL接口606和DPE(诸如紧接在上方的DPE204-1)的流交换机604。PL接口606连接到边界逻辑接口(BLI)电路620和BLI电路622,每个电路位于PL 214中。瓦片610包括流交换机612,流交换机612连接到NoC和PL接口614以及DPE(诸如紧接在上方的DPE 204-5)。NoC和PL接口614连接到PL 214中的BLI电路624和626以及NoC 208的NoC主单元(NMU)630和NoC从单元(NSU)632。

在图6的示例中,每个流接口604能够向耦合到其的DPE输出六个不同32位数据流,并且从其接收4个不同32位数据流。PL接口606和NoC以及PL接口614中的每个,能够分别通过BLI 620和BLI 624向PL 214提供6个不同64位数据流。通常,BLI 620、622、624和626中的每个在PL 214内提供接口或连接点,PL接口606和/或NoC以及PL接口614连接到该接口或连接点。PL接口606和NoC以及PL接口614中的每个,能够分别通过BLI 622和BLI 624从PL 214接收8个不同64位数据流。

NoC和PL接口614也连接到NoC 208。在图6的示例中,NoC和PL接口614连接到一个或多个NMU 630和一个或多个NSU 632。在一个示例中,NoC和PL接口614能够向NoC 208提供两个不同的128位数据流,其中每个数据流被提供给不同NMU 630。NoC和PL接口614能够从NoC 208接收两个不同的128位数据流,其中每个数据流是从不同NSU 632接收的。

相邻瓦片中的流交换机604被连接。在一个示例中,相邻瓦片中的流交换机604能够在左右方向中的每个方向上,通过四个不同32位数据流进行通信(例如,只要瓦片在右侧或左侧,情况可能就是这样)。

瓦片602和610各自可以包括用以传送配置数据的一个或多个存储器映射交换机。出于说明的目的,存储器映射交换机未示出。例如,存储器映射交换机能够以与流交换机604相同或类似的方式,垂直连接到正上方DPE的存储器映射交换机、SoC接口块206中的其他相邻块中的存储器映射交换机、瓦片602和610中的配置寄存器(未示出)、和/或PL接口608或NoC和PL接口614(视情况而定)。

结合DPE 204和/或SoC接口块206的瓦片602和/或610中包括的各种交换机而描述的各种位宽和数目的数据流,是为了说明的目的而提供的,并非旨在限制本公开中描述的创造性布置。

图7示出了NoC 208的示例实现。NoC 208包括NMU 702、NSU 704、网络714、NoC外围互连(NPI)710和寄存器712。每个NMU 702是将端点电路连接到NoC 208的入口电路。每个NSU 704是将NoC 208连接到端点电路的出口电路。NMU 702通过网络714连接到NSU 704。在一个示例中,网络714包括NoC分组交换机706(NPS)和在NPS 706之间的路由708。每个NPS706执行NoC分组的交换。NPS 706通过路由708彼此连接并且连接到NMU 702和NSU 704,以实现多个物理通道。NPS 706针对每个物理通道支持多个虚拟通道。

NPI 710包括用于对NMU 702、NSU 704和NPS 706进行编程的电路系统。例如,NMU702、NSU 704和NPS 706可以包括确定其功能的寄存器712。NPI 710包括外围互连,该外围互连耦合到寄存器712用于对其进行编程以设置功能。NoC 208中的寄存器712支持中断、服务质量(QoS)、错误处理和报告、事务控制、电源管理和地址映射控制。寄存器712可以在重新编程之前以可用状态被初始化,例如通过使用写请求写入寄存器712。NoC 208的配置数据可以存储在非易失性存储器(NVM)中,例如作为编程设备映像(PDI)的一部分,并且被提供给NPI 710以用于对NoC 208和/或其他端点电路进行编程。

NMU 702是业务入口点。NSU 704是业务出口点。耦合到NMU 702和NSU 704的端点电路可以是硬电路(例如,硬连线电路块210)或在PL 214中实现的电路。给定的端点电路可以耦合到一个以上的NMU 702或一个以上的NSU 704。

图8是描绘根据示例的在SoC 200中的端点电路之间通过NoC 208进行的连接的框图。在该示例中,端点电路802通过NoC 208连接到端点电路804。端点电路802是主电路,该主电路耦合到NoC 208的NMU 702。端点电路804是耦合到NoC 208的NSU 704的从电路。每个端点电路802和804可以是PS 212中的电路、PL区域214中的电路或另一子系统中的电路(例如,硬连线电路块210)。

网络714包括多个物理通道806。物理通道806通过对NoC 208进行编程来实现。每个物理通道806包括一个或多个NPS 706和相关联的路由708。NMU 702通过至少一个物理通道806与NSU 704连接。一个物理通道806也可以具有一个或多个虚拟通道808。

通过网络714的连接使用主从布置。在一个示例中,网络714上的最基本连接包括连接到单个从机的单个主机。然而,在其他示例中,可以实现更复杂的结构。

图9是描绘根据另一示例的NoC 208的框图。在该示例中,NoC 208包括竖直部分902(VNoC)和水平部分904(HNoC)。每个VNoC 902设置在PL区域214之间。HNoC 904设置在PL区域214与I/O组910(例如,与硬连线电路块210相对应的I/O块和/或收发器)之间。NoC 208连接到存储器接口908(例如,硬连线电路块210)。PS 212耦合到HNoC 904。

在该示例中,PS 212包括耦合到HNoC 904的多个NMU 702。VNoC 902包括设置在PL区域214中的NMU 702和NSU 704。存储器接口908包括耦合到HNoC 904的NSU 704。HNoC 904和VNoC 902都包括通过路由708而连接的NPS 706。在VNoC 902中,路由708竖直延伸。在HNoC 904中,路由水平延伸。在每个VNoC 902中,每个NMU 702耦合到NPS 706。同样,每个NSU 704耦合到NPS 706。NPS 706彼此耦合以形成交换机矩阵。每个VNoC 902中的一些NPS706耦合到HNoC 904中的其他NPS 706。

虽然仅示出了单个HNoC 904,但是在其他示例中,NoC 208可以包括多于一个的HNoC 904。此外,虽然示出了两个VNoC 902,但NoC 208可以包括多于两个的VNoC 902。虽然存储器接口908以示例的方式示出,但是应当理解,代替或除了存储器接口908,可以使用其他硬连线电路块210。

图10示出了对NoC 208进行编程的示例方法1000。虽然独立于SoC 200的其他子系统进行描述,但是方法1000可以被包括和/或使用作为SoC 200的更大启动或编程过程的一部分。

在框1002处,在启动时,在SoC 200中实现的平台管理控制器(PMC)接收NoC编程数据。NoC编程数据可以是PDI的一部分。PMC负责管理SoC 200。PMC能够在正常操作期间维护安全可靠的环境、启动SoC 200以及管理SoC 200。

在框1004处,PMC通过NPI 710将NoC编程数据加载到寄存器712以创建物理通道806。在一个示例中,编程数据还可以包括用于在NPS 706中配置路由表的信息。在框1006处,PMC启动SoC 200。以这种方式,NoC 208至少包括NMU 702与NSU 704之间的物理通道806的配置信息。NoC 208的剩余配置信息可以在运行期间接收,如下面进一步描述的。在另一示例中,可以在启动时接收以下项的全部或部分:在运行期间接收的以下描述的配置信息。

图11示出了对NoC 208进行编程的示例方法1100。在框1102处,PMC在运行期间接收NoC编程数据。在框1104处,PMC通过NPI 710将编程数据加载到NoC寄存器712。在一个示例中,在框1106处,PMC在NPS 706中配置路由表。在框1108处,PMC在物理通道上配置QoS路径806。在框1110处,PMC配置地址空间映射。在框1112处,PMC配置入口/出口接口协议、宽度和频率。QoS路径、地址空间映射、路由表和入口/出口配置将在下面进一步讨论。

图12示出了通过端点电路之间的NoC 208的示例数据路径1200。数据路径1200包括端点电路1202、AXI主电路1204、NMU 1206、NPS 1208、NSU 1210、AXI从电路1212和端点电路1214。端点电路1202耦合到AXI主电路1204。AXI主电路1204耦合到NMU 1206。在另一示例中,AXI主电路1204是NMU 1206的一部分。

NMU 1206耦合到NPS 1208。NPS 1208彼此耦合以形成NPS 1208链(例如,在本示例中,五个NPS 1208的链)。一般而言,在NMU 1206与NSU 1210之间存在至少一个NPS 1208。NSU 1210耦合到NPS 1208中的一个。AXI从电路1212耦合到NSU 1210。在另一示例中,AXI从电路1212是NSU 1210的一部分。端点电路1214耦合到AXI从电路1212。

端点电路1202和1214各自可以是硬电路(例如,PS电路、硬连线电路210、一个或多个DPE 204)或在PL 214中配置的电路。端点电路1202用作主电路并且向NMU 1206发送读取/写入请求。在该示例中,端点电路1202和1214使用AXI协议与NoC 208通信。尽管在示例中描述了AXI,但应当理解,NoC 208可以被配置为使用本领域已知的其他类型的协议从端点电路接收通信。为了通过示例阐明,NoC 208在本文中被描述为支持AXI协议。NMU 1206通过一组NPS 1208中继请求以到达目的地NSU 1210。NSU 1210将请求传递到所附接的AXI从电路1212以处理数据,并且将数据分发到端点电路1214。AXI从电路1212可以将读取/写入响应发送回NSU 1210。NSU 1210可以通过一组NPS 1208将响应转发到NMU 1206。NMU 1206将响应传送到AXI主电路1204,AXI主电路1204将数据分发到端点电路1202。

图13示出了处理读取/写入请求和响应的示例方法1300。方法1300开始于框1302,其中端点电路1202通过AXI主机1204向NMU 1206发送请求(例如,读取请求或写入请求)。在框1304处,NMU 1206处理响应。在一个示例中,NMU 1206在端点电路1202的时钟域与NoC208的时钟域之间执行异步交叉和速率匹配。NMU 1206基于请求确定NSU 1210的目的地地址。在采用虚拟化的情况下,NMU 1206可以执行地址重新映射。NMU 1206还执行请求的AXI转换。NMU 1206进一步将请求打包成分组的流。

在框1306处,NMU 1206向NPS 1208发送请求的分组。每个NPS 1208基于目的地地址和路由信息对目标输出端口执行表查找。在框1308处,NSU 1210处理请求的分组。在一个示例中,NSU 1210对请求进行解包,执行AXI转换,并且执行从NoC时钟域到端点电路1214的时钟域的异步交叉和速率匹配。在框1310处,NSU 1210通过AXI从电路1212向端点电路1214发送请求。NSU 1210还可以通过AXI从电路1212从端点电路1214接收响应。

在框1312处,NSU 1210处理响应。在一个示例中,NSU 1210从端点电路1214的时钟域和NoC 208的时钟域,执行异步交叉和速率匹配。NSU 1210还将响应打包成分组的流。在框1314处,NSU 1210通过NPS 1208发送分组。每个NPS 1208基于目的地地址和路由信息对目标输出端口执行表查找。在框1316处,NMU 1206处理分组。在一个示例中,NMU 1206对响应进行解包,执行AXI转换,并且执行从NoC时钟域到端点电路1202的时钟域的异步交叉和速率匹配。在框1318处,NMU 1206通过AXI主电路1204向端点电路1202发送响应。

图14示出了NMU 702的示例实现。NMU 702包括AXI主机接口1402、打包电路系统1404、地址映射1406、解包电路系统1408、QoS电路系统1410、VC映射电路系统1412和时钟管理电路系统1414。AXI主机接口1402针对端点电路提供与NMU 702的AXI接口。在其他示例中,可以使用不同协议,因此NMU 702可以具有符合所选协议的不同主机接口。NMU 702将入站业务路由到打包电路系统1404,打包电路系统1404根据入站数据生成分组。打包电路系统1404根据地址映射1406确定用于路由分组的目的地ID。QoS电路系统1410可以提供入口速率控制,以控制分组到NoC 208的注入速率。VC映射电路系统1412管理每个物理通道上的QoS虚拟通道。NMU 702可以被配置为选择该分组被映射到哪个虚拟通道。时钟管理电路系统1414执行速率匹配和异步数据交叉,以在AXI时钟域与NoC时钟域之间提供接口。解包电路系统1408从NoC 208接收返回分组,并且被配置为对分组进行解包以用于AXI主机接口1402的输出。

图15示出了NSU 704的示例实现。NSU 704包括AXI从机接口1502、时钟管理电路系统1504、打包电路系统1508、解包电路系统1506和QoS电路系统1510。AXI从机接口1502为端点电路提供与NSU 704的AXI接口。在其他示例中,可以使用不同协议,因此NSU 704可以具有符合所选协议的不同从机接口。NSU 704将来自NoC 208的入站业务路由到解包电路系统1506,解包电路系统1506生成解包数据。时钟管理电路系统1504执行速率匹配和异步数据交叉以在AXI时钟域与NoC时钟域之间提供接口。打包电路系统1508从从机接口1502接收返回数据并且被配置为打包返回数据以用于通过NoC 208传输。QoS电路系统1510可以提供入口速率控制以控制分组到NoC 208的注入速率。

图16示出了由结合图1描述的系统可执行的示例软件架构。例如,图16的架构可以实现为图1的程序模块120中的一个或多个。图16的软件架构包括DPE编译器1602、NoC编译器1604和硬件编译器1606。图16示出了在操作期间可以在编译器之间交换的各种类型的设计数据的示例(例如,执行设计流程以在SoC 200中实现应用)。

DPE编译器1602能够从应用生成一个或多个二进制文件,该一个或多个二进制文件可以被加载到DPE阵列202的一个或多个DPE和/或DPE 204的子集中。每个二进制文件可以包括由(多个)DPE的(多个)核心可执行的目标代码、可选的应用数据、和DPE的配置数据。NoC编译器1604能够生成包括配置数据的二进制文件,该二进制文件被加载到NoC 208中以在其中针对应用创建数据路径。硬件编译器1606能够编译应用的硬件部分以生成用于在PL214中实现的配置比特流。

图16示出了在操作期间DPE编译器1602、NoC编译器1604和硬件编译器1606如何彼此通信的示例。相应编译器通过交换设计数据以协调的方式通信以收敛到解决方案。该解决方案是SoC 200内的应用的实现,其满足设计度量和约束并且包括SoC 200的各种异构子系统通过其进行通信的通用接口。

如本公开中定义的,术语“设计度量”定义了要在SoC 200中实现的应用的目标或要求。设计度量的示例包括但不限于:功耗要求、数据吞吐量要求、时间要求等。设计度量可以经由用户输入、文件或其他方式提供,以定义应用的更高或系统级要求。如本公开中定义,“设计约束”是EDA工具可以遵循或可以不遵循以实现设计度量或要求的要求。设计约束可以指定为编译器指令,并且通常指定EDA工具(例如,(多个)编译器)要遵循的较低级别的要求或建议。设计约束可以通过(多个)用户输入、包含一个或多个设计约束的文件、命令行输入等来指定。

在一个方面,DPE编译器1602能够为应用生成逻辑架构和SoC接口块解决方案。例如,DPE编译器1602能够基于以下项来生成逻辑架构:针对在DPE阵列202中待实现的应用的软件部分的、高级别的用户定义的度量。度量的示例可以包括但不限于:数据吞吐量、延迟、资源利用率和功耗。基于度量和应用(例如,要在DPE阵列202中实现的特定节点),DPE编译器1602能够生成逻辑架构。

逻辑架构是可以指定应用的各个部分所需要的硬件资源块信息的文件或数据结构。例如,逻辑架构可以指定以下项:实现应用的软件部分所需要的DPE 204的数目、PL 214中与DPE阵列202通信所需要的任何知识产权(IP)核心、通过NoC 208需要被路由的任何连接、以及DPE阵列202、NoC 208和PL 214中的IP核心的端口信息。IP核心是可重复使用的逻辑、单元或IC布局设计的块或部分,其可以在电路设计中用作能够执行特定功能或操作的可重复使用的电路系统块。IP核心可以如下格式来被指定,该格式可以被并入电路设计中以在PL 214内实现。虽然本公开涉及各种类型的核心,但没有任何其他修饰符的术语“核心”通常旨在指代这种不同类型的核心。

位于具体实施方式部分末尾的本公开中的示例1,示出了可以用于指定应用的逻辑架构的示例模式。示例1说明了应用的逻辑架构中包括的各种类型的信息。在一个方面,与使用应用本身相反,硬件编译器1606能够基于或使用逻辑架构和SoC接口块解决方案来实现应用的硬件部分。

DPE阵列202的端口信息以及NoC 208和PL 214中的IP核心的端口信息可以包括端口的逻辑配置,例如每个端口是流数据端口、存储器映射端口还是参数端口,以及端口是主机端口还是从机端口。IP核心的端口信息的其他示例包括端口的数据宽度和操作频率。DPE阵列202、NoC 208和PL 214中的IP核心之间的连接可以被指定为在逻辑架构中所指定的相应硬件资源块的端口之间的逻辑连接。

SoC接口块解决方案是指定以下项的数据结构或文件:进出DPE阵列202的连接到SoC接口块206的物理数据路径(例如,物理资源)的映射。例如,SoC接口块解决方案将用于进出DPE阵列202的数据传输的特定逻辑连接,映射到SoC接口块206的特定流通道,例如,映射到SoC接口块206的特定瓦片、流交换机和/或流交换机接口(例如,端口)。朝着具体实施方式部分的末尾在示例1之后的示例2说明了应用的SoC接口块解决方案的示例模式。

在一个方面,DPE编译器1602能够基于应用和逻辑架构来分析或仿真NoC 208上的数据业务。DPE编译器1602能够向NoC编译器1604提供应用(例如,“NoC业务”)的软件部分的数据传输要求。NoC编译器1604能够基于从DPE编译器1602接收的NoC业务通过NoC 208生成针对数据路径的路由。来自NoC编译器1604的结果(示出为“NoC解决方案”)可以被提供给DPE编译器1602。

在一个方面,NoC解决方案可以是初始NoC解决方案,该初始NoC解决方案仅指定NoC 208的入口点和/或出口点,连接到NoC 208的应用的节点将被连接到入口点和/或出口点。例如,出于编译器的收敛的目的,可以从NoC解决方案中排除针对NoC 208内(例如,入口点与出口点之间)的数据路径的更详细的路由和/或配置数据。朝着具体实施方式的末尾在示例2之后的示例3说明了应用的NoC解决方案的示例模式。

硬件编译器1606能够在逻辑架构上进行操作,以在PL 214中实现应用的硬件部分。如果硬件编译器1606不能生成满足所建立的设计约束(例如,对于定时、功率、数据吞吐量等)的应用的硬件部分的实现(例如,使用逻辑架构),则硬件编译器1606能够生成一个或多个SoC接口块约束和/或接收一个或多个用户指定的SoC接口块约束。硬件编译器1606能够将SoC接口块约束作为请求提供给DPE编译器1602。SoC接口块约束有效地将逻辑架构的一个或多个部分重新映射到SoC接口块206的不同流通道。从硬件编译器1606提供的SoC接口块约束更有利于硬件编译器1606生成满足设计度量的PL 214中的应用的硬件部分的实现。朝着具体实施方式的末尾在示例3之后的示例4说明了应用的SoC接口块和/或NoC的示例约束。

在另一方面,硬件编译器1606还能够基于应用和逻辑架构生成NoC业务,并且将其提供给NoC编译器1604。例如,硬件编译器1606可以分析或仿真应用的硬件部分,以确定由设计的硬件部分生成的数据业务,该数据业务将通过NoC 208传送到PS 212、DPE阵列202和/或SoC 200的其他部分。NoC编译器1604能够基于从硬件编译器1606接收的信息生成和/或更新NoC解决方案。NoC编译器1604能够将NoC解决方案或其已更新版本提供给硬件编译器1606和DPE编译器1602。在这点上,DPE编译器1602能够更新SoC接口块解决方案,并且响应于从NoC编译器1604接收到NoC解决方案或已更新NoC解决方案和/或响应于从硬件编译器1606接收到一个或多个SoC接口块约束,向硬件编译器1606提供已更新解决方案。DPE编译器1602基于从硬件编译器1606接收的(多个)SoC接口块约束和/或从NoC编译器1604接收的已更新NoC解决方案,生成已更新SoC接口块解决方案。

应当理解,图16的示例中所示的编译器之间的数据流仅用于说明的目的。在这点上,编译器之间的信息交换可以在本公开内描述的示例设计流程的各个阶段执行。在其他方面,编译器之间的设计数据交换可以以迭代方式执行,使得每个编译器可以基于从其他编译器接收的信息,不断改进由该编译器处理的应用部分的实现以收敛到解决方案。

在一个特定示例中,在从DPE编译器1602接收到逻辑架构和SoC接口块解决方案、以及从NoC编译器1604接收到NoC解决方案之后,硬件编译器1606可以确定生成满足所建立的设计度量的应用的硬件部分的实现是不可能的。由DPE编译器1602生成的初始SoC接口块解决方案是基于DPE编译器1602对要在DPE阵列202中实现的应用部分的了解而生成的。同样,由NoC编译器1604生成的初始NoC解决方案是基于由DPE编译器1602提供给NoC编译器1604的初始NoC业务而生成的。朝着具体实施方式的末尾在示例4之后的示例5说明了应用的NoC业务的示例模式。应当理解,尽管以上模式被用于示例1-5中,但可以使用其他格式和/或数据结构来指定所说明的信息。

硬件编译器1606尝试在应用的硬件部分上执行实现流程,包括合成(如果需要)、布局和路由硬件部分。因此,初始SoC接口块解决方案和初始NoC解决方案可能导致不满足所建立的定时约束的PL 214内的布局和/或路由。在其他情况下,SoC接口块解决方案和NoC解决方案可能没有足够数目的物理资源(诸如电线)来容纳必须传送的数据,从而导致PL214中的拥塞。在这种情况下,硬件编译器1606能够生成一个或多个不同SoC接口块约束和/或接收一个或多个用户指定的SoC接口块约束,并且将SoC接口块约束提供给DPE编译器1602作为重新生成SoC接口块解决方案的请求。同样,硬件编译器1606能够生成一个或多个不同NoC约束和/或接收一个或多个用户指定的NoC约束,并且将NoC约束提供给NoC编译器1604作为重新生成NoC解决方案的请求。以这种方式,硬件编译器1606调用DPE编译器1602和/或NoC编译器1604。

如果可能,DPE编译器1602能够从硬件编译器1606获取所接收的SoC接口块约束,并且使用所接收的SoC接口块约束更新SoC接口块解决方案,并且将已更新SoC接口块解决方案提供回硬件编译器1606。类似地,NoC编译器1604能够从硬件编译器1606获取所接收的NoC约束,并且使用所接收的NoC约束更新NoC解决方案,如果可能,并且将已更新NoC解决方案提供回硬件编译器1606。硬件编译器1606然后可以继续实现流程,使用从DPE编译器1602接收的已更新SoC接口块解决方案、以及从NoC编译器1604接收的已更新NoC解决方案,来生成在PL 214内实现的应用的硬件部分。

在一个方面,硬件编译器1606通过分别提供一个或多个SoC接口块约束和一个或多个NoC约束,来调用DPE编译器1602和/或NoC编译器1604,这可以是验证过程的一部分。例如,硬件编译器1606正在寻求来自DPE编译器1602和/或NoC编译器1604的验证,即,从硬件编译器1606提供的SoC接口块约束和NoC约束可以被使用或集成到可路由的SoC接口块解决方案和/或NoC解决方案中。

图17A示出了使用如结合图1描述的系统而映射到SoC 200上的应用1700的示例。出于说明的目的,仅示出了SoC 200的不同子系统的子集。应用1700包括具有所示连接的节点A、B、C、D、E和F。下面的示例6示出了可以用于指定应用1700的示例源代码。

示例6

在一个方面,应用1700被指定为包括多个节点的数据流图表。每个节点表示计算,该计算对应于函数,而不是单个指令。节点通过表示数据流的边缘而被互连。节点的硬件实现可以仅响应于从该节点的每个输入接收到数据而执行。节点通常以非阻塞方式执行。由应用1700指定的数据流图表表示要在SoC 200中实现的并行规范,而不是顺序程序。该系统能够对应用1700(例如,以如示例1中所示的图形形式)进行操作,以将各种节点映射到SoC200的适当子系统以在其中实现。

在一个示例中,应用1700以高级编程语言(HLL)(诸如C和/或C++)来指定。如上所述,虽然在通常用于创建顺序程序的HLL中指定,但作为数据流图表的应用1700是并行规范。该系统能够提供用于构建数据流图表和应用1700的类库。数据流图表由用户定义并且被编译到SoC 200的架构上。类库可以实现为具有可以用于构建应用1700的图形、节点和边缘的预定义类和构造函数的辅助库。应用1700在SoC 200上有效执行并且包括在SoC 200的PS 212中执行的被委托对象。在PS 212中执行的应用1700的对象可以用于指导和监测在SoC 200上运行的实际计算,例如,在PL 214、DPE阵列202和/或硬连线电路块210中。

根据本公开中描述的本发明的布置,加速器(例如,PL节点)可以被表示为数据流图表(例如,应用)中的对象。该系统能够自动合成PL节点并且连接合成的PL节点以在PL214中实现。相比之下,在常规EDA系统中,用户指定利用顺序语义的硬件加速应用。被硬件加速的函数是通过函数调用而指定的。与被硬件加速的函数(例如,本示例中的PL节点)的接口由函数调用和在函数调用中提供的各种参数(而不是数据流图表上的连接)来定义。

如示例6的源代码中所示,节点A和F被指定用于在PL 214中的实现,而节点B、C、D和E被指定用于在DPE阵列202内的实现。节点的连接由源代码中的数据传输边缘指定。示例6的源代码还指定了在PS 212中执行的顶级测试平台和控制程序。

回到图17A,应用1700被映射到SoC 200上。如图所示,节点A和F被映射到PL 214上。阴影DPE 204-13和204-14表示节点B、C、D和E被映射到的DPE 204。例如,节点B和C被映射到DPE 204-13上,而节点D和E被映射到DPE 204-4上。节点A和F在PL 214中实现,并且经由PL 214、SoC接口块206的特定瓦片和交换机、居间DPE 204的DPE互连中的交换机的路由、并且使用所选的相邻DPE 204的特定存储器而连接到DPE 204-13和204-44。

针对DPE 204-13而生成的二进制文件包括针对DPE 204-13用以实现与节点B和C相对应的计算所需要的目标代码、以及用于在DPE 204-13与DPE 204-14之间以及在DPE204-13与DPE 204-3之间建立数据路径的配置数据。针对DPE 204-4而生成的二进制文件包括针对DPE 204-4用以实现与节点D和E相对应的计算所需要的目标代码、以及用于与DPE204-14和DPE 204-5建立数据路径的配置数据。

针对诸如DPE 204-3、204-5、204-6、204-7、204-8和204-9等其他DPE 204生成其他二进制文件,以将DPE 204-13和DPE 204-4连接到SoC接口块206。显然,如果这样的其他DPE204实现其他计算(具有分配给其的应用的节点),则这样的二进制文件将包括任何目标代码。

在该示例中,由于连接DPE 204-14和节点F的路由较长,硬件编译器1606无法生成满足定时约束的硬件部分的实现。在本公开内,应用的硬件部分的实现的特定状态可以被称为硬件设计的状态,其中在整个实现流程中生成和/或更新硬件设计。例如,SoC接口块解决方案可以将节点F的信号交叉分配给在DPE 204-9下方的SoC接口块的瓦片。在这种情况下,硬件编译器1606能够向DPE编译器1602提供所请求的SoC接口块约束,以请求将节点F的SoC接口块206的交叉点移近DPE 204-4。例如,来自硬件编译器1606的所请求的SoC接口块约束可以请求将DPE 204-4的逻辑连接映射到SoC接口块206内的DPE 204-4正下方的瓦片。这种重新映射将允许硬件编译器将节点F布局得更靠近DPE 204-4以改善定时。

图17B示出了应用1700到SoC 200上的另一示例映射。与图17A所示的相比,图17B示出了备选和更详细的示例。例如,图17B示出了以下各项:应用1700的节点到DPE阵列202的特定DPE 204的映射、在被映射应用1700的节点的DPE 204之间建立的连接、DPE 204的存储器模块中的存储器到应用1700的节点的分配、数据传输到DPE 204的存储器和核心接口(例如,428、430、432、434、402、404、406和408)的映射(用双头箭头表示)和/或到DPE互连306中的流交换机的映射,如由DPE编译器1602执行的。

在图17B的示例中,存储器模块1702、1706、1710、1714和1718与核心1704、1708、1712、1716和1720一起被示出。核心1704、1708、1712、1716和1720分别包括程序存储器1722、1724、1726、1728和1730。在上排中,核心1704和存储器模块1706形成DPE 204,而核心1708和存储器模块1710形成另一DPE 204。在下排中,存储器模块1714和核心1716形成DPE204,而存储器1718和核心1720用于另一DPE 204。

如图所示,节点A和F被映射到PL 214。节点A通过流交换机和存储器模块1702中的仲裁器连接到存储器模块1702中的存储器组(例如,存储器组的阴影部分)。节点B和C被映射到核心1704。用于实现节点B和C的指令存储在程序存储器1722中。节点D和E被映射到核心1716,用于实现节点D和E的指令存储在程序存储器1728中。节点B被分配并且经由核心存储器接口访问存储器模块1702中的存储器组的阴影部分,而节点C被分配并且经由核心存储器接口访问存储器模块1706中的存储器组的阴影部分。节点B、C和E被分配并且能够经由核心存储器接口访问存储器模块1714中的存储器组的阴影部分。节点D能够经由核心存储器接口访问存储器模块1718中的存储器组的阴影部分。节点F经由仲裁器和流交换机连接到存储器模块1718。

图17B示出了应用的节点之间的连接,可以使用存储器和/或在核心之间共享存储器的核心接口、并且使用DPE互连306来实现。

图18示出了已经映射到SoC 200上的另一应用的示例实现。为了说明的目的,仅示出了SoC 200的不同子系统的子集。在该示例中,与节点A和F(每个在PL 214中实现)的连接被路由通过NoC 208。NoC 208包括入口点/出口点1802、1804、1806、1808、1810、1812、1814和1816(例如,NMU/NSU)。图18的示例示出了如下情况:其中节点A被布局在相对靠近入口点/出口点1802,而访问易失性存储器134的节点F具有通过PL 214到达入口点/出口点1816的长路径。如果硬件编译器1606无法将节点F布局在靠近入口点/出口点1816的位置,则硬件编译器1606可以向NoC编译器1604请求已更新NoC解决方案。在这种情况下,硬件编译器1606能够调用具有NoC约束的NoC编译器1604以生成已更新NoC解决方案,该已更新NoC解决方案为节点F指定不同入口点/出口点,例如入口点/出口点1812。节点F的不同入口点/出口点将允许硬件编译器1606将节点F布局在更靠近在已更新NoC解决方案中指定的新指派入口点/出口点的位置,并且利用NoC 208中可用的更快数据路径。

图19示出了由结合图1描述的系统可执行的另一示例软件架构1900。例如,架构1900可以实现为图1的程序模块120中的一个或多个。在图19的示例中,应用1902旨在用于在SoC 200内实现。

在图19的示例中,用户能够与由系统提供的用户接口1906交互。在与用户接口1906交互时,用户可以指定或提供应用1902、应用1902的性能和分区约束1904、以及基础平台1908。

应用1902可以包括多个不同部分,每个部分对应于SoC 200中可用的不同子系统。例如,可以如结合示例6所描述的那样指定应用1902。应用1902包括要在DPE阵列202中实现的软件部分、以及要在PL 214中实现的硬件部分。应用1902可以可选地包括要在PS 212中实现的附加软件部分和要在NoC 208中实现的部分。

(性能和分区约束1904中的)分区约束可选地指定位置或子系统,应用1902的各个节点将在该位置或子系统中实现。例如,基础应用1902的每个节点,分区约束可以指示该节点是要在DPE阵列202中还是在PL 214中实现。在其他示例中,位置约束能够向DPE编译器1602提供更具体或详细的信息以执行内核到DPE、网络或数据流到流交换机,以及缓冲器到DPE的存储器模块和/或存储器模块组的映射。

作为说明性示例,应用的实现可能需要特定映射。例如,在其中内核的多个副本要在DPE阵列中实现并且内核的每个副本同时对不同数据集进行操作的应用中,优选地对于在DPE阵列的不同DPE中执行的内核的每个副本,使数据集位于同一相对地址(存储器中的位置)。这可以使用位置约束来实现。如果DPE编译器1602不支持该条件,则内核的每个副本必须单独或独立地编程,而不是跨DPE阵列中的多个不同DPE来复制同一编程。

另一说明性示例是对利用DPE之间的级联接口的应用设置位置约束。由于级联接口在每一行中在一个方向上流动,因此优选地,使用级联接口而耦合的DPE链的开始不在以下位置中开始:具有丢失级联接口的DPE(例如,角DPE)中、或在无法在DPE阵列中的其他位置轻松复制的位置(例如,一行中的最后的DPE)。位置约束可以强制应用的DPE链的开始从特定DPE开始。

(性能和分区约束1904中的)性能约束可以指定要由节点(无论是在DPE阵列202中还是在PL 214中)的实现来完成的各种度量,例如功率要求、延迟要求、定时和/或数据吞吐量。

基础平台1908是对要在SoC 200中实现的基础设施电路系统的描述,该基础设施电路系统与耦合了SoC 200的电路板上的电路系统交互和/或连接。基础平台1908可以是可合成的。例如,基础平台1908指定要在SoC 200内实现的电路系统,该电路系统从SoC 200外部(例如,SoC 200外部)接收信号并且向SoC外部的系统和/或电路系统提供信号。例如,基础平台1908可以指定电路资源,例如用于与图1的主机系统102和/或计算节点100进行通信的外围组件互连快速(PCIe)节点、用于访问易失性存储器134和/或非易失性存储器136的一个或多个存储器控制器、和/或其他资源,诸如将DPE阵列202和/或PL 214与PCIe节点耦合的内部接口。给定特定类型的电路板,由基础平台1908指定的电路系统可用于可以在SoC200中实现的任何应用。在这点上,基础平台1908特定于SoC 200耦合到的特定电路板。

在一个示例中,分区器1910能够基于应用1902的每个部分将在其中实现的SoC200的子系统,来分离出应用1902的不同部分。在示例实现中,分区器1910被实现为用户导向的工具,其中用户提供输入,该输入指示应用1902的不同部分(例如,节点)中的哪个部分对应于SoC 200的不同子系统中的每个子系统。所提供的输入例如可以是性能和分区约束1904。为了说明的目的,分区器1910将应用1902分区成以下各项:要在PS 212上执行的PS部分1912、要在DPE阵列202上执行的DPE阵列部分1914、要在PL 214中实现的PL部分1916、以及在NoC 208中实现的NoC部分1936。在一个方面,分区器1910能够生成PS部分1912、DPE阵列部分1914、PL部分1916和NoC部分1936中的每个部分作为单独文件或单独数据结构。

如图所示,与不同子系统相对应的不同部分中的每个部分,由子系统特定的不同编译器处理。例如,PS编译器1918能够编译PS部分1912,以生成包括由PS 212可执行的目标代码的一个或多个二进制文件。DPE编译器1602能够编译DPE阵列部分1914,以生成一个或多个二进制文件,包括由不同DPE 204可执行的目标代码、应用数据和/或配置数据。硬件编译器1606能够在PL部分1916上执行实现流程,以生成可以加载到SoC 200中以在PL 214中实现PL部分1916的配置比特流。如本文中定义的,术语“实现流程”表示在其中进行布局和路由以及可选的合成的过程。NoC编译器1604能够为NoC 208生成二进制指定配置数据,该二进制指定配置数据在被加载到NoC 208中时在其中创建连接应用1902的各种主设备和从设备的数据路径。由编译器1918、1602、1604和/或1606生成的这些不同输出被示出为二进制文件和配置比特流1924。

在特定实现中,编译器1918、1602、1604和/或1606中的某些编译器能够在操作期间彼此通信。通过在对应用1902操作的设计流程期间的各个阶段进行通信,编译器1918、1602、1604和/或1606能够收敛到解决方案。在图19的示例中,DPE编译器1602和硬件编译器1606能够在分别编译应用1902的部分1914和1916的同时,在操作期间进行通信。硬件编译器1606和NoC编译器1604能够在分别编译应用1902的部分1916和1936的同时在操作期间进行通信。DPE编译器1602还可以调用NoC编译器1604以获取NoC路由解决方案和/或已更新NoC路由解决方案。

所得到的二进制文件和配置比特流1924可以被提供给多种不同目标中的任何一个。例如,所得到的二进制文件和(多个)配置比特流1924可以被提供给仿真平台1926、硬件模拟平台1928、RTL仿真平台1930和/或目标IC 1932。在RTL仿真平台1930的情况下,硬件编译器1922可以被配置为输出可以在RTL仿真平台1930中仿真的PL部分1916的RTL。

根据仿真平台1926、模拟平台1928、RTL仿真平台1930、和/或目标IC 1932中的应用1902的实现获取的结果,可以被提供给性能剖析器和调试器1934。来自性能剖析器和调试器1934的结果可以被提供给用户接口1906,在用户接口1906处,用户可以查看执行和/或仿真应用1902的结果。

图20示出了执行设计流程以在SoC 200中实现应用的示例方法2000。方法2000可以由如结合图1描述的系统来执行。该系统可以执行结合图16或图19描述的软件架构。

在框2002中,系统接收应用。应用可以指定用于在SoC 200的DPE阵列202内实现的软件部分、以及用于在SoC 200的PL 214内实现的硬件部分。

在框2004中,系统能够为应用生成逻辑架构。例如,由系统执行的DPE编译器1602能够基于要在DPE阵列202中实现的应用的软件部分、以及任何高级别的用户指定的度量来生成逻辑架构。DPE编译器1602还能够生成SoC接口块解决方案,该SoC接口块解决方案指定DPE阵列202内和外的连接到SoC接口块206的物理数据路径的映射。

在另一方面,在生成逻辑架构和SoC接口块解决方案时,DPE编译器1602能够生成:要在DPE阵列202中实现的应用的节点(称为“DPE节点”)到特定DPE 204的初始映射。DPE编译器1602通过向NoC编译器1604提供全局存储器的NoC业务,来可选地生成应用的全局存储器数据结构到全局存储器(例如,易失性存储器134)的初始映射和路由。如上所述,NoC编译器1604能够从所接收的NoC业务生成NoC解决方案。使用初始映射和路由,DPE编译器1602能够仿真DPE部分以验证DPE部分的初始实现。DPE编译器1602能够将由仿真生成的数据输出到与在SoC接口块解决方案中使用的每个流通道相对应的硬件编译器1606。

在一个方面,如由DPE编译器1602执行的逻辑架构的生成实现了先前结合图19描述的分区。各种示例模式说明了图19中的不同编译器(DPE编译器1602、硬件编译器1606和NoC编译器1604),如何在编译应用的、被分配给每个相应编译器的部分的同时交换决策和约束。各种示例模式还说明了决策和/或约束如何逻辑地跨越SoC 200的不同子系统。

在框2006中,系统能够构建硬件部分的框图。例如,由系统执行的硬件编译器1606能够生成框图。该框图将应用的硬件部分(如逻辑架构所指定的)与SoC 200的基础平台合并。例如,硬件编译器1606能够在生成框图时连接硬件部分和基础平台。此外,硬件编译器1606能够生成框图以基于SoC接口块解决方案将与应用的硬件部分相对应的IP核心连接到SoC接口块。

例如,应用的硬件部分中的每个节点(如逻辑架构所指定的)可以被映射到特定RTL核心(例如,自定义RTL的用户提供的或指定的部分)或可用IP核心。通过节点到由用户指定的核心的映射,硬件编译器1606能够构建框图,以指定基础平台的各种电路块、针对每个逻辑架构与DPE阵列202对接所需要的PL 214的任何IP核心、和/或要在PL 214中实现的任何附加的用户指定的IP核心和/或RTL核心。可以由用户手动插入的附加IP核心和/或RTL核的示例包括但不限于:数据宽度转换块、硬件缓冲器和/或时钟域逻辑。在一个方面,框图的每个块可以对应于要在PL 214中实现的特定核心(例如,电路块)。框图指定要在PL中实现的核心的连接以及根据SoC接口块解决方案和逻辑架构而确定的、核心与NoC 208和/或SoC接口块206的物理资源的连接。

在一个方面,硬件编译器1606还能够通过根据逻辑架构创建NoC业务并且执行NoC编译器以获取NoC解决方案,来在PL 214的核心与全局存储器(例如,易失性存储器134)之间创建逻辑连接1604。在一个示例中,硬件编译器1606能够路由逻辑连接以验证PL 214实现框图和逻辑连接的能力。在另一方面,硬件编译器1606能够使用具有一个或多个数据业务生成器的SoC接口块迹线(例如,在下面更详细地描述)作为仿真的一部分,以利用实际数据业务验证框图的功能。

在框2008中,系统在框图上执行实现流程。例如,硬件编译器能够在框图上执行涉及合成(如果需要)、布局和路由的实现流程,以生成配置比特流,配置比特流可以加载到SoC 200中以在PL中实现应用的硬件部分214。

硬件编译器1606能够使用SoC接口块解决方案和NoC解决方案在框图上执行实现流程。例如,由于SoC接口块解决方案指定SoC接口块206的特定流通道,特定DPE 204通过这些流通道与PL 214通信,所以布局器能够将具有通过SoC接口块206与DPE 204的连接的框图的块靠近(例如,在特定距离内)连接了该块的SoC接口块206的特定流通道布局。例如,块的端口可以与由SoC接口块解决方案指定的流通道相关联。通过将输入到端口和/或从端口输出的信号路由到连接到耦合到端口的(多个)特定流通道的PL 214的BLI(如从SoC接口块解决方案确定的),硬件编译器1606还能够路由连接到SoC接口块206的框图的块的端口之间的连接。

类似地,由于NoC解决方案指定PL 214中的电路块要连接到的特定入口点/出口点,所以布局器能够将具有与NoC 208的连接的框图的块,靠近(例如,在特定距离内)连接了该块的特定入口点/出口点布局。例如,块的端口可以与NoC解决方案的入口点/出口点相关联。通过将输入到端口和/或从端口输出的信号路由到逻辑耦合到端口的NoC 208的入口点/出口点(如从NoC解决方案确定的),硬件编译器1606还能够路由连接到NoC 208的入口点/出口点的框图的块的端口之间的连接。硬件编译器1606还能够路由将PL 214中的块的端口彼此连接的任何信号。然而,在某些应用中,NoC 208可能不被用于在DPE阵列202与PL214之间传送数据。

在框2010中,在实现流程期间,硬件编译器可选地与DPE编译器1602和/或NoC编译器1604交换设计数据。例如,硬件编译器1606、DPE编译器1602和NoC编译器1604能够如结合图16描述的那样一次性地、根据需要、或基于迭代或重复来交换设计数据。可以可选地执行框2010。例如,在构建框图之前或期间、在布局之前和/或期间、和/或在路由之前和/或期间,硬件编译器1606能够与DPE编译器1602和/或NoC编译器1604交换设计数据。

在框2012中,系统导出由硬件编译器1606生成的最终硬件设计作为硬件分组。硬件分组包含用于对PL 214进行编程的配置比特流。硬件分组是根据应用的硬件部分而生成的。

在框2014中,用户使用硬件分组配置新平台。用户基于用户提供的配置发起新平台的生成。由系统使用硬件分组生成的平台用于编译应用的软件部分。

在框2016中,系统编译应用的软件部分用以在DPE阵列202中实现。例如,系统执行DPE编译器1602以生成一个或多个二进制文件,该二进制文件可以加载到DPE阵列202的各种DPE 204中。DPE 204的二进制文件可以包括DPE 204的目标代码、应用数据和配置数据。一旦生成了配置比特流和二进制文件,系统就能够将配置比特流和二进制文件加载到SoC200以在其中实现应用。

在另一方面,硬件编译器1606能够向DPE编译器1602提供硬件实现。DPE编译器1602能够提取硬件编译器1606在执行实现流程时所依赖的最终SoC接口块解决方案。DPE编译器1602使用与由硬件编译器1606使用的相同的SoC接口块解决方案来执行编译。

在图20的示例中,应用的每个部分由子系统特定编译器解决。编译器能够传送设计数据,例如约束和/或所建议的解决方案,以确保针对应用而实现的各种子系统(例如,SoC接口块)之间的接口是合规和一致的。虽然没有在图20中具体示出,但是如果在应用中使用,也可以调用NoC编译器1604,来生成用于对NoC 208进行编程的二进制文件。

图21示出了执行设计流程以在SoC 200中实现应用的另一示例方法2100。方法2100可以由如结合图1描述的系统来执行。该系统可以执行结合图16或图19描述的软件架构。方法2100可以在框2102中开始,其中系统接收应用。该应用可以被指定为要在SoC 200中实现的数据流图表。该应用可以包括用于在DPE阵列202中实现的软件部分、用于在PL214中实现的硬件部分和用于在SoC 200的NoC 208中实现的数据传输。该应用还可以包括用于在PS 212中实现的另外的软件部分。

在框2104中,DPE编译器1602能够根据应用生成逻辑架构、SoC接口块解决方案和SoC接口块迹线。逻辑架构可以基于以下项:实现被指定用于在DPE阵列202内实现的应用的软件部分所需要的DPE204、以及要在PL 214中实现的与DPE 204对接所需要的任何IP核心。如上所述,DPE编译器1602能够生成初始DPE解决方案,其中DPE编译器1602执行节点(应用的软件部分的节点)到DPE阵列202的初始映射。DPE编译器1602能够生成将逻辑资源映射到SoC接口块206的物理资源(例如,流通道)的初始SoC接口块解决方案。在一个方面,SoC接口块解决方案可以使用由NoC编译器1604根据数据传输生成的初始NoC解决方案来生成。DPE编译器1602还能够利用SoC接口块解决方案来仿真初始DPE解决方案,以仿真通过SoC接口块206的数据流。DPE编译器1602能够在仿真期间捕获通过SoC接口块的数据传输,作为“SoC接口块迹线”以供后续在图21所示的设计流程中使用。

在框2104中,硬件编译器1606生成要在PL 214中实现的应用的硬件部分的框图。硬件编译器1606基于逻辑架构和SoC接口块解决方案并且可选地基于由用户指定的附加IP核心生成框图,该附加IP核心将被包括在具有由逻辑架构指定的电路块的框图中。在一个方面,用户手动插入这样的附加IP核心并且将IP核心连接到在逻辑架构中指定的硬件描述的其他电路块。

在框2106中,硬件编译器1606可选地接收一个或多个用户指定的SoC接口块约束,并且将SoC接口块约束提供给DPE编译器1602。

一方面,在实现应用的硬件部分之前,硬件编译器1606能够基于框图和逻辑架构来评估在NoC 208、DPE阵列202和PL 214之间限定的物理连接。硬件编译器1606能够执行框图的架构仿真,以评估框图(例如,设计的PL部分)与DPE阵列202和/或NoC 208之间的连接。例如,硬件编译器1606能够使用由DPE编译器1602生成的SoC接口块迹线来执行仿真。作为说明性和非限制性示例,硬件编译器1606能够执行框图的SystemC仿真。在仿真中,使用SoC接口块迹线生成数据业务用于框图和用于PL 214与DPE阵列202(通过SoC接口框206)和/或NoC 208之间的流通道(例如,物理连接)。仿真生成被提供给硬件编译器1606的系统性能和/或调试信息。

硬件编译器1606能够评估系统性能数据。例如,如果硬件编译器1606根据系统性能数据确定应用的硬件部分的一个或多个设计度量不满足,则硬件编译器1606能够在用户的方向下生成一个或多个SoC接口块约束。硬件编译器1606提供SoC接口块约束作为对DPE编译器1602的请求。

DPE编译器1602能够使用由硬件编译器1606提供的SoC接口块约束,来执行应用的DPE部分到DPE阵列202的DPE 204的已更新映射。例如,如果在以下情况下实现应用:PL 214中的硬件部分通过SoC接口块206直接连接到DPE阵列202(例如,不通过NoC 208),则DPE编译器1602可以针对硬件编译器1606生成已更新SoC接口块解决方案而不涉及NoC编译器1604。

在框2108中,硬件编译器1606可选地接收一个或多个用户指定的NoC约束并且将NoC约束提供给NoC编译器以用于验证。硬件编译器1606还可以向NoC编译器1606提供NoC业务。NoC编译器1604能够使用所接收的NoC约束和/或NoC业务生成已更新NoC解决方案。例如,如果在以下情况下实现应用:PL 214的硬件部分通过NoC 208连接到DPE阵列202、PS212、硬连线电路块210或易失性存储器134,则硬件编译器1606能够通过向NoC编译器1604提供NoC约束和/或NoC业务来调用NoC编译器1604。NoC编译器1604能够更新通过NoC 208的数据路径的路由信息作为已更新NoC解决方案。已更新路由信息可以指定已更新路由和路由的特定入口点/出口点。硬件编译器1606可以获取已更新NoC解决方案,并且作为响应,生成被提供给DPE编译器1602的已更新SoC接口块约束。该过程本质上可以是迭代的。DPE编译器1602和NoC编译器1604可以同时操作,如框2106和2108所示。

在框2110中,硬件编译器1606能够在框图上执行合成。在框2112中,硬件编译器1606在框图上执行布局和路由。在框2114中,在执行布局和/或路由的同时,硬件编译器能够确定框图的实现(例如,在实现流程的这些不同阶段的任何一个阶段的硬件部分(例如,硬件设计)的实现的当前状态)是否满足应用的硬件部分的设计度量。例如,硬件编译器1606能够在布局之前、布局期间、路由之前或路由期间确定当前实现是否满足设计度量。响应于确定应用的硬件部分的当前实现不满足设计度量,方法2100继续到框2116。否则,方法2100继续到框2120。

在框2116中,硬件编译器能够向DPE编译器1602提供一个或多个用户指定的SoC接口块约束。硬件编译器1606能够可选地向NoC编译器1604提供一个或多个NoC约束。如上所述,DPE编译器1602使用从硬件编译器1606接收的(多个)SoC接口块约束,生成已更新SoC接口块解决方案。NoC编译器1604可选地生成已更新NoC解决方案。例如,如果DPE阵列202与PL214之间的一个或多个数据路径流经NoC 208,则NoC编译器1604可以被调用。在框2118中,硬件编译器1606接收已更新SoC接口块解决方案和可选的已更新NoC解决方案。在框2118之后,方法2100继续到框2112,其中硬件编译器1606继续使用已更新SoC接口块解决方案和可选的已更新NoC解决方案,来执行布局和/或路由。

图21示出了可以以迭代方式执行编译器之间的设计数据的交换。例如,在布局和/或路由阶段期间的多个不同点中的任何一个处,硬件编译器1606能够确定应用的硬件部分的实现的当前状态是否满足所建立的设计度量。如果否,则硬件编译器1606可以如上所述发起设计数据的交换,以获取已更新SoC接口块解决方案和已更新NoC解决方案,硬件编译器1606为了布局和路由的目的而使用这些解决方案。应当理解,硬件编译器1606仅需要在NoC 208的配置将被更新的情况下调用NoC编译器1604(例如,来自PL 214的数据通过NoC208被提供给其他电路块和/或从其他电路块接收)。

在框2120中,在应用的硬件部分满足设计度量的情况下,硬件编译器1606生成指定PL 214内的硬件部分的实现的配置比特流。硬件编译器1606还能够向DPE编译器1602提供最终SoC接口块解决方案(例如,用于布局和路由的SoC接口块解决方案)、并且向NoC编译器1604提供可能已经用于布局和路由的最终NoC解决方案。

在框2122中,DPE编译器1602生成用于对DPE阵列204的DPE 202进行编程的二进制文件。NoC编译器1604生成用于对NoC 208进行编程的二进制文件。例如,贯穿框2106、2108和2116,DPE编译器1602和NoC编译器1604可以执行增量验证功能,其中所使用的SoC接口块解决方案和NoC解决方案是基于验证过程而生成的,与所确定的SoC接口块和NoC的完整解决方案相比,该验证过程可以在更少的运行时中执行。在框2122中,DPE编译器1602和NoC编译器1604可以分别生成用于对DPE阵列202和NoC 208进行编程的最终二进制文件。

在框2124中,PS编译器1918生成PS二进制文件。PS二进制文件包括由PS 212执行的目标代码。例如,PS二进制文件实现由PS 212执行的控制程序,以监测在其中实现的应用的SoC 200的操作。DPE编译器1602还可以生成可以由PS编译器1918编译、并且由PS 212执行以读取和/或写入DPE阵列202的DPE 204的DPE阵列驱动程序。

在框2126中,系统能够在SoC 200中部署配置比特流和二进制文件。例如,系统能够将各种二进制文件和配置比特流组合成PDI,该PDI可以被提供给SoC 200并且加载到SoC200中以在其中实现应用。

图22示出了硬件编译器1606与DPE编译器1602之间的通信的示例方法2200。方法2200呈现了如何处理如结合图16、19、20和21描述的硬件编译器1606与DPE编译器1602之间的通信的示例。方法2200示出了在硬件编译器1606与DPE编译器1602之间进行的验证调用(例如,验证过程)的示例实现。方法2200的示例提供了如下备选方案:针对DPE阵列202和/或NoC 208执行完整布局和路由,以响应从硬件编译器1606提供的SoC接口块约束,而生成已更新SoC接口块解决方案。方法2200说明了一种增量方法,其中在发起应用的软件部分的映射和路由之前尝试重新路由。

方法2200可以开始于框2202,其中硬件编译器1606向DPE编译器1602提供一个或多个SoC接口块约束。例如,在实现流程期间并且响应于确定应用的硬件部分的设计度量不满足或不会满足,硬件编译器1606可以接收一个或多个用户指定的SoC接口块约束和/或生成一个或多个SoC接口块约束。SoC接口块约束可以指定(多个)逻辑资源到SoC接口块206的物理流通道的优选映射,该映射预期将改进应用的硬件部分的结果质量(QoS)。

硬件编译器1606向DPE编译器1602提供SoC接口块约束。从硬件编译器1606提供的SoC接口块约束可以落入两个不同类别。第一类SoC接口块约束是硬约束。第二类SoC接口块约束是软约束。硬约束是在SoC 200内实现应用必须满足的设计约束。软约束是在SoC 200的应用的实现中可以违反的设计约束。

在一个示例中,硬约束是要在PL 214中实现的应用的硬件部分的用户指定的约束。硬约束可以包括任何可用约束类型,例如位置、功率、定时等,其是用户指定的约束。软约束可以包括在整个实现流程中由硬件编译器1606和/或DPE编译器1602生成的任何可用约束,例如指定(多个)逻辑资源到SoC接口块206的流通道的特定映射的约束,如上所述。

在框2204中,响应于接收到(多个)SoC接口块约束,DPE编译器1602发起验证过程,以在生成已更新SoC接口块解决方案时并入所接收的SoC接口块约束。在框2206中,DPE编译器1602能够区分从硬件编译器1606接收的、与应用的硬件部分有关的(多个)硬约束和(多个)软约束。

在框2208中,DPE编译器1602在遵循从硬件编译器提供的(多个)硬约束和(多个)软约束两者的同时路由应用的软件部分。例如,DPE编译器1602能够路由DPE阵列202的DPE204之间的连接以及DPE 204与SoC接口块206之间的数据路径,以确定SoC接口块206的哪些流通道(例如,瓦片、流交换机和端口)用于DPE阵列202与PL 214和/或NoC 208之间的数据路径交叉。如果DPE编译器1602成功地路由应用的软件部分用以在DPE阵列202中实现,同时遵循(多个)硬约束和(多个)软约束两者,则方法2200继续到框2218。如果DPE编译器1602不能在遵循(多个)硬约束和(多个)软约束两者的同时,针对DPE阵列中的应用的软件部分生成路由,例如约束不可路由,则方法2200继续到框2210。

在框2210中,DPE编译器1602在仅遵循(多个)硬约束的同时路由应用的软件部分。在框2210中,DPE编译器1602出于路由操作的目的而忽略(多个)软约束。如果DPE编译器1602成功地路由应用的软件部分用以在DPE阵列202中实现,同时仅遵循(多个)硬约束,则方法2200继续到框2218。如果DPE编译器1602不能在仅遵循(多个)硬约束的同时针对DPE阵列202中的应用的软件部分生成路由,则方法2200继续到框2212。

框2208和2210示出了用于验证操作的方法,与执行DPE节点的完整映射(例如,布局)和路由相比,该方法寻求在更短的时间内使用从硬件编译器1606提供的(多个)SoC接口块约束,来创建已更新SoC接口块解决方案。因此,框2208和2210仅涉及路由而不尝试将DPE节点映射(例如,重新映射)或“布局”到DPE阵列202的DPE 204。

在单独路由不能使用来自硬件编译器的(多个)SoC接口块约束到达已更新SoC接口块解决方案的情况下,方法2200继续到框2212。在框2212中,DPE编译器1602能够使用(多个)硬约束和(多个)软约束两者,将应用的软件部分映射到DPE阵列202中的DPE。DPE编译器1602也用SoC 200的架构(例如,连接)被编程。DPE编译器1602执行逻辑资源到SoC接口块206的物理通道(例如,到流通道)的实际分配,并且还能够对SoC 200的架构连接进行建模。

作为示例,考虑与PL节点B通信的DPE节点A。框图的每个块可以对应于要在PL 214中实现的特定核心(例如,电路块)。PL节点B通过SoC接口块206中的物理通道X与DPE节点A通信。物理通道X承载DPE节点A与PL节点B之间的(多个)数据流。DPE编译器1602能够将DPE节点A映射到特定DPE Y使得DPE Y与物理通道X之间的距离最小化。

在SoC接口块206的一些实现中,其中包括的一个或多个瓦片没有连接到PL 214。未连接的瓦片可能是PL 214中和/或周围的特定硬连线电路块210的布局的结果。例如,在SoC接口块206中具有未连接的瓦片的这种架构使SoC接口块206与PL 214之间的路由复杂化。关于未连接瓦片的连接信息在DPE编译器1602中被建模。作为执行映射的一部分,DPE编译器1602能够选择与PL 214具有连接的DPE节点。作为执行映射的一部分,DPE编译器1602能够最小化映射到在SoC接口块206的未连接瓦片正上方的DPE阵列202的列中的DPE 204的所选的DPE节点的数目。DPE编译器1602将没有与PL 214的连接(例如,直接连接)的DPE节点(例如,连接到其他DPE 204的节点)映射到位于SoC接口块206的未连接瓦片上方的DPE阵列202的列。

在框2214中,DPE编译器1602在仅遵循(多个)硬约束的同时路由应用的重新映射的软件部分。如果DPE编译器1602成功地路由了重新映射的应用的软件部分用以在DPE阵列202中实现,同时仅遵循(多个)硬约束,则方法2200继续到框2218。如果DPE编译器1602不能在仅遵循(多个)硬约束的同时,针对DPE阵列202中的应用的软件部分生成路由,则方法2200继续到框2216。在框2216中,DPE编译器1602指示验证操作失败。DPE编译器1602可以输出通知并且可以向硬件编译器1606提供通知。

在框2218中,DPE编译器1602生成已更新SoC接口块解决方案、以及已更新SoC接口块解决方案的得分。DPE编译器1602基于在框2208、框2210或框2212和2214中确定的已更新路由或已更新映射和路由,来生成已更新SoC接口块解决方案。

由DPE编译器1602生成的得分指示基于所执行的映射和/或路由所操作的SoC接口块解决方案的质量。在一个示例实现中,DPE编译器1602基于以下项来确定得分:未满足多少软约束、以及在软约束中请求的流通道与在已更新SoC接口块解决方案中所分配的实际通道之间的距离。例如,未满足的软约束的数目和距离两者都可以与得分成反比。

在另一示例实现中,DPE编译器1602使用一个或多个设计成本度量、基于已更新SoC接口块解决方案的质量来确定得分。这些设计成本度量可以包括:SoC接口块解决方案所支持的数据移动的数目、存储器冲突成本和路由延迟。在一个方面,除了跨SoC接口块206传输数据所需要的那些之外,DPE阵列202中的数据移动的数目可以通过在DPE阵列202中使用的DMA传输的数目来量化。存储器冲突成本可以基于每个存储器组的并发访问电路(例如,DPE或DMA)的数目来确定。路由的延迟可以通过以下项来被量化:在SoC接口块206端口与个体源或目的地DPE 204之间传输数据所需要的最小周期数。当设计成本度量较低时,DPE编译器1602确定较高得分(例如,设计成本度量的总和较低)。

在另一示例实现中,已更新SoC接口块解决方案的总分被计算为分数(例如,80/100),其中分子是从100中减去以下项的总和而获取的:附加DMA传输的数目、超过两个的每个存储器组的并发访问电路的数目、以及SoC接口块206端口与DPE 204核心之间的路由所需要的跳数。

在框2220中,DPE编译器1602向硬件编译器1606提供已更新SoC接口块解决方案和得分。硬件编译器1606能够基于每个相应SoC接口块解决方案的得分,评估从DPE编译器1602接收的各种SoC接口块解决方案。在一个方面,硬件编译器1606例如能够保留先前的SoC接口块解决方案。硬件编译器1606能够将已更新SoC接口块解决方案的得分、与先前(例如,紧接在前的SoC接口块解决方案)的得分进行比较,并且如果已更新SoC接口块解决方案的得分超过先前的SoC接口块解决方案的得分,则使用已更新SoC接口块解决方案。

在另一示例实现中,硬件编译器1606从DPE编译器1602接收得分为80/100的SoC接口块解决方案。硬件编译器1606无法到达PL 214内的应用的硬件部分的实现,并且向DPE编译器1602提供一个或多个SoC接口块约束。由硬件编译器1606从DPE编译器1602接收的已更新SoC接口块解决方案的得分为20/100。在这种情况下,响应于确定新接收的SoC接口块解决方案的得分不超过(例如,低于)先前的SoC接口块解决方案的得分,硬件编译器1606放宽一个或多个SoC接口块约束(例如,软约束)、并且向DPE编译器1602提供包括(多个)放宽约束的SoC接口块约束。DPE编译器1602尝试生成另一SoC接口块解决方案,鉴于(多个)放宽的设计约束,该另一SoC接口块解决方案的得分高于20/100和/或80/100。

在另一示例中,硬件编译器1606可以选择使用具有更高或最高得分的先前的SoC接口块解决方案。硬件编译器1606可以在任何点恢复到较早的SoC接口块解决方案,例如响应于接收到与紧接在前的SoC接口块解决方案相比具有较低得分的SoC接口块解决方案、或响应于在一个或多个SoC接口块约束被放宽之后接收到与先前的SoC接口块解决方案相比具有较低得分的SoC接口块解决方案。

图23示出了处理SoC接口块解决方案的示例方法2300。方法2300可以由硬件编译器1606执行以评估(多个)所接收的SoC接口块解决方案、并且选择被称为当前最佳SoC接口块解决方案的SoC接口块解决方案以用于在应用的硬件部分上执行实现流程。

在框2302中,硬件编译器1606从DPE编译器1602接收SoC接口块解决方案。在框2302中接收的SoC接口块解决方案可以是从DPE编译器1602提供的初始或第一SoC接口块解决方案。在为硬件编译器1606提供SoC接口块方案时,DPE编译器1602进一步为SoC接口块方案提供得分。至少最初,硬件编译器1606选择第一SoC接口块解决方案作为当前最佳SoC接口块解决方案。

在框2304中,硬件编译器1606可选地从用户接收一个或多个硬SoC接口块约束。在框2306中,硬件编译器能够生成一个或多个软SoC接口块约束以实现应用的硬件部分。硬件编译器生成软SoC接口块约束以努力满足硬件设计度量。

在框2308中,硬件编译器1606将SoC接口块约束(例如,硬和软两者)发送到DPE编译器1602以进行验证。响应于接收到SoC接口块约束,DPE编译器能够基于从硬件编译器1606接收的SoC接口块约束,生成已更新SoC接口块解决方案。DPE编译器1602将已更新SoC接口块解决方案提供给硬件编译器1606。因此,在框2310中,硬件编译器接收已更新SoC接口块解决方案。

在框2312中,硬件编译器1606将已更新SoC接口块解决方案(例如,最近接收的SoC接口块解决方案)的得分与第一(例如,先前接收的)SoC接口块解决方案的得分进行比较。

在框2314中,硬件编译器1606确定已更新(例如,最近接收的)SoC接口块解决方案的得分是否超过先前接收的(例如,第一)SoC接口块解决方案的得分。在框2316中,硬件编译器1606选择最近接收的(例如,已更新)SoC接口块解决方案作为当前最佳SoC接口块解决方案。

在框2318中,硬件编译器1606确定是否已经实现改进目标或者是否已经超过时间预算。例如,硬件编译器1606能够确定应用的硬件部分的当前实现状态是否满足大量设计度量和/或已经接近满足一个或多个设计度量。硬件编译器1606还能够基于以下项来确定是否已经超过时间预算:在布局和/或路由上花费的处理时间量以及该时间是否超过最大布局时间、最大路由时间或最大数量的布局和路由的时间。响应于确定已经达到改进目标或超出时间预算,方法2300继续到框2324。如果否,则方法2300继续到框2320。

在框2324中,硬件编译器1606使用当前最佳SoC接口块解决方案来实现应用的硬件部分。

继续框2320,硬件编译器1606放宽SoC接口块约束中的一个或多个。硬件编译器1606可以放宽例如或改变软约束中的一个或多个。放宽或改变软SoC接口块约束的示例包括移除(例如,删除)软SoC接口块约束。放宽或改变软SoC接口块约束的另一示例包括:用不同SoC接口块约束来替换软SoC接口块约束。替换软SoC接口块约束可能不如被替换的原始块严格。

在框2322中,硬件编译器1606能够将(多个)SoC接口块约束(包括(多个)放宽的SoC接口块约束)发送到DPE编译器1602。在框2322之后,方法2300循环回到框2310以继续如所描述的处理。例如,DPE编译器基于在框2322中从硬件编译器接收的SoC接口块约束,来生成另外的已更新SoC接口块解决方案。在框2310中,硬件编译器接收另外的已更新SoC接口块解决方案。

方法2300示出了从DPE编译器1602选择SoC接口块解决方案,以用于执行实现流程的示例过程以及可以放宽(多个)SoC接口块约束的环境。应当理解,作为协调和/或验证过程的一部分,硬件编译器1606可以在实现流程期间的各种不同点中的任何点处,向DPE编译器1602提供SoC接口块约束,以获取已更新SoC接口块解决方案。例如,在硬件编译器1606确定(例如,基于定时、功率或其他检查或分析)应用的硬件部分的实现在其当前状态下不满足或将不满足应用的设计度量的任何点处,硬件编译器1606可以通过向DPE编译器1602提供(多个)已更新SoC接口块约束来请求已更新SoC接口块解决方案。

图24示出了用于在SoC 200中实现的应用2400的另一示例。应用2400被指定为有向流程图表。节点具有不同阴影和形状以区分PL节点、DPE节点和I/O节点。在所示示例中,I/O节点可以被映射到SoC接口块206上。PL节点在PL中实现。DPE节点映射到特定DPE。尽管没有完整地示出,但是应用2400包括要映射到DPE 204的36个内核(例如,节点)、要映射到DPE阵列数据流的72个PL和要映射到PL数据流的36个DPE阵列。

图25是由DPE编译器1602生成的SoC接口块解决方案的示例图解。图25的SoC接口块解决方案可以由DPE编译器1602生成并且被提供给硬件编译器1606。图25的示例示出了如下场景,其中DPE编译器1602生成DPE节点到DPE阵列202的DPE 204的初始映射。此外,DPE编译器1602成功地路由DPE节点的初始映射。在图25的示例中,仅示出了DPE阵列202的第6-17列。此外,每一列包括4个DPE 204。

图25示出了DPE节点到DPE阵列202的DPE 204的映射、以及数据流到SoC接口块206硬件的路由。由DPE编译器1602确定的应用2400的DPE节点0-35到DPE 204的映射是参考DPE阵列202示出的。DPE与SoC接口块206的特定瓦片之间的数据流的路由被示出为一组箭头。出于说明的目的,在描述图25-图30时,图25中显示的按键用于区分由软约束控制的数据流、硬约束控制的数据流和没有适用约束的数据流。

参考图25-图30,软约束对应于由DPE编译器1602和/或硬件编译器1606确定的路由,而硬约束可以包括用户指定的SoC接口块约束。图25所示的所有约束是软约束。图25的示例示出了其中DPE编译器1602成功确定初始SoC接口块解决方案的情况。在一个方面,DPE编译器1602可以被配置为在尝试使用沿着(例如,从左到右)行DPE 204从一列到另一列横穿的其他路由之前,至少最初尝试使用垂直路由用于如图所示的SoC接口块解决方案。

图26示出了由DPE编译器1602接收的可路由SoC接口块约束的示例。DPE编译器1602能够生成以已更新SoC接口块约束的形式的、指定已更新路由的已更新SoC接口块解决方案。在图26的示例中,大量SoC接口块约束是硬约束。在该示例中,DPE编译器1602成功地路由DPE阵列202的数据流的同时观察所示出的每种类型的约束。

图27示出了将由DPE编译器1602观察的不可路由SoC接口块约束的示例。DPE编译器1602不能产生观察图27所示的约束的SoC接口块解决方案。

图28示出了一个示例,其中DPE编译器1602忽略来自图27的软类型SoC接口块约束。在图28的示例中,DPE编译器1602仅使用硬约束成功地路由应用的软件部分用以在DPE阵列202中实现。不受约束控制的那些数据流可以以DPE编译器1602认为合适或能够这样做的任何方式被路由。

图29示出了不可路由SoC接口块约束的另一示例。图29的示例只有硬约束。因此,无法忽略硬约束的DPE编译器1602发起映射(或重新映射)操作。

图30示出了图29的DPE节点的示例映射。在该示例中,在重新映射之后,DPE编译器1602能够成功地路由DPE节点以生成已更新SoC接口块解决方案。

图31示出了不可路由SoC接口块约束的另一示例。图31的示例只有硬约束。因此,无法忽略硬约束的DPE编译器1602发起映射操作。出于说明的目的,DPE阵列202仅包括三行DPE(例如,每一列3个DPE)。

图32示出了图31的DPE节点的示例映射。图32示出了根据如结合图31所述发起的重新映射操作而获取的结果。在该示例中,在重新映射之后,DPE编译器1602能够成功地路由应用的软件解决方案,以生成已更新SoC接口块解决方案。

在一个方面,该系统能够通过生成映射问题的整数线性规划(ILP)公式来执行图25-图32所示的映射。ILP公式可以包括定义映射问题的多个不同变量和约束。该系统能够解决ILP公式,同时还可以最小化(多个)成本。可以至少部分基于所使用的多个DMA引擎来确定成本。以这种方式,该系统能够将DFG映射到DPE阵列上。

在另一方面,该系统能够以优先级的降序对DFG的节点进行排序。该系统可以基于一个或多个因素来决定优先级。该因素的示例可以包括但不限于:DFG图中的节点的高度、节点的总度数(例如,进入和离开节点的所有边缘的总和)和/或连接到节点的边缘的类型,例如存储器、流和级联。该系统能够基于密切关系和有效性将节点布局在可用的最佳DPE上。该系统能够基于在给定DPE上是否可以满足该节点的所有资源要求(例如,计算资源、存储器缓冲器、流资源)来确定有效性。该系统能够基于一个或多个其他因素确定亲和力。密切关系因素的示例可以包括:将节点布局在同一DPE或相邻DPE上(该节点的邻居已经布局在该DPE上以最小化DMA通信)、架构约束(例如,该节点是否是级联链的一部分)、和/或查找具有最大可用资源的DPE。如果在满足所有约束的情况下布局节点,则该系统能够增加布局节点的相邻节点的优先级,以便接下来处理这些节点。如果没有对当前节点有效的可用布局,则该系统可以尝试从其(多个)最佳候选DPE中取消布局一些其他节点,以便为该节点腾出空间。该系统可以将未布局的节点放回优先级队列以再次布局。该系统能够通过跟踪所执行的布局和取消布局的总数来限制在寻找良好解决方案上花费的总工作量。然而,应当理解,可以使用其他映射技术并且本文中提供的示例并非旨在进行限制。

图33示出了由结合图1描述的系统可执行的另一示例软件架构3300。例如,图33的架构3300可以实现为图1的程序模块120中的一个或多个。图33的示例软件架构3300可以被用于以下情况:应用(例如,数据流图表)指定一个或多个高级合成(HLS)内核以在PL214中实现。例如,应用的PL节点参考需要HLS处理的HLS内核。在一个方面,HLS内核以高级语言(HLL)(诸如C和/或C++)来指定。

在图33的示例中,软件架构3300包括DPE编译器1602、硬件编译器1606、HLS编译器3302和系统链接器3304。NoC编译器1604可以被包括在内并且与DPE编译器1602结合使用以执行验证检查3306,如本公开中先前所述。

如图所示,DPE编译器1602接收应用3312、SoC架构描述3310和可选的测试台3314。如上所述,应用3312可以被指定为包括并行执行语义的数据流图表。应用3312可以包括互连的PL节点和DPE节点并且指定运行参数。在该示例中,PL节点参考HLS内核。SoC架构描述3310可以是数据结构或文件,该数据结构或文件指定诸如DPE阵列202的大小和维度、PL214和其中可用的各种可编程电路块的大小、诸如PS 212中包括的处理器和其他设备的类型等PS 212的类型、以及将在其中实现应用3312的SoC 200中的电路系统的其他物理特性等信息。SoC架构描述3310还可以指定其中包括的子系统之间的连接(例如,接口)。

DPE编译器1602能够将HLS内核输出到HLS编译器3302。HLS编译器3302将在HLL中指定的HLS内核转换成可以由硬件编译器合成的HLS IP。例如,可以将HLS IP指定为寄存器传输级别(RTL)块。例如,HLS编译器3302为每个HLS内核生成RTL块。如图所示,HLS编译器3302将HLS IP输出到系统链接器3304。

DPE编译器1602生成附加输出,诸如初始SoC接口块解决方案和连接图表。DPE编译器1602将连接图表输出到系统链接器3304,并且将SoC接口块解决方案输出到硬件编译器1606。连接图表指定与要在PL 214中实现的HLS内核相对应的节点(现在转换为HLS IP)、和要在DPE阵列202中实现的节点之间的连接。

如图所示,系统链接器3304接收SoC架构描述3310。系统链接器3304还可以直接从应用3312接收一个或多个HLS和/或RTL块,该块没有通过DPE编译器1602被处理。系统链接器3304能够使用所接收的HLS和/或RTL块、HLS IP、以及指定IP内核之间的连接以及IP内核与DPE节点之间的连接的连接图表,来自动生成与应用的硬件部分相对应的框图。在一个方面,系统链接器3304能够将框图与SoC 200的基础平台(未示出)集成。例如,系统链接器3304能够将框图连接到基础平台,从而产生集成框图。框图和所连接的基础平台可以被称为可合成框图。

在另一方面,在SDF图(例如,应用3312)内被称为内核的HLS IP和RTL IP可以被编译成DPE编译器1602外部的IP。所编译的IP可以直接提供给系统链接器3304。系统链接器3304能够使用所提供的IP自动生成与应用的硬件部分相对应的框图。

在一个方面,系统链接器3304能够在框图内包括从原始SDF(例如,应用3312)和所生成的连接图表中导出的附加硬件特定细节。例如,由于应用3312包括作为实际HLS模型的软件模型,该软件模型可以使用某种机制(例如,通过名称或其他匹配/相关技术)被转换为IP或与这样的IP的数据库中的IP相关(例如,匹配),所以系统链接器3304能够自动生成框图(例如,无需用户干预)。在该示例中,可以不使用自定义IP。在自动生成框图时,系统链接器3304能够自动插入一个或多个附加电路块,诸如数据宽度转换块、硬件缓冲器、和/或时钟域交叉逻辑,在本文中描述的其他情况下,该附加电路块是手动插入的并且由用户连接。例如,系统链接器3304能够分析数据类型和软件模型,以确定创建由连接图表指定的连接所需要的一个或多个附加电路块,如上所述。

系统链接器3304将框图输出到硬件编译器1606。硬件编译器1606接收框图、以及由DPE编译器1602生成的初始SoC接口块解决方案。硬件编译器1606能够使用DPE编译器1602和可选的NoC编译器1604发起验证检查3306,如先前结合图20的框2010、图21、图22和图23的框2106、2108、2112、2114、2116和2118所述的。验证可以是一个迭代过程,其中硬件编译器向DPE编译器1602和可选地向NoC编译器1604提供设计数据,诸如各种类型的约束(在迭代方法中可以包括放宽/修改的约束),并且作为回报,从DPE编译器1602接收已更新SoC接口块解决方案、并且可选地从NoC编译器1604接收已更新NoC解决方案。

硬件编译器1606能够生成硬件分组,该硬件分组包括在PL 214中实现应用3312的硬件部分的配置比特流。硬件编译器1606能够将硬件分组输出到DPE编译器1602。DPE编译器1602能够生成DPE阵列配置数据(例如,一个或多个二进制文件),该DPE阵列配置数据对旨在在其中的DPE阵列202中实现的应用3312的软件部分进行编程。

图34示出了执行设计流程以在SoC 200中实现应用的另一示例方法3400。方法3400可以由如结合图1描述的系统来执行。该系统可以执行结合图33描述的软件架构。在图34的示例中,正在处理的应用包括指定HLS内核以在PL 214中实现的节点。

在框3402中,DPE编译器1602接收应用、SoC 200的SoC架构描述和可选的测试台。在框3404中,DPE编译器1602能够生成连接图表并且将该连接图表提供给系统链接器。在框3406中,DPE编译器1602生成初始SoC接口块解决方案、并且将初始SoC接口块解决方案提供给硬件编译器1606。初始SoC接口块解决方案可以指定应用的DPE节点到DPE阵列202的DPE204的初始映射、以及进出DPE阵列202的连接到SoC接口块206的物理数据路径的映射。

在框3408中,HLS编译器3302能够对HLS内核执行HLS以生成可合成IP核心。例如,DPE编译器1602向HLS编译器3302提供由应用的节点指定的HLS内核。HLS编译器3302为所接收的每个HLS内核生成HLS IP。HLS编译器3302将HLS IP输出到系统链接器。

在框3410中,系统链接器能够使用连接图表、SoC架构描述和HLS IP,自动生成与应用的硬件部分相对应的框图。在框3412中,系统链接器能够集成框图和SoC 200的基础平台。例如,硬件编译器1606能够将框图连接到基础平台,从而产生集成框图。在一个方面,框图和所连接的基础平台被称为可合成框图。

在框3414中,硬件编译器1606能够在集成框图上执行实现流程。在实现流程期间,硬件编译器1606能够与DPE编译器1602和可选的NoC编译器1604合作执行如本文中描述的验证,以收敛到应用的硬件部分的实现,用以在PL中实现。例如,如上所述,硬件编译器1606能够响应于确定应用的硬件部分的当前实现状态不满足一个或多个设计度量而调用DPE编译器1602和可选的NoC编译器1604。硬件编译器1606可以在布局之前、布局期间、路由之前和/或路由期间,调用DPE编译器1602和可选的NoC编译器1604。

在框3416中,硬件编译器1606将硬件实现导出到DPE编译器1602。在一个方面,硬件实现可以被输出作为设备支持档案(DSA)文件。DSA文件可以包括:平台元数据、模拟数据、由硬件编译器1606根据实现流程生成的一个或多个配置比特流等。硬件实现还可以包括最终SoC接口块解决方案和可选的最终NoC解决方案,硬件编译器1606使用该最终SoC接口块解决方案和可选的最终NoC解决方案,来创建应用的硬件部分的实现。

在框3418中,DPE编译器1602完成DPE阵列的软件生成。例如,DPE编译器1602生成用于对在应用中使用的DPE进行编程的二进制文件。在生成二进制文件时,DPE编译器1602能够使用由硬件编译器1606使用以执行实现流程的、最终SoC接口块解决方案和可选的最终NoC解决方案。在一个方面,DPE编译器能够通过检查配置比特流和/或DSA中包括的元数据,来确定由硬件编译器使用的SoC接口块解决方案。

在框3420中,NoC编译器1604生成用于对NoC 208进行编程的一个或多个二进制文件。在框3422中,PS编译器1918生成PS二进制文件。在框3424中,系统能够在SoC 200中部署配置比特流和二进制文件。

图35示出了执行设计流程以在SoC 200中实现应用的另一示例方法3500。方法3500可以由如结合图1描述的系统来执行。应用可以被指定为如本文中描述的数据流图表,并且包括用于在DPE阵列202内实现的软件部分和用于在PL 214内实现的硬件部分。

在框3502中,该系统能够生成第一接口解决方案,第一接口解决方案将软件部分所使用的逻辑资源映射到耦合DPE阵列202和PL 214的接口块的硬件资源。例如,DPE编译器1602可以生成初始或第一SoC接口块解决方案。

在框3504中,该系统能够生成指定要在DPE阵列中实现的软件部分的HLS内核和节点之间的连接的连接图表。在一个方面,DPE编译器1602能够生成连接图表。

在框3506中,该系统能够基于连接图表和HLS内核生成框图。框图是可合成的。例如,系统链接器能够生成可合成框图。

在框3508中,该系统能够使用第一接口解决方案在框图上执行实现流程。如上所述,硬件编译器1606能够在实现流程期间与DPE编译器1602和可选的NoC编译器1604交换设计数据。硬件编译器1606和DPE编译器1602可以迭代地交换数据,其中DPE编译器1602响应于被硬件编译器1606调用而向硬件编译器1606提供已更新SoC接口块解决方案。硬件编译器1606可以通过向其提供SoC接口块的一个或多个约束来调用DPE编译器。硬件编译器1606和NoC编译器1604可以迭代地交换数据,其中NoC编译器1604响应于被硬件编译器1606调用,而向硬件编译器1606提供已更新NoC解决方案。硬件编译器1606可以通过向其提供NoC208的一个或多个约束来调用NoC编译器1604。

在框3510中,系统能够使用DPE编译器1602编译应用的软件部分,以在DPE阵列202的一个或多个DPE 204中实现。DPE编译器1602可以接收实现流程的结果,以便在DPE阵列202与PL 214之间使用一致的接口(例如,由硬件编译器1606在实现流程期间使用的相同SoC接口块解决方案)。

出于解释的目的,阐述了具体的命名法以提供对本文中公开的各种发明概念的透彻理解。然而,本文中使用的术语仅用于描述本发明布置的特定方面的目的,并不旨在进行限制。

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

如本文中定义的,除非另有明确说明,否则术语“至少一个”、“一个或多个”和“和/或”是开放式表达,其在操作中既是连接的又是分离的。例如,表述“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)、记忆棒、软盘等。

如本文中定义的,取决于上下文,术语“如果”表示“当……时”或“在……时”或“响应于”或“作为对……的响应”。因此,取决于上下文,短语“如果确定”或“如果检测到[所陈述的条件或事件]”可以解释为“在确定……时”或“响应于确定”或“在检测到[所陈述的条件或事件]时”或“响应于检测到[所陈述的条件或事件]”或“作为对检测到[所述条件或事件]的响应”。

如本文中定义的,术语“高级语言”或“HLL”是指用于对数据处理系统进行编程的编程语言或指令集,其中指令具有来自数据处理系统的细节的强抽象,例如机器语言。例如,HLL能够自动化或隐藏数据处理系统的操作方面,诸如存储器管理。虽然被称为HLL,但这些语言通常被归类为“效率级语言”。HLL直接公开硬件支持的编程模型。HLL的示例包括但不限于:C、C++和其他合适的语言。

HLL可以与用于描述数字电路的硬件描述语言(HDL)(诸如Verilog、SystemVerilog和VHDL)形成对比。HDL允许设计人员创建数字电路设计的定义,该定义可以编译为通常与技术无关的寄存器传输级(RTL)网表。

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

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

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

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

术语第一、第二等可以在本文中用于描述各种元素。这些元素不应当受这些术语的限制,因为除非另有说明或上下文另有明确指示,否则这些术语仅用于将一个元素与另一元素区分开。

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

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

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

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

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

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

在一些备选实现中,块中标注的操作可以不按照图中标注的顺序发生。例如,连续示出的两个块可以基本上同时执行,或者这些块有时可以以相反顺序执行,这取决于所涉及的功能。在其他示例中,块通常可以以递增的数字顺序执行,而在其他示例中,一个或多个块可以以变化的顺序执行,结果被存储并且在随后的或不紧随其后的其他块中使用。还应当注意,框图和/或流程图说明的每个块、以及框图和/或流程图说明中的块的组合可以由执行指定功能或动作或动作或执行专用硬件和计算机指令的组合的专用的基于硬件的系统来实现。

可以在以下权利要求中找到的所有装置或步骤加功能元素的对应结构、材料、动作和等效物旨在包括用于与其他要求保护的元素相结合执行该功能的任何结构、材料或动作,正如特别要求保护的那样。

一种方法包括:对于指定用于在设备的DPE阵列内实现的软件部分、以及用于在设备的PL内实现的硬件部分的应用,使用处理器生成应用的逻辑架构和第一接口解决方案,该第一接口解决方案指定逻辑资源到DPE阵列与可编程逻辑之间的接口电路块的硬件的映射。该方法包括基于逻辑架构和第一接口解决方案构建硬件部分的框图,并且使用处理器在框图上执行实现流程。该方法包括使用处理器编译应用的软件部分以在DPE阵列的一个或多个DPE中实现。

在另一方面,构建框图包括向框图添加至少一个IP核心以用于在可编程逻辑内实现。

在另一方面,在实现流程期间,硬件编译器构建框图、并且通过与被配置为编译软件部分的DPE编译器交换设计数据来执行实现流程。

在另一方面,硬件编译器与NoC编译器交换另外的设计数据。硬件编译器接收被配置为通过设备的NoC实现路由的第一NoC解决方案,该NoC将DPE阵列耦合到设备的PL。

在另一方面,实现流程基于所交换的设计数据来执行。

在另一方面,编译软件部分是基于从实现流程生成的用于在PL中实现的应用的硬件部分的实现而执行的。

在另一方面,响应于硬件编译器确定框图的实现不满足硬件部分的设计度量,向被配置为编译软件部分的DPE编译器提供接口电路块的约束,该硬件编译器被配置为构建框图并且执行实现流程。硬件编译器从DPE编译器接收由DPE编译器基于约束而生成的第二接口解决方案。

另一方面,执行实现流程是基于第二接口解决方案而执行的。

在另一方面,响应于确定框图的实现不满足使用NoC的第一NoC解决方案的设计度量,硬件编译器向NoC编译器提供NoC的约束。硬件编译器从NoC编译器接收由NoC编译器基于NoC的约束而生成的第二NoC解决方案。

一种系统包括被配置为发起操作的处理器。该操作包括:对于指定用于在设备的DPE阵列内实现的软件部分、以及用于在设备的PL内实现的硬件部分的应用,生成应用的逻辑架构和第一接口解决方案,该第一接口解决方案指定逻辑资源到DPE阵列与PL之间的接口电路块的硬件的映射。该操作包括基于逻辑架构和第一接口解决方案构建硬件部分的框图,在框图上执行实现流程,并且编译应用的软件部分以在DPE阵列的一个或多个DPE中实现。

在另一方面,构建框图包括向框图添加至少一个IP核心以用于在PL内实现。

在另一方面,该操作包括在实现流程期间执行硬件编译器,该硬件编译器构建框图、并且通过与被配置为编译软件部分的DPE编译器交换设计数据来执行实现流程。

在另一方面,该操作包括硬件编译器与NoC编译器交换另外的设计数据,并且硬件编译器接收被配置为通过设备的NoC实现路由的第一NoC解决方案,该NoC将DPE阵列耦合到设备的PL。

在另一方面,实现流程基于所交换的设计数据来执行。

在另一方面,编译软件部分是基于以下项来被执行的:根据实现流程而生成的、用于在PL中实现的应用的硬件部分的硬件设计。

在另一方面,该操作包括:响应于硬件编译器确定框图的实现不满足硬件部分的设计约束,向被配置为编译软件部分的DPE编译器提供接口电路块的约束,该硬件编译器被配置为构建框图并且执行实现流程的。硬件编译器从DPE编译器接收由DPE编译器基于约束而生成的第二接口解决方案。

另一方面,执行实现流程是基于第二接口解决方案而执行的。

在另一方面,响应于确定框图的实现不满足使用NoC的第一NoC解决方案的设计度量,硬件编译器向NoC编译器提供NoC的约束。硬件编译器从NoC编译器接收由NoC编译器基于NoC的约束而生成的第二NoC解决方案。

一种方法包括:对于具有用于在设备的DPE阵列中实现的软件部分、以及用于在设备的PL中实现的硬件部分的应用,使用执行硬件编译器的处理器,基于接口块解决方案在硬件部分上执行实现流程,该接口块解决方案将软件部分所使用的逻辑资源映射到将DPE阵列耦合到PL的接口块的硬件。该方法包括:响应于在实现流程期间不满足设计度量,使用执行硬件编译器的处理器向DPE编译器提供接口块约束。该方法还包括:响应于接收到接口块约束,使用执行DPE编译器的处理器生成已更新接口块解决方案、并且将已更新接口块解决方案从DPE编译器提供给硬件编译器。

在另一方面,接口块约束将软件部分所使用的逻辑资源映射到接口块的物理资源。

在另一方面,硬件编译器使用已更新接口块解决方案继续实现流程。

在另一方面,响应于不满足硬件部分的设计约束,硬件编译器迭代地向DPE编译器提供接口块约束。

在另一方面,接口块约束包括硬约束和软约束。在这种情况下,该方法包括DPE编译器使用硬约束和软约束两者,来路由应用的软件部分以生成已更新接口块解决方案。

在另一方面,该方法包括:响应于未能使用硬约束和软约束两者生成已更新接口块解决方案,仅使用硬约束来路由应用的软件部分以生成已更新接口块解决方案。

在另一方面,该方法包括:响应于未能仅使用硬约束生成已更新映射,使用硬约束和软约束两者映射软件部分、并且仅使用硬约束来路由软件部分以生成已更新接口块解决方案。

在另一方面,其中接口块解决方案和已更新接口块解决方案各自具有得分,该方法包括:比较得分,并且响应于确定接口块解决方案的得分超过已更新接口块解决方案的得分,放宽接口块约束,并且将放宽的接口块约束提交给DPE编译器,以获取另外的已更新接口块解决方案。

在另一方面,接口块解决方案和已更新接口块解决方案各自具有得分。该方法包括:比较得分,并且响应于确定已更新接口块解决方案的得分超过接口块解决方案的得分,使用已更新接口块解决方案来执行实现流程。

一种系统包括被配置为发起操作的处理器。该操作包括:对于具有用于在设备的DPE阵列中实现的软件部分、以及用于在设备的PL中实现的硬件部分的应用,使用硬件编译器基于接口块解决方案在硬件部分上执行实现流程,该接口块解决方案将软件部分所使用的逻辑资源映射到将DPE阵列耦合到PL的接口块的硬件。该操作包括:响应于在实现流程期间不满足设计度量,使用硬件编译器向DPE编译器提供接口块约束。该操作还包括:响应于接收到接口块约束,使用DPE编译器生成已更新接口块解决方案、并且将已更新接口块解决方案从DPE编译器提供给硬件编译器。

在另一方面,接口块约束将软件部分所使用的逻辑资源映射到接口块的物理资源。

在另一方面,硬件编译器使用已更新接口块解决方案继续实现流程。

在另一方面,响应于不满足硬件部分的设计约束,硬件编译器迭代地向DPE编译器提供接口块约束。

在另一方面,接口块约束包括硬约束和软约束。在这种情况下,处理器被配置为发起包括以下各项的操作:DPE编译器使用硬约束和软约束两者,来路由应用的软件部分以生成已更新接口块解决方案。

在另一方面,该操作包括:响应于未能使用硬约束和软约束两者生成已更新映射,仅使用硬约束来路由应用的软件部分以生成已更新接口块解决方案。

在另一方面,该操作包括:响应于未能仅使用硬约束生成已更新映射,使用硬约束和软约束两者映射软件部分、并且仅使用硬约束来路由软件部分以生成已更新接口块解决方案。

在另一方面,接口块解决方案和已更新接口块解决方案各自具有得分。处理器被配置为发起包括以下各项的操作:比较得分,并且响应于确定接口块解决方案的得分超过已更新接口块解决方案的得分,放宽接口块约束,并且将放宽的接口块约束提交给DPE编译器,以获取另外的已更新接口块解决方案。

在另一方面,接口块解决方案和已更新接口块解决方案各自具有得分。处理器被配置为发起包括以下各项的操作:比较得分,并且响应于确定已更新接口块解决方案的得分超过接口块解决方案的得分,使用已更新接口块解决方案来执行实现流程。

一种方法包括:对于指定用于在设备的DPE阵列内实现的软件部分、以及用于在设备的PL内实现的具有HLS内核的硬件部分的应用,使用处理器生成第一接口解决方案,该第一接口解决方案将软件部分所使用的逻辑资源映射到耦合DPE阵列和PL的接口块的硬件资源。该方法包括使用处理器生成连接图表,该连接图表指定要在DPE阵列中实现的软件部分的HLS内核和节点之间的连接,并且使用处理器基于连接图表和HLS内核生成框图,其中框图是可合成的。该方法还包括使用处理器基于第一接口解决方案在框图上执行实现流程,并且使用处理器编译应用的软件部分以在DPE阵列的一个或多个DPE中实现。

在另一方面,生成框图包括对HLS内核执行HLS以生成HLS内核的可合成版本并且使用HLS内核的可合成版本构建框图。

在另一方面,HLS内核的可合成版本被指定为RTL块。

在另一方面,基于要在其中实现应用的SoC的架构的描述来执行生成框图。

在另一方面,生成框图包括将框图与基础平台连接。

在另一方面,执行实现流程包括合成框图以在PL中实现,并且基于第一接口解决方案对合成框图进行布局和路由。

在另一方面,该方法包括:在实现流程期间,执行硬件编译器,该硬件编译器构建框图、并且通过与被配置为编译软件部分的DPE编译器交换设计数据来执行实现流程。

在另一方面,该方法包括硬件编译器与NoC编译器交换另外的设计数据,并且硬件编译器接收第一NoC解决方案,该第一NoC解决方案被配置为实现通过设备的NoC的路由,该NoC将DPE阵列耦合到该设备的PL。

在另一方面,该方法包括:响应于硬件编译器确定框图的实现不满足硬件部分的设计度量,向被配置为编译软件部分的DPE编译器提供接口电路块的约束,该硬件编译器被配置为构建框图并且执行实现流程。该方法还包括硬件编译器从DPE编译器接收由DPE编译器基于约束而生成的第二接口解决方案。

另一方面,执行实现流程是基于第二接口解决方案而执行的。

一种系统包括被配置为发起操作的处理器。该操作包括:对于指定用于在设备的DPE阵列内实现的软件部分、以及用于在设备的PL内实现的具有HLS内核的硬件部分的应用,生成第一接口解决方案,该第一接口解决方案将软件部分所使用的逻辑资源映射到耦合DPE阵列和PL的接口块的硬件资源。该操作包括生成连接图表,该连接图表指定要在DPE阵列中实现的软件部分的HLS内核和节点之间的连接,并且基于连接图表和HLS内核生成框图,其中框图是可合成的。该操作还包括基于第一接口解决方案在框图上执行实现流程,并且编译应用的软件部分以在DPE阵列的一个或多个DPE中实现。

在另一方面,生成框图包括对HLS内核执行HLS以生成HLS内核的可合成版本,并且使用HLS内核的可合成版本构建框图。

在另一方面,HLS内核的可合成版本被指定为RTL块。

在另一方面,基于要在其中实现应用的SoC的架构的描述来执行生成框图。

在另一方面,生成框图包括将框图与基础平台连接。

在另一方面,执行实现流程包括合成框图以在PL中实现,并且基于第一接口解决方案对合成框图进行布局和路由。

在另一方面,该操作包括:在实现流程期间,执行硬件编译器,该硬件编译器构建框图并且通过与被配置为编译软件部分的DPE编译器交换设计数据来执行实现流程。

在另一方面,该操作包括硬件编译器与NoC编译器交换另外的设计数据,并且硬件编译器接收第一NoC解决方案,该第一NoC解决方案被配置为实现通过设备的NoC的路由,该NoC将DPE阵列耦合到该设备的PL。

在另一方面,该操作包括:响应于硬件编译器确定框图的实现不满足硬件部分的设计度量,向被配置为编译软件部分的DPE编译器提供接口电路块的约束,该硬件编译器被配置为构建框图并且执行实现流程。该方法还包括硬件编译器从DPE编译器接收由DPE编译器基于约束而生成的第二接口解决方案。

另一方面,执行实现流程是基于第二接口解决方案而执行的。

本文中公开了一种或多种计算机程序产品,该计算机程序产品包括其上存储有程序代码的计算机可读存储介质。该程序代码由计算机硬件可执行以发起本公开中描述的各种操作。

本文中提供的对本发明布置的描述是为了说明的目的,并不旨在穷举或限于所公开的形式和示例。本文中使用的术语被选择以解释本发明布置的原理、实际应用、或对市场中发现的技术的技术改进,和/或使得本领域普通技术人员能够理解本文中公开的本发明布置。在不脱离所描述的创造性布置的范围和精神的情况下,修改和变化对于本领域的普通技术人员来说是很清楚的。因此,应当参考以下权利要求而不是前述公开,权利要求指示这样的特征和实现的范围。

示例1示出了从应用中导出的逻辑架构的示例模式。

示例1

示例2示出了要在DPE阵列202中实现的应用的SoC接口块解决方案的示例模式。

示例2

示例3示出了要在NoC 208中实现的应用的NoC解决方案的示例模式。

示例3

示例4示出了用于指定SoC接口块约束和/或NoC约束的示例模式。

示例4

示例5示出了用于指定NoC业务的示例模式。

示例5

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号