CN113874867A - 用于异构可编程设备的高级综合硬件-软件设计流程 - Google Patents
用于异构可编程设备的高级综合硬件-软件设计流程 Download PDFInfo
- Publication number
- CN113874867A CN113874867A CN202080038533.2A CN202080038533A CN113874867A CN 113874867 A CN113874867 A CN 113874867A CN 202080038533 A CN202080038533 A CN 202080038533A CN 113874867 A CN113874867 A CN 113874867A
- Authority
- CN
- China
- Prior art keywords
- dpe
- compiler
- hardware
- noc
- block
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F30/00—Computer-aided design [CAD]
- G06F30/30—Circuit design
- G06F30/34—Circuit design for reconfigurable circuits, e.g. field programmable gate arrays [FPGA] or programmable logic devices [PLD]
- G06F30/343—Logical level
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F15/00—Digital computers in general; Data processing equipment in general
- G06F15/76—Architectures of general purpose stored program computers
- G06F15/78—Architectures of general purpose stored program computers comprising a single central processing unit
- G06F15/7807—System on chip, i.e. computer system on a single chip; System in package, i.e. computer system on one or more chips in a single package
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F15/00—Digital computers in general; Data processing equipment in general
- G06F15/76—Architectures of general purpose stored program computers
- G06F15/78—Architectures of general purpose stored program computers comprising a single central processing unit
- G06F15/7867—Architectures of general purpose stored program computers comprising a single central processing unit with reconfigurable architecture
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/44—Encoding
- G06F8/447—Target code generation
-
- H—ELECTRICITY
- H03—ELECTRONIC CIRCUITRY
- H03K—PULSE TECHNIQUE
- H03K19/00—Logic circuits, i.e. having at least two inputs acting on one output; Inverting circuits
- H03K19/02—Logic circuits, i.e. having at least two inputs acting on one output; Inverting circuits using specified components
- H03K19/173—Logic circuits, i.e. having at least two inputs acting on one output; Inverting circuits using specified components using elementary logic circuits as components
- H03K19/177—Logic circuits, i.e. having at least two inputs acting on one output; Inverting circuits using specified components using elementary logic circuits as components arranged in matrix form
- H03K19/17724—Structural details of logic blocks
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F15/00—Digital computers in general; Data processing equipment in general
- G06F15/76—Architectures of general purpose stored program computers
- G06F15/78—Architectures of general purpose stored program computers comprising a single central processing unit
- G06F15/7807—System on chip, i.e. computer system on a single chip; System in package, i.e. computer system on one or more chips in a single package
- G06F15/7825—Globally asynchronous, locally synchronous, e.g. network on chip
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Computer Hardware Design (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Mathematical Physics (AREA)
- Computing Systems (AREA)
- Software Systems (AREA)
- Evolutionary Computation (AREA)
- Geometry (AREA)
- Microelectronics & Electronic Packaging (AREA)
- Design And Manufacture Of Integrated Circuits (AREA)
Abstract
对于指定用于在设备的数据处理引擎DPE阵列内实现的软件部分和具有用于在所述设备的可编程逻辑PL内实现的高级综合HLS内核的硬件部分的应用程序,生成第一接口方案,所述第一接口方案将由所述软件部分使用的逻辑资源映射到耦接DPE阵列和PL的接口块的硬件资源。生成连接图和框图,所述连接图指定要在所述DPE阵列中实现的所述软件部分的节点和所述HLS内核之间的连接性,以及所述框图基于连接图和所述HLS内核。所述框图是可综合的。实施流程是在基于所述第一接口方案的框图上执行的。所述应用程序的软件部分被编译以在所述DPE阵列的一个或多个DPE中实现。
Description
版权材料中的权利保留
该专利文件的一部分公开内容包括受版权保护的材料。版权所有人不反对任何人以专利和商标局专利文件或记录中出现的方式对专利文件或专利公开进行传真复制,但在任何情况下均保留所有版权。
技术领域
本文公开涉及集成电路(IC),并且更具体地,涉及在异构可编程IC(heterogeneous and programmable IC)内实现包括硬件部分和软件部分的应用(application)。
背景技术
可编程集成电路(IC)是指一种包括可编程逻辑的IC。可编程IC的一个例子是现场可编程门阵列(FPGA)。FPGA的特点是包括可编程电路块。可编程电路块的示例包括但不限于输入/输出块(IOB)、可配置逻辑块(CLB)、专用随机存取存储器块(BRAM)、数字信号处理块(DSP)、处理器、时钟管理器、和延迟锁定环(DLL:delay lock loop)。
现代可编程IC已经发展到包括与一个或多个其他子系统组合的可编程逻辑。例如,一些可编程IC已经演变成片上系统或“SoC”,其包括可编程逻辑和硬连线处理器系统。其他种类的可编程IC包括其他和/或不同的子系统。包括在可编程IC中的子系统日益多样化,为在这些设备中实现应用提出了挑战。具有基于硬件和基于软件的子系统(例如,可编程逻辑电路和处理器)的IC的传统设计流程依赖于硬件设计人员首先为IC创建单片硬件设计。该硬件设计用作随后创建、编译和执行软件设计的平台。这种方法通常是过度限制的。
在其他情况下,软件和硬件设计过程可能是分离的。然而,硬件和软件设计过程的分离并没有提供软件要求或IC中各个子系统之间接口布置的指示。因此,硬件和软件设计过程可能无法在IC中应用的可行实现上收敛(converge)。
发明内容
一方面,一种方法包括对于具有指定用于在设备的数据处理引擎DPE阵列中实现的软件部分和用于在所述设备的可编程逻辑中实现的硬件部分的应用,通过使用处理器生成应用的逻辑架构和指定逻辑资源到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示出了集成电路(IC)的片上系统(Soc)类型的示例架构;
图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还可以包括可编程的片上网络。
在一些实施例中,应用被指定为包括多个互连节点的数据流图。数据流图的节点被指定用于在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等)的处理器、Power架构、ARM处理器等。
总线110代表多种类型的通信总线结构中的一种或多种,包括存储器总线或存储器控制器、外围总线、加速图形端口以及使用各种可用总线架构中的任一种的处理器或本地总线。作为示例而非限制,此类架构包括工业标准架构(ISA)总线、微通道架构(MCA)总线、增强型ISA(EISA)总线、视频电子标准协会(VESA)本地总线、外围组件互连(PCI))总线、和PCI Express(PCIe)总线。
主机系统102通常包括多种计算机可读介质。这种介质可以是主机系统102可访问的任何可用介质,并且可以包括易失性介质、非易失性介质、可移除介质、和/或不可移除介质的任意组合。
存储器108可以包括易失性存储器形式的计算机可读介质,例如随机存取存储器(RAM)112和/或高速缓存存储器114。主机系统102还可以包括其他可移除/不可移除、易失性/非易失性计算机系统存储介质。举例来说,可以提供存储系统116用于从不可移除的非易失性磁介质(未示出并且通常称为“硬盘驱动器”)读取和写入。尽管未示出,可以提供用于读取和写入可移除非易失性磁盘(例如“软盘”)的磁盘驱动器,以及用于读取或写入可移除非易失性光盘(例如,CD-ROM、DVD-ROM或其他光学介质)的光盘驱动器。在这种情况下,每个都可以通过一个或多个数据介质接口连接到总线110。如下文将进一步描绘和描述的,存储器108可以包括至少一个计算机程序产品,该计算机程序产品具有一组(例如,至少一个)程序模块(例如,程序代码),其被配置为执行本公开描述的功能和/或操作。
具有一组(至少一个)程序模块120的程序/实用程序(Program/utility)118可以作为示例而非限制存储在存储器108中,以及操作系统、一个或多个应用程序、其他程序模块、和程序数据中。程序模块120通常执行如本文所述的本发明实施例的功能和/或方法。例如,程序模块120可以包括一个或多个应用以及用于与硬件加速板104和/或SoC 200通信的驱动程序或保护程序。
程序/实用程序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的示例可以包括但不限于网卡、调制解调器、网络适配器、硬件控制器等。
在示例实现中,主机系统102通过其与硬件加速板104通信的I/O接口128是PCIe适配器。硬件加速板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的各种不同子系统或区域可以在单个集成封装内提供的单个管芯(die)上实现。在其他示例中,可以在作为单个集成封装提供的多个互连管芯上实现不同的子系统。
在该示例中,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)互连的大量不同长度的互连线。通常,互连线被配置(例如,以每条线为基础)以提供以每位(bit)为基础的连接性(例如,其中每条线传送一位信息)。可编程逻辑电路使用可编程元件实现用户设计的逻辑,可编程元件可以包括例如查找表、寄存器、算术逻辑等等。可编程互连和可编程逻辑电路可以通过将配置数据加载到定义可编程元件如何配置和操作的内部配置存储器单元中来编程。
PS 212被实现为硬连线电路,其被制造为SoC 200的一部分。PS 212可以被实现为,或包括,各种不同的处理器类型中的任何一种,每个处理器类型都能够执行程序代码。例如,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与其他可编程电路一起使用的情况下,在创建用户电路设计以在SoC 200内实现之前,要通过NoC 208路由的网络和/或数据传输是未知的。NoC208可以通过将配置数据加载到内部配置寄存器中进行编程,内部配置寄存器定义了NoC208内的元件(例如交换器(switch)和接口)如何配置和操作,以从交换器到交换器以及NoC接口之间传递数据。
NoC 208被制造为SoC 200的一部分,并且虽然不可物理修改,但可以被编程以在用户电路设计的不同主电路和不同从电路之间建立连接。例如,NoC 208可以包括能够建立连接用户指定的主电路和从电路的数据包交换网络(packet switched network)的多个可编程交换器。在这个方面,NoC 208能够适应不同的电路设计,其中每个不同的电路设计具有在SoC 200中不同位置实现的、可以由NoC 208耦接的主电路和从电路的不同组合。NoC208可以被编程以在用户电路设计的主电路和从电路之间路由数据,例如应用数据和/或配置数据。例如,NoC 208可以被编程为将在PL 214内实现的不同用户指定电路与PS 212、和/或DPE阵列202,与不同硬连线电路块和/或与SoC 200外部的不同电路和/或系统耦接。
硬连线电路块210可以包括输入/输出(I/O)块和/或收发器,用于向SoC 200外部的电路和/或系统、存储器控制器等发送和接收信号。不同I/O块的示例可能包括单端和伪差分I/O以及高速差分时钟收发器。此外,可以实施硬连线电路块210以执行特定功能。硬连线电路块210的其他示例包括但不限于加密引擎、数模转换器、模数转换器等。SoC 200内的硬连线电路块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可以直接连接到DPE 204-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的左侧列,包括DPE 204-1、DPE 204-11、DPE 204-21和DPE 204-31。如果SoC接口块206位于DPE 204的右侧,则SoC接口块206可以直接耦接到右侧列的DPE,包括DPE 204-10、DPE 204-20、DPE 204-30和DPE 204-40。如果SoC接口块206位于DPE 204的顶部,则SoC接口块206可以耦接到DPE的顶侧行,包括DPE 204-31、DPE 204-32、DPE 204-33、DPE 204-34、DPE 204-35、DPE 204-36、DPE 204-37、DPE 204-38、DPE 204-39和DPE 204-40。如果SoC接口块206位于多个位置,则直接连接到SoC接口块206的特定DPE可能会有所不同。例如,如果SoC接口块被实现为DPE阵列202中的行和/或列,则直接耦接到SoC接口块206的DPE可以是在SoC接口块206一侧或多侧或每一侧的与SoC接口块206相邻的那些DPE。
DPE 204通过DPE互连(未示出)互连,当共同考虑时,这些DPE互连形成DPE互连网络。如此,SoC接口块206通过与直接连接到SoC接口块206的DPE阵列202的一个或多个所选DPE 204通信并利用由在每个相应DPE 204内实现的DPE互连形成的DPE互连网络,能够与DPE阵列202的任何DPE 204通信。
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还能够在所选DPE204和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或DPE 204组,DPE(一个或多个)204和SoC接口块206被编程为这样做。类似地,对于要与一个或多个其他DPE 204通信的一个或多个特定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被包括在内并且能够存储由核心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的操作。在一个或多个实施例中,可以基于加载到配置寄存器324中的配置数据激活和/或停用核心302。在图3的示例中,配置寄存器324可经由下文更详细描述的DPE互连306的存储器映射网络来寻址(例如,可被读取和/或写入)。
在一个或多个实施例中,存储器模块304能够存储由核心302使用和/或由核心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实现共享存储器,该共享存储器支持能够访问存储器模块304的不同DPE和/或核心之间的通信。
参考图2,例如,DPE 204-14、204-16、204-5和204-25被认为是DPE 204-15的相邻DPE。在一个示例中,DPE 204-16、204-5和204-25中的每一个内的核心能够读取和写入DPE204-15内的存储器模块。在特定实施例中,只有与存储器模块相邻的那些相邻DPE可以访问DPE 204-15的存储器模块。例如,DPE 204-14虽然与DPE 204-15相邻,但可能不与DPE 204-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内的多个组(bank)。
在其他示例中,可以有多于四个的存储器接口可用。这些其他存储器接口可用于允许DPE 204-15的对角线上的DPE访问DPE 204-15的存储器模块。例如,如果DPE中的核心(例如DPE 204-14、204-24、204-26、204-4和/或204-6)也耦接到DPE 204-15中的存储器模块的可用存储器接口,此类其他DPE也将能够访问DPE 204-15的存储器模块。
存储器模块304可以包括配置寄存器336。配置寄存器336可以加载有配置数据以控制存储器模块304的操作。在图3的示例中,配置寄存器336(和324)可经由下文更详细描述的DPE互连306的存储器映射网络来寻址(例如,可被读取和/或写入)。
在图3的示例中,DPE互连306专用于DPE 204。DPE互连306促进各种操作,包括在DPE 204与DPE阵列202的一个或多个其他DPE之间的通信和/或与SoC 200的其他子系统的通信。DPE互连306进一步使得能够对DPE 204进行配置、控制、和调试。
在特定实施例中,DPE互连306被实现为片上互连。片上互连的一个示例是高级微控制器总线架构(AMBA)可扩展接口(AXI)总线(例如,或交换器)。AMBA AXI总线是一种嵌入式微控制器总线接口,用于在电路块和/或系统之间建立片上连接。此处提供AXI总线作为互连电路的示例,其可与本公开中描述的发明布置一起使用,并且因此不旨在作为限制。互连电路的其他示例可以包括其他类型的总线、交叉交换器(crossbar)和/或其他类型的交换器。
在一个或多个实施例中,DPE互连306包括两个不同的网络。第一网络能够与DPE阵列202的其他DPE和/或SoC 200的其他子系统交换数据。例如,第一网络能够交换应用数据。第二网络能够为DPE交换数据(例如配置、控制和/或调试数据)。
在图3的示例中,DPE互连306的第一网络由流交换器(stream switch)326和一个或多个流接口(未示出)形成。例如,流交换器326包括用于连接到核心302、存储器模块304、存储器映射交换器332、上方的DPE、左侧的DPE、右侧的DPE和下方的DPE中的每一个的流接口。每个流接口可以包括一个或多个主体(master)和一个或多个从体(slave)。
流交换器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耦接到并且能够与位于DPE204-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互连306根据DPE 204的位置耦接到每个相邻DPE和/或SoC接口块206的DPE互连。总的来说,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和/或与其他集成电路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可以包括交叉交换器(crossbar)。因此,任何主体都能够向任何特定的一个或多个存储器组412进行写入。如结合图3所指出的,存储器模块304连接到存储器映射交换器332,从而促进数据到存储器组412的读取和写入。因此,作为配置、控制和/或调试过程的一部分,可以通过存储器映射交换器332控制(例如写入)存储在存储器模块304中的特定数据。
存储器模块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的核心不能直接访问DPE204-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和包含在DPE 204-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可以包括一个或多个流到存储器(stream-to-memory)接口。通过DMA引擎416,可以从SoC 200内的其他源接收应用数据并将其存储在存储器模块304中。例如,可以通过流交换器326从与DPE 204-15共享边界和/或不与DPE 204-15共享边界的其他DPE接收数据。也可以通过DPE的流交换器经由SoC接口块206从SoC的其他子系统(例如,NoC 208、硬连线电路块210、PL 214和/或PS 212)接收数据。DMA引擎416能够从流交换器接收这样的数据并将数据写入到存储器模块304内的一个或多个适当的存储器组412。
DMA引擎416可以包括一个或多个存储器到流(memory-to-stream)接口。通过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和/或访问存储器模块304中的相同的(例如,共享的)缓冲的不同DPE中的DMA。
在两个DPE不相邻的情况下,这两个DPE无法访问公共存储器模块。在那种情况下,应用数据可以经由数据流(术语“数据流”和“流”在本公开中可以不时地互换使用)传输。因此,本地DMA引擎能够将该传输从基于本地存储器的传输转换为基于流的传输。在那种情况下,核心302和DMA引擎416能够使用硬件同步电路420进行同步。
PS 212能够经由存储器映射交换器332与核心302通信。例如,PS 212能够通过启动存储器读取和写入来访问存储器模块304和硬件同步电路420。在另一个实施例中,当锁的状态改变时,硬件同步电路420还可以向PS 212发送中断以避免由硬件同步电路420的PS212轮询。PS 212还能够通过流接口与DPE 204-15通信。
除了通过共享存储器模块与相邻DPE,和经由DPE互连306与相邻和/或非相邻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不包括高速缓存存储器(cache memory)。通过省略高速缓存存储器,DPE阵列202能够实现可预测的(例如,确定性的)性能。此外,由于不需要保持位于不同DPE中的高速缓存存储器之间的一致性,因此避免了大量的处理开销。
根据一个或多个实施例,DPE 204的核心302不具有输入中断。因此,DPE 204的核心302能够不间断地运行。省略对DPE 204的核心302的输入中断还允许DPE阵列a02实现可预测的(例如,确定性的)性能。
图5示出了DPE阵列的另一个示例架构。在图5的示例中,SoC接口块206提供DPE204和SoC 200的其他子系统之间的接口。SoC接口块206将DPE集成到设备中。SoC接口块206能够将配置数据传送到DPE 204、将事件从DPE 204传送到其他子系统、将事件从其他子系统传送到DPE 204、生成中断并将中断传送到DPE阵列202外部的实体、在其他子系统和DPE204之间传送应用数据、和/或在其他子系统和DPE 204之间传送跟踪和/或调试数据。
在图5的示例中,SoC接口块206包括多个互连的单元块(tile)。例如,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的任何组合。例如,DPE204可以分配到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连接到各自位于PL 214中的边界逻辑接口(BLI)电路620和BLI电路622。单元块610包括流交换器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和BLI624从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每个都可以包括一个或多个存储器映射交换器以传送配置数据。出于说明的目的,未示出存储器映射交换器。例如,存储器映射交换器能够垂直连接到紧邻在上方的DPE的存储器映射交换器、以与流交换器604相同或类似的方式连接到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进行编程的电路。例如,NMU 702、NSU 704和NPS 706可以包括确定其功能的寄存器712。NPI 710包括耦接到寄存器712的外围互连,用于对其进行编程以设置功能。NoC 208中的寄存器712支持中断、服务质量(QoS)、错误处理和报告、事务控制、电源管理和地址映射控制。寄存器712可以在被重新编程之前以可用状态被初始化,例如通过使用写请求对寄存器712进行写入。NoC 208的配置数据可以存储在非易失性存储器(NVM)中,例如作为编程设备映像(PDI:programming deviceimage)的一部分,并被提供给NPI 710用于对NoC 208和/或其他端点电路进行编程。
NMU 702是流量入口点。NSU 704是流量出口点。耦接到NMU 702和NSU 704的端点电路可以是硬化电路(例如,硬连线电路块210)或在PL 214中实现的电路。给定的端点电路可以耦接到多于一个的NMU 702或多于一个的NSU 704。
图8是根据示例描述通过NoC 208在SoC 200中的端点电路之间的连接的框图。在该示例中,端点电路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垂直延伸。在HNoC904中,路由水平延伸。在每个VNoC 902中,每个NMU 702耦接到NPS 706。同样,每个NSU 704耦接到NPS 706。NPS 706彼此耦接以形成交换器矩阵。每个VNoC 902中的一些NPS 706耦接到HNoC 904中的其他NPS 706。
虽然仅示出了单个HNoC 904,但是在其他示例中,NoC 208可以包括多于一个的HNoC 904。此外,虽然示出了两个VNoC 902,但NoC 208可以包括多于两个的VNoC 902。虽然存储器虽然接口908以示例的方式示出,但是应当理解,可以使用硬连线电路块210、其他硬连线电路块210代替存储器接口908,或在除了存储器接口908之外还使用他们。
图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的剩余配置信息可以在执行时间(runtime)期间接收。在另一示例中,可以在启动时间接收在执行时间期间接收的以下描述的全部或部分配置信息。
图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之间存在至少一个NPS1208。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可以将读/写响应发送回NSU1210。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的时钟域和NoC 208之间执行异步交叉(asynchronous crossing)和速率匹配。NMU 1206基于请求确定NSU 1210的目的地地址。在采用虚拟化的情况下,NMU 1206可以执行地址重新映射。NMU 1206还执行请求的AXI转换。NMU 1206进一步将请求打包成数据包流。
在块1306处,NMU 1206将请求的数据包发送到NPS 1208。每个NPS 1208基于目的地地址和路由信息对目标输出端口执行表查找(table lookup)。在块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。时钟管理电路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能够从应用生成一个或多个二进制文件(binary),这些二进制文件可以加载到DPE阵列202的一个或多个DPE和/或DPE 204的子集中。每个二进制文件可以包括可由DPE的核心执行的目标代码(object code)、可选的应用数据和DPE的配置数据。NoC编译器1604能够生成包括加载到NoC 208中的配置数据的二进制文件,以在其中为应用创建数据路径。硬件编译器1606能够编译应用的硬件部分以生成用于在PL 214中实现的配置位流。
图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示出了可以用于指定应用的逻辑架构的示例模式(schema)。示例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的特定单元块、流交换器、和/或流交换器接口(例如,端口)。示例2位于示例1后面靠近具体实施方式的结尾处,其说明了应用的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 208的应用的节点将被连接到的NoC 208的入口和/或出口点。例如,出于编译器收敛的目的,NoC 208内(例如,入口点和出口点之间)数据路径的更详细的路由和/或配置数据可能从NoC方案中排除。位于具体实施方式末尾的示例2之后的示例3说明了该应用的NoC方案的示例模式。
硬件编译器1606能够在逻辑架构上操作以在PL 214中实现应用的硬件部分。在硬件编译器1606不能生成满足已建立的设计约束(例如,时序、功率、数据吞吐量等)的应用的硬件部分的实现(例如,使用逻辑架构)的情况下,硬件编译器1606能够生成一个或多个SoC接口块约束和/或接收一个或多个用户指定的SoC接口块约束。硬件编译器1606能够将SoC接口块约束作为请求提供给DPE编译器1602。SoC接口块约束有效地将逻辑架构的一个或多个部分重新映射到SoC接口块206的不同流通道。从硬件编译器1606提供的SoC接口块约束更有利于硬件编译器1606在PL 214中生成满足设计指标的应用的硬件部分。示例4位于示例3之后接近具体实施方式的结尾,说明了应用的SoC接口块和/或NoC的示例约束。
在另一方面,硬件编译器1606还能够基于应用和逻辑架构生成NoC流量并将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接口块方案并且将更新的方案提供给硬件编译器1606以响应从NoC编译器1604接收的NoC方案或更新的NoC方案,和/或响应从编译器1606接收的一个或多个SoC接口块约束。DPE编译器1602基于从硬件编译器1606接收的SoC接口块约束和/或从NoC编译器1604接收的更新的NoC方案生成更新的SoC接口块方案。
应当理解,在图16中的示例中的编译器之间数据的流动仅用于说明目的。在这个方面,编译器之间的信息交换可以在本公开内描述的示例设计流程的各个阶段执行。在其他方面,编译器之间的设计数据交换可以以迭代方式执行,使得每个编译器可以基于从其他编译器接收到的信息不断改进由该编译器处理的应用部分的实现,以收敛到一个方案。
在特定示例中,硬件编译器1606在从DPE编译器1602接收到逻辑架构和SoC接口块方案以及从NoC编译器1604接收到NoC方案之后,可能确定生成满足已建立的设计指标的应用的硬件部分的实现是不可能的。由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方案可能没有足够数量的物理资源(例如电线)来容纳必须传送的数据,从而导致PL 214中的拥塞。在这种情况下,硬件编译器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内实施的应用的硬件部分。
在一方面,通过分别提供一个或多个SoC接口块约束和一个或多个NoC约束来调用DPE编译器1602和/或NoC编译器1604的硬件编译器1606是验证过程的一部分。例如,硬件编译器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被指定为包括多个节点的数据流图。每个节点都代表计算,其对应于一个功能而不是单个指令。节点通过表示数据流的边互连。节点的硬件实现可能仅响应于从到该节点的每个输入接收数据而执行。节点通常以非阻塞(non-blocking)方式执行。由应用1700指定的数据流图表示要在SoC 200中实现的并行规范,而不是顺序程序。该系统能够在应用1700(例如,以如示例1中所示的图形形式)上进行操作以将各种节点映射到SoC 200的适当子系统以在其中实现。
在一个示例中,应用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节点以在PL 214中实现。相比之下,在传统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中实现并且经由PL214、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之间以及在DPE 204-13和DPE 204-3之间建立数据路径的配置数据。为DPE 204-4生成的二进制文件包括DPE 204-4实现对应于节点D和E的计算所需的目标代码,以及与DPE 204-14和DPE 204-5建立数据路径的配置数据。
为其他DPE 204(例如DPE 204-3、204-5、204-6、204-7、204-8、和204-9)生成其他二进制文件以将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的另一个示例映射。图17B示出了替代的和比图17A中所示更详细的示例。例如,图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形成DPE 204,而存储器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方案,该方案为节点F指定不同的入口/出口点,例如入口/出口点1812。节点F的不同入口/出口点将允许硬件编译器1606将节点F放置在更靠近在更新的NoC方案中指定的新指定入口/出口点的位置,并利用NoC 208中可用的更快数据路径。
图19示出了由结合图1描述的系统可执行的另一个示例软件架构1900。例如,架构1900可以实现为图1的一个或多个程序模块120。在图19的示例中,应用1902旨在用于在SoC200内实现。
在图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中还是在PL214中都要由节点的实现要达到的各种指标(例如功率要求、延迟要求、时序和/或数据吞吐量)。
基础平台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指定的电路可用于可以在给定了特定类型的电路板的SoC 200中实现的任何应用。在这个方面,基础平台1908专用于SoC 200所耦接到的特定电路板。
在一个示例中,分区器(partitioner)1910能够基于SoC 200的子系统分离出应用1902的不同部分,在该子系统中应用1902的每个部分将被实现。在示例实现中,分区器1910被实现为用户导向的工具,其中用户提供指示应用1902的不同部分(例如,节点)中的哪一个对应于SoC 200的不同子系统中的每一个的输入。例如,提供的输入可以是性能和分区约束1904。为了说明的目的,分区器1910将应用1902划分为要在PS 212上执行的PS部分1912、要在DPE阵列202上执行的DPE阵列部分1914、要在PL 214中实现PL部分1916、以及要在NoC208中实现的NoC部分1936。一方面,分区器1910能够将PS部分1912、DPE阵列部分1914、PL部分1916和NoC部分1936中的每一个生成为单独的文件或单独的数据结构。
如图所示,对应于不同子系统的每个不同部分由子系统专用的不同编译器处理。例如,PS编译器1918能够编译PS部分1912以生成包括可由PS 212执行的目标代码的一个或多个二进制文件。DPE编译器1602能够编译DPE阵列部分1914以生成包括可由不同的DPE执行的目标代码的一个或多个二进制文件、应用数据和/或配置数据。硬件编译器1606能够在PL部分1916上执行实施流程以生成可以加载到SoC 200中以在PL 214中实现PL部分1916的配置位流。如本文所定义,术语“实施流程(implementation flow)”是指其中执行布局(place)和路由(route)以及可选地综合(synthesis)的过程。NoC编译器1604能够为NoC208生成指定配置数据的二进制文件,当其被加载到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和/或从应用1902在目标IC1932中的实现中获得的结果可以被提供给性能分析器和调试器1934。来自性能分析器和调试器的结果1934可以被提供到用户界面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接口块方案,其指定进出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编译器1604得到NoC方案来创建PL 214的核心和全局存储器(例如,易失性存储器134)之间的逻辑连接。在一个示例中,硬件编译器1606能够路由逻辑连接以验证PL 214实现框图和逻辑连接的能力。在另一方面,硬件编译器1606能够使用SoC接口块迹线(trace)(例如,下面更详细地描述)与一个或多个数据流量生成器一起作为模拟的一部分,以用实际数据流量验证框图的功能。
在框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,硬件编译器1606还能够路由框图的连接到SoC接口块206的块的端口之间的连接,其中,如从SoC接口块方案所确定,PL 214的BLI连接到耦接到这些端口的特定流通道。
类似地,由于NoC方案指定PL 214中的电路块要连接到的特定入口/出口点,布局器能够对与NoC 208有连接的框图的块进行布局,使其靠近(例如,在特定距离内)这些块要连接到的特定入口/出口点。例如,块的端口可以与NoC方案的入口/出口点相关联。通过将输入到端口和/或从端口输出的信号路由到NoC 208的入口/出口点,硬件编译器1606还能够路由框图的连接到NoC 208的入口/出口点的块的端口之间的连接,其中,如从NoC方案所确定,NoC 208的入口/出口点逻辑地耦接到的这些端口。硬件编译器1606还能够路由将PL214中的块的端口彼此连接的任何信号。然而,在某些应用中,NoC 208可以不用于在DPE阵列202和PL 214之间传送数据。
在块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的配置数据。一旦生成了配置位流和二进制文件,系统就能够将配置位流和二进制文件加载到SoC 200以在其中实现应用。
在另一方面,硬件编译器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中实现的软件部分、用于在PL 214中实现的硬件部分、以及用于在SoC 200的NoC 208中实现数据传输。该应用还可包括用于在PS 212中实现的进一步的软件部分。
在块2104中,DPE编译器1602能够从应用生成逻辑架构、SoC接口块方案、和SoC接口块迹线。逻辑架构可以基于实现被指定用于在DPE阵列202内实现的应用的软件部分所需的DPE 204,以及要在PL 214中实现的与DPE 204交互所需的任何IP核心。如上所述,DPE编译器1602能够生成初始DPE方案,其中DPE编译器1602执行(应用的软件部分的)节点到DPE阵列202的初始映射。DPE编译器1602能够生成初始SoC接口块的方案,其将逻辑资源映射到SoC接口块206的物理资源(例如,流通道)。在一方面,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之间的流通道(例如,物理连接)生成数据流量,使用SoC接口块走线。模拟生成提供给硬件编译器1606的系统性能和/或调试信息。
硬件编译器1606能够评估系统性能数据。例如,如果硬件编译器1606根据系统性能数据确定应用的硬件部分的一个或多个设计指标得不到不满足,则硬件编译器1606能够在用户的指导下生成一个或多个SoC接口块约束。硬件编译器1606提供SoC接口块约束作为对DPE编译器1602的请求。
DPE编译器1602能够执行应用的DPE部分到DPE阵列202的DPE 204的更新映射,该映射使用硬件编译器1606提供的SoC接口块约束。例如,如果应用在PL 214中的硬件部分直接通过SoC接口块206连接到DPE阵列202的情况下实现(例如,不通过NoC 208),DPE编译器1602可以在不涉及NoC编译器1604的情况下为硬件编译器1606生成更新的SoC接口块方案。
在块2108中,硬件编译器1606可选地接收一个或多个用户指定的NoC约束并且将NoC约束提供给NoC编译器用于验证。硬件编译器1606还可以向NoC编译器1606提供NoC流量。NoC编译器1604能够使用接收到的NoC约束和/或NoC流量生成更新的NoC方案。例如,如果在PL 214的硬件部分通过NoC 208连接到DPE阵列202、PS 212、硬连线电路块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和PL 214之间的一个或多个数据路径流经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的数据通过NoC 208提供给其他电路块和/或被从其他电路块接收)。
在块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还可生成DPE阵列驱动器,其可由PS编译器1918编译并由PS 212执行以读取和/或写入DPE阵列202的DPE 204。
在块2126中,系统能够在SoC 200中调配配置位流和二进制文件。例如,该系统能够将各种二进制文件和配置位流组结合入可以提供给SoC 200并加载到SoC 200中的PDI以实现其中的应用。
图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内实现应用必须满足的设计约束。软约束是在SoC200的应用实现中可能违反的设计约束。
在一个示例中,硬约束是针对要在PL 214中实现的应用的硬件部分的用户指定的约束。硬约束可以包括任何可用的约束类型,例如位置、功率、时序等,其是用户指定的约束。软约束可以包括在整个实施流程中由硬件编译器1606和/或DPE编译器1602生成的任何可用约束,例如指定逻辑资源到所描述SoC接口块206的流通道的特定映射的约束。
在块2204中,DPE编译器1602响应于接收SoC接口块约束,启动验证过程以将接收到SoC接口块约束合并到生成更新的SoC接口块方案中。在块2206中,DPE编译器1602能够区分从硬件编译器1606接收的与应用的硬件部分有关的硬约束和软约束。
在块2208中,DPE编译器1602在遵循从硬件编译器提供的硬约束和软约束两者的同时路由应用的软件部分。例如,DPE编译器1602能够路由DPE阵列202的DPE 204之间的连接以及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示出了用于验证操作的方法,该方法寻求使用从硬件编译器1606提供的SoC接口块约束(相比于要执行的完整映射(例如,地点)和DPE节点的路由)在较短时间内创建更新的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的架构连接进行建模。
作为示例,考虑DPE节点A与PL节点B通信。框图的每个块可以对应于要在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的一些实现方式中,其中包括的一个或多个单元块没有连接到PL214。未连接的单元块可能是在PL 214中和/或周围的特定硬接线电路块210的布局的结果。这种架构(例如,在SoC接口块206中具有未连接单元块)使SoC接口块206和PL 214之间的路由复杂化。在DPE编译器1602中对关于未连接块的连接信息建模。DPE编译器1602作为执行映射的一部分,能够选择与PL 214有连接的DPE节点。DPE编译器1602作为执行映射的一部分,能够最小化被映射到DPE阵列202的列中的DPE 204的所选DPE节点的数量,该DPE阵列202的列紧接在SoC接口块206的未连接单元块的上方。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核心之间的路由所需的跳(hop)数。
在块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接口块方案,鉴于放宽的设计约束,其分数高于20/100和/或80/100。
在另一个示例中,硬件编译器1606可以选择使用具有更高或最高分数的先前SoC接口块方案。硬件编译器1606可以在任何时候恢复到早期的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图中节点的高度、节点的总度数(例如,进入和离开节点的所有边的总和)和/或连接到节点的边的类型,例如存储器、流和级联。该系统能够根据亲和力(affinity)和有效性将节点放置在可用的最佳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的大小和维度、PL 214的大小和其中可用的各种可编程电路块、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的块2106、2108、2112、2114、2116和2118、图22和图23所描述的。验证可以是迭代过程,其中硬件编译器向DPE编译器1602和可选地向NoC编译器1604提供设计数据,例如各种类型的约束(在迭代方法中可以包括放宽/修改的约束),并且,作为回报,从DPE编译器1602接收更新的SoC接口块方案,并可选地从NoC编译器1604接收更新的NoC方案。
硬件编译器1606能够生成硬件包,该硬件包包括在PL 214中实现的应用3312的硬件部分的配置位流。硬件编译器1606能够将硬件包输出到DPE编译器1602。DPE编译器1602能够生成DPE阵列配置数据(例如,一个或多个二进制文件),DPE编译器1602能够生成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的DPE 204的初始映射以及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使用它来创建应用的硬件部分的实现。
在块3418中,DPE编译器1602完成DPE阵列的软件生成。例如,DPE编译器1602生成用于对应用中使用的DPE进行编程的二进制文件。在生成二进制文件时,DPE编译器1602能够使用最终的SoC接口块方案和可选地由硬件编译器1606使用的最终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中,系统能够生成指定HLS内核和要在DPE阵列中实现的软件部分的节点之间的连接性的连接图。一方面,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可以通过向NoC 208提供一个或多个约束来调用NoC编译器1604。
在块3510中,系统能够使用DPE编译器1602编译应用的软件部分以在DPE阵列202的一个或多个DPE 204中实现。DPE编译器1602可以接收实施流程的结果,以便在DPE阵列202和PL 214之间使用一致的接口(例如,硬件编译器1606在实施流程期间使用的相同SoC接口块方案)。
出于解释的目的,阐述了具体的命名法以提供对本公开的各种发明概念的透彻理解。然而,此处使用的术语仅用于描述本发明布置的特定方面的目的,并不旨在进行限制。
如本文所定义,单数形式“一”、“一个”和“该”也旨在包括复数形式,除非上下文另有明确指示。
如本文所定义,除非另有明确说明,否则术语“至少一个”、“一个或多个”和“和/或”是开放式表达,其在操作中既是连接的又是分离的。例如,表述“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实现路由,该设备的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
Claims (15)
1.一种方法,其特征在于,所述方法包括:
对于指定用于在设备的数据处理引擎DPE阵列内实现的软件部分和具有用于在所述设备的可编程逻辑内实现的高级综合HLS内核的硬件部分的应用,通过使用处理器生成第一接口方案,所述第一接口方案将由所述软件部分使用的逻辑资源映射到接口电路块的硬件资源,所述接口电路块的硬件资源耦接所述DPE阵列和所述可编程逻辑;
通过使用所述处理器生成连接图,所述连接图指定要在所述DPE阵列中实现的所述软件部分的节点和所述HLS内核之间的连接性;
基于所述连接图和所述HLS内核,通过使用所述处理器生成框图,其中所述框图是可综合的;
基于所述第一接口方案,通过使用所述处理器在所述框图上执行实施流程;和
通过使用所述处理器编译所述应用的所述软件部分,以在所述DPE阵列的一个或多个DPE中实现。
2.根据权利要求1所述的方法,其特征在于,生成所述框图包括:
在所述HLS内核上执行HLS,以生成所述HLS内核的可综合版本;和
通过使用所述HLS内核的可综合版本构建所述框图。
3.根据权利要求1所述的方法,其特征在于,生成所述框图是基于实现所述应用的片上系统的体系结构的描述来执行的。
4.根据权利要求3所述的方法,其特征在于,生成所述框图进一步包括将所述框图与基础平台连接。
5.根据权利要求1所述的方法,其特征在于,所述方法进一步包括:
在实施流程期间,执行硬件编译器,所述硬件编译器通过与DPE编译器交换设计数据构建所述框图和执行实施流程,所述DPE编译器被配置为编译所述软件部分。
6.根据权利要求5所述的方法,其特征在于,所述方法进一步包括:
所述硬件编译器与所述片上网络NoC编译器进一步交换所述设计数据;和
所述硬件编译器接收第一NoC方案,所述第一NoC方案被配置为通过所述设备的NoC实现路由,所述设备的NoC将所述DPE阵列耦接到所述设备的可编程逻辑。
7.根据权利要求1所述的方法,其特征在于,所述方法进一步包括:
响应于所述硬件编译器确定所述框图的实现不满足硬件部分的设计指标,向DPE编译器提供针对所述接口电路块的约束条件,其中所述硬件编译器被配置为构建所述框图并执行实施流程,而所述DPE编译器被配置为编译所述软件部分;和
所述硬件编译器从所述DPE编译器接收第二接口方案,所述第二接口方案由所述DPE编译器基于所述约束条件生成。
8.根据权利要求7所述的方法,其特征在于,执行实施流程是基于所述第二接口方案执行的。
9.一种系统,其特征在于,所述系统包括:
处理器,所述处理器被配置为启动操作,所述操作包括:
对于指定用于在设备的数据处理引擎DPE阵列中实现的软件部分和具有用于在所述设备的可编程逻辑中实现的高级综合HLS内核的硬件部分的应用,生成第一接口方案,所述第一接口方案将由所述软件部分使用的逻辑资源映射到接口电路块的硬件资源,所述接口电路块的硬件资源耦接所述DPE阵列和所述可编程逻辑;
生成连接图,所述连接图指定要在所述DPE阵列中实现的所述软件部分的节点和所述HLS内核之间的连接性;
基于所述连接图和所述HLS内核生成所述框图,其中框图是可综合的;
基于所述第一接口方案在所述框图上执行所述实施流程;和
编译所述应用的所述软件部分,以在所述DPE阵列的一个或多个DPE中实现。
10.根据权利要求9所述的系统,其特征在于,其中生成所述框图包括:
在所述HLS内核上执行HLS以生成所述HLS内核的可综合版本;和
通过使用所述HLS内核的所述可综合版本构建所述框图。
11.根据权利要求9所述的系统,其特征在于,生成所述框图是基于实现所述应用的片上系统的体系结构的描述来执行的。
12.根据权利要求11所述的系统,其特征在于,生成所述框图进一步包括将所述框图与基础平台连接。
13.根据权利要求9所述的系统,其特征在于,所述处理器被配置为启动进一步包括下述步骤的操作:
在实施流程期间,执行硬件编译器,所述硬件编译器通过与DPE编译器交换设计数据构建所述框图和执行实施流程,所述DPE编译器被配置为编译所述软件部分。
14.根据权利要求13所述的系统,其特征在于,所述处理器被配置为启动进一步包括下述步骤的操作:
所述硬件编译器与片上网络NoC编译器进一步交换设计数据;和
所述硬件编译器接收第一NoC方案,所述第一NoC方案被配置为通过设备的NoC实现路由,所述设备的NoC将所述DPE阵列耦接到所述设备的可编程逻辑。
15.根据权利要求9所述的系统,其特征在于,所述处理器被配置为启动进一步包括下述步骤的操作:
响应于所述硬件编译器确定所述框图的实现不满足硬件部分的设计指标,向DPE编译器提供针对所述接口电路块的约束条件,其中所述硬件编译器被配置为构建所述框图并执行实施流程,而所述DPE编译器被配置为编译所述软件部分;和
所述硬件编译器从所述DPE编译器接收第二接口方案,所述第二接口方案由DPE编译器基于所述约束条件生成。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US16/421,444 US11188312B2 (en) | 2019-05-23 | 2019-05-23 | Hardware-software design flow with high-level synthesis for heterogeneous and programmable devices |
US16/421,444 | 2019-05-23 | ||
PCT/US2020/032977 WO2020236529A1 (en) | 2019-05-23 | 2020-05-14 | Hardware-software design flow with high-level synthesis for heterogeneous and programmable devices |
Publications (1)
Publication Number | Publication Date |
---|---|
CN113874867A true CN113874867A (zh) | 2021-12-31 |
Family
ID=70919277
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202080038533.2A Pending CN113874867A (zh) | 2019-05-23 | 2020-05-14 | 用于异构可编程设备的高级综合硬件-软件设计流程 |
Country Status (6)
Country | Link |
---|---|
US (2) | US11188312B2 (zh) |
EP (1) | EP3973435A1 (zh) |
JP (1) | JP7465895B2 (zh) |
KR (1) | KR20220023346A (zh) |
CN (1) | CN113874867A (zh) |
WO (1) | WO2020236529A1 (zh) |
Families Citing this family (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US11615052B1 (en) * | 2019-05-23 | 2023-03-28 | Xilinx, Inc. | Packet identification (ID) assignment for routing network |
US10802807B1 (en) | 2019-05-23 | 2020-10-13 | Xilinx, Inc. | Control and reconfiguration of data flow graphs on heterogeneous computing platform |
CN111985181B (zh) * | 2020-08-25 | 2023-09-22 | 北京灵汐科技有限公司 | 一种节点布局方法、装置、计算机设备及存储介质 |
US11270051B1 (en) | 2020-11-09 | 2022-03-08 | Xilinx, Inc. | Model-based design and partitioning for heterogeneous integrated circuits |
US11829733B2 (en) | 2021-11-22 | 2023-11-28 | Xilinx, Inc. | Synthesis flow for data processing engine array applications relying on hardware library packages |
KR20240138126A (ko) | 2022-03-22 | 2024-09-20 | 미쓰비시덴키 가부시키가이샤 | 반도체 설계 지원 장치, 반도체 설계 지원 방법, 및 기록 매체에 저장된 반도체 설계 지원 프로그램 |
US20240094944A1 (en) * | 2022-09-21 | 2024-03-21 | Xilinx, Inc. | Implementing data flows of an application across a memory hierarchy of a data processing array |
Family Cites Families (132)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US3776137A (en) | 1971-09-24 | 1973-12-04 | Aai Corp | Projectile and cartridge arrangement |
GB8618943D0 (en) | 1986-08-02 | 1986-09-10 | Int Computers Ltd | Data processing apparatus |
US5752035A (en) * | 1995-04-05 | 1998-05-12 | Xilinx, Inc. | Method for compiling and executing programs for reprogrammable instruction set accelerator |
US5848264A (en) | 1996-10-25 | 1998-12-08 | S3 Incorporated | Debug and video queue for multi-processor chip |
CA2205797C (en) | 1997-05-22 | 2001-04-24 | Andrew Wilfred Macleod | A system for local context spilling for graph colouring register allocators |
US6195788B1 (en) | 1997-10-17 | 2001-02-27 | Altera Corporation | Mapping heterogeneous logic elements in a programmable logic device |
US6080204A (en) | 1997-10-27 | 2000-06-27 | Altera Corporation | Method and apparatus for contemporaneously compiling an electronic circuit design by contemporaneously bipartitioning the electronic circuit design using parallel processing |
US6075935A (en) | 1997-12-01 | 2000-06-13 | Improv Systems, Inc. | Method of generating application specific integrated circuits using a programmable hardware architecture |
US6091263A (en) | 1997-12-12 | 2000-07-18 | Xilinx, Inc. | Rapidly reconfigurable FPGA having a multiple region architecture with reconfiguration caches useable as data RAM |
US6204687B1 (en) | 1999-08-13 | 2001-03-20 | Xilinx, Inc. | Method and structure for configuring FPGAS |
US6526557B1 (en) | 2000-07-25 | 2003-02-25 | Xilinx, Inc. | Architecture and method for partially reconfiguring an FPGA |
US7856543B2 (en) | 2001-02-14 | 2010-12-21 | Rambus Inc. | Data processing architectures for packet handling wherein batches of data packets of unpredictable size are distributed across processing elements arranged in a SIMD array operable to process different respective packet protocols at once while executing a single common instruction stream |
US6836842B1 (en) | 2001-04-24 | 2004-12-28 | Xilinx, Inc. | Method of partial reconfiguration of a PLD in which only updated portions of configuration data are selected for reconfiguring the PLD |
US6462579B1 (en) | 2001-04-26 | 2002-10-08 | Xilinx, Inc. | Partial reconfiguration of a programmable gate array using a bus macro |
US7996827B2 (en) * | 2001-08-16 | 2011-08-09 | Martin Vorbach | Method for the translation of programs for reconfigurable architectures |
US7420392B2 (en) | 2001-09-28 | 2008-09-02 | Xilinx, Inc. | Programmable gate array and embedded circuitry initialization and processing |
US6781407B2 (en) | 2002-01-09 | 2004-08-24 | Xilinx, Inc. | FPGA and embedded circuitry initialization and processing |
JP2003114914A (ja) | 2001-10-04 | 2003-04-18 | Sharp Corp | ソフトウェア/ハードウェア協調設計方法 |
US6759869B1 (en) | 2002-06-05 | 2004-07-06 | Xilinx, Inc. | Large crossbar switch implemented in FPGA |
US6810514B1 (en) | 2002-07-03 | 2004-10-26 | Xilinx, Inc. | Controller arrangement for partial reconfiguration of a programmable logic device |
US7080283B1 (en) | 2002-10-15 | 2006-07-18 | Tensilica, Inc. | Simultaneous real-time trace and debug for multiple processing core systems on a chip |
US6907595B2 (en) | 2002-12-13 | 2005-06-14 | Xilinx, Inc. | Partial reconfiguration of a programmable logic device using an on-chip processor |
WO2004072796A2 (en) * | 2003-02-05 | 2004-08-26 | Arizona Board Of Regents | Reconfigurable processing |
US7149829B2 (en) | 2003-04-18 | 2006-12-12 | Sonics, Inc. | Various methods and apparatuses for arbitration among blocks of functionality |
US8020163B2 (en) | 2003-06-02 | 2011-09-13 | Interuniversitair Microelektronica Centrum (Imec) | Heterogeneous multiprocessor network on chip devices, methods and operating systems for control thereof |
US7124338B1 (en) | 2003-10-10 | 2006-10-17 | Xilinx, Inc. | Methods of testing interconnect lines in programmable logic devices using partial reconfiguration |
US7653820B1 (en) | 2003-10-31 | 2010-01-26 | Xilinx, Inc. | System and method for securing using decryption keys during FPGA configuration using a microcontroller |
US7185309B1 (en) | 2004-01-30 | 2007-02-27 | Xilinx, Inc. | Method and apparatus for application-specific programmable memory architecture and interconnection network on a chip |
US7328335B1 (en) | 2004-10-01 | 2008-02-05 | Xilinx, Inc. | Bootable programmable logic device for internal decoding of encoded configuration data |
US7689726B1 (en) | 2004-10-01 | 2010-03-30 | Xilinx, Inc. | Bootable integrated circuit device for readback encoding of configuration data |
US7224184B1 (en) | 2004-11-05 | 2007-05-29 | Xilinx, Inc. | High bandwidth reconfigurable on-chip network for reconfigurable systems |
US7635987B1 (en) | 2004-12-13 | 2009-12-22 | Massachusetts Institute Of Technology | Configuring circuitry in a parallel processing environment |
US7281093B1 (en) | 2004-12-21 | 2007-10-09 | Xilinx, Inc. | Memory apparatus for a message processing system and method of providing same |
US7199608B1 (en) | 2005-02-17 | 2007-04-03 | Xilinx, Inc. | Programmable logic device and method of configuration |
US7380035B1 (en) | 2005-03-24 | 2008-05-27 | Xilinx, Inc. | Soft injection rate control for buses or network-on-chip with TDMA capability |
US7788625B1 (en) | 2005-04-14 | 2010-08-31 | Xilinx, Inc. | Method and apparatus for precharacterizing systems for use in system level design of integrated circuits |
US7418690B1 (en) | 2005-04-29 | 2008-08-26 | Altera Corporation | Local searching techniques for technology mapping |
US7301822B1 (en) | 2005-05-18 | 2007-11-27 | Xilinx, Inc. | Multi-boot configuration of programmable devices |
US7587612B2 (en) | 2005-06-30 | 2009-09-08 | Intel Corporation | Generating and communicating information on locations of program sections in memory |
US7509617B1 (en) | 2005-09-12 | 2009-03-24 | Xilinx, Inc. | Design methodology to support relocatable bit streams for dynamic partial reconfiguration of FPGAs to reduce bit stream memory requirements |
US7546572B1 (en) | 2005-09-20 | 2009-06-09 | Xilinx, Inc. | Shared memory interface in a programmable logic device using partial reconfiguration |
US7302625B1 (en) | 2005-11-21 | 2007-11-27 | Xilinx, Inc. | Built-in self test (BIST) technology for testing field programmable gate arrays (FPGAs) using partial reconfiguration |
US7477072B1 (en) | 2006-01-17 | 2009-01-13 | Xilinx, Inc. | Circuit for and method of enabling partial reconfiguration of a device having programmable logic |
US7650248B1 (en) | 2006-02-10 | 2010-01-19 | Xilinx, Inc. | Integrated circuit for in-system signal monitoring |
US7454658B1 (en) | 2006-02-10 | 2008-11-18 | Xilinx, Inc. | In-system signal analysis using a programmable logic device |
JP2007286671A (ja) * | 2006-04-12 | 2007-11-01 | Fujitsu Ltd | ソフトウェア/ハードウェア分割プログラム、および分割方法。 |
US7640527B1 (en) | 2006-06-29 | 2009-12-29 | Xilinx, Inc. | Method and apparatus for partial reconfiguration circuit design for a programmable device |
US7478357B1 (en) | 2006-08-14 | 2009-01-13 | Xilinx, Inc. | Versatile bus interface macro for dynamically reconfigurable designs |
US7831801B1 (en) | 2006-08-30 | 2010-11-09 | Xilinx, Inc. | Direct memory access-based multi-processor array |
US7636816B2 (en) | 2006-09-29 | 2009-12-22 | Broadcom Corporation | Global address space management |
US7506298B1 (en) | 2006-12-19 | 2009-03-17 | Xilinx, Inc. | Methods of mapping a logical memory representation to physical memory in a programmable logic device |
US7521961B1 (en) | 2007-01-23 | 2009-04-21 | Xilinx, Inc. | Method and system for partially reconfigurable switch |
US7724815B1 (en) | 2007-02-27 | 2010-05-25 | Xilinx, Inc. | Method and apparatus for a programmably terminated receiver |
US7500060B1 (en) | 2007-03-16 | 2009-03-03 | Xilinx, Inc. | Hardware stack structure using programmable logic |
US20080320255A1 (en) | 2007-06-25 | 2008-12-25 | Sonics, Inc. | Various methods and apparatus for configurable mapping of address regions onto one or more aggregate targets |
US7518396B1 (en) | 2007-06-25 | 2009-04-14 | Xilinx, Inc. | Apparatus and method for reconfiguring a programmable logic device |
US8046727B2 (en) | 2007-09-12 | 2011-10-25 | Neal Solomon | IP cores in reconfigurable three dimensional integrated circuits |
US7576561B1 (en) | 2007-11-13 | 2009-08-18 | Xilinx, Inc. | Device and method of configuring a device having programmable logic |
US8250342B1 (en) | 2008-01-09 | 2012-08-21 | Xilinx, Inc. | Digital signal processing engine |
US7746099B1 (en) | 2008-01-11 | 2010-06-29 | Xilinx, Inc. | Method of and system for implementing a circuit in a device having programmable logic |
US8006021B1 (en) | 2008-03-27 | 2011-08-23 | Xilinx, Inc. | Processor local bus bridge for an embedded processor block core in an integrated circuit |
US8370776B1 (en) | 2008-06-13 | 2013-02-05 | Altera Corporation | Method and apparatus for compiling intellectual property systems design cores using an incremental compile design flow |
US20110099562A1 (en) * | 2008-07-01 | 2011-04-28 | Morphing Machines Pvt Ltd | Method and System on Chip (SoC) for Adapting a Reconfigurable Hardware for an Application at Runtime |
US8045546B1 (en) | 2008-07-08 | 2011-10-25 | Tilera Corporation | Configuring routing in mesh networks |
US8214694B1 (en) | 2009-03-12 | 2012-07-03 | Xilinx, Inc. | Lightweight probe and data collection within an integrated circuit |
JP5383792B2 (ja) | 2009-03-30 | 2014-01-08 | 三洋電機株式会社 | 太陽電池 |
US8289960B2 (en) | 2009-06-22 | 2012-10-16 | Citrix Systems, Inc. | Systems and methods for N-core tracing |
US8359448B1 (en) | 2009-07-17 | 2013-01-22 | Xilinx, Inc. | Specific memory controller implemented using reconfiguration |
US9043769B2 (en) * | 2009-12-28 | 2015-05-26 | Hyperion Core Inc. | Optimization of loops and data flow sections in multi-core processor environment |
US8719808B1 (en) | 2010-01-27 | 2014-05-06 | Altera Corporation | Method and apparatus for using object files to provide reliable program operation |
EP2534604A4 (en) | 2010-02-11 | 2013-12-04 | Hewlett Packard Development Co | ACCESS OF FILE EXECUTABLE ON THE BASIS OF IDENTITY |
WO2011114539A1 (en) * | 2010-03-17 | 2011-09-22 | Nec Corporation | A programming supporting device and a method for generating routing information for an array of computing nodes |
US9134976B1 (en) * | 2010-12-13 | 2015-09-15 | Reservoir Labs, Inc. | Cross-format analysis of software systems |
US8415974B1 (en) | 2011-03-09 | 2013-04-09 | Xilinx, Inc. | Methods and circuits enabling dynamic reconfiguration |
US8868894B2 (en) | 2011-05-06 | 2014-10-21 | Xcelemor, Inc. | Computing system with hardware scheduled reconfiguration mechanism and method of operation thereof |
US9081896B1 (en) * | 2012-03-21 | 2015-07-14 | Amazon Technologies, Inc. | Generating a replacement binary for emulation of an application |
US9286221B1 (en) * | 2012-06-06 | 2016-03-15 | Reniac, Inc. | Heterogeneous memory system |
US9134981B2 (en) | 2012-06-22 | 2015-09-15 | Altera Corporation | OpenCL compilation |
US9479456B2 (en) * | 2012-11-02 | 2016-10-25 | Altera Corporation | Programmable logic device with integrated network-on-chip |
US9081634B1 (en) | 2012-11-09 | 2015-07-14 | Xilinx, Inc. | Digital signal processing block |
US8719750B1 (en) | 2012-11-12 | 2014-05-06 | Xilinx, Inc. | Placement and routing of a circuit design |
US10558437B1 (en) * | 2013-01-22 | 2020-02-11 | Altera Corporation | Method and apparatus for performing profile guided optimization for high-level synthesis |
US9230112B1 (en) | 2013-02-23 | 2016-01-05 | Xilinx, Inc. | Secured booting of a field programmable system-on-chip including authentication of a first stage boot loader to mitigate against differential power analysis |
US8928351B1 (en) | 2013-03-13 | 2015-01-06 | Xilinx, Inc. | Emulating power domains in an integrated circuit using partial reconfiguration |
US9336010B2 (en) | 2013-03-15 | 2016-05-10 | Xilinx, Inc. | Multi-boot or fallback boot of a system-on-chip using a file-based boot device |
US9165143B1 (en) | 2013-03-15 | 2015-10-20 | Xilinx, Inc. | Image file generation and loading |
US9304986B1 (en) * | 2013-06-18 | 2016-04-05 | Altera Corporation | Methods and systems to automatically connect with interfaces |
US9152794B1 (en) | 2013-09-05 | 2015-10-06 | Xilinx, Inc. | Secure key handling for authentication of software for a system-on-chip |
US9501449B2 (en) * | 2013-09-10 | 2016-11-22 | Sviral, Inc. | Method, apparatus, and computer-readable medium for parallelization of a computer program on a plurality of computing cores |
US20150109024A1 (en) * | 2013-10-22 | 2015-04-23 | Vaughn Timothy Betz | Field Programmable Gate-Array with Embedded Network-on-Chip Hardware and Design Flow |
US9411688B1 (en) | 2013-12-11 | 2016-08-09 | Xilinx, Inc. | System and method for searching multiple boot devices for boot images |
US9686358B2 (en) | 2014-01-22 | 2017-06-20 | Alcatel Lucent | Devices and methods for network-coded and caching-aided content distribution |
US9652410B1 (en) | 2014-05-15 | 2017-05-16 | Xilinx, Inc. | Automated modification of configuration settings of an integrated circuit |
US9553762B1 (en) * | 2014-06-26 | 2017-01-24 | Altera Corporation | Network-on-chip with fixed and configurable functions |
US9436785B1 (en) | 2014-09-19 | 2016-09-06 | Xilinx, Inc. | Hierarchical preset and rule based configuration of a system-on-chip |
US9652252B1 (en) | 2014-10-29 | 2017-05-16 | Xilinx, Inc. | System and method for power based selection of boot images |
US9147024B1 (en) * | 2014-11-06 | 2015-09-29 | Xilinx, Inc. | Hardware and software cosynthesis performance estimation |
US9218443B1 (en) * | 2014-11-12 | 2015-12-22 | Xilinx, Inc. | Heterogeneous multiprocessor program compilation targeting programmable integrated circuits |
EP3218827B1 (en) | 2014-11-12 | 2020-05-27 | Xilinx, Inc. | Heterogeneous multiprocessor program compilation targeting programmable integrated circuits |
US9223921B1 (en) * | 2014-11-13 | 2015-12-29 | Xilinx, Inc. | Compilation of HLL code with hardware accelerated functions |
US9836283B2 (en) * | 2014-11-14 | 2017-12-05 | Cavium, Inc. | Compiler architecture for programmable application specific integrated circuit based network devices |
US9323876B1 (en) | 2014-11-24 | 2016-04-26 | Xilinx, Inc. | Integrated circuit pre-boot metadata transfer |
US9992042B2 (en) * | 2014-12-17 | 2018-06-05 | Intel Corporation | Pipelined hybrid packet/circuit-switched network-on-chip |
US9787571B2 (en) * | 2014-12-22 | 2017-10-10 | Intel Corporation | Link delay based routing apparatus for a network-on-chip |
US9979668B2 (en) * | 2014-12-22 | 2018-05-22 | Intel Corporation | Combined guaranteed throughput and best effort network-on-chip |
US9961019B2 (en) * | 2014-12-22 | 2018-05-01 | Intel Corporation | Adaptively switched network-on-chip |
US10089259B2 (en) * | 2015-07-21 | 2018-10-02 | BigStream Solutions, Inc. | Precise, efficient, and transparent transfer of execution between an auto-generated in-line accelerator and processor(s) |
US9864828B1 (en) * | 2015-09-17 | 2018-01-09 | Xilinx, Inc. | Hardware acceleration device handoff for using programmable integrated circuits as hardware accelerators |
US10180850B1 (en) * | 2015-11-03 | 2019-01-15 | Xilinx, Inc. | Emulating applications that use hardware acceleration |
CN105429909B (zh) | 2015-12-31 | 2018-11-20 | 上海交通大学 | 一种基于复色的并行交换调度方法 |
US20170220499A1 (en) | 2016-01-04 | 2017-08-03 | Gray Research LLC | Massively parallel computer, accelerated computing clusters, and two-dimensional router and interconnection network for field programmable gate arrays, and applications |
US9805152B1 (en) | 2016-02-17 | 2017-10-31 | Xilinx, Inc. | Compilation of system designs |
US9946674B2 (en) * | 2016-04-28 | 2018-04-17 | Infineon Technologies Ag | Scalable multi-core system-on-chip architecture on multiple dice for high end microcontroller |
US9977663B2 (en) * | 2016-07-01 | 2018-05-22 | Intel Corporation | Technologies for optimizing sparse matrix code with field-programmable gate arrays |
US10452124B2 (en) * | 2016-09-12 | 2019-10-22 | Netspeed Systems, Inc. | Systems and methods for facilitating low power on a network-on-chip |
US10243882B1 (en) | 2017-04-13 | 2019-03-26 | Xilinx, Inc. | Network on chip switch interconnect |
US10628547B1 (en) * | 2017-06-30 | 2020-04-21 | Xilinx, Inc. | Routing circuit designs for implementation using a programmable network on chip |
US10402176B2 (en) * | 2017-12-27 | 2019-09-03 | Intel Corporation | Methods and apparatus to compile code to generate data flow code |
US11003471B2 (en) * | 2018-01-26 | 2021-05-11 | Vmware, Inc. | Just-in-time hardware for field programmable gate arrays |
US10673745B2 (en) | 2018-02-01 | 2020-06-02 | Xilinx, Inc. | End-to-end quality-of-service in a network-on-chip |
US10503690B2 (en) | 2018-02-23 | 2019-12-10 | Xilinx, Inc. | Programmable NOC compatible with multiple interface communication protocol |
US10621129B2 (en) | 2018-03-27 | 2020-04-14 | Xilinx, Inc. | Peripheral interconnect for configurable slave endpoint circuits |
US10635622B2 (en) | 2018-04-03 | 2020-04-28 | Xilinx, Inc. | System-on-chip interface architecture |
US10747690B2 (en) | 2018-04-03 | 2020-08-18 | Xilinx, Inc. | Device with data processing engine array |
US10866753B2 (en) | 2018-04-03 | 2020-12-15 | Xilinx, Inc. | Data processing engine arrangement in a device |
US11500674B2 (en) * | 2018-06-26 | 2022-11-15 | Intel Corporation | Circuitry with adaptive memory assistance capabilities |
US10635419B2 (en) * | 2018-07-13 | 2020-04-28 | Fungible, Inc. | Incremental compilation of finite automata for a regular expression accelerator |
US10944693B2 (en) * | 2018-11-13 | 2021-03-09 | Advanced Micro Devices, Inc. | Routing flits in a network-on-chip based on operating states of routers |
US10833679B2 (en) * | 2018-12-28 | 2020-11-10 | Intel Corporation | Multi-purpose interface for configuration data and user fabric data |
US10642946B2 (en) * | 2018-12-28 | 2020-05-05 | Intel Corporation | Modular periphery tile for integrated circuit device |
US11062070B2 (en) * | 2019-03-28 | 2021-07-13 | Intel Corporation | Die to die interconnect structure for modularized integrated circuit devices |
US11036660B2 (en) * | 2019-03-28 | 2021-06-15 | Intel Corporation | Network-on-chip for inter-die and intra-die communication in modularized integrated circuit devices |
-
2019
- 2019-05-23 US US16/421,444 patent/US11188312B2/en active Active
-
2020
- 2020-05-14 WO PCT/US2020/032977 patent/WO2020236529A1/en unknown
- 2020-05-14 JP JP2021569503A patent/JP7465895B2/ja active Active
- 2020-05-14 KR KR1020217039439A patent/KR20220023346A/ko unknown
- 2020-05-14 EP EP20729590.8A patent/EP3973435A1/en active Pending
- 2020-05-14 CN CN202080038533.2A patent/CN113874867A/zh active Pending
-
2021
- 2021-10-13 US US17/500,509 patent/US11645053B2/en active Active
Also Published As
Publication number | Publication date |
---|---|
EP3973435A1 (en) | 2022-03-30 |
WO2020236529A1 (en) | 2020-11-26 |
JP7465895B2 (ja) | 2024-04-11 |
US11645053B2 (en) | 2023-05-09 |
US20220035607A1 (en) | 2022-02-03 |
US11188312B2 (en) | 2021-11-30 |
KR20220023346A (ko) | 2022-03-02 |
US20200371759A1 (en) | 2020-11-26 |
JP2022534230A (ja) | 2022-07-28 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP7527310B2 (ja) | 異種プログラマブルデバイスのハードウェア-ソフトウェア設計フロー | |
JP7465895B2 (ja) | ヘテロジニアスプログラマブルデバイスのための高位合成を有するハードウェアソフトウェア設計フロー | |
JP7461380B2 (ja) | ヘテロジニアスプログラマブルデバイスのためのハードウェアソフトウェア設計時のフロー収束 | |
US10628622B1 (en) | Stream FIFO insertion in a compilation flow for a heterogeneous multi-core architecture | |
US10977018B1 (en) | Development environment for heterogeneous devices | |
US7849441B2 (en) | Method for specifying stateful, transaction-oriented systems for flexible mapping to structurally configurable, in-memory processing semiconductor device | |
US10783295B1 (en) | Netlist partitioning for designs targeting a data processing engine array | |
US11138019B1 (en) | Routing in a compilation flow for a heterogeneous multi-core architecture | |
US10853541B1 (en) | Data processing engine (DPE) array global mapping | |
US10860766B1 (en) | Compilation flow for a heterogeneous multi-core architecture | |
TW202217564A (zh) | 可重組態資料流資源的運行時間虛擬化 | |
US11301295B1 (en) | Implementing an application specified as a data flow graph in an array of data processing engines | |
Pasricha et al. | COSMECA: Application specific co-synthesis of memory and communication architectures for MPSoC | |
US10839121B1 (en) | Data processing engine (DPE) array detailed mapping | |
US10963615B1 (en) | Data processing engine (DPE) array routing | |
US10872057B1 (en) | Partitioning in a compiler flow for a heterogeneous multi-core architecture | |
Shin et al. | Automatic network generation for system-on-chip communication design | |
Nguyen | A Modular Design Flow for NoC-embedded FPGAs | |
Schumacher et al. | IMORC: An infrastructure and architecture template for implementing high-performance reconfigurable FPGA accelerators | |
Kim | Computation Model Based Automatic Design Space Exploration | |
Chin | Reusable OpenCL FPGA Infrastructure | |
Ariño Alegre | Design and implementation of an ARMv4 tightly coupled multicore in VHDL and validation on a FPGA | |
DIRECTORATE | EXPLORING FIELD-PROGRAMMABLE GATE ARRAY (FPGA)-BASED EMULATION TECHNOLOGIES FOR ACCELERATING COMPUTER ARCHITECTURE DEVELOPMENT AND EVALUATION |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |