CN113632069A - 自适应集成可编程设备平台 - Google Patents
自适应集成可编程设备平台 Download PDFInfo
- Publication number
- CN113632069A CN113632069A CN202080025155.4A CN202080025155A CN113632069A CN 113632069 A CN113632069 A CN 113632069A CN 202080025155 A CN202080025155 A CN 202080025155A CN 113632069 A CN113632069 A CN 113632069A
- Authority
- CN
- China
- Prior art keywords
- circuit
- memory
- block
- interface
- dpe
- 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
- 230000003044 adaptive effect Effects 0.000 title description 2
- 238000005192 partition Methods 0.000 claims abstract description 331
- 238000012545 processing Methods 0.000 claims description 98
- 238000000034 method Methods 0.000 claims description 78
- 230000015654 memory Effects 0.000 description 281
- 230000006870 function Effects 0.000 description 71
- 229920000379 polypropylene carbonate Polymers 0.000 description 57
- 238000002300 pressure perturbation calorimetry Methods 0.000 description 57
- 208000000143 urethritis Diseases 0.000 description 51
- 230000036961 partial effect Effects 0.000 description 41
- 230000004044 response Effects 0.000 description 32
- 238000007726 management method Methods 0.000 description 27
- 238000004891 communication Methods 0.000 description 24
- 230000002093 peripheral effect Effects 0.000 description 17
- 230000008569 process Effects 0.000 description 17
- 230000001133 acceleration Effects 0.000 description 15
- 238000002955 isolation Methods 0.000 description 13
- 230000001427 coherent effect Effects 0.000 description 12
- 238000013461 design Methods 0.000 description 12
- 230000000670 limiting effect Effects 0.000 description 12
- 238000013507 mapping Methods 0.000 description 11
- 238000010586 diagram Methods 0.000 description 9
- 239000004744 fabric Substances 0.000 description 8
- 238000012546 transfer Methods 0.000 description 8
- 238000013519 translation Methods 0.000 description 7
- 230000014616 translation Effects 0.000 description 7
- 230000009471 action Effects 0.000 description 6
- 230000008859 change Effects 0.000 description 5
- 238000001514 detection method Methods 0.000 description 5
- 238000010801 machine learning Methods 0.000 description 5
- 238000003491 array Methods 0.000 description 4
- 238000012544 monitoring process Methods 0.000 description 4
- 238000013468 resource allocation Methods 0.000 description 4
- 230000003068 static effect Effects 0.000 description 4
- 238000013475 authorization Methods 0.000 description 3
- 230000008901 benefit Effects 0.000 description 3
- 230000027455 binding Effects 0.000 description 3
- 238000009739 binding Methods 0.000 description 3
- 238000005259 measurement Methods 0.000 description 3
- 230000011664 signaling Effects 0.000 description 3
- 238000000638 solvent extraction Methods 0.000 description 3
- 230000002776 aggregation Effects 0.000 description 2
- 238000004220 aggregation Methods 0.000 description 2
- 230000001364 causal effect Effects 0.000 description 2
- 238000006243 chemical reaction Methods 0.000 description 2
- 239000003795 chemical substances by application Substances 0.000 description 2
- TXCGAZHTZHNUAI-UHFFFAOYSA-N clofibric acid Chemical compound OC(=O)C(C)(C)OC1=CC=C(Cl)C=C1 TXCGAZHTZHNUAI-UHFFFAOYSA-N 0.000 description 2
- 238000012937 correction Methods 0.000 description 2
- 230000008878 coupling Effects 0.000 description 2
- 238000010168 coupling process Methods 0.000 description 2
- 238000005859 coupling reaction Methods 0.000 description 2
- 230000000694 effects Effects 0.000 description 2
- 238000005516 engineering process Methods 0.000 description 2
- 230000014509 gene expression Effects 0.000 description 2
- 230000000977 initiatory effect Effects 0.000 description 2
- 238000002347 injection Methods 0.000 description 2
- 239000007924 injection Substances 0.000 description 2
- 239000000463 material Substances 0.000 description 2
- 238000011084 recovery Methods 0.000 description 2
- 230000002441 reversible effect Effects 0.000 description 2
- 238000000926 separation method Methods 0.000 description 2
- 230000001360 synchronised effect Effects 0.000 description 2
- 230000007723 transport mechanism Effects 0.000 description 2
- 238000012795 verification Methods 0.000 description 2
- 238000013459 approach Methods 0.000 description 1
- 238000012575 bio-layer interferometry Methods 0.000 description 1
- 230000005540 biological transmission Effects 0.000 description 1
- 230000000903 blocking effect Effects 0.000 description 1
- 230000003139 buffering effect Effects 0.000 description 1
- 230000015556 catabolic process Effects 0.000 description 1
- 230000006835 compression Effects 0.000 description 1
- 238000004590 computer program Methods 0.000 description 1
- 239000013078 crystal Substances 0.000 description 1
- 238000006731 degradation reaction Methods 0.000 description 1
- 238000009826 distribution Methods 0.000 description 1
- 230000009977 dual effect Effects 0.000 description 1
- 230000006872 improvement Effects 0.000 description 1
- 230000003993 interaction Effects 0.000 description 1
- 238000004519 manufacturing process Methods 0.000 description 1
- 239000011159 matrix material Substances 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 230000008520 organization Effects 0.000 description 1
- 238000012856 packing Methods 0.000 description 1
- 230000000644 propagated effect Effects 0.000 description 1
- 230000004043 responsiveness Effects 0.000 description 1
- 230000000717 retained effect Effects 0.000 description 1
- 230000011218 segmentation Effects 0.000 description 1
- 238000004088 simulation Methods 0.000 description 1
- 239000000243 solution Substances 0.000 description 1
- 238000003860 storage Methods 0.000 description 1
- 238000012360 testing method Methods 0.000 description 1
- 230000007704 transition Effects 0.000 description 1
- 230000001960 triggered effect Effects 0.000 description 1
- 238000010200 validation analysis Methods 0.000 description 1
- 230000003936 working memory Effects 0.000 description 1
Images
Classifications
-
- 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
- G06F13/00—Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
- G06F13/14—Handling requests for interconnection or transfer
- G06F13/16—Handling requests for interconnection or transfer for access to memory bus
-
- 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
-
- 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/007—Fail-safe circuits
-
- 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/17704—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 the logic functions being realised by the interconnection of rows and columns
- H03K19/17708—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 the logic functions being realised by the interconnection of rows and columns using an AND matrix followed by an OR matrix, i.e. programmable logic arrays
- H03K19/17712—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 the logic functions being realised by the interconnection of rows and columns using an AND matrix followed by an OR matrix, i.e. programmable logic arrays one of the matrices at least being reprogrammable
-
- 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
- H03K19/17728—Reconfigurable logic blocks, e.g. lookup tables
-
- 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/17736—Structural details of routing resources
-
- 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/17748—Structural details of configuration resources
-
- 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/17748—Structural details of configuration resources
- H03K19/17756—Structural details of configuration resources for partial configuration or partial reconfiguration
-
- 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/17748—Structural details of configuration resources
- H03K19/1776—Structural details of configuration resources for memories
Landscapes
- Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- Mathematical Physics (AREA)
- Computer Hardware Design (AREA)
- General Engineering & Computer Science (AREA)
- Computing Systems (AREA)
- Theoretical Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computer Networks & Wireless Communication (AREA)
- Microelectronics & Electronic Packaging (AREA)
- Logic Circuits (AREA)
- Design And Manufacture Of Integrated Circuits (AREA)
- Multi Processors (AREA)
- Microcomputers (AREA)
Abstract
一种设备可以包括可编程逻辑电路、耦接到可编程逻辑电路的处理器系统、以及耦接到可编程逻辑电路和处理器系统的片上网络。片上网络和可编程逻辑电路可以被配置为实现多个独立分区。片上网络可以是可编程的,以针对多个独立分区中的每个独立分区建立用户指定的数据路径,用户指定的数据路径通信地链接在可编程逻辑电路中实现的电路块和处理器系统。所述设备还可以包括平台管理控制器,其用来配置可编程逻辑电路、片上网络和处理器系统以实现多个独立分区。
Description
技术领域
本公开涉及集成电路(IC),并且更具体地涉及提供不同异构(heterogeneous)子系统的集成可编程设备平台。
技术背景
可编程集成电路(IC)是指一种包括可编程逻辑的设备。可编程设备或可编程IC的一个例子是现场可编程门阵列(FPGA)。FPGA的特点是包括可编程电路块。可编程电路块的示例包括但不限于输入/输出块(IOB)、可配置逻辑块(CLB)、专用随机存取存储器块(BRAM)、数字信号处理块(DSP)、处理器、时钟管理器、和延迟锁定环(DLL:delay lockloop)。
现代可编程IC已经发展到包括可编程逻辑与一个或多个其他子系统的组合。例如,一些可编程IC已经演变成片上系统或“SoC”,其包括可编程逻辑和硬连线处理器两者。其他种类的可编程IC包括附加的和/或不同的子系统。
发明内容
设备可以包括可编程逻辑电路、耦接到可编程逻辑电路的处理器系统、以及耦接到可编程逻辑电路和处理器系统的片上网络。片上网络和可编程逻辑电路可以被配置为实现多个独立的分区。片上网络可以是可编程的,以针对多个独立分区中的每一个分区建立用户指定的数据路径,以通信方式链接在可编程逻辑电路和处理器系统中实现的电路块。所述设备还可以包括平台管理控制器,其配置可编程逻辑电路、片上网络和处理器系统以实现多个独立分区。
一方面,多个独立分区中的每个独立分区实现不同的应用,并且这些应用彼此隔离。
另一方面,所述设备包括耦接到片上网络的数据处理引擎阵列,其中多个独立分区中的一个或多个分区包括数据处理引擎阵列的一个或多个数据处理引擎。
另一方面,数据处理引擎阵列被配置为在多个独立分区中的一个或多个的每一个中实现应用的一部分。
另一方面,所述设备包括耦接到片上网络的专用硬连线电路块。专用的硬连线电路块和在多个独立分区中的每一个分区中的可编程逻辑电路中实现的电路块可以具有公共接口。
另一方面,所述设备包括可编程保护电路,其被配置为通过将接收到的事务内的事务源的标识符与授权事务源的列表进行比较来隔离多个独立分区。
另一方面,可编程保护电路进一步将接收到的事务中指定的地址与事务源的标识符的允许地址进行比较。
另一方面,在可编程电路中实现的处理器系统和电路块使用公共描述符格式进行通信。
一种方法可以包括提供包括可编程逻辑电路、耦接到可编程逻辑电路的处理器系统以及耦接到可编程逻辑电路和处理器系统的片上网络的设备。所述方法可以包括配置片上网络和可编程逻辑电路以实现多个独立分区。片上网络可以是可编程的,以针对多个独立分区中的每一个分区建立用户指定的数据路径,以通信方式链接在可编程逻辑电路和处理器系统中实现的电路块。该方法可以包括配置可编程逻辑电路、片上网络和处理器系统以使用被布置在设备中的平台管理控制器来实现多个独立分区。
一方面,多个独立分区中的每个分区实现不同的应用,并且这些应用彼此隔离。
另一方面,所述设备包括耦接到片上网络的数据处理引擎阵列,其中多个独立分区中的一个或多个分区包括数据处理引擎阵列的一个或多个数据处理引擎。
另一方面,所述方法可以包括配置数据处理引擎阵列以在多个独立分区中的一个或多个中的每一个分区中实现应用的一部分。
另一方面,所述设备可以包括耦接到片上网络的专用硬连线电路块。在那种情况下,所述方法可以包括为专用硬连线电路块和在多个独立分区中的每一个中的可编程逻辑电路中实现的电路块提供公共接口。
另一方面,所述方法可以包括动态地重新配置多个独立分区中的至少一个分区。
另一方面,所述方法可以包括在设备中提供可编程保护电路并且通过配置可编程保护电路来将接收到的事务内的事务源的标识符与授权事务源的列表进行比较来隔离多个独立分区。
提供本发明概述部分仅是为了介绍某些概念,而不是确定要求保护的主题的任何关键或基本特征。根据附图和以下详细描述,本发明布置的其他特征将是显而易见的。
附图说明
在附图中以示例的方式示出了本发明的布置。然而,不应将附图解释为将本发明的布置仅限于所示的特定实施方式。通过阅读以下详细描述并参考附图,各个方面和优点将变得显而易见。
图1示出了用于片上系统(SoC)类型的集成电路(IC)的示例架构。
图2示出了用于图1的SoC的数据处理引擎(DPE)阵列的示例实现方案。
图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示出了通过NoC外围互连到NoC的寄存器块的示例连接。
图17示出了NoC所使用的示例表。
图18示出了用于操作SoC的示例方法。
图19是部分重新配置NoC的示例方法。
图20示出了图1的SoC的另一个示例实现方案。
图21示出了平台管理控制器(PMC)的示例实现方案。
图22示出了图21的PMC的处理器的示例实现方案。
图23示出了图1的SoC的进一步结构和功能方面。
图24示出了图1的SoC的进一步结构和功能方面。
图25示出了图24的可编程保护电路的示例实现方案。
图26示出了启动图1的SoC的示例方法。
图27示出了可以用于启动SoC的编程设备映像的示例。
图28示出了实现不同分区的示例SoC。
图29示出了实现不同分区的另一个示例SoC。
图30示出了在SoC内实现编程设备映像(PDI)的示例方法。
图31示出了在SoC内实现PDI并且随着时间重新配置SoC的另一个示例方法。
图32示出了在SoC内实现PDI并且随着时间执行SoC的部分重新配置的另一示例方法。
具体实施方式
虽然本公开以定义新颖特征的权利要求作为总结,但相信通过结合附图考虑具体实施方式将更好地理解本公开中描述的各种特征。提供本文所述的过程、机器、制造及其任何变体是为了说明的目的。本公开中描述的具体结构和功能细节不应被解释为限制,而仅被解释为权利要求的基础以及教导本领域技术人员以不同方式使用实际上任何适当详细结构中描述的特征的代表性基础。此外,本公开中使用的术语和短语并非旨在进行限制,而是提供对所描述特征的可理解的描述。
本公开涉及集成电路(IC),并且更具体地涉及提供不同异构子系统的集成可编程设备平台(平台)。该平台利用所描述的各种子系统来提供许多好处。例如,该平台能够利用固定功能组件(例如,专用集成电路或“ASIC”)的面积和功率效率,可编程逻辑的灵活性和功能性,将这种灵活性扩展到固定功能组件,并提供固定功能组件和可编程逻辑共同的服务。
该平台能够通过在设备内提供可在不同子系统之间共享和使用的公共基础设施(common infrastructure)来扩展固定功能组件的灵活性。这种公共基础设施能够提供的功能包括但不限于数据通路、防火墙、中断和门铃通路(doorbell pathway)、性能监视器和配置。可以实施不同的子系统,使得这些不同子系统内的电路块在作为用户应用(application)的一部分实施时,能够使用标准接口,该接口被配置为连接到公共基础设施并利用公共基础设施。
公共基础设施提高了设备的灵活性、功能性、面积效率、功率效率和性能,尽管其中包含的各种子系统具有异质性。一个组件的公共基础设施的未使用平台资源可以被应用于平台中的另一个组件。例如,分配给平台的一组未使用组件的未使用的片上网络(NoC)缓存(buffer)、虚拟通道和物理路径可以分配给平台中用户应用使用的另一组组件。此外,该平台允许设备的各种组件中的任何一个组件利用公共基础设施来访问子系统,例如可编程逻辑。
另一方面,特定功能可以从平台的一个组件快速重新映射到平台中的另一个组件或子系统。例如,可以使用可编程逻辑来实现标准密码加速功能,例如高级加密标准伽罗瓦(Galois)/计数器模式(AES-GCM)。该功能可以被重新映射,例如,或移动到另一个设备,例如硬连线(hardwired)或硬化(hardened)的密码加速器块。这种重新映射释放了可编程逻辑中的资源并增加了设备的灵活性。术语“硬连线”和“硬化”在本公开内容中可互换使用。
公共基础设施至少部分促进了重新映射。公共基础设施可以包括到可编程逻辑中实现的电路块和硬连线电路块的公共接口。尽管功能从一个子系统重新映射到另一个子系统,但公共基础结构允许保持功能(例如通信路径、数据路径和中断路径)的属性。平台内与加密加速功能交互的任何其他组件,无论在何处实施,都可以通过防火墙防止未经授权访问组件。例如,其他组件无法访问或查看未加密的数据或加密加速功能使用的加密密钥。防火墙还可用于防止未经授权的组件访问或查看加密数据。尽管对加密加速功能进行了任何重新映射,但平台中的其他组件仍可继续以相同方式运行。要在平台中实现的应用的一个功能的重新映射不需要跨平台的应用的所有组件和/或功能的重新映射。
平台还支持在设备中同时创建多个不同的分区。每个分区可以在其中实现不同的应用。每个分区以及在其中执行的应用可以与平台中的每个其他分区隔离。此处使用的与平台和此处描述的示例SoC相关的术语“应用”是指任何数据,无论是可执行程序代码、配置位流、寄存器编程数据,还是用于配置SoC或其一部分(例如,整个设备或其分区)的映像(image)。所描述的分区还支持多客户端或多租户用例,其中对应于同一终端用户或不同终端用户的不同应用可以在设备中的每个不同分区中同时执行。该平台允许设备的各种组件中的任何一个利用公共基础设施来访问子系统,例如可编程逻辑。
下面参考附图更详细地描述本发明布置(arrangement)的其他方面。为了说明的简单和清楚起见,图中所示的元件不一定按比例绘制。例如,为了清楚起见,一些元件的尺寸可能相对于其他元件被放大。此外,在认为合适的情况下,附图中的附图标记重复以指示对应的、类似的或相似的特征。
图1示出了片上系统(SoC)100的示例架构。SoC 100是可编程IC和集成可编程设备平台的示例。在图1的例子中,所示出的SoC 100的各种不同子系统或区域可以实现在单个集成封装内提供的单个管芯(die)上。在其他示例中,不同的子系统可以实现在作为单个集成封装提供的多个互连管芯上。
在该示例中,SoC 100包括具有不同功能的电路的多个区域。在该示例中,SoC 100可选地包括数据处理引擎(DPE)阵列102。SoC 100包括可编程逻辑(PL)区域104(以下称为PL区域或PL)、处理系统(PS)106、片上网络(NoC)108、和一个或多个硬连线电路块110。DPE阵列102被实现为多个互连的、硬连线的和可编程的处理器,处理器具有到SoC 100的其他区域的接口。
PL 104是可以编程以执行指定功能的电路。例如,PL 104可以被实现为现场可编程门阵列类型的电路。PL 104可以包括可编程电路块阵列。PL 104内的可编程电路块的示例包括但不限于可配置逻辑块(CLB)、专用随机存取存储器块(BRAM和/或UltraRAM或URAM)、数字信号处理块(DSP)、时钟管理器和/或延迟锁定环(DLL)。
PL 104内的每个可编程电路块通常包括可编程互连电路和可编程逻辑电路。可编程互连电路通常包括通过可编程互连点(PIP)互连的大量不同长度的互连线。通常,互连线被配置(例如,以每条线为基础)以提供以每位(bit)为基础的连接性(例如,其中每条线传送一位信息)。可编程逻辑电路使用可编程元件实现用户设计的逻辑,可编程元件可以包括例如查找表、寄存器、算术逻辑等等。可编程互连和可编程逻辑电路可以通过将配置数据加载到定义可编程元件如何配置和操作的内部配置存储器单元中来编程。
PS 106被实现为硬连线电路,其被制造为SoC 100的一部分。PS 106可以被实现为,或包括,各种不同处理器类型中的任何一种,每个处理器类型都能够执行程序代码。例如,PS 106可以实现为单独的处理器,例如能够执行程序代码的单个核。在另一个示例中,PS 106可以实现为多核处理器。在又一示例中,PS 106可以包括一个或多个核、模块、协处理器、接口和/或其他资源。PS 106可以使用多种不同类型的架构中的任何一种来实现。可用于实现PS 106的示例架构可包括但不限于ARM处理器架构、x86处理器架构、GPU架构、移动处理器架构、DSP架构或能够执行计算机可读指令或程序代码的其它的适用的架构。
NoC 108包括用于在SoC 100中的端点电路之间共享数据的互连网络。端点电路可以布置在DPE阵列102、PL区域104、PS 106和/或硬连线电路块110-118中。NoC108可以包括具有专用交换的高速数据路径。在一个示例中,NoC 108包括水平路径、垂直路径、或水平和垂直路径两者。图1所示的区域的排列和数量只是一个例子。NoC108是SoC 100内可用于连接所选组件和/或子系统的公共基础设施的示例。
NoC 108提供到PL 104、PS 106、和到硬连线电路块110中的所选电路块的连接性。NoC 108是可编程的。在可编程NoC与其他可编程电路一起使用的情况下,在创建用户电路设计以在SoC 100内实现之前,要通过NoC 108路由的网络是未知的。NoC108可以通过将配置数据加载到内部配置寄存器而被编程,内部配置寄存器限定NoC108中的元件(例如交换器(switch)和接口)如何被配置和操作以从交换器到交换器以及在NoC接口之间传递数据。
NoC 108被制造为SoC 100的一部分,并且虽然不可物理修改,但可以被编程以在用户电路设计的不同主电路和不同从电路之间建立连接。例如,NoC 108可以包括能够建立连接用户指定的主电路和从电路的数据包交换网络(packet switched network)的多个可编程交换器。在这点上,NoC 108能够适应不同的电路设计,其中每个不同的电路设计具有在SoC 100中不同位置实现的、可以由NoC 108耦接的主电路和从电路的不同组合。NoC 108可以被编程以在用户电路设计的主电路和从电路之间路由数据,例如应用数据和/或配置数据。例如,NoC 108可以被编程以将在PL 104内实现的不同用户指定电路与PS 106、和/或DPE阵列102,与不同硬连线电路块进行耦接,和/或与在SoC 100外部的不同电路和/或系统进行耦接。
硬连线电路块110可以包括输入/输出(I/O)块和/或收发器,用于向SoC 100外部的电路和/或系统、存储器控制器等发送和接收信号。不同I/O块的示例可包括单端和伪差分I/O以及高速差分时钟收发器。此外,可以实施硬连线电路块110以执行特定功能。硬连线电路块110的示例包括但不限于加密引擎、数模转换器、模数转换器等。SoC 100内的硬连线电路块110在本文中可以不时地称为专用块。
在图1的例子中,PL 104被显示在两个分开的区域中。在另一个示例中,PL 104可以实现为可编程电路的统一区域。在又一个示例中,PL 104可以被实现为可编程电路的多于两个不同区域。PL 104的特定组织并非旨在作为限制。就这一点而言,SoC 100包括一个或多个PL区域104、PS 106和NoC 108。DPE阵列102可以任选地被包括在内。
在其他示例的实现方案中,SoC 100可以包括位于IC的不同区域中的两个或更多个DPE阵列102。在又一些其他示例中,SoC 100可以实现为多管芯IC。在那种情况下,每个子系统可以在不同的管芯上实现。使用其中IC实现为多芯片模块(MCM)等的堆叠管芯架构,不同的管芯可以使用多种可用的多管芯IC技术中的任何一种进行通信链接,例如将管芯并排堆叠在中介层上。在多管芯IC示例中,应当理解,每个管芯可以包括单个子系统、两个或更多个子系统、子系统和另一个部分子系统,或者它们的任何组合。
图2示出了DPE阵列102的示例实现方案。在图2的示例中,DPE阵列102被实施为包括SoC接口块206的DPE 204的二维阵列。DPE阵列102可以使用将在下文更详细地描述的多种不同架构中的任一种来实施。出于说明而非限制的目的,图2示出了以对齐的行和对齐的列布置的DPE 204。然而,在其他实施例中,DPE 204可以被布置为在所选行和/或列中的DPE相对于在相邻行和/或列中的DPE被水平反转或翻转。在一个或多个其他实施例中,DPE的行和/或列可以相对于相邻的行和/或列偏移。一个或多个或所有DPE 204可以被实现为包括一个或多个核,每个核都能够执行程序代码。DPE 204的数量、DPE 204的特定布置和/或DPE204的取向并不旨在限制。
SoC接口块206能够将DPE 204耦接到设备IC200的一个或多个其他子系统。在一个或多个实施例中,SoC接口块206耦接到相邻的DPE 204。例如,SoC接口块206可以直接耦接到DPE阵列202中DPE底部行中的每个DPE 204。在图上,SoC接口块206可以直接连接到DPE204-1、204-2、204-3、204-4、204-5、204-6、204-7、204-8、204-9和204-10。
图2是为了说明的目的而提供的。在其他实施例中,SoC接口块206可位于DPE阵列202的顶部、DPE阵列202的左侧(例如,作为一列)、DPE阵列202的右侧(例如,作为一列),或在DPE阵列202中和周围的多个位置处(例如,作为DPE阵列202内的一个或多个居间行和/或列)。取决于SoC接口块206的布局和位置,耦接到SoC接口块206的特定DPE可以变化。
出于说明的目的,如果SoC接口块206位于DPE 204的左侧,则SoC接口块206可以直接耦接到DPE的左侧列,包括DPE 204-1、DPE 204-11、DPE 204-21和DPE204-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互连网络时,DPE 204通过DPE互连(未示出)进行互连。这样,SoC接口块206能够通过与直接连接到SoC接口块206的DPE阵列102的一个或多个所选DPE204通信,以及利用由在每个相应的DPE 204中所实现的DPE互连形成的DPE互连网络,而与DPE阵列102的任何DPE 204进行通信。
SoC接口块206能够将DPE阵列102内的每个DPE 204与SoC 100的一个或多个其他子系统耦接。例如,SoC接口块206能够将DPE阵列102耦接到NoC 108和PL 104。这样,DPE阵列102能够与在PL 104、PS 106和/或任何硬连线电路块110中实现的电路块通信。例如,SoC接口块206能够在所选DPE 204和PL 104之间建立连接。SoC接口块206还能够在所选DPE204和NoC 108之间建立连接。通过NoC 108,所选DPE204能够与PS 106和/或硬连线电路块110进行通信。所选DPE 204能够经由SoC接口块206和PL 104而与硬连线电路块110进行通信。在特定实施例中,SoC接口块206可以直接耦接到SoC 100的一个或多个子系统。例如,SoC接口块206可以直接耦接到PS 106和/或其他硬连线电路块110。在特定实施例中,硬连线电路块110可以被认为是ASIC的示例。
在一个或多个实施例中,DPE阵列102包括单个时钟域。诸如NoC 108、PL 104、PS106和各种硬连线电路块110之类的其他子系统可以在一个或多个单独的或不同的时钟域中。尽管如此,DPE阵列102可以包括可以用于与子系统中的其他子系统交互的附加时钟。在特定实施例中,SoC接口块206包括能够生成一个或多个时钟信号的时钟信号发生器,该一个或多个时钟信号可以被提供或分配给DPE阵列102的DPE 204。
DPE阵列102可以通过将配置数据加载到定义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阵列102的时钟频率而是可编程的。
图3示出了图2的DPE阵列102的DPE 204的示例架构。在图3的例子中,DPE204包括核心302、存储器模块304和DPE互连306。每个DPE 204被实现为SoC 100上的硬连线和可编程的电路块。
核心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中的每一个内的核心能够对DPE 204-15内的存储器模块读取和写入。在特定实施例中,只有与存储器模块相邻的那些相邻DPE可以访问DPE 204-15的存储器模块。例如,DPE 204-14虽然与DPE204-15相邻,但可能不与DPE204-15的存储器模块相邻,因为DPE 204-15的核心可能位于DPE 204-14的核心和DPE 204-15的存储器模块之间。因此,在特定实施例中,DPE 204-14的核心可能不能访问DPE 204-15的存储器模块。
在特定实施例中,DPE的核心是否能够访问另一个DPE的存储器模块取决于存储器模块中包括的存储器接口的数量以及这些核心是否连接到存储器模块的这些存储器接口中的可用存储器接口。在以上示例中,DPE 204-15的存储器模块包括四个存储器接口,其中DPE 204-16、204-5和204-25中的每一个的核心连接到这样的存储器接口。DPE 204-15自身内的核心302连接到第四个存储器接口。每个存储器接口可以包括一个或多个读取和/或写入通道。在特定实施例中,每个存储器接口包括多个读取通道和多个写入通道,使得与其相耦接的特定核心能够同时读取和/或写入存储器模块304内的多个组(bank)。
在其他示例中,可能有多于四个的存储器接口可用。这些其他存储器接口可用于允许DPE 204-15的对角线上的DPE访问DPE 204-15的存储器模块。例如,如果诸如DPE 204-14、204-24、204-26、204-4和/或204-6那样的DPE中的核心也耦接到DPE204-15中的存储器模块的可用存储器接口,这样的其他DPE也将能够访问DPE 204-15的存储器模块。
存储器模块304可以包括配置寄存器336。配置寄存器336可以被加载配置数据以控制存储器模块304的操作。在图3的例子中,配置寄存器336(和324)可经由下文更详细描述的DPE互连306的存储器映射网络来寻址(例如,可被读取和/或写入)。
在图3的例子中,DPE互连306对于DPE 204是特定的。DPE互连306促进包括在DPE204和DPE阵列102的一个或多个其他DPE之间的通信和/或与SoC 100的其他子系统的通信的各种操作。DPE互连306还使得能够对DPE 204进行配置、控制、和调试。
在特定实施例中,DPE互连306被实现为片上互连。片上互连的一个示例是高级微控制器总线架构(AMBA)可扩展接口(AXI)总线(例如,或交换器)。AMBA AXI总线是一种嵌入式微控制器总线接口,用于在电路块和/或系统之间建立片上连接。此处提供AXI总线作为互连电路的示例,其可与本公开中描述的发明布置一起使用,并且因此不打算作为限制。互连电路的其他示例可以包括其他类型的总线、交叉交换器(crossbar)和/或其他类型的交换器。
在一个或多个实施例中,DPE互连306包括两个不同的网络。第一网络能够与DPE阵列102的其他DPE和/或SoC 100的其他子系统交换数据。例如,第一网络能够交换应用数据。第二网络能够交换用于DPE的数据(例如配置、控制和/或调试数据)。
在图3的例子中,DPE互连306的第一网络由流交换器(stream switch)326和一个或多个流接口(未示出)形成。例如,流交换器326包括用于连接到核心302、存储器模块304、存储器映射交换器332、上方的DPE、左侧的DPE、右侧的DPE和下方的DPE中的每一个的流接口。每个流接口可以包括一个或多个主体(master)和一个或多个从体(slave)。
流交换器326能够允许非相邻DPE和/或未耦接到存储器模块304的存储器接口的DPE经由由DPE阵列102的相应DPE 204的DPE互连形成的DPE互连网络而与核心302和/或存储器模块304通信。
再次参考图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阵列102内的任何DPE通信。
流交换器326还可以用于与子系统(例如PL 104和/或NoC 108)交互。通常,流交换器326被编程为作为电路交换流互连或数据包交换流互连进行操作。电路交换流互连能够实现适用于DPE之间高带宽通信的点对点专用流。数据包交换流互连允许共享流以将多个逻辑流时分复用到一个物理流上,用于中等带宽通信。
流交换器326可以包括配置寄存器(在图3中缩写为“CR”)334。配置数据可以通过DPE互连306的存储器映射网络的方式被写入配置寄存器334。加载到配置寄存器334中的配置数据指示DPE 204将与哪些其他DPE和/或子系统(例如,NoC 108、PL 104和/或PS 106)进行通信,以及此类通信是作为电路交换点对点连接还是作为数据包交换连接建立的。
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阵列102被映射到诸如PS 106那样的处理器系统的地址空间。因此,DPE 204内的任何配置寄存器和/或存储器可以经由存储器映射接口而被访问。例如,存储器模块304中的存储器、程序存储器308、核心302中的配置寄存器324、存储器模块304中的配置寄存器336、和/或配置寄存器334可以经由存储器映射交换器332被读取和/或写入。
在图3的例子中,存储器映射接口能够接收用于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的读取和写入。因此,被存储在存储器模块304中的特定数据可以通过存储器映射交换器332被控制(例如,写入)作为配置、控制和/或调试过程的一部分。
存储器模块304还包括直接存储器访问(DMA)引擎416。在一个或多个实施例中,DMA引擎416包括至少两个接口。例如,一个或多个接口能够从DPE互连306接收输入数据流并将接收到的数据写入存储器组412。一个或多个其他接口能够从存储器组412读取数据并通过DPE互连306的流接口(例如,流交换器)将数据发送出去。例如,DMA引擎416可以包括用于访问图3的流交换器326的流接口。
存储器模块304能够作为可由多个不同DPE访问的共享存储器来操作。在图4的例子中,存储器接口402经由被包括在核心302中的核心接口428耦接到核心302。存储器接口402通过仲裁器414为核心302提供对存储器组412的访问。存储器接口404耦接到DPE 204-25的核心。存储器接口404为DPE 204-25的核心提供对存储器组412的访问。存储器接口406耦接到DPE 204-16的核心。存储器接口406为DPE 204-16的核心提供对存储器组412的访问。存储器接口408耦接到DPE 204-5的核心。存储器接口408为DPE 204-5的核心提供对存储器组412的访问。因此,在图4的例子中,与DPE 204-15的存储器模块304具有共享边界的每个DPE能够对存储器组412进行读取和写入。在图4的例子中,DPE 204-14的核心不能直接访问DPE 204-15的存储器模块304。
核心302能够通过核心接口430、432和434访问其他相邻DPE的存储器模块。在图4的例子中,核心接口434耦接到DPE 204-25的存储器接口。因此,核心302能够经由核心接口434和包含在DPE 204-25的存储器模块内的存储器接口访问DPE204-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能够为读取和写入生成地址。核心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 100内的其他源接收应用数据并将其存储在存储器模块304中。例如,可以通过流交换器326从与DPE 204-15共享边界和/或不与DPE 204-15共享边界的其他DPE接收数据。也可以从SoC的其他子系统(例如,NoC108、硬连线电路块110、PL104和/或PS 106)经由SoC接口块206通过DPE的流交换器接收数据。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 108、硬连线电路块110、PL 104和/或PS 106)。
在一个或多个实施例中,DMA引擎416由DPE 204-15内的存储器映射交换器332编程。例如,DMA引擎416可由配置寄存器336控制。配置寄存器336可使用DPE互连306的存储器映射交换器332写入。在特定实施例中,DMA引擎416可由DPE204-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 106)的操作。作为说明性和非限制性示例,硬件同步电路420能够同步两个不同的核心、流交换器、存储器映射接口、和/或DPE204-15和/或访问存储器模块304中的相同的(例如,共享的)缓存的不同DPE中的DMA。
在两个DPE不相邻的情况下,这两个DPE无法访问公共存储器模块。在那种情况下,应用数据可以经由数据流(术语“数据流”和“流”在本公开中可以不时地可互换使用)传输。如此,本地DMA引擎能够将该传输从基于本地存储器的传输转换为基于流的传输。在那种情况下,核心302和DMA引擎416能够使用硬件同步电路420进行同步。
PS 106能够通过存储器映射交换器332与核心302通信。例如,PS 106能够通过发起存储器读取和写入来访问存储器模块304和硬件同步电路420。在另一个实施例中,硬件同步电路420还可以在锁定的状态改变时向PS 106发送中断以避免由硬件同步电路420的PS 106轮询。PS 106还能够经由流接口与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 100的其他子系统之间的接口。SoC接口块206将DPE集成到设备中。SoC接口块206能够将配置数据传送到DPE 204、将事件从DPE 204传送到其他子系统、将事件从其他子系统传送到DPE 204、生成中断并将中断传送到DPE阵列102外部的实体、在其他子系统和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 100的不同类型的子系统或子系统的组合的通信。
在图5的例子中,单元块502-520被耦接以使得数据可以从一个单元块传播到另一个。例如,数据可以从单元块502传播通过单元块504、506,并沿着单元块的线向下传播到单元块520。类似地,数据可以在相反方向上从单元块520传播到单元块502。在一个或多个实施例中,单元块502-520中的每一个都能够作为多个DPE的接口进行操作。例如,单元块502-520中的每一个能够作为DPE阵列102的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 106、PL 104和/或另一个硬连线电路块110(例如ASIC块)的另一个源接收数据。单元块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阵列102的一行DPE的接口。这样的配置可以在SoC接口块206被实现为单元块列的情况下使用,无论其是在DPE 204的左侧、右侧或列之间。在其他实施例中,每个单元块为其提供接口的DPE子集可以是少于DPE阵列102的所有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 104之间的接口。单元块610被配置为用作DPE和NoC 108之间以及DPE和PL 104之间的接口。SoC接口块206可以包括使用如为单元块602和单元块610所显示的两种架构的单元块的组合,或者,在另一个示例中,仅仅具有如为单元块610所显示的架构的单元块。
在图6的例子中,单元块602包括连接到PL接口606和DPE(诸如紧邻上方的DPE204-1)的流交换器604。PL接口606连接到边界逻辑接口(BLI)电路620和BLI电路622,每个都位于PL 104中。单元块610包括连接到NoC与PL接口614以及连接到DPE(诸如紧邻上方的DPE 204-5)的流交换器612。NoC与PL接口614连接到PL 104中的BLI电路624和626,并且也连接到NoC 108的NoC主单元(NMU)630和NoC从单元(NSU)632。
在图6的例子中,每个流接口604能够向与其耦接的DPE输出六个不同的32位数据流,并从其接收4个不同的32位数据流。PL接口606和NoC与PL接口614中的每一个能够分别通过BLI 620和BLI 624向PL 104提供6个不同的64位数据流。通常,BLI 620、622、624和626中的每一个提供PL 104内的接口或连接点,PL接口606和/或NoC与PL接口614连接到该接口或连接点。PL接口606和NoC与PL接口614中的每一个能够分别通过BLI 622和BLI 624从PL210接收8个不同的64位数据流。
NoC与PL接口614也连接到NoC 108。在图6的例子中,NoC与PL接口614连接到一个或多个NMU 630和一个或多个NSU 632。在一个示例中,NoC与PL接口614能够向NoC 108提供两个不同的128位数据流,其中每个数据流被提供给不同的NMU630。NoC与PL接口614能够从NoC 108接收两个不同的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 108的示例实现方案。NoC 108包括NoC主单元(NMU)702、NoC从单元(NSU)704、网络714、NoC外围互连(NPI)710和寄存器712。每个NMU 702是将端点电路连接到NoC 108的入口电路。每个NSU 704是将NoC 108连接到端点电路的出口电路。NMU 702通过网络714连接到NSU 704。在一个示例中,网络714包括NoC数据包交换器706(NPS)和在NoC数据包交换器706之间的路由708。每个NoC数据包交换器706执行NoC数据包的交换。NoC数据包交换器706彼此连接并通过路由708连接到NMU 702和NSU 704以实现多个物理通道。NoC数据包交换器706还支持每个物理通道的多个虚拟通道。
NPI 710包括对NMU 702、NSU 704和NoC数据包交换器706进行编程的电路。例如,NMU 702、NSU 704和NoC数据包交换器706可以包括确定其功能的寄存器712。NPI 710包括耦接到寄存器712的外围互连,用于对其进行编程以设置功能。NoC 108中的寄存器712支持中断、服务质量(QoS)、错误处理和报告、事务控制、电源管理和地址映射控制。寄存器712可以在被重新编程之前以可用状态被初始化,例如通过使用写请求对寄存器712进行写入。用于NoC 108的配置数据可以被存储在非易失性存储器(NVM)中,例如,作为编程设备映像(PDI:programming device image)的一部分,并被提供给NPI 710用于对NoC 108和/或其他端点电路进行编程。
NMU 702是流量入口点。NSU 704是流量出口点。耦接到NMU 702和NSU 704的端点电路可以是硬化电路(例如,硬接线电路块110)或在PL 104中实现的电路。给定的端点电路可以耦接到多于一个的NMU 702或多于一个的NSU 704。
图8是根据示例描绘经由NoC 108在SoC 100中的端点电路之间的连接的框图。在该示例中,端点电路802通过NoC 108连接到端点电路804。端点电路802是耦接到NoC 108的NMU 702的主电路。端点电路804是耦接到NoC 108的NSU 704的从电路。每个端点电路802和804可以是在PS 106中的电路、在PL区域104中的电路、或在另一子系统中的电路(例如,硬连线电路块110)。
网络714包括多个物理通道806。物理通道806通过对NoC 108编程来实现。每个物理通道806包括一个或多个NoC数据包交换器706和相关联的路由708。NMU 702通过至少一个物理通道806而与NSU 704连接。物理通道806也可以具有一个或多个虚拟通道808。
通过网络714的连接使用主-从布置。在一个示例中,网络714上的最基本连接包括连接到单个从体的单个主体。然而,在其他示例中,可以实现更复杂的结构。
图9是根据另一示例的描绘NoC 108的框图。在该示例中,NoC 108包括垂直部分902(VNoC)和水平部分904(HNoC)。每个VNoC 902被设置在PL区域104之间。HNoC 904被设置在PL区域104和I/O组910(例如,对应于硬连线电路块110的I/O块和/或收发器)之间。NoC108连接到存储器接口908(例如,其他硬连线电路块110)。PS 106耦接到HNoC 904。
在该示例中,PS 106包括耦接到HNoC 904的多个NMU 702。VNoC 902包括布置在PL区域104中的NMU 702和NSU 704两者。存储器接口908包括耦接到HNoC 904的NSU 704。HNoC904和VNoC 902都包括通过路由708连接的NPS 706。在VNoC 902中,路由708垂直延伸。在HNoC 904中,路由水平延伸。在每个VNoC 902中,每个NMU 702耦接到NPS 706。同样,每个NSU 704耦接到NPS 706。NPS 706彼此耦接以形成交换器矩阵。每个VNoC 902中的一些NPS706耦接到HNoC 904中的其他NPS 706。
尽管仅示出了单个HNoC 904,但在其他示例中,NoC 108可以包括多于一个的HNoC904。此外,虽然示出了两个VNoC 902,但NoC 108可以包括多于两个的VNoC 902。尽管以示例的方式示出了存储器接口908,应当理解,可以使用其他硬连线电路块110来代替存储器接口908,或者除了存储器接口908之外,还使用其他硬连线电路块110。
图10示出了对NoC 108进行编程的示例方法1000。虽然方法1000是独立于SoC 100的其他子系统进行描述,但是方法1000也可以被包括和/或被用作为用于SoC 100的更大启动或编程过程的一部分。
在块1002,SoC 100中实现的平台管理控制器(PMC)在启动时间接收NoC编程数据。NoC编程数据可以是PDI的一部分。PMC负责管理SoC 100。PMC能够维护安全可靠的环境、启动SoC 100、以及在正常操作期间管理SoC 100。
在块1004,PMC通过NPI 710将NoC编程数据加载到寄存器712以创建物理通道806。在一个示例中,编程数据还可以包括用于配置NPS 706中的路由表的信息。在块1006,PMC启动SoC 100。以这种方式,NoC 108至少包括用于NMU 702和NSU 704之间的物理通道806的配置信息。如下文进一步描述,NoC 108的剩余配置信息可以在执行时间(runtime)期间接收。在另一示例中,在执行时间期间接收的以下描述的全部或部分配置信息,可以在启动时间接收。
图11示出了对NoC 108进行编程的示例方法1100。在块1102处,PMC在执行时间期间接收NoC编程数据。在块1104,PMC通过NPI 710将编程数据加载到NoC寄存器712。在一个示例中,在块1106,PMC配置NPS 706中的路由表。在块1108,PMC配置物理通道806上的QoS路径。在块1110,PMC配置地址空间映射。在块1112,PMC配置入口/出口接口协议、宽度和频率。QoS路径、地址空间映射、路由表、和入口/出口配置将在下面进一步讨论。
图12示出了在端点电路之间通过NoC 108的示例数据路径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耦接到NSU1210。在另一示例中,AXI从电路1212是NSU 1210的一部分。端点电路1214耦接到AXI从电路1212。
端点电路1202和1214各自可以是硬化电路(例如,PS电路、硬连线电路110、一个或多个DPE 204)或是在PL 104中配置的电路。端点电路1202用作主电路并且向NMU 1206发送读/写请求。在该示例中,端点电路1202和1214通过使用AXI协议与NoC 108通信。尽管在示例中描述了AXI,但是应当理解,NoC 108可以被配置为通过使用本领域已知的其他类型的协议从端点电路接收通信。通过示例为了清楚起见,NoC 108在本文中被描述为支持AXI协议。NMU 1206通过一组NPS 1208转送请求以到达目的地NSU 1210。NSU 1210将请求传递到附接的AXI从电路1212用于对到端点电路1214的数据的处理和分发。AXI从电路1212可以将读/写响应发送回NSU 1210。NSU 1210可以通过一组NPS 1208将响应转发到NMU 1206。NMU1206将响应传送到AXI主电路1204,AXI主电路1204将数据分发到端点电路1202。
图13示出了处理读/写请求和响应的示例方法1300。方法1300开始于块1302,其中端点电路1202通过AXI主体1204向NMU 1206发送请求(例如,读请求或写请求)。在块1304,NMU 1206处理响应。在示例中,NMU 1206在端点电路1202和NoC 108的时钟域之间执行异步交叉(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 108的时钟域执行异步交叉和速率匹配。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,其用于路由数据包。目的地ID在NoC 108内部使用,并且用于指定数据包被发送到的目的地接口。QoS电路1410可以提供入口速率控制以控制数据包到NoC 108的注入速率。VC映射电路1412管理每个物理通道上的QoS虚拟通道。NMU 702可以被配置为选择数据包被映射到哪个虚拟通道。时钟管理电路1414执行速率匹配和异步数据交叉以提供AXI时钟域和NoC时钟域之间的接口。解包电路1408从NoC 108接收返回数据包并且被配置为对数据包进行解包以供AXI主接口1402输出。
图15示出了NSU 704的示例实现方案。NSU 704包括AXI从接口1502、时钟管理电路1504、打包电路1508、解包电路1506和QoS电路1510。AXI从接口1502为端点电路提供到NSU704的AXI接口。在其他示例中,可以使用不同的协议,并且因此NSU 704可以具有符合所选协议的不同从接口。NSU 704将来自NoC 108的入站流量路由到生成解包数据的解包电路1506。时钟管理电路1504执行速率匹配和异步数据交叉以提供AXI时钟域和NoC时钟域之间的接口。打包电路1508从从接口1502接收返回数据并且被配置为打包返回数据以用于通过NoC 108传输。QoS电路1510可以提供入口速率控制以控制数据包到NoC 108的注入速率。
图16示出了通过NPI 710到NoC 108的寄存器块712的示例连接。为了连接到寄存器块712,NPI 710包括根节点1604、一个或多个NPI交换器1608和协议块1610。在一些示例中,根节点1604驻留在PMC 1602中。在一些示例中,PMC 1602驻留在PS 106中,然而在其他示例中,根节点1604和PMC 1602可以是独立的电路或驻留在另一个系统或电路上。通常,根节点1604可以将事务请求打包成由NPI 710实现的格式,并且可以将存储器映射事务请求发送到NPI交换器1608,NPI交换器1608可以根据存储器映射事务请求的目的地标识,进一步将存储器映射事务请求发送到其他NPI交换器1608或协议块1610。NPI交换器1608可以以任何适当的拓扑互连。在一些示例中,NPI交换器1608作为树状拓扑互连到根节点1604。协议块1610然后可以将存储器映射事务请求转换成由寄存器块712实现的格式。寄存器块712在图16中示出,作为NPI 710可以连接到的从端点电路的示例。NPI 710还可以连接到其他从端点电路。
PMC 1602进一步连接到配置互连1612,该配置互连1612又连接到PL区域104。PMC1602被配置为通过配置互连1612对PL区域104的结构(fabric)进行编程。配置互连1612是用于对SoC 100上的可编程单元进行编程的输送机制,该输送机制独立于用于对SoC 100上的其他可编程单元(例如,从端点电路)进行编程的NPI 710的输送机制。
如前所述,寄存器块712包括被编程以创建NPS 706的对应路由表的寄存器。图17示出了根据示例的路由表1700。路由表1700根据目的地标识对寄存器进行打包。NPS 706接收并随后发送的每个数据包包括目的地标识,路由表1700使用该目的地标识来发送和路由该数据包。对于此示例,NPS 706具有四个端口(端口0到3)和八个虚拟通道(VC 0到7)。路由表的行对应于接收数据包的端口-虚拟通道组合(Port-VC)。路由表的列对应于包含在接收到的数据包中的目的地标识(IDy)。路由表的条目指示基于Port-VC和IDy将在其上传输数据包的传出端口。在一些示例中,给定IDy的条目被打包在寄存器块712的一个或多个寄存器中。该一个或多个寄存器的预定义位是路由表的条目,并且该预定义位对应于Port-VC。NPS 706被配置为接收数据包,确定在哪个端口接收数据包,确定数据包的虚拟通道,确定数据包中包含的目的地标识,根据接收端口、虚拟通道、和如在形成路由表的寄存器中编程的目的地标识来识别NPS 706的传出端口,并在NPS 706的传出端口上发送数据包。
在这个例子中,基于四个端口和八个虚拟通道,有32个Port-VC组合,每个传出端口的条目基于该四个端口至少是两位。因此,在该示例中,为每个IDy实现了两个32位寄存器。其他示例可以以不同方式实现路由表的寄存器。
在一些示例中,通过基于目的地标识打包寄存器,当路径要在部分重新配置中被改变时,路由表可以更容易地重新配置,而不必重新配置或中断其他不会被重新配置的路径。
在其他示例中,可以为路由表实现其他特征。例如,可以在路由表中对多个目的地标识进行分段,例如,可以将多个目的地标识打包到一个或多个寄存器中,以减少数据包的开销和/或处理。在此类示例中,分段可能会影响重新配置路径的能力。例如,如果在部分重新配置期间将保留的路径的一部分对应于路由表的分段中的条目,则将保留的路径的存在可能阻止重新配置同一分段中的另一条路径。
图18示出了用于操作诸如SoC 100那样的SoC的示例方法1800。在块1802中,NoC108被配置。更一般地,NoC 108可以被配置为系统级配置和/或其任何重新配置(例如,部分地或全部地)的一部分。也可以在操作1802期间配置SoC 100的其他子系统。例如,可以配置PL区域104和/或DPE阵列102。如上所述,NoC 108可以通过NPI 710经由存储器映射事务进行配置以写入NMU 702、NSU 704和NPS 706的寄存器块712。PL区域104可以经由配置互连1612来配置。DPE阵列102可以在NoC 108被配置之后并且经由NoC 108和DPE阵列102的SoC接口块206来配置。PL区域104和/或DPE阵列102的配置可以在PL区域104和/或DPE阵列102上实例化一个或多个应用或其任何子集。可以在PMC 1602的控制下配置NoC 108和任何其他组件。例如,PMC 1602可以从存储器获得PDI,并且PDI可以包括NoC 108的配置数据、PL区域104的配置位流和/或DPE阵列102的配置数据。PMC 1602之后可以基于PDI协调并控制组件的配置。
在块1804中,通信经由NoC 108发生。更一般地,SoC 100基于SoC 100的配置进行操作,包括NoC 108的配置。一旦配置,PMC 1602可以使得组件能够操作并启动该操作。SoC100上的各种子系统通过NoC 108相互传送,例如,应用数据。例如,在PL区域104和/或DPE阵列102上实例化的应用或其子集可以经由NoC 108相互通信或与其他子系统(例如,PS 106和/或存储器控制器)通信。
在块1806中,部分重新配置事件触发发生。部分重新配置事件触发可以是特定于使用的。例如,在PL区域104和/或DPE阵列102上实例化的应用或其子集可以结束其任务并生成中断以触发部分重新配置。中断可以经由NoC 108、专用互连、或另一互连传送到PMC1602,并且响应于接收到中断,PMC 1602控制部分重新配置。
在块1808中,NoC 108被部分重新配置。更一般地,NoC 108可以被配置为更大的部分重新配置的一部分。SoC 100的其他子系统也可以在块1808期间被部分重新配置。在部分重新配置期间要被重新配置的NoC 108的电路组件和任何其他子系统的实例在本文中被称为重新配置分区(RP)。RP的电路组件或区域可以在部分重新配置期间被重新配置以从未使用状态转换到使用状态、从使用状态转换到未使用状态和/或从使用状态转换到不同的使用状态。对于其他子系统,例如PL区域104和DPE阵列102,可以禁用和/或重写各种应用,并且不同的应用或其任何子集可以通过部分重新配置而在那些子系统上被实例化。可以在PMC 1602的控制下进行部分重新配置NoC 108和任何其他子系统。PMC 1602可以从存储器获得PDI,并且PDI可以包括重新配置分区的配置数据和/或配置位流。PMC 1602此后可以基于PDI来协调和控制电路组件的部分配置。
部分重新配置可以重新配置RP中的组件,而不重新配置RP之外的其他组件。另外,关于NoC,通信(例如,如在块1804中出现的)可以经由NoC的未被重新配置的路径(例如,RP之外的路径)继续。因此,NoC的资源的一个子集可以被修改,而NoC的资源的另一个子集可以保持活动和不受干扰。NoC 108的部分重新配置的附加细节将在下文参照图19进行描述。
在块1810中,通信经由NoC 108发生。更一般地,SoC 100基于SoC 100的具有部分重新配置的配置进行操作。一旦部分重新配置完成,PMC 1602可以使得组件能够操作并启动操作。如前所述,SoC 100上的各种子系统经由NoC 108彼此传送例如应用数据。
图19是图18的块1808部分重新配置NoC 108的示例实现方案。如前所述,在块1808中,NoC 108的部分重新配置是在PMC 1602的控制下。在块1902中,PMC 1602控制要被重新配置的RP中的NMU 702。PMC 1602从PDI获得要重新配置的RP中的NMU 702的地址或标识。PMC 1602然后通过NPI 710向RP中的NMU 702的寄存器块712发送事务请求以控制NMU 702。事务请求向NMU 702的寄存器块712写入数值,该数值使得NMU 702停止向NoC 108发送进一步的数据包并清除任何未决(pending)的数据包。PMC 1602然后可以等待预定时间量以允许数据包被清除。在预定时间量之后,PMC 1602可以经由通过NPI 710的事务请求读取每个NMU 702的状态寄存器以确定是否任何NMU 702仍然具有未决的数据包。如果NMU 702仍有未决数据包,则会产生错误。如果没有NMU 702具有未决数据包,则PMC 1602经由通过NPI710的事务请求禁用或停止NMU 702的操作。
在块1904中,PMC 1602控制要重新配置的RP中的NSU 704。PMC 1602从PDI获得要重新配置的RP中的NSU 704的地址或标识。PMC 1602然后通过NPI 710发送事务请求到RP中的NSU 704的寄存器块712以控制NSU 704。事务请求向NSU 704的寄存器块712写入数值,该数值使得NSU 704随后拒绝从NoC 108接收数据包并清除任何未决的数据包。PMC 1602然后可以等待预定时间量以允许数据包被清除。在预定时间量之后,PMC 1602可以经由通过NPI710的事务请求读取每个NSU 704的状态寄存器以确定是否任何NSU 704仍然具有未决数据包。如果NSU 704仍有未决数据包,则会产生错误。如果没有NSU 704具有未决数据包,则PMC1602经由通过NPI 710的事务请求,禁用或停止NSU 704的操作。
通过如结合块1902和1904所描述的那样控制NMU 702和NSU 704,RP中NoC 108中的路径上的流量被停顿。流量停顿后,可以重新配置RP。在块1906中,PMC 1602重新配置RP中的NPS 706、NMU 702和NSU 704。PMC 1602根据包含在PDI中的配置数据重新配置NPS706、NMU 702和NSU 704。如前所述,PMC 1602经由通过NPI710的存储器映射事务来重新配置NPS 706、NMU 702和NSU 704。流量可以在一些路径上继续,这些路径在重新配置期间不进入也不退出(或独立于)处于该RP中的NoC 108。由于不是RP的一部分的NPS 706、NMU 702和NSU 704没有被重新配置并且不受重新配置的影响,这些NPS 706、NMU 702和NSU 704之间的路径可以在RP中的NPS 706、NMU 702和NSU 704的重新配置期间继续操作。
在块1908中,PMC 1602启用已被重新配置为使用状态的NSU 704。在重新配置之后,在重新配置之前被禁用或停止的NSU 704被启用并进入正常操作。在块1910中,PMC1602启用已被重新配置为使用状态的NMU 702。在重新配置之后,重新配置之前被禁用或停止的NMU 702被启用并进入正常操作。因此,在图18的块1810中,允许经由被重新配置的RP中的NPS 706、NMU 702和NSU 704进行通信。
图20示出了SoC 100的另一个示例实现方案。图20示出了SoC 100的各种组件和/或子系统的逻辑图。在图20的例子中,SoC 100包括DPE阵列102、PL 104、PS 106和NoC 108。SoC 100还包括PMC 1602、一个或多个硬连线电路块2012、2018、2024、2034和2036、结构互连2038、和配置互连1612。
结构互连2038代表在PL区域104中使用的互连电路。如图所示,各种不同的子系统(例如DPE阵列102、PL区域104、PS 106、PMC 1602、硬连线电路块2034和2036、以及在硬连线电路块2012、2018和2024内所选的组件)被连接到结构互连2038。配置互连1612用于编程(例如,配置)DPE阵列102、PL区域104、PS 106、PMC 1602、以及硬连线电路块2034和2036。例如,配置互连1612可以通过PMC 1602的PMC处理单元2004实现PL区域104的基于帧的(frame-based)编程。
PMC 1602作为用于SoC 100的信任根(root of trust)运行。在图20的例子中,PMC处理单元2004可以包括一个或多个能够执行程序代码的处理器。PMC 1602还包括控制电路2006、存储器2008、和一个或多个接口2010。PMC处理单元2004能够执行来自存储器2008的控制软件,存储器2008可以包括RAM和/或ROM。PMC处理单元2004能够在SoC 100内执行各种保安(security)和安全(safety)功能。例如,PMC处理单元2004能够通过配置互连1612、结构互连2038和/或NoC 108(例如,如结合图10所描述的那样一旦进行初始配置)来启动SoC100、执行SoC 100的部分重新配置、配置DPE阵列102、配置PL区域104,配置PS 106、并且配置NoC 108。
PMC处理单元2004能够与控制电路2006通信。控制电路2006可以包括用于整个SoC100的保安电路、安全电路、系统监控电路、电子熔丝(e-fuse)电路、和电源管理电路。在这方面,PMC处理单元2004能够写入电路中的控制寄存器,以在芯片范围的基础上设置SoC100的各种功能和配置。接口2010可以包括多种闪存存储器接口(例如,用于从外部源读取诸如SoC 100的PDI之类的配置数据)、用于接收一个或多个不同种类的存储卡的存储卡接口、SelectMAP配置接口、JTAG接口、以及一个或多个其他片外连接和/或接口中的任一种。
硬连线电路块2012包括连接到NoC 108和可配置I/O 2016的一个或多个可配置存储器(例如DDR)控制器2014。硬连线电路块2018包括连接到NoC 108和可配置I/O 2022的一个或多个可配置高带宽存储器(HBM)控制器2020。硬连线电路块2024包括各自都耦接到可配置的千兆位收发器(GT)2032的用于加速器的高速缓存一致互连(CCIX)块2026、一个或多个可配置的外围组件互连快速(PCIe)块2028、一个或多个可配置的媒体访问控制(MAC)块2030。硬连线电路块2034和2036可以实现可配置视频编解码器块、可配置前向纠错块、可配置密码块、和可配置模拟混合信号块(例如,包括一个或多个可配置的数模转换器(DAC)和/或模数转换器(ADC))中的一个或多个。应当理解,SoC 100可以包括比图20中所示的更少或更多的硬连线电路块。
PS 106连接到NoC 108、结构互连2038和配置互连1612。如图所示,PS 106可以包括一个或多个实时处理单元(RPU)2042、一个或多个应用处理单元(APU)2044、以及一个或多个图形处理单元(GPU)2046。PS 106还可以包括PS存储器2048,其可以包括级别2高速缓存和系统存储器管理单元(SMMU)。PS 106还可以包括一致互连(coherent interconnect)2050、侦听控制单元(SCU,未示出)、和一个或多个外围设备2052。一致互连2050和SCU使其他主体能够读取和/或写入级别2高速缓存存储器。例如,PL 104中的RPU 2042和主电路块能够侦听级别2高速缓存存储器。外围设备2052可以包括一个或多个不同的I/O接口,包括但不限于通用串行总线(USB)、以太网、通用异步收发器(UART)、控制器局域网灵活数据速率(CAN FD)、串行外围接口、显示端口(DisplayPort)、高清多媒体接口(HDMI)、I2C接口、和串行ATA接口。
如前所述,PL区域104可以包括通过结构互连2038进行互连的LUT 2054、BRAM2056、URAM 2058、和DSP 2060。如图所示,PL区域104连接到NoC 108、结构互连2038、以及配置互连1612。DPE阵列102可以包括互连的多个硬连线且可编程的DPE 204。DPE 204通过SoC接口块206连接到NoC 108、结构互连2038、和配置互连1612。
在图20的例子中,NoC 108也可以连接或耦接到位于另一个管芯和/或IC中的另一个NoC。例如,在SoC 100由通过中介层或其他载体互连的多个管芯形成的情况下,NoC 108可以通过中介层或载体与其他管芯中的NoC耦接。
在图20的例子中,CCIX 2026或其他多芯片高速缓存一致性等效物也可以连接或耦接到位于另一个管芯和/或IC中的另一个CCIX。例如,在SoC 100由通过多芯片缓存一致性协议互连的多个SoC形成的情况下,CCIX 2026可以通过其他SoC中的GT 2032耦接。
图20示出了由SoC 100实现的可编程设备平台的不同结构和功能方面。在这点上,SoC 100提供了一个灵活的平台,其中不同的功能可以从一个子系统重新映射到另一个子系统。例如,可以将特定功能从DPE阵列102重新映射到PL区域104,从PL区域104重新映射到DPE阵列102,从DPE阵列102重新映射到硬连线电路块,从硬连线电路块重新映射到DPE阵列102,从PL区域104重新映射到硬连线电路块,和/或从硬连线电路块重新映射到PL区域104。可以在不中断在SoC 100的其他部分中的用户应用的情况下执行这种重新映射。
虽然对于SoC 100主要是根据其中包含的不同子系统(例如PL 104、PS 106、DPE阵列102、NoC 108、和/或硬连线电路块)进行了描述,但该平台也提供“计算引擎”、“硬件加速引擎”、“存储器资源”、“外部接口”和“普遍互连(pervasive interconnects)”形式的资源,它们扩展到所描述的不同子系统。
本文定义的术语“计算引擎”是指能够执行程序代码的处理器。计算引擎也称为“组A”类型的电路块。已经结合SoC 100描述了各种类型的计算引擎,例如在PS 106中实现的各种处理器中的任何一个(例如,RPU 2042、APU 2044、和/或GPU 2046)。可以在SoC 100中实现的计算单元的其他示例包括在PL区域104内实现的软处理器。软处理器的说明性和非限制性示例是可从San Jose,California的Xilinx,Inc.获得的MicroBlazeTMSoft处理器内核。应当理解,定制软处理器也可以在PL区域104中实现。
本文定义的术语“硬件加速引擎”是指特定用途或专用电路,其可以被实现为硬连线电路块110或PL区域104中的电路块。硬件加速引擎也被称为作为“组B”类型电路块。硬件加速引擎的示例包括但不限于DPE、ADC、DAC、DSP、视频编解码器、密码引擎、和在PL区域104中实现的定制电路块。
就SoC 100而言,术语“存储器资源”包括PS 106和/或PL区域104中可用的任何存储器结构。存储器资源也被称为“组C”类型的电路块。例如,存储器资源可以包括PS 106中可用的片上存储器(OCM)和高速缓存存储器(例如,图示为PS存储器2048)和/或PL区域104中可用的LUT(例如,LUTRAM)、URAM和/或BRAM。存储器资源还可以包括片外或外部存储器,例如DDR、HBM、或其他可以使用硬连线存储器控制器和/或在PL区域104中实现的定制存储器控制器来访问的存储器。
就SoC 100而言,术语“外部接口”是指用于工业标准协议以及与位于芯片外的电路和/或系统进行通信的控制器。外部接口也称为“组D”类型电路块。SoC 100的外部接口的示例包括但不限于CCIX 2026、PCIe 2028、MAC 2030、以太网(在PS 106中)、和在PL区域104中实现的用于标准和/或非标准协议的定制控制器。
就SoC 100而言,术语“普遍互连”是指用于传送信息(如数据和中断或其他控制信号)的公共基础设施,还支持灵活的平台,以便不同的功能可以从一个子系统重新映射到另一个子系统。普遍互连也称为“组E”类型电路或电路块。普遍互连中包含的公共基础设施的示例包括NoC 108、PS 106的一致互连2050、和在PL区域104中实现的自定义信号通路。SoC100的普遍互连用于配置、连接性、可配置性、防火墙、和此处描述的各种子系统之间的通信。
出于说明的目的,一致互连2050能够建立经由NoC 108和/或结构互连2038而与硬连线电路块110(例如,2012、2018、2024、2034、和/或2036)、在PL区域104中实现的电路块、和/或DPE阵列102的DPE 204的连接。例如,PS 106的计算单元和在PL区域104中实现的计算单元能够访问一致互连2050。类似地,硬件加速器引擎(无论是硬连线的还是在PL区域104中实现的)能够访问一致互连2050。存储器资源(无论是外部的、在PL区域104中,还是在PS106中的)都连接到一致互连2050。
NoC 108能够实现计算引擎、硬件加速引擎、存储器资源、外部接口、和一致互连2050之间的数据路径和消息传递,以用于任何和所有此类组件之间的普遍数据和消息传递路径。
PL区域104能够为用户定义的、定制的、硬件加速器引擎、外围设备、和/或可以在PL区域104中实施的其他计算块实施定制的数据路径。
图20示出了用于组A、B、C、D、和E中的组件的静态和动态配置、控制、和状态的普遍配置和中断路径的使用。普遍配置可以通过使用PMC 1602访问在SoC 100的一组异构组件(例如,在各种子系统中)上的配置、控制、和状态寄存器(CCSR)通用组来实现,无论这些组件执行相同的功能还是不同的功能。例如,图23示出了无论是执行相同功能还是不同功能并且在SoC 100的不同子系统中实现的组件,可以具有通用可配置的中断状态寄存器、错误控制和状态寄存器、和/或性能控制和状态寄存器。
为SoC 100说明的普遍配置可用于实现更高级别的复合或宏功能。可以启用的宏功能的一个示例是SoC 100上组件之间的DMA数据移动。另一种类型的宏功能是任务流水线。任务流水线可以是加速流水线阶段(例如,PL中的硬连线电路块或用户定义的加速器),然后是计算的流水线阶段(例如,由PS或DPE阵列的DPE中的计算设备执行的处理)。
在一个示例中,在SoC 100中,可以通过使用公共描述符定义实现DMA类型宏功能和流水线任务执行类型宏功能的普遍配置。公共描述符定义在SoC 100的一组异构组件(例如,无论是PL中的电路、一个或多个DPE、PS处理器、还是硬连线电路块)中被普遍地解释。
作为说明性示例,SoC 100中的一个组件解释用于执行流水线级功能的入站描述符。根据该功能的结果,该组件为下一个异构组件生成出站描述符,以便解释以执行下一个流水线级功能。这种公共描述符方法还允许混合可用于执行任务的异构组件的类型。如所指出的,当在使用相同平台架构的不同SoC 100中实现或由同一SoC 100中的不同应用实现时,解释描述符并与SoC 100上的其他组件进行通信的PL元件可以被替换为解释相同描述符并与相同的相邻组件进行通信的硬件加速引擎。
图21示出了PMC 1602的示例实现方案。PMC 1602是SoC 100上的硬连线电路块。在图21的例子中,PMC 1602包括PMC处理单元2004(与PS 106分离且不同)。PMC处理单元2004可以包括物理不可克隆的功能(PUF:physically unclonable function)2104、一个或多个ROM 2106、一个或多个RAM 2108、一个或多个定时器2110、一个或多个处理器2112、和本地寄存器2114。在示例实现中,PMC 1602是在独立于PL104、DPE阵列102、和/或PS 106的单独电源域上(例如,具有单独的和独立的电源)。
一方面,PMC处理单元2004包括多个处理器2112,它们使用适当的表决电路以锁步方式(lockstep)操作。另一方面,PMC处理单元2004包括多个处理器2112,其中,可以以锁步方式操作的一个或多个处理器2112专用于访问RAM 2208(例如,执行被存储在RAM 2208中的代码),以及也可以以锁步方式操作的一个或多个其它处理器2112专用于访问ROM 2206(例如,执行被存储在ROM 2206中的代码)。
例如,一个或多个处理器2112专用于执行被存储在ROM 2106中的代码。ROM专用处理器2112是在SoC 100的启动期间脱离复位活动的第一处理器。在执行被存储在ROM 2106中的代码时,ROM专用处理器2112能够执行诸如设备初始化、启动接口验证、从复位中释放PMC 1602的其他处理器2112、以及将PMC平台加载器和管理器加载到RAM 2108中的操作。ROM专用处理器2112还能够执行安全启动、启动后安全监控和PUF管理。一旦从复位中释放,RAM专用处理器2112就能够执行被存储在RAM 2108中的代码。
在任何情况下,ROM 2106和RAM 2108只能由处理器2112访问。另一方面,每个处理器2112具有ROM 2106和RAM 2108,使得每个处理器2112具有独立且专用的ROM 2106和独立且专用的RAM 2108。RAM 2108可以用纠错编码(ECC)电路来保护。处理器2112可用于通过执行被存储在ROM 2106中的代码、并通过执行被存储在ROM 2106中的代码来执行从主启动设备加载到RAM 2108中的固件,来为SoC 100加电和配置。本地寄存器2114是用于PMC处理单元2004的配置寄存器并且只能由PMC处理单元2004访问。
启动后,处理器2112能够通过使用包含在PMC 1602中的各种组件来执行各种不同的功能。例如,处理器2112能够执行电源管理、电压和温度监控、安全和安保事件响应、以及用于SoC 100的类似功能。如图所示,处理器2112能够接收用于这些目的的中断和唤醒信号。
PMC处理单元2004连接到互连2116。PMC处理单元2004能够通过互连2116而与PMC1602和SoC 100内的其他组件通信。互连2116可以包括多个存储器映射交换器和接口以及多个流交换器和接口。互连2116连接到PMC共享的RAM 2118、全局寄存器2120、I/O 2122、DMA 2124和2126、安全流交换器2128、从启动接口2130、安全加速器2132、模拟系统2134、实时时钟(RTC)2136C、电源管理和复位2138、错误管理2140、调试数据包控制器2142、和配置帧单元(CFU)2144。
PMC共享RAM 2118可用于在处理期间存储SoC 100的配置数据并用作用于PMC1602的通用数据处理RAM。全局寄存器2120是可由PMC中的任何(例如,所有)主体访问的配置寄存器1602。全局寄存器2120可以包括通用、功率控制、错误管理寄存器和服务中断请求接口。I/O 2122可以包括耦接到多路复用输入/输出(MIO)2168的一个或多个I/O。如图所示,MIO 2168进一步连接到PS 106和PL 104。可以被包括在I/O 2122中的I/O电路块的示例包括但不限于I2C和一个或多个闪存接口,例如SPI和/或SD/eMMC。
DMA 2124和2126用于在PMC 1602内传输数据以用于SoC 100的配置,和用于处理配置数据。安全流交换器2128确保提供给安全加速器2132进行处理的数据流是安全的。从启动接口(SBI)2130促进多管芯SoC配置中的从启动和/或配置。尽管未示出,但SBI 2130可以连接到SelectMap 2170和NoC 108。
安全加速器2132可以包括AES-GCM电路块2146、椭圆曲线数字签名算法/Rivest-Shamir-Adleman(ECDSA/RSA)电路块2148、安全散列算法3/394(SHA-3/394)电路块2150、真实随机数发生器(TRNG)电路2152、和电池后备RAM(BBRAM)2154电路块。AES-GCM电路块2146是能够执行加密和/或解密的对称密钥加密引擎。ECDSA/RSA电路块2148是能够执行认证的公钥密码引擎。SHA-3/394电路块2150能够执行安全散列操作。TRNG电路2152能够产生随机数。
模拟系统2134可以包括:系统监控器2156,其能够监控来自一个或多个远程系统监控器电路的电压和温度,这些远程系统监控器电路可以位于SoC 100周围的各个位置和/各个子系统中;能够为PMC 1602产生时钟信号的系统振荡器2158;能够维护和/或管理SoC100上的电子熔丝(e-fuse)电路的电子熔丝控制器2160;能够为SoC 100中的模拟设备(例如可以在SoC 100上实现为硬连线和可编程电路块的DAC和/或ADC)生成一个或多个参考电压的带隙电路2162;能够为PMC 1602、NoC 108、NPI 710、和PS 106生成时钟信号的一个或多个锁相环(PLL)2164;和供电复位(POR)电路2166。
电子熔丝控制器2160能够读取电子熔丝电路。电子熔丝电路(例如电子熔丝存储器元件)可用于存储设计信息,例如设备DNA和安全密钥。电子熔丝电路还可以控制诸如禁用JTAG 2168之类的功能。
RTC 2136是能够在高精度晶体振荡器上运行的时钟电路。RTC 2136可用于测量当前时间并在特定时间为SoC 100内的各种操作系统和设备管理功能生成警报。电源管理和复位电路2138实现对于控制电源岛(power-island)、电源域、和对SoC 100上的其他电路块复位所必须的逻辑和接口。电源管理和复位电路2138进一步连接到PS 106以控制在PS 106中实现的电源岛。错误管理电路2140能够接收、记录和响应来自SoC 100内的其他子系统的错误。调试数据包控制器2142是用于处理从SoC 100上的其他接口(例如高速串行接口和/或PCIe块)传递到其的数据包的高速调试端口(HSDP)的数据包控制器。
CFU 2144能够对提供或加载到PL 104的配置寄存器中的配置数据执行配置和回读。例如,PMC 1602通过CFU 2144传输PL位流(例如,配置数据)以配置PL 104。
SoC 100可以被实现为包括由电源管理和复位电路2138控制的几个主要电源域。电源域包括:低电源域(其包括RPU和OCM);全电源域(其包括APU和高速I/O);NoC和系统双倍数据速率(DDR)电源域;和PL电源域。
可以在SoC 100内创建其他电源域,这些电源域可以通过在其上设置SoC 100的电路板进行控制。这些其他电源域可以包括但不限于进一步的I/O电源域、电池电源域、PMC电源域(例如,其中PMC具有其自己的电源域和电源)、PL RAM电源域、和DPE阵列电源域。
图22示出了PMC处理单元2004的处理器2112的示例布置。在图22的例子中,处理器2112以三重冗余架构被布置。在一个示例实现中,处理器2112被实现为硬连线Microblaze处理器,但也可以使用其他类型的处理器。
每个处理器2112连接到三模冗余(TMR)管理器2202和I/O模块2204。TMR管理器2202-1、2202-2、和2202-3进行互连。I/O模块2204-1、2204-2、和2204-3也进行互连。表决电路2210-1耦接到每个I/O模块2204。每个I/O模块2204可以包括中断控制器、定时器、通用I/O(GPIO)、和/或UART。每个TMR管理器2202能够管理处理器2112中的相应的一个的状态,包括故障检测和错误恢复。
每个表决器电路2210能够比较接收到的输入信号。每个表决器电路2210能够检测接收信号中的失配和接受多数结果并继续操作。提供失配(例如,丢失结果)的特定处理器2112被置于复位状态,而其他两个剩余处理器2112继续以锁步方式操作。如果所有三个处理器2112都不匹配,则重置每个处理器2112。
每个处理器2112还连接到RAM控制电路2206和RAM控制电路2208。RAM控制电路2206连接到表决器电路2210,表决器电路2210连接到指令RAM,例如RAM2118。RAM控制电路2208连接到表决器电路2210-5,表决器电路2210-5连接到数据RAM,例如RAM 2118。如图所示,RAM 2118和表决器电路2110-4和2110-5是ECC域的一部分。在图22的例子中,用于指令RAM(例如2206-1、2206-2、和2206-3)的每个RAM控制电路2206连接到表决器电路2210-3。处理器2112-1、2112-2、和2112-3中的每一个都连接到表决电路2210-2。诸如AXI4-Lite之类的控制接口或其他合适的控制接口连接到处理器2112-1、2112-2、和2112-3中的每一个。
图22示出了三模冗余的示例,其中处理器2112专用于访问RAM 2118。如前所述,类似的架构可以用于PMC 1602内的ROM专用处理器。在另一示例中,可以使用少于三个的处理器2112,其中一个或两个处理器(锁步)2112专用于执行存储在ROM 2106中的代码,而一个或两个其他处理器(锁步)2112专用于执行存储在RAM 2108中的固件。
PMC 1602是SoC 100内的信任根。PMC 1602能够通过确保PMC 1602加载的用于配置SoC 100的任何部分的任何外部代码得到认证和解密(如果需要)来构建信任链。例如,PMC 1602能够使用ECDSA/RSA电路块2148执行认证并使用AES-GCM电路块2146执行解密。通常,配置数据被认证和解密,PMC 1602可以将配置数据加载到SoC 100的适当子系统和/或电路块的适当配置寄存器。
图23示出了SoC 100的进一步结构和功能方面。图23示出了其中跨SoC 100的子系统中的不同子系统实现不同类型的计算引擎和硬件加速引擎的示例配置。在图23的例子中,计算引擎、硬件加速引擎、存储器资源、和外部接口通过使用SoC 100中的其他组件和/或子系统的标准化或公共接口来实现。这些公共接口允许所示组件耦接到SoC 100上的全局互连资源,在本示例中为NoC 108。
在图23的例子中,PS 106包括多个RPU 2042和多个APU 244,他们每个都经由级别2高速缓存2302(例如,PS存储器2048的一部分)耦接到一致互连2050。一致互连2050进一步连接到存储器2304。存储器2304可以是位于PL区域104中的存储器、外部存储器、或PS 106内的可由其他子系统中的其他电路块访问的存储器。如图所示,存储器2304也连接到NoC108。各种其他类型的电路块连接到NoC 108,例如一个或多个外部I/O 2308和一个或多个硬件加速引擎2310。
外部I/O 2308包括固定外围接口2312和用户定义外围接口2314。固定外围接口2312被实现为硬连线电路块,而用户定义外围接口2314被实现在PL区域104中。固定外围接口2312和用户定义的外围接口2314两者连接到系统I/O互连2315(例如,本地互连)和GT2316和/或I/O 2318。
硬件加速引擎2310包括在PL区域104中实现的用户定义的加速器2320、DPE阵列102的一个或多个(例如,一组或多组)DPE 204(其中一个或多个DPE 204的每组被配置为执行特定功能)、DSP硬连线电路块2334、和密码硬连线电路块2336。
在图23的例子中,尽管执行不同的操作并且被跨不同的子系统实现,固定外围接口2312、用户定义的外围接口2314、用户定义的加速器2320、DPE 204、DSP 2334、和密码引擎(crypto)2336利用共同接口。例如,每个提到的组件可以包括数据路径接口2322、MMU接口2324、中断接口2326、DMA 2328、性能监视器2330、跟踪/调试接口2332、和配置接口2334。这样,尽管各种组件属于如上所述的不同组和/或跨SoC 100的不同子系统实现,但每个组件可具有相同或公共的接口。公共接口支持将功能从SoC 100内的一个子系统重新映射到另一个子系统,因为尽管从PL区域104移动到硬连线电路块或DPE等,但功能块的信令保持不变。
数据路径接口2322是能够连接到全局互连的接口电路,在该示例中为NoC 108。例如,数据路径接口2322可以提供用于连接到NoC 108的NMU和/或NSU的标准接口。存储器管理单元(MMU)接口2324能够在SoC 100内的虚拟地址和物理地址之间执行地址转换。例如,MMU接口2324能够访问被存储在存储器中的页表和/或维护此类表的本地缓存副本,以执行地址转换,该地址转换可用于通过数据路径接口2322接收和/或发送的事务。MMU接口2324还能够强制执行读/写许可和授权以防止包含MMU接口2324的电路块执行对存储器地址的未授权读和/或写。
中断接口2326为电路块实现标准中断、或用户定义的和/或独特的中断。在一些情况下,可以共享两个或多个电路块的中断,例如,当这些电路块位于SoC 100内的同一分区中时。在这种情况下,可以在电路块之间共享中断的目的地。与SoC 100内的分区有关的进一步说明将参考其余图更详细地描述。
DMA 2328能够通过NoC 108和数据路径接口2322执行数据传输。性能监视器2330可以耦接到整个SoC 100中的其他电路和/或接口。性能监视器2330能够测量诸如性能监视器2330所属的电路块的带宽和延迟那样的数量。一方面,性能监控器2330可以过滤和测量流入和流出电路块的数据信号,以测量在固定时间段内发送到特定地址范围的事务数量或其他数量。性能监视器2330可以通过NoC 108(例如,PS 106或PMC 1602)将任何测量数据传送到编程目的地。跟踪/调试接口2332能够在NoC 108上发送和接收跟踪和/或调试数据以供PMC 1602接收。例如,调试/跟踪接口能够接收命令并将跟踪/调试数据发送到PMC 1602中的调试包控制器2142。
取决于电路块所在的特定子系统,配置接口2334连接到NoC 108和/或连接到其他互连(例如,配置互连1612或结构互连2038)。例如,PMC 1602能够通过向配置接口2334提供配置数据来配置电路块。例如,配置接口2334允许PMC 1602读取和/或写入位于该电路块中的配置寄存器(未示出)。
另一方面,不同的电路块可以包括数据路径接口2322、MMU接口2324、中断接口2326、DMA 2328、性能监视器2330、跟踪/调试接口2332、和/或配置接口2334的少部分或他们的任意组合的组合。一方面,中断接口2326被配置为接收和/或产生中断。在示例实现方案中,中断接口2326被实现为存储器映射接口。中断可以从连接到中断接口2326的其他电路块接收和/或提供给连接到中断接口2326的其他电路。中断信令可以通过NoC 108路由到特定的硬连线电路块110、PS 106、或如图23所示的任何其他电路块。
在说明性示例中,中断接口2326能够产生和/或接收门铃中断。门铃中断是从一个域(例如,一个分区)穿越到SoC 100内的另一个域的中断。例如,通过两个分区可以彼此隔离,一个或多个中断可以被允许传入和/或从分区传到其他分区和/或PMC 1602以传送消息或触发/启动预定动作。门铃中断可以通过NoC 108从一个域或分区穿越到另一个域或分区。
在一个示例中,可以在PL 104中实现PCIe控制器。PCIe控制器通过NoC 108耦接到DDR存储器。在这个示例中,PCIe控制器可以使用公共接口,并且因此包括中断接口2326。与SoC 100通信的主机系统可以为PCIe控制器生成新作业以执行并将新作业(例如,存储器访问)提交给SoC 100的PL 104中的PCIe控制器。例如,主机系统可以引起产生到PCIe控制器的中断,使PCIe控制器编程一个或多个DMA以执行存储器访问。
图23示出了SoC 100的组A、B、和C中的组件的功能和服务的模块化。即使当组件提供彼此不同的功能时,组件也可以保持这种模块化。例如,在PL区域104中实现的组件被模块化,使得PL组件具有到组D、E、和F中的组件的标准接口。每个PL组件可以部署在作为组A、B、或C中的组件实现的其他功能的任一者的服务中。组A、B、或C中的每个组件还具有到另一个PL组件或组A、B、和C中不同组件的通信和数据通路。
在使用SoC 100实现的模块化的另一个示例中,作为PL组件部署的特定功能可以部署在PL 104的其他部分中,以实现同一功能的多个并发实例。公共接口提供了跨SoC 100中的组件(无论是在组A、B、还是C中)部署的公共中断、地址转换、调试、和性能监控方案。尽管提供了公共接口,但另一方面,在组A、B、或C中实现的组件可以通过一组独特的或自定义的中断、地址转换、调试、和性能监控方案来实现。
图24说明SoC 100的进一步结构和功能方面。在图24的例子中,SoC 100包括能够实现安全特征的各种附加电路。这些附加电路可用于在SoC 100中创建不同且独立的分区以及不同分区之间的防火墙。每个分区可以在其中执行其自己的应用。在图24的例子中,包括了多个系统管理标识符(SMID)电路2402和可编程保护电路(PPC)2418。
处理器2112、RPU 2042、APU 2044、其他主体2408、和I/O设备2412通过SMID电路2402连接到本地互连2416。I/O设备2412进一步通过SMMU 1416连接到本地互连2416。本地互连24连接到NoC 108。PL 104和/或DPE阵列102连接到NoC 108。RPU 2042包括MMU 2404-1和高速缓存2406。APU 2044包括MMU 2404-2和高速缓存2410。
每个SMID电路2402可编程以使用特定的SMID。在配置期间,PMC 1602能够分配SMID并将其写入各个SMID电路2402中的每一个或至少那些正在使用的SMID电路2402中的配置寄存器。用于各种组件(例如,处理器2112、RPU 2042、APU 2044、其他主体2408、I/O设备2412、PL 104、和/或DPE阵列102)中的每一个的SMID电路2402能够附接或插入SMID进入由各个组件发起的事务。因此,例如,源自处理器2112的每个事务将包括事务中的SMID,该SMID已由如由PMC 1602分配的SMID 2402-2插入。类似地,源自RPU 2042的每个事务将具有如由PMC 1602分配的SMID 2402-2插入的SMID。以这种方式,来自SoC 100中的各种组件的事务的源可以通过该事务内的特定SMID来识别。分配给SMID电路2402的SMID在整个SoC100中可以是唯一的。
PPC 2418能够保护对SoC 100内的从电路的访问。PPC 2418中的每一个能够检查进入电路块的每个事务的特定SMID。PPC 2418中的每一个能够检查事务的SMID是否是允许的SMID,例如,是否在由相应PPC 2418维护的允许的SMID列表上。PPC 2418中的每一个还能够检查事务要访问的地址或地址范围是SMID有权访问的地址范围。在这点上,PPC 2418能够通过确保只有授权的电路块(基于SMID)能够访问其他电路块并且进一步仅访问对特定SMID允许的那些地址范围来实施访问特权。
在一个方面,PPC 2418包括被配置为保护电路块的配置寄存器的第一类型。这样的PPC 2418能够仅允许经授权的SMID访问配置寄存器并且仅允许访问具有用于相应允许的SMID的允许地址列表上指定的地址的那些特定配置寄存器。这种PPC 2418的例子包括但不限于PPC 2418-1、2418-2、2418-3、和2418-5。这些PPC 2418提供细粒度的保护。PPC 2418还可以包括被配置为保护存储器的第二类型。第二种类型的PPC 2418提供存储器保护和隔离。这种PPC 2418的例子包括但不限于2418-4和2418-6。
SMID电路2402和PPC 2418由PMC 1602配置。例如,PMC 1602能够写入给定设计(例如,根据加载到SoC 100中的PDI)使用的每个SMID电路2402和每个PPC 2418中的配置寄存器。例如,PMC 1602将SMID分配给SoC 100的各种电路组件并相应地配置SMID电路2402。PMC1602进一步将允许的SMID列表、和/或允许每个SMID访问的允许地址和/或地址范围写入PPC 2418的配置寄存器中。这些操作至少部分地能够创建两个或多个相互隔离的分区。
在这方面,PPC 2418-1能够仅允许来自授权源的授权事务访问PMC从体2420。PPC2418-2能够仅允许来自授权源的授权事务访问NPI 710。PPC 2418-3能够仅允许来自授权源的授权事务访问RTP从体2422。PPC 2418-4能够仅允许来自授权源的授权事务访问OCM2424。PPC 2418-5能够仅允许来自授权源的授权事务访问APU从体2426。PPC 2418-6能够仅允许来自授权源的授权事务访问DDR存储器控制器2428。
在图24的例子中,出于说明的目的示出了SMID电路2402和PPC 2418的特定位置。SMID电路2402和PPC 2418可以在作为接口的一部分的电路块内、在电路块之间的信号路径内、或类似物中实施。SMID电路2402和PPC 2418可以在提供逻辑等效性的不同物理位置中实现。例如,多个块可以具有连接到诸如NoC 108之类的全局路径的聚合中介(aggregatedintermediary)。在那种情况下,聚合中介可以视情况而定包括SMID电路2402和/或PPC2418,而不是通过中介聚合的每个单独的电路块。这对于NoC 108中的入口点和出口点都可能是正确的。
在图24的例子中,局部互连2416可以代表一个能够合并多个逻辑功能的物理电路块。在另一示例中,NoC 108可以被实现为包括一个或多个SMID附接点。换言之,与PL区域104和/或DPE阵列102内相反,SMID电路2402(例如,2402-8和2402-9)可以在NoC 108中实现。SMID电路2402可以在NoC 108中实现在入口点、出口点、或入口和出口点的组合。
在图24的例子中,到本地互连2416的各种连接通过一个网关进入和退出NoC 108。NoC 108的每个端口都能够从一个逻辑源或多个逻辑源接收事务。类似地,NoC 108的每个端口都能够从一个物理源或多个物理源接收事务。物理源可以是特定子系统中的电路块,而不同的物理源是不同子系统中的不同电路块。
例如,处理器2112、RPU 2042、和APU 2044均具有SMID电路2402。处理器2112、RPU2042、和APU 2044中的每一个都能够根据PMC执行的配置使用分配给其的唯一SMID发起事务1602。事务流经NoC 108并带有它们各自的SMID到达它们的目的地。类似地,来自PL区域104或DPE阵列102的事务每个都具有由SMID 2402-6或SMID 2402-7插入的SMID,视情况而定。来自PL区域104和DPE阵列102的事务将SMID传送到目的地。
作为说明性示例,考虑在PL区域104中实现的电路块发起事务A、B、和C的情况。事务A、B、和C中的每一个都携带由SMID电路2402-6(或SMID电路2402-8,如果在NoC 108中实施)分配的SMID。如果事务A被定向到DDR存储器控制器2428,则NoC 108既用作入口路径又用作出口路径。PPC 2418-6能够检查PL区域104中的电路块是否有权访问DDR存储器控制器2428(例如,基于SMID)以及是否有权访问由事务指定的特定存储器地址。当事务A的来源没有适当的权限时,PPC 2418-6能够拒绝事务A。
事务B可以被定向到PMC从体2420,而事务C被定向到RTP从体2422。在事务B的情况下,PPC 2418-1检查事务B的源(基于SMID)是否被允许访问事务指定的特定PMC从体2420。在事务C的情况下,PPC 2418-3检查事务C的源(基于SMID)是否被允许访问由事务指定的特定RTP从体2422。每个PPC 2418-1和PPC 2418-3基于SMID和事务的特定目标(例如,特定PMC从体2420或特定RTP从体2422)允许相应事务或拒绝相应事务。因此,SMID附件的逻辑功能和出口检查(例如,由PPU 2418执行)可以物理地分布在SoC 100内。
在另一个示例中,I/O设备2412可以是外部闪存设备,启动映像从其加载到第一PMC从体2420中。在该示例中,PMC从体2420可以是存储器从体,例如存储了启动代码的存储器、或用于编程或配置SoC 100中的其他块的寄存器,例如用于配置PL区域104和/或DPE阵列102的寄存器组。在另一示例中,启动映像可以是处理器2112将从其启动的程序代码。在该示例中,各种网关,例如PPU 2418和SMID电路2402已由PMC 1602配置为仅允许将启动映像加载到一个特定的PMC从体2420中。因此,仅允许I/O设备2412根据PPU 2418-1的规定,将映像文件的内容写入指定的(例如第一)PMC从体2420。不允许I/O设备2412读取或写入其他PMC从体2420。
继续该示例,处理器2112被授权通过认证方案(将在此处更详细地描述)以加载启动映像。例如,PPC 2418-1可以被配置为基于对应于SMID电路2402-1的SMID,允许处理器2112读取由I/O设备2412(只有写访问权限)把启动映像存储到其中的PMC从体2420。处理器2112只能读取启动映像并将启动映像解密到第二PMC从体2420中,例如处理器2112的工作存储器。处理器2112然后可以使用被存储在第二PMC从体2420中的解密的启动映像来编程其他配置寄存器,例如,通过写入第三PMC从体2420。第三PMC从体2420可以是用于PL区域104的配置寄存器或用于其他电路块的配置寄存器。
另一方面,RPU 2042可以具有与PMC 1602和/或PS 106的其他处理器(例如,APU2044)分开的本地互连。适合实时操作的RPU 2042可以在先前描述的低电源域上操作,并且因此具有与PMC 1602和/或APU 2044的本地互连分开的本地互连。这允许RPU 2042对不同的事件做出快速反应,例如,可以由RPU 2042接收和/或处理的实时传感器数据。图25示出了PPC 2418的示例实现。PPC 2418包括SMID检查电路2502、地址范围检查电路2504、和配置寄存器2506。
SMID检查电路2502能够检查接收到的事务的SMID。SMID检查电路2502确定接收到的事务中的SMID并将SMID与配置寄存器2506中指定的允许SMID列表进行比较。地址范围检查电路2504确定要在由事务指定的目的地中访问的特定地址。地址范围检查电路2504检查在接收的事务中指定的地址是否在每个配置寄存器2506的事务的SMID的允许地址集或地址范围内。
PPC 2418能够不允许(例如,拒绝)任何不满足由SMID检查电路2502和地址范围检查电路2504执行的检查的事务。PPC 2418还能够响应于基于由SMID检查电路2502和/或地址范围检查电路2504执行的检查而确定接收到的事务被拒绝,产生中断信号。
图26示出了启动SoC 100的示例方法2600。可以执行方法2600以在SoC 100内实现利用这里描述的各种子系统的应用。
在块2602中,SoC 100内的硬连线逻辑执行供电复位序列。一方面,硬连线逻辑是结合图21描述的POR电路2166。供电复位序列是指在SoC 100供电后执行的初始操作。通常,由SoC 100执行的供电复位序列在将控制权移交给PMC 1602的处理器以执行BootROM代码之前执行初始步骤。供电复位序列可以包括检测电压源是否供电并且使供电复位失效(de-assertion)合格的模拟部件。此外,可以捕获为SoC 100指定启动模式的启动模式引脚。电子熔丝控制器2160可以读取和缓存电子熔丝位。在PMC 1602上执行状态清除操作。POR电路2166能够认证BootROM。例如,可以使用PMC 1602的SHA-3/384电路块2150来认证BootROM。供电复位的结尾将PMC 1602的其余部分从复位中释放。
在块2604中,POR电路2166确定是否发生错误条件。如果是,方法2600继续到块2606,其中错误引脚被有效并且SoC 100的启动过程停止。
在块2608中,PMC 1602执行BootROM执行阶段。BootROM执行阶段可由PMC1602的一个或多个处理器2112执行。例如,BootROM执行阶段可由PMC 1602的ROM专用处理器2112执行。一方面,BootROM执行阶段是不可中断的。在块2608中,处理器2112清除PMC共享RAM2118。处理器2112初始化系统监视器2156并检查其中的电压。处理器2112初始化PLL 2164。处理器2112测试PMC RAM 2118。处理器2112进一步禁用(断电)电源岛,该电源岛基于由电子熔丝控制器2160读取的电子熔丝数据由于电子熔丝而被禁用。
在块2610中,PMC处理器2112确定是否发生错误条件。如果是,方法2600继续到块2612,其中在错误聚合逻辑中捕获错误,使错误引脚有效,并且SoC 100的启动继续。
在块2614中,PMC 1602执行启动头/认证证书处理。通常,处理器2112执行BootROM代码,从启动源加载启动头(Boot Header),并验证启动头。处理器2112能够认证和解密(如果需要)主PMC固件。处理器2112将启动头和认证证书从外部启动设备加载到PMC共享RAM2118中。处理器2112能够确定PDI映像的剩余部分如何被认证、在必要时被解密、以及基于启动头被解释。启动头可以包括与设备密钥和PUF加密黑密钥一起使用的初始化向量。认证证书可以包括ECDSA/RSA主要公钥和次要公钥。主要密钥用于验证次要公钥和用于后续阶段的验证。
在块2616中,处理器2112确定是否发生错误条件。如果是,则方法2600继续到块2618,其中SoC 100被锁定,例如启动中断。
在块2620中,处理器2112在执行BootROM时能够加载、认证和解密PDI的编程分区。在块2622中,处理器2112确定是否发生错误条件。如果是,则方法2600继续到块2624,其中SoC 100被锁定,例如启动中断。
在块2626中,处理器2112执行平台加载器和管理器级。一方面,RAM专用处理器2112能够执行平台加载器和管理器级。根据被包含在启动头中的指令,处理器2112能够执行多种操作中的任何一种。例如,在块2628中,处理器2112能够执行PS启动加载器级。处理器2112能够从外部源加载PS启动代码,验证PS启动代码,并将PS启动代码复制到PS 106中的OCM以供PS处理器执行。
在块2630中,处理器2112能够配置PL。例如,处理器能够从外部源加载配置位流,认证配置位流,并将配置位流提供给PL(例如,将配置位流写入到PL的配置寄存器)。
在块2632中,处理器2112能够配置DPE阵列。处理器2112能够从外部源加载DPE阵列编程段(例如,DPE阵列的配置映像)、认证DPE阵列编程段,并通过NPI710和NoC 108将DPE编程段写入适当的目的地(特别是DPE阵列中的DPE)。
在块2634中,处理器2112能够配置一个或多个电路块。电路块可以是硬连线电路块或在PL 104中实现的、需要配置数据的电路块,例如,对其中的配置寄存器进行编程。处理器2112能够从外部源加载寄存器编程段、认证寄存器编程、以及通过NPI710和NoC 108将寄存器编程写入目的地。作为说明性和非限制性的例子,处理器2112能够将寄存器数据写入SMID电路块2402、PPC 2418、和/或其他硬连线电路块(例如,密码电路块、ADC、DAC等)。
在块2636中,处理器2112能够配置NoC 108。作为说明性和非限制性示例,处理器2112能够如结合图11所描述地配置NoC 108。在块2638中,处理器2112能够配置任何存储器。例如,处理器2112能够将配置数据写入任何存储器控制器和/或到由SoC 100可访问的外部存储器的接口。
在平台加载器和管理器阶段由处理器2112执行的各种操作可能彼此独立,也可能不相互独立。在一些情况下,操作可以以同步方式执行。例如,虽然没有明确描述,但可以在能够配置PL 104之前加载NPI 710的映像。块2626内的子块的特定排序并不旨在限制本发明的布置。
图26说明PMC 1602负责配置PS 106、PL 104、DPE阵列102、和所选的其他电路块。在一个或多个其他实施例中,例如,根据启动头,PMC 1602能够用允许PS 106配置PL 104和DPE阵列102的程序代码来配置PS 106。在那种情况下,响应于在块2628中配置PS,块2630、2632、和2634可以由PS 106而不是PMC 1602中的处理器2112来执行。
随着方法2600的前进,前进中的每个级别启用或禁用用于组件访问SoC 100中的其他组件的授权。结合图26描述的过程是分层的,其中对SoC 100中子系统和/或组件的越来越窄的子集的授权可以被拒绝或被授予。图26所示的技术的分层方面能够支持用于现场可编程门阵列(FPGA)即服务(FPGA-as-a-Service)或“FaaS”处理环境的SoC 100配置。例如,PMC 1602能够在SoC 100中创建多个分区。在创建分区时,PMC 1602能够将许多逻辑目的地映射到一个物理目的地(例如,到在PL 104中实现的多个电路块,DPE阵列102中实现的多个独立DPE集群等)。类似地,PMC 1602能够在SoC 100中创建分区,其中许多物理目的地被映射到一个逻辑目的地。
在SoC 100的运行时间,SMID电路块2402和PPC 2418能够基于所描述的SMID到PPC权限绑定来支持多个不同的分区。这些不同的分区可以由SoC 100上可用的特定功能和/或组件提供服务。由于SoC 100可以被配置、重新配置、和/或跨不同子系统地部分重新配置,因此创建分区和强制执行分区之间的防火墙的许可和授权的映射可以被动态地修改。
图27示出了可用于启动SoC 100的PDI 2700的实例。在图27的例子中,PDI 2700包括启动头2702。PDI 2700还包括平台加载器和管理器(PLM)2704。PLM 2704可以包括安全头2706和可由PMC 1602的处理器2112执行的固件2708。PDI 2700还包括认证证书2714。
PDI 2700的下一个映像2710可以包括多个不同的块,显示为块0、块1直到块N。包含在下一个映像2710中的各个块可以在安全头2712中指定。通常,各个块0-N对应于PS启动代码、用于PL的配置位流、DPE阵列编程段、和在图26的块2628、2630、2632和2634中引用的寄存器编程数据。在特定实施例中,这些块可以根据应用(例如,分区)来组织,其中多个块表示用于在第一分区中实现的一个应用,而不同组的块代表另一个应用,该另一个应用可以在第二分区中与第一应用同时实现,或者在第一应用完成执行之后在第一分区中实现。
SoC 100的一个或多个部分的部分重新配置可由PMC 1602执行,PMC 1602随着时间的推移并响应于特定条件使用被包含在PDI 2700(或不同PDI中)中的可用和/或不同块或块组选择性地执行块2628-2638中的不同块。SoC 100的部分重新配置有助于将SoC 100中的物理组件或其逻辑子集分层为子集或整体。例如,PMC 1602能够控制分区的隔离、软件驱动器的卸载(和加载)(视情况而定用于修改的应用)、从任何次要启动接口传送编程映像、以及在编程完成之前进行映像验证和完整性检查。
图28示出了实现不同分区的SoC 100的另一个示例。在图28的例子,各种不同的映像可以顺序加载到SoC 100中。这些不同的映像在其中实现不同的分区,并且是FaaS处理环境的说明,其中平台提供者在SoC 100中实现“外壳(shell)”设计,以便于与在更大的系统内的SoC 100的通信,并且有助于在SoC 100中同时实现对应于多于一个不同用户(例如,通过PCIe链路耦接到SoC 100的主机处理系统的用户)的用户应用。
在图28的例子中,示出了包括主机数据处理系统2802的系统2800。主机数据处理系统2802可以被实现为诸如服务器那样的计算机系统。主机数据处理系统2802包括可分配给不同用户(例如,不同进程、不同应用等)的多个不同CPU。出于说明的目的,图28示出了使用系统2800的两个不同用户X和Y。因此,主机数据处理系统2802的CPU已经在用户X和Y之间分配。因此,主机数据处理系统2802包括用户XCPU 2804和用户Y CPU 2808。主机数据处理系统2802还包括能够与SoC 100建立通信的主机互连2806。例如,主机互连2806可以是能够通过PCIe链路与SoC 100通信的PCIe节点。
主机数据处理系统2802连接到主机存储器2810。主机存储器2810可以包括易失性和/或非易失性存储器。如图所示,主机存储器2810在用户X和用户Y之间划分。因此,主机存储器2810包括分配给用户X的用户X存储器2812和分配给用户Y的用户Y存储器2814。
SoC 100可以耦接到通过PCIe链路连接到主机数据处理系统2802的电路板或卡。电路板可以包括SoC 100和对于SoC 100为本地的外部RAM 2836。在SoC 100内实现的外壳设计在SoC 100内创建多个分区。如结合SoC 100在本文所使用的术语“分区”是指被分配或保留以供在该分区内实现的任何应用使用的SoC 100资源的集合或组。
外壳本身可以占据一个分区,在于外壳包括能够管理其中的资源的SoC 100的所选组件。外壳提供诸如SoC 100的配置和管理之类的功能,从而可以随着时间的推移管理在所创建的不同分区中实现的不同应用。作为说明性示例,PMC 1602和本文中参考PMC 1602描述的各种功能可以是外壳的一部分,使得FaaS供应者能够管理SoC 100和其中不同用户或应用在其各自的分区中的实施。另一方面,PMC 1602可以独立于外壳,但只能由外壳访问,使得在各个分区中实现的应用不能访问PMC 1602。外壳可以像其他分区一样被防火墙保护。然而,与其他分区不同,外壳能够监视和访问在SoC 100中实现的不同分区以及在每个分区中实现的特定角色/用户。
一方面,外壳(未示出)可以被实现为SoC 100内不改变的静态区域,而分区可以被实现为SoC 100中的动态可重新配置的区域。例如,外壳可以包括PCIe节点(例如,2816、2820)和DMA(2816、2822)、存储器控制器、以及诸如此类。例如,外壳可以包括与位于SoC100外部的电路进行通信所必需的接口。以这种方式,被实现为动态可重新配置区域的分区可以随着时间的推移被重新配置以实现不同的应用,同时由于外壳不中断地运行,SoC 100能够保持与主机数据处理系统、RAM和/或其他外部设备的通信链接。外壳包括到分区的接口,使得一旦在分区中实现应用,应用就可以与外壳通信和/或通过外壳访问设备和/或电路(例如,外部电路和/或设备,例如主机数据处理系统2802和外部RAM 2836)。外壳可以通过使用部分的PS 106、部分的PL 104、部分的NoC 108、和/或一个或多个硬连线电路块110来实现。
在图28的例子中,SoC 100被划分为两个分区(例如,不包括外壳静态区域)。每个分区具有或包括SoC 100的资源子集以供在该分区中执行的特定应用使用。例如,SoC 100包括第一分区(例如,分区X),其包括分配给用户X使用的各种资源。SoC100包括第二分区(例如,分区Y),其包括分配给用户Y使用的各种资源。分区以及,因此,用户X和Y,能够同时占用SoC 100并且彼此被防火墙隔离。分区X和Y是可动态重新配置的区域。
在图28的例子中,分区X和Y显示为包括等效的资源子集。然而,情况不必如此。一个分区可以比另一个分区分配更多或更少的资源。如在SoC 100中实现的外壳和PMC 1602可以建立分区以及在分区之间的SoC资源的分配。一旦被外壳建立,外壳和/或PMC 1602和主机数据处理系统2802就可以在不同分区内实现用户应用并且随着时间改变在每个分区中实现的应用。
例如,分配给分区X的SoC 100的资源被画上阴影。对应于用户X的分区X包括:来自PS 106的PCIeA/PF/VF电路块2816和DMA 2818;在PL 104中实现的一个或多个PL功能2824(例如,电路块);可用硬连线电路块的一个或多个GT 2032、MAC 2030、和PCIPB 2842;DPE阵列102的一个或多个DPE 204;以及外部RAM 2836的区域,其被显示为用户X SoC存储器2838。对应于用户Y的分区Y,具有分配给其的未加阴影的SoC 100的资源,包括:来自PS 106的PCIeA/PF/VF电路块2820和DMA 2822;在PL 104中实现的一个或多个PL功能2828(例如,电路块);可用硬连线电路块的一个或多个其他GT 2032、另一个MAC 2030、和另一个PCIPB2842;DPE阵列102的一个或多个其他DPE 204;以及示为用户Y SoC存储器2840的外部RAM2836的不同区域。在图28的例子中,加密电路块2826(例如,硬件加速器引擎)在分区X和分区Y之间共享,尽管情况不必如此。
分区X和Y中的每一个都具有通过NoC 108和访问一个或多个存储器控制器(未示出)的信号路径用于访问外部RAM 2836。该信号路径通过加载PDI来建立,用于在每个各自的分区(例如,形成应用的DPE配置数据、NoC配置数据、PL配置数据、和/或PS配置数据)中实现的应用。PCIB 2842和2844可用于访问外部存储设备。
在该示例中,PMC 1602(例如,在外壳中或在外壳的控制下运行)已将SMID电路块和PPC配置为具有适当的标识符和权限绑定,以防止分区X中的资源错误或恶意访问分区Y中的资源,反之亦然。例外是在这个例子中两个分区都能够访问加密电路块2826。实现的分离和防火墙(其中每个都具有独立的数据路径、中断、控制信号、以及诸如此类)意味着一个分区中的应用中的故障或错误不会影响另一个分区中的应用的操作。
参考分区X和Y之间的PCIeA和DMA资源分配,SoC 100和主机数据处理系统之间的PCIe流量的安全性、性能和错误隔离可以基于由外壳和/或PMC 1602实现的FaaS多租户隔离配置以不同级别的粒度实现。一方面,例如,具有多个PCIe根端口的双插槽主机数据处理系统或单插槽主机数据处理系统可以与SoC 100一起操作,其中SoC 100被配置为向分区X和Y中的每一个分配一个PCIeA控制器。可以实现分区之间的性能隔离,使得一个分区的突发主机数据处理系统到SoC流量不会妨碍另一分区可用的带宽。此外,一个分区的PCIe链接错误或PCIe链接关闭条件可以与那个分区隔离。PMC能够将分区X的电源管理功能与分区Y隔离。
具有单个主机数据处理系统到SoC PCIe连接的主机数据处理系统可以使SoC 100被配置为向分区X和分区Y中的每一个分配一个PCIeA物理功能(PF)。因此,与一个分区关联的PF的PCIe功能级别重置(FLR)可以将错误检测和恢复操作与其他分区隔离。PCIe PASIDTLP前缀(prefix)和地址转换缓存(ATC)可用于在主机数据处理系统2802上运行的用户X和用户Y以及在SoC 100上实现的用户X和用户Y角色功能(例如,在各自的分区X和Y中实现的应用)之间并发和独立地进行共享虚拟存储器交互。
图28的双租户例子示出了可以执行分区之间的PL 104和存储器资源分配。每个分区可以具有PL 104的一部分和在该分区中实现的应用的服务中可用的相关联的存储器资源。外壳可以向用户X和Y提供可用的标准的、预先设计的函数库,其具有特征化的PL使用和性能指标。在替代示例中,用户X和Y中的每一个都能够利用SoC 100的可用的、每个用户的、分区的资源来部署一个或多个自定义功能。
如图28所示,可以在分区之间分配外部RAM 2836(例如,DDR)。外壳实现的FaaS多租户解决方案能够实现用户之间片外存储器资源的安全、性能和错误隔离。这可以在不同的粒度级别上实现。例如,具有多个DDR控制器的SoC 100可以被配置为包括多个DDR控制器,其中一个或多个被分配给用户X并且一个或多个其他DDR控制器被分配给用户Y。可以实现性能隔离,例如,由于用户X的行首阻塞或页面冲突而导致的DDR带宽下降不会影响用户Y在其中执行的应用的带宽。
在另一个示例中,SoC 100可以被配置为在SoC地址映射中交错多个DDR控制器。再者,可以使用SMID和PPC的组合在每个用户的基础(per-user basis)上保留和隔离片外存储器(例如,外部RAM 2836)的地址空间。因此,防止在一个分区中执行的应用访问另一分区的地址空间。可以实现这种隔离,同时还可以通过使用多个DDR控制器实现可能的聚合带宽。
NoC 108能够在分配给分区X的SoC 100上的组件和分配给分区Y的SoC 100上的组件之间提供用于数据移动和通信的分区之间的安全性、性能和错误隔离。该隔离可以在基于FaaS多租户隔离配置的不同粒度级别下实现。例如,可以在每个用户的基础上分配利用NoC 108和NoC 108的缓冲资源的电路块到电路块和电路块到存储器的路径。例如,NoC 108可以被编程,使得NoC物理路径和它们的专用虚拟通道在每个用户(例如,分区)的基础上被分配。正如所讨论的,SMID(无论是插入在源处或周围的事务中和/或通过在NoC 108入口点实现的SMID电路)都可以被PPC用来在事务从NoC 108出现时强制实现用户之间的防火墙。在另一个例子中,NoC 108物理路径和专用虚拟通道可以在用户之间共享。
外部I/O控制器和硬件加速块也可以在用户之间分配。例如,用户X被分配了特定的GT 2032、MAC 2030、和PCIB 2842,而用户Y被分配了不同的GT 2032、不同的MAC 2030、和不同的PCIB 2844。因此,用户X和用户Y具有专用的PCIe和以太网接口控制器以及相关的I/O。
然而,在其他配置中,使用内置防火墙功能,SoC 100支持用户X和用户Y同时共享PCIe和以太网接口控制器以及相关的I/O。此外,在所示示例中,用户X和用户Y共享对密码电路块2826的访问。在每个分区中示出的块仅代表不同用户对硬连线电路块的共享访问。密码电路块2826能够向用户X和用户Y提供加密/解密服务,其中每个用户用唯一密码密钥使用密码电路块2826。无论数据流量是由PCIe还是以太网提供服务,情况都是如此。
同时参照图26、27和28,SoC 100的启动过程本质上是分层的,便于结合图28描述的FaaS使用情况。例如,SoC 100的启动代码最初可以作为PDI 2700的块0(例如,来自SoC100制造商)被提供。接着,由FaaS提供者创建的外壳可以作为PDI 2700的块1被加载。如上所述,外壳通过向每个分区分配资源来建立SoC 100的分区。然而,SoC 100的资源虽然已分区,但并未进行配置。随后加载分别对应于分区X和分区Y中要实现的应用的块2和块3。
在实施时,每个应用仅知道分配给其中实施该应用的分区的SoC 100的资源。作为防火墙的一部分,PMC 1602被配置为仅允许每个用户访问对应于该用户分区的配置空间。换言之,PMC 1602仅允许用户X访问分配给分区X的SoC 100资源的配置空间(例如,配置寄存器)(无论是PL的特定子集、DPE阵列的特定子集、和/或PS中的特定单元)。类似地,PMC1602仅允许用户Y访问分配给分区Y的SoC 100资源的配置空间(无论是PL的特定子集、DPE阵列的特定子集、和/或PS中的特定单元)。
PMC 1602能够编程在每个分区中启用和禁用各种电路块(例如,参考结合图23描述的公共接口)的那些中断。PMC 1602还能够将特定中断与特定SMID相关联。例如,使用该框架,用户X可以确定所述设计(例如,在分配给分区X的PS 106部分中执行的分区X的应用部分)不需要区分用于处理中断的域中的一个或多个不同的电路块。例如,分区X中的PS组件可以执行相同的中断服务例程,而不管是分区X中的用户定义块还是分区X中的硬件加速器块触发了中断。
正如所指出的,在图28的例子中,分区X和分区Y被示为在资源分配方面基本相同。然而,在其他示例中,分区可以根据每个用户和/或应用的需要进行定制。例如,如果用户Y需要的资源比用户X少,则可以将更多的资源和/或带宽分配给分区X而不是分区Y。分区为用户X提供了在NoC 108上增加的带宽,例如,以适应用户X的资源使用增加。分区在资源分配和/或它们各自用户的使用方面不需要是对称的。
在多租户FaaS使用例子中,两个用户都不知道SoC 100上的另一个用户。在这方面,用户X对SoC 100使用的提升仅限于分区X,并且不会降低由用户Y对SoC 100的使用。分区在性能、错误处理和可靠性方面保持独立。
在多租户的例子中,一旦一个用户完成了操作,另一个用户可能会在分配给现在完成的用户的分区中实现。例如,考虑这样一种情况:用户X打算执行可能发生数小时的扩展处理,而用户Y执行与向特定最终用户传送视频相关的视频处理。当最终用户停止消费视频内容时,用户Y可以从SoC 100上的分区中移除。另一个不同的用户,例如用户Z,可以使用部分重新配置在用户Y先前使用的分区Y中实现。在发生这种情况时,用户X能够像外壳一样在分区X中不间断地继续操作。部分重新配置可以重新配置在之前由用户Y使用的分区内的任何资源和/或连接性。也就是说,在分区中实现的新用户可以使用在之前由用户Y使用的PL、NoC、PS和/或DPE阵列的任何组合,尽管具有不同的配置和/或功能(例如,在每个资源子集中加载的不同配置映像和/或不同的SMID和权限绑定)。例如,新用户可以执行音频处理而不是传送视频。
图29示出了实现不同分区的SoC 100的另一个示例。图29示出了在汽车或其他车辆中使用SoC 100的示例用例。如图所示,SoC 100被划分为两个不同的分区2902和2904。分区2902实现了执行实时处理的应用。如图所示,分区2902包括实时处理域2902,其包括RPU2910、一个或多个外部通信电路块(例如,I/O和/或接口)2908、和本地RAM 2912。一方面,RPU 2910、外部通信2908、和本地RAM 2912可以在PS106内实现。实时处理域2906经由NoC108连接到DDR控制器2914。PPC 2920提供存储器保护和防火墙。如图所示,NoC 108和PPC2920是可由分区2902和2904使用的全局资源。
分区2904独立于分区2902。因此,分区2904中的任何处理、错误和/或性能问题不影响分区2902。在分区2904中实现的应用执行多个不同的功能,如可编程功能1、2、和3。可编程功能利用DPE阵列102和PL区域104。可编程功能1可以执行图像处理,并且利用连接到在PL 104中实现的计算机视觉功能2918的一个或多个DPE 2916。在PL 104中的计算机视觉功能2918(例如,在PL 104中实现的标准内核和/或在PL 104中的用户定义的电路块)通过PPC 2920连接到NoC 108和多个交错的DDR控制器2922。可编程功能2可以执行机器学习,并利用连接到在PL 104中实现的机器学习功能2926的一个或多个DPE 2924。PL 104中的机器学习功能2926(例如,在PL 104中实现的标准核和/或在PL 104中的用户定义电路块)通过PPC 2920连接到NoC 108和多个交错DDR控制器2922。可编程功能3可以提供到外部设备的接口,并利用在PL 104中实现的外部接口2928。PL 104中的外部接口2928(例如,在PL 104中实现的标准内核和/或PL 104中的用户定义的电路块)通过PPC 2920连接到NoC 108和多个交错DDR控制器2922。
图29示出了分区2904可用于对从汽车或其他车辆中的一个或多个相机和/或其他传感器获得的视频数据流执行图像处理的示例。例如,分区2904能够执行诸如车道检测、目标识别、其他计算机视觉任务、和/或机器学习之类的操作。分区2902能够执行控制和通信功能,还可以管理其他时序关键的实时任务。感兴趣的特征,例如由每个分区获得和/或生成的数据,可以从DDR存储器中的共享区域访问,该共享区域可由两个分区访问,如由分配给每个分区中的相应主控器的SMID和PPC 2920确定。
如上所述,分区2902和2904彼此分开。此外,分区2902和2904以不受彼此干扰的方式操作。例如,如果在分区2904中检测到错误,则在分区2902中实现的应用能够在恢复分区2904的同时继续运行(例如,通过重置分区并通过部分重新配置在其中重新加载应用)。
在SoC 100中实现的应用可以由PMC 1602基于SoC 100启动时间分配资源来实现。例如,PMC 1602使用可编程地址映射来为两个分区中的每一个创建寻址能力。NoC 108通过分区2902和2904中的每一个提供QoS控制的数据路径。通过NoC 108的数据路径被编程为在数据路径之间隔离以确保不受干扰。PMC 1602对存储器保护电路2920进行编程以提供对诸如DDR、SRAM、外围设备、和其他分区的资源的访问(和限制访问)。
PMC 1602还能够在SoC 100的操作期间,例如在执行时间动态地重新配置一个或两个分区(例如,执行部分重新配置)。例如,在执行时间期间,在分区2904中执行的应用可以被应用的不同版本替换以执行不同的计算机视觉和/或机器学习操作。作为说明性和非限制性示例,在分区2904中执行的应用可以从使用前置摄像头的执行驾驶辅助(例如,用于以更高速度驾驶)的应用更改为执行停车辅助并使用后置摄像头的应用。例如,在车辆中从前进切换到倒车所需的时间可以触发并且足以部分地重新配置分区2904。提供驾驶辅助和停车辅助特征仅用于说明的目的。在每个相应分区中实现的应用可以使用不同的传感器数据并以不同的方式处理传感器数据。在另一示例中,整个设备可以被重新配置以在分区2902和2904中的每一个中实现不同的分区和/或不同的应用。
汽车用例说明了进一步的特征,其中分区可能包括加密和/或非加密分区。例如,一个分区可以用具有高可靠性的安全区来实现以执行安全关键特征,而另一个分区在提供娱乐功能(例如,视频流和/或音频处理)时可能需要较少的安全特征。尽管如此,分区是有防火墙的。
在图29的例子中,因为一个用户拥有两个分区2902和2904,所以不需要实现外壳。也就是说,虽然两个图,图28和29示出了分区示例,但图28示出了多租户模型,其中多于一个的用户能够同时使用SoC 100,而在图29中,拥有两个分区的单个用户正在使用SoC 100。结合图28描述的外壳能够与PMC 1602组合,管理多租户实施。
图30-32示出了在SoC 100内实现PDI的不同示例用例。图30-32的例子示出了如本文先前描述的SoC 100的各种特征,例如,诸如PMC 1602的集中组件配置整个设备(包括PL104、PS 106、NoC 108、DPE阵列102、和硬连线电路块110)的能力。如所指出的,在一些情况下,PS 106能够配置PL 104、NoC 108、DPE阵列102、和硬件电路块110。
图30-32还示出了使用诸如NoC 108之类的SoC 100的公共基础设施来连接相同分区内的各种电路组件。图30-32进一步示出了重新映射的不同示例。重新映射的一个示例是指动态部分重新配置,其中SoC 100的分区内的资源随着时间的推移被重新配置以供其他不同的应用使用。重新映射的另一个示例是SoC 100资源被重新配置以随时间创建不同的分区。
图30示出了在SoC 100内实现PDI的示例方法3000。在SoC 100中实现的PDI可以包括用于实现多个不同分区的配置数据。通常,指定多个不同分区的PDI包括用作主分区的一个分区。该分区能够控制其他次要或从分区。作为说明性示例,如本文结合图28的FaaS示例描述的外壳设计可以作为主分区运行。在另一个例子中,图29所示的实时处理域可以作为主分区运行。
在块3002中,SoC 100接通电源。在块3004中,PMC 1602接通电源并且在SoC100中执行初始安全配置。例如,PMC 1602可以执行一个或多个操作,如前文结合图26所描述的。
例如,在块3004中,PMC 1602能够执行SoC 100中一个或多个电路块的初始配置。初始配置包括例如在SoC 100内设置时钟和安全设置。PMC 1602能够将配置数据写入SoC100的各种PPC。在这个阶段,PMC 1602能够写入仅允许PMC 1602访问PPC和/或受PPC保护的特定从设备的配置数据。PMC 1602还能够配置SMID电路。
另一方面,PMC 1602能够将初始配置设置写入DPE阵列102(未示出)的全局寄存器。例如,PMC 1602能够写入NPI 710以访问这些全局寄存器。例如,全局寄存器可以指定DPE如何通过SMID标识自己。
默认情况下,在加电时,NoC 108未被配置任何数据路径。在加电后,没有电路块能够利用NoC 108与任何其他电路块进行通信。然而,PMC 1602能够使用NPI 710对NoC 108进行编程以建立到DPE阵列102的初始数据路径以用于编程目的。结合图10描述了初始配置NoC 108的示例方法。初始数据路径,一旦由PMC 1602配置,然后可以由PMC 1602使用以通过写入DPE阵列102中的其他配置寄存器将应用编程到DPE阵列102(例如,对单个DPE 204的核心、存储器模块、DMA、交换器等进行编程)。
一方面,PMC 1602可以在SoC 100的电源域上操作,该电源域独立于SoC 100内包括的每个其他子系统和/或组件。SMID电路和/或PPC电路可以被包括在PMC电源域中。这允许PMC 1602独立地给彼此的子系统加电或断电,同时为SoC 100保持活动和信任中心。此外,由PMC 1602创建的安全设置可以由SMID电路和/或PPC保留,尽管受此类电路保护的特定子系统正在断电。
在块3006中,PMC 1602将PDI加载到SoC 100中。PMC 1602执行PDI以创建分区并在分区中实施应用。例如,PDI指定多个分区和要在SoC 100的不同分区中的每一个分区中实现的应用。PDI可以指定主分区和一个或多个次分区,其中每个分区实现应用。在一个示例中,PDI在加载到SoC 100中并由PMC 1602执行时,实现如结合图28所描述的分区。分区可以包括一个外壳和两个或多个不同的用户分区。在另一示例中,PDI在加载到SoC 100中并由PMC 1602执行时实现如结合图29所描述的分区。
在执行块3006时,PMC 1602能够如结合图26的块2620所描述的那样认证PDI。此外,PMC 1602能够如结合图26的块2626所描述的那样执行PDI。PMC 1602能够配置部分的PL、部分的PS 106、部分的NoC 108、部分的DPE阵列102、和/或由PDI指定的每个相应分区使用的任何硬连线电路块。
可以使用强制实施规则的电子设计自动化(EDA)工具创建PDI。通常,实施规则确保功能(例如,用户和/或应用)将适合要在SoC 100内创建的分区。例如,基于要在SoC 100中实现的分区,EDA工具可以向“N”个不同分区中的每一个分配特定数量的DPE 204,向N个分区中的每一个分区分配特定数量(例如,单元块的数量)的PL 104,向N个分区中的每一个分区或仅向N个分区中的某些分区分配特定的存储器控制器,将PS 106中的某些处理器分配到N个分区或仅N个分区中或N个分区中仅某些分区等。因此,随着每个应用的实施,EDA工具有效地确保应用能够适应并在SoC 100的可用分区中执行。
作为块3006的一部分,PMC 1602能够调整由PDI指定的各个分区的安全配置以实现分区的防火墙和隔离。例如,PDI包括PMC 1602写入配置寄存器、PPC和/或SoC 100的SMID电路的配置数据,以完成电路的配置以实施防火墙并防止分区内的电路跨越分区边界并访问其他分区的电路资源。例如,PMC 1602能够配置存储器控制器以分配仅由SoC 100内的特定分区使用的外部存储器池,以及仅由SoC 100内的不同的分区使用的另一外部存储器池(例如,非重叠存储器)。
一旦配置了SoC 100,在每个分区中实现的应用就能够运行。如所讨论的,在块3006之后,SoC 100可以实现如结合图28或图29所描述的分区和应用。
图31示出了在SoC 100内实现PDI并且随着时间重新配置SoC 100的另一个示例方法3100。在图31的例子中,可以通过加载第一PDI来配置SoC 100。第一PDI可以指定SoC 100的特定分区。随后,响应于触发事件,SoC 100可以用指定SoC 100的不同分区的不同PDI被重新配置。例如,PMC 1602可以执行负责响应不同触发事件(例如,信号和/或中断)随时间将不同PDI加载到SoC 100中的控制程序。
因此,在块3102中,SoC 100进行通电。在块3104中,PMC进行通电并在SoC 100中执行初始安全配置。在块3106中,PMC将应用加载到SoC 100中以创建多个分区并在每个分区中实现应用。块3102、3104、和3106可以基本上如分别结合图30的块3002、3004和3006所描述的那样执行。
在块3108中,PMC 1602确定是否已检测到触发事件。触发事件可由在SoC 100内实现的多种不同电路中的任一个来检测。此类电路可检测SoC 100自身内的触发事件和/或检测来自外部源的触发事件。响应于检测到触发事件,这样的电路能够产生可以提供给PMC1602和/或主分区的中断。在一些示例实现方案中,PMC 1602可以被包括在主分区内。
响应于检测到触发事件,方法3100继续到块3110以将不同的PDI加载到SoC 100中并执行不同的PDI以创建分区并在分区中实施应用。在图31的例子中,不同的PDI可以配置SoC 100的整体。虽然由不同的PDI指定的分区可以与块3108之前存在的分区相同,但是这些分区可以完全不同。在分区中实现的应用也可以不同于最初在块3106中实现的那些应用。
在加载不同的PDI时,PMC 1602能够执行图26的块2620和2626。例如。在说明中,PMC 1602验证不同的PDI。PMC 1602然后加载来自不同的PDI的不同的配置数据块以将DPE204、PL 104的单元块、NoC 108中的路由、PS 106的组件、和/或硬连线电路块110分配给由不同的PDI指定的不同的分区。在块3110中加载不同的PDI示出了重新映射的示例,其中SoC100的资源被有效地重新分配给不同的分区。此外,每个分区中的资源可以重新配置以实现不同的应用。
如果在块3108中没有检测到触发事件,方法3100可以继续循环通过块3108以监视触发事件的发生。在循环时,最初在块3106中实现的分区和在各个分区中实现的应用继续运行。
方法3100可以继续迭代。图31的例子示出了多个不同的PDI是可用的并且PMC1602响应于不同的触发事件随时间加载不同的PDI的情况。应当理解,可以在块3108中检测到的每个不同类型的触发事件可以与特定的PDI相关联。这允许响应于不同条件根据需要重新配置SoC 100。如前所述,重新配置扩展到SoC 100的所有子系统。
图32示出了在SoC 100内实现PDI并且随着时间执行SoC 100的部分重新配置的另一个示例方法3200。在图32的例子中,可以通过加载第一PDI来配置SoC 100。第一PDI可以指定SoC 100的特定分区。随后,响应于触发事件,SoC 100可以经历部分重新配置,其中一个或多个分区中的功能(例如,应用)被动态重新配置。而传统FPGA类型设备中的部分重新配置仅涉及修改在PL 104的某些部分中实现的功能而其他部分继续不间断地操作,在图32的示例中,部分重新配置被扩展到包括在经历部分重新配置的分区中的任何类型的电路和/或子系统。
因此,在块3202中,SoC 100进行通电。在块3204中,PMC通电并在SoC 100中执行初始安全配置。在块3206中,PMC 1602将PDI加载到SoC 100中并执行PDI以创建多个分区并在每个分区中实现应用。多个分区包括主分区(例如,外壳或实时处理域)和一个或多个次分区。块3202、3204、和3206可以基本上如分别结合图30的块3002、3004和3006所描述的那样执行。
在块3208中,PMC 1602确定是否已检测到触发事件以执行动态部分重新配置。触发事件可由在SoC 100内实现的多种不同电路中的任一个来检测。此类电路可检测SoC 100自身内的触发事件和/或检测来自外部源的触发事件。响应于检测到触发事件,这样的电路能够产生可以提供给PMC 1602和/或主分区的中断。在一些示例实现中,PMC 1602可以被包括在主分区内。响应于检测到触发事件,方法3200继续到块3210以将不同的PDI加载到SoC100中以重新配置其中的一个或多个分区。
在图32的例子中,不同的PDI重新配置SoC 100的被称为“所选分区”的分区。所选分区可以是最初在块3206中实现的次分区。因此,鉴于图30和31示出了整个SoC 100的重新配置,而图32示出了单个分区的部分重新配置。即,不同的PDI仅包括用于配置(或重新配置)PL 104的特定部分、PS 106的部分、NoC 108的部分、DPE阵列102的部分、和作为所选分区的一部分的任何硬连线电路块110的配置数据。
在块3210中,PMC 1602加载不同的PDI并执行不同的PDI以动态地重新配置所选分区。不同的PDI包括对于PMC 1602配置被包括在被动态重新配置的所选分区中的任何电路所需的配置数据。在执行块3210时,PMC 1602能够如结合图26的块2620所描述的那样认证不同的PDI。PMC 1602还能够对于PL 104、PS 106、NoC 108、硬连线电路块110、和/或DPE204的作为所选分区的一部分的那些部分执行图26的块2626。例如,PMC 1602不会覆盖用于PL 104、PS 106、NoC 108、硬连线电路块110、和/或DPE 204的任何部分(其不是所选分区的一部分)的任何其他配置数据。
应当理解,虽然方法3200结合重新配置单个分区描述了SoC 100的部分重新配置,但另一方面,部分重新配置可以包括重新配置SoC 100中的多于一个但少于所有分区。
出于说明的目的,考虑其中PMC 1602最初实现图28的架构(包括块3206中未示出的外壳)的示例。在图28的FaaS示例中,PMC 1602可以被并入外壳中。外壳可以被实现为静态的、不变的区域,它能够创建分区并控制在分区中实现的应用,这些应用是动态可重新配置的。因此,外壳可以包括PMC 1602并且能够控制每个次级分区的部分重新配置。外壳可以包括外部I/O和/或其他支持电路,它们在重新配置一个或多个或所有次级分区时保持为工作的,并连接到主机处理系统。在又一个示例中,PMC 1602可以与外壳分开,但只能由外壳访问。
继续图28的FaaS示例,在块3210中,PMC 1602可以重新配置分区Y以供用户Z(例如,另一个应用或角色)使用。在重新配置所选分区时,PMC 1602能够执行与结合图26的块2620和2626所描述的过程类似的过程。然而,不是配置整个SoC 100,加载和执行的不同PDI仅导致PMC 1602重新配置:分区Y的DPE阵列102的那些DPE 204,这些DPE 204是现在由用户Z使用的;现在被用户Z使用的分区Y的PL 104的那些单元块;以及现在被用户Z使用来在用于用户Z的电路之间建立数据路径的分区Y的NoC 108的那些部分。PMC 1602也可以加载配置数据(例如,可执行代码和/或寄存器设置),用于由用户Z使用的分区Y的PS 106的部分和/或用于由用户Z使用的分区Y的任何硬接线电路块。
应当理解,PMC 1602不写入到对应于分配给分区X的资源(例如,PL 104的部分、PS106的部分、特定DPE 204、NoC 108的部分和/或硬连线电路块110)的配置寄存器。因此,在分区X中实现的应用继续不间断地运行,而对应于用户Z的不同应用在分区Y中实现。
在另一个例子中,考虑图29的情况。在那种情况下,在块3206中,PMC 1602最初实现分区2902和2904。分区2902实现对应于低功率域的应用(例如,RPU、分配给它的存储器控制器、和具有通过与分区2902对应的NoC 108建立的连接的外部RAM库)。PMC 1602进一步实现分区2904中的功能,分区2904实现利用一个或多个DPE的应用,实现PL 104中的一个或多个电路块,并使用存储器控制器和具有NoC 108中建立的连接的另一个外部RAM库(例如,对应于分区2904)。
因此,在块3210中,PMC 1602将不同的PDI加载到SoC 100中并执行不同的PDI。例如,PMC 1602可以根据检测到的特定触发事件在分区2904中实施不同的应用以在其中实施不同的功能。参考前面的示例,分区2904可以从实现驾驶应用到停车应用动态地重新配置,反之亦然。在图32的例子中,虽然SoC 100经历动态部分重新配置以在分区2904中实现不同的应用,但是分配给分区2904的资源保持不变。
在某些情况下,根据所需的安全性和分区之间的隔离程度,可以在分区之间共享存储器控制器和/或其他电路块。共享存储器控制器仍然可以强制执行存储器分离,以便每个分区只能访问该分区自己的存储器库,该存储器库独立于其他分区。然而,在其他情况下,分区可能有一些共享存储器。
在汽车示例中,SoC 100实现对应于一个用户的应用。也就是说,特定实体可以开发多个应用,这些应用将在SoC 100的不同分区中并发运行。虽然每个应用可能由同一用户拥有,但每个应用将在不同的隔离分区中执行以满足安全要求。例如,使用低功耗域和RPU的应用可能有这些安全要求,需要与其他应用隔离。此外,在汽车示例中,PMC 1602可以在高于在SoC 100中实现的分区的级别上操作,并且提供对于应用同时执行和将不同应用交换进分区和交换出分区所需要的控制(例如,通过部分重新配置)。如果未检测到触发事件,则方法3200继续循环直到检测到触发事件。SoC100继续操作,每个分区按当前配置操作。由于每个分区彼此隔离,因此在每个分区中实现的应用都能够独立运行。如上所述,在某些情况下,门铃中断可用于从一个分区跨越到另一个分区以在分区之间提供信令和/或消息传递。
应当理解,虽然图30-32描述了使用PMC 1602在SoC 100内加载不同的PDI,一旦SoC 100被启动并且PS 106被配置,PS 106中的处理器可用于控制PDI的加载以重新配置SoC 100全部或部分(例如,执行部分重新配置)。
出于解释的目的,阐述了特定的命名法以提供对本文公开的各种发明概念的透彻理解。然而,此处使用的术语仅用于描述本发明装置的特定方面的目的,并不旨在进行限制。
如本文所定义,单数形式“一”、“一个”和“所述”也旨在包括复数形式,除非上下文另有明确说明。
如本文所定义,术语“至少一个”、“一个或多个”和“和/或”是开放式表达,在操作中既是连接的又是分离的,除非另有明确说明。例如,表述“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在一起。
如本文所定义,术语“自动”是指无需人工干预。
如本文所定义,术语“如果”表示“何时”或“基于”或“响应于”或“响应于”,具体取决于上下文。因此,短语“如果确定”或“如果检测到[陈述的条件或事件]”可以解释为“根据确定”或“响应于确定”或“在检测到[陈述的条件或事件]”或“响应于检测[所述条件或事件]”或“响应于检测[所述条件或事件]”,取决于上下文。
如本文所定义,术语“响应于”和如上所述的类似语言,例如“如果”、“何时”或“在”,是指对动作或事件容易地响应或反应。响应或反应是自动执行的。因此,如果“响应于”第一个动作而执行第二个动作,则在第一个动作的发生和第二个动作的发生之间存在因果关系。术语“响应于”表示因果关系。
如本文所定义,术语“一个实施例”、“一个或多个实施例”、“特定实施例”或类似的语言表示结合实施例描述的特定特征、结构或特性被包括在本公开中描述的至少一个实施例中。因此,贯穿本公开的短语“在一个实施例中”、“在一个或多个实施例中”、“在特定实施例中”以及类似语言的出现可以但不一定全部指代相同的体现。术语“实施例”和“布置”在本公开中可互换使用。
如本文所定义,术语“实时”是指用户或系统对于要进行的特定过程或确定而言足够即时的处理响应水平,或者使处理器能够跟上某些外部过程的水平。
如本文所定义,术语“基本上”是指不需要精确地实现所述特性、参数或值,而是指偏差或变化,包括例如容差、测量误差、测量精度限制和本领域技术人员已知的其他因素,可能以不排除该特性旨在提供的效果的量出现。
术语第一、第二等可在本文中用于描述各种元素。这些元素不应受这些术语的限制,因为这些术语仅用于区分一个元素与另一个元素,除非另有说明或上下文另有明确指示。
图中的流程图和框图说明了根据本发明装置的各个方面的系统、方法和计算机程序产品的可能实现的架构、功能和操作。就这一点而言,流程图或框图中的每一方块可表示模块、段或指令的一部分,其包括用于实现指定操作的一个或多个可执行指令。
在一些替代实施方式中,块中注明的操作可能不按图中注明的顺序发生。例如,根据所涉及的功能,连续示出的两个块可以基本上同时执行,或者这些块有时可以以相反的顺序执行。在其他示例中,块通常可以以递增的数字顺序执行,而在其他示例中,一个或多个块可以以变化的顺序执行,结果被存储并在随后的或不紧随其后的其他块中使用。还将注意,框图和/或流程图说明的每个块,以及框图和/或流程图说明中的块的组合,可以由执行指定功能或动作或动作或执行专用硬件和计算机指令的组合的、基于专用硬件的系统来实现。
可在以下权利要求中找到的所有装置或步骤加功能元件的相应结构、材料、动作和等效物旨在包括用于与如具体要求保护的其他要求保护的元件组合执行功能的任何结构、材料或动作。
设备可以包括可编程逻辑电路、耦接到可编程逻辑电路的处理器系统以及耦接到可编程逻辑电路和处理器系统的片上网络。片上网络是可编程的,以建立用户指定的数据路径,将可编程逻辑电路和处理器系统中实现的电路块通信连接起来。设备可以包括配置可编程逻辑电路、片上网络和处理器系统的平台管理控制器。
另一方面,可编程逻辑电路、片上网络和处理器系统均被配置为实现具有主节点和从节点的用户应用的一部分,其中用户应用指定数据路径和在可编程逻辑电路或处理器系统中每个节点的实现方式。
另一方面,所述设备包括耦接到片上网络的数据处理引擎阵列,其中用户指定的数据路径进一步将数据处理引擎阵列的数据处理引擎通信链接到在可编程逻辑电路或处理器系统。
另一方面,数据处理引擎阵列被配置为实现用户应用的一部分,其中用户应用指定数据处理引擎阵列内的节点中的至少一个的实现方式。
另一方面,所述设备包括耦接到片上网络的专用硬连线电路块。专用的硬连线电路块和在可编程逻辑电路中实现的电路块具有公共接口。
另一方面,片上网络和可编程逻辑电路被配置为实现多个独立分区。
另一方面,每个分区实现不同的应用并且这些应用彼此隔离。
另一方面,所述设备包括可编程保护电路,其被配置为将接收到的事务内的事务源的标识符与授权事务源的列表进行比较。
另一方面,可编程保护电路还将接收到的事务中指定的地址与事务源的标识符的允许地址进行比较。
另一方面,在可编程电路中实现的处理器系统和电路块使用公共描述符格式进行通信。
一种方法可以包括提供包括可编程逻辑电路、耦接到可编程逻辑电路的处理器系统以及耦接到可编程逻辑电路和处理器系统的片上网络的设备。片上网络是可编程的,以建立用户指定的数据路径,将可编程逻辑电路和处理器系统中实现的电路块通信连接起来。所述方法可以包括使用设置在设备中的平台管理控制器来配置可编程逻辑电路、片上网络和处理器系统。
另一方面,所述方法包括配置可编程逻辑电路、片上网络和处理器系统中的每一个以实现具有主节点和从节点的用户应用的一部分,其中用户应用指定数据可编程逻辑电路或处理器系统内每个节点的路径和实现。
另一方面,所述设备包括耦接到片上网络的数据处理引擎阵列。用户指定的数据路径将数据处理引擎阵列的数据处理引擎通信链接到在可编程逻辑电路或处理器系统中实现的电路块中的至少一个。
另一方面,所述方法包括配置数据处理引擎阵列以实现用户应用的一部分,其中用户应用指定数据处理引擎阵列内的至少一个节点的实现方式。
另一方面,所述设备包括耦接到片上网络的专用硬连线电路块。在那种情况下,该方法可以包括为专用的硬连线电路块和在可编程逻辑电路中实现的电路块提供公共接口。
另一方面,所述方法包括配置片上网络和可编程逻辑电路以实现多个独立分区。
另一方面,所述方法包括动态地重新配置多个独立分区中的至少一个。
另一方面,所述方法包括在每个分区中实现不同的应用并将应用彼此隔离。
另一方面,所述方法包括在设备中提供可编程保护电路并且配置可编程保护电路以将接收到的事务内的事务源的标识符与授权事务源的列表进行比较。
另一方面,所述方法包括配置可编程保护电路以将接收到的事务中指定的地址与事务源的标识符的允许地址进行比较。
此处提供的对本发明装置的描述是出于说明的目的,并不旨在穷举或限于所公开的形式和示例。选择此处使用的术语来解释本发明装置的原理、实际应用或对市场中发现的技术的技术改进,和/或使本领域普通技术人员能够理解此处公开的本发明布置。在不脱离所描述的创造性布置的范围和精神的情况下,修改和变化对于本领域的普通技术人员来说是显而易见的。因此,应参考以下权利要求而不是前述公开,以指示此类特征和实施方式的范围。
Claims (15)
1.一种设备,其特征在于,所述设备包括:
可编程逻辑电路;
处理器系统,其耦接到所述可编程逻辑电路;
片上网络,其耦接到所述可编程逻辑电路和所述处理器系统;
其中所述片上网络和所述可编程逻辑电路被配置为实现多个独立分区;
其中所述片上网络可编程以针对所述多个独立分区中的每个独立分区建立用户指定的数据路径,所述用户指定的数据路径通信地链接在所述可编程逻辑电路中实现的电路块和所述处理器系统;和
平台管理控制器,其配置所述可编程逻辑电路、所述片上网络和所述处理器系统以实现所述多个独立分区。
2.根据权利要求1所述的设备,其特征在于,所述多个独立分区中的每个独立分区实现不同的应用,并且所述应用彼此隔离。
3.根据权利要求2所述的设备,其特征在于,所述设备还包括:
数据处理引擎阵列,其耦接到所述片上网络,其中所述多个独立分区中的一个或多个独立分区包括所述数据处理引擎阵列的一个或多个数据处理引擎。
4.根据权利要求3所述的设备,其特征在于,所述数据处理引擎阵列被配置为在所述多个独立分区中的一个或多个独立分区中的每一个独立分区中实现所述应用的一部分。
5.根据权利要求1所述的设备,其特征在于,所述设备还包括:
专用的硬连线电路块,其耦接到所述片上网络;和
其中,所述专用的硬连线电路块和在所述多个独立分区中的每一个独立分区中的可编程逻辑电路中实现的电路块具有公共接口。
6.根据权利要求1所述的设备,其特征在于,所述设备还包括:
可编程保护电路,其被配置为通过将接收到的事务内的事务源的标识符与授权事务源的列表进行比较来隔离所述多个独立分区。
7.根据权利要求6所述的设备,其特征在于,所述可编程保护电路进一步将在所述接收到的事务中指定的地址与针对所述事务源的标识符的允许地址进行比较。
8.根据权利要求1所述的设备,其特征在于,所述处理器系统和在所述可编程电路中实现的电路块使用公共描述符格式进行通信。
9.一种方法,其特征在于,所述方法包括:
提供设备,所述设备包括可编程逻辑电路、耦接到所述可编程逻辑电路的处理器系统、以及耦接到所述可编程逻辑电路和所述处理器系统的片上网络;
配置所述片上网络和所述可编程逻辑电路以实现多个独立分区;
其中,所述片上网络可编程以针对所述多个独立分区中的每个独立分区建立用户指定的数据路径,所述用户指定的数据路径通信地链接在所述可编程逻辑电路中实现的电路块和所述处理器系统;和
使用设置在所述设备中的平台管理控制器,配置所述可编程逻辑电路、所述片上网络和所述处理器系统以实现所述多个独立分区。
10.根据权利要求9所述的方法,其特征在于,所述多个独立分区中的每个分区实现不同的应用,并且所述应用彼此隔离。
11.根据权利要求10所述的方法,其特征在于,所述设备包括耦接到所述片上网络的数据处理引擎阵列,其中所述多个独立分区中的一个或多个独立分区包括所述数据处理引擎阵列的一个或多个数据处理引擎。
12.根据权利要求11所述的方法,其特征在于,所述方法还包括:
配置所述数据处理引擎阵列以在所述多个独立分区中的一个或多个独立分区中的每个独立分区中实现所述应用的一部分。
13.根据权利要求9所述的方法,其特征在于,所述设备包括耦接到所述片上网络的专用的硬连线电路块,所述方法还包括:
为所述专用的硬连线电路块和在所述多个独立分区中的每个独立分区中的可编程逻辑电路中实现的电路块提供公共接口。
14.根据权利要求9所述的方法,其特征在于,所述方法还包括:
动态地重新配置所述多个独立分区中的至少一个独立分区。
15.根据权利要求9所述的方法,其特征在于,所述方法还包括:
在所述设备中提供可编程保护电路;和
通过配置所述可编程保护电路以将接收到的事务内的事务源的标识符与授权事务源的列表进行比较,隔离所述多个独立分区。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US16/367,108 US10673439B1 (en) | 2019-03-27 | 2019-03-27 | Adaptive integrated programmable device platform |
US16/367,108 | 2019-03-27 | ||
PCT/US2020/022764 WO2020197803A1 (en) | 2019-03-27 | 2020-03-13 | Adaptive integrated programmable device platform |
Publications (1)
Publication Number | Publication Date |
---|---|
CN113632069A true CN113632069A (zh) | 2021-11-09 |
Family
ID=70110435
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202080025155.4A Pending CN113632069A (zh) | 2019-03-27 | 2020-03-13 | 自适应集成可编程设备平台 |
Country Status (6)
Country | Link |
---|---|
US (4) | US10673439B1 (zh) |
EP (1) | EP3948554A1 (zh) |
JP (1) | JP2022527760A (zh) |
KR (1) | KR20210143745A (zh) |
CN (1) | CN113632069A (zh) |
WO (1) | WO2020197803A1 (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114911740A (zh) * | 2022-06-02 | 2022-08-16 | 中国长城科技集团股份有限公司 | PCIe拆分方法、装置、电子设备及可读存储介质 |
Families Citing this family (34)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US11580054B2 (en) | 2018-08-24 | 2023-02-14 | Intel Corporation | Scalable network-on-chip for high-bandwidth memory |
US10893005B2 (en) * | 2018-09-17 | 2021-01-12 | Xilinx, Inc. | Partial reconfiguration for Network-on-Chip (NoC) |
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 |
US11474826B1 (en) * | 2019-04-18 | 2022-10-18 | Xilinx, Inc. | Boot image file having a global partition for data processing engines of a programmable device |
EP3998179A4 (en) * | 2019-07-09 | 2023-04-26 | Hosiden Corporation | CONTROL DEVICE |
GB2592437B (en) * | 2020-02-28 | 2022-03-02 | Imagination Tech Ltd | Critical workload check |
GB2592436B (en) * | 2020-02-28 | 2022-02-23 | Imagination Tech Ltd | Critical workload check |
DE102020203663A1 (de) * | 2020-03-20 | 2021-09-23 | Robert Bosch Gesellschaft mit beschränkter Haftung | Integrierter Schaltkreis, eingebettetes System und Kraftfahrzeug |
US11287869B2 (en) * | 2020-04-30 | 2022-03-29 | Marvell Asia Pte Ltd | System and methods for on-chip memory (OCM) port throttling for machine learning operations |
CN115552355A (zh) | 2020-06-26 | 2022-12-30 | 英特尔公司 | 数据处理装置中的性能水平控制 |
US11593486B2 (en) * | 2020-07-24 | 2023-02-28 | Dell Products L.P. | System and method of operating an information handling system |
US11531061B2 (en) * | 2020-08-03 | 2022-12-20 | Qualcomm Incorporated | Interleaved testing of digital and analog subsystems with on-chip testing interface |
US11763043B2 (en) | 2020-09-25 | 2023-09-19 | Intel Corporation | Enabling late-binding of security features via configuration security controller for accelerator devices |
CN116635858A (zh) * | 2020-12-29 | 2023-08-22 | 华为技术有限公司 | 一种安全隔离装置和方法 |
US12112113B2 (en) | 2021-03-05 | 2024-10-08 | Apple Inc. | Complementary die-to-die interface |
US11520717B1 (en) | 2021-03-09 | 2022-12-06 | Xilinx, Inc. | Memory tiles in data processing engine array |
US11336287B1 (en) * | 2021-03-09 | 2022-05-17 | Xilinx, Inc. | Data processing engine array architecture with memory tiles |
US20220293170A1 (en) * | 2021-03-10 | 2022-09-15 | Invention And Collaboration Laboratory Pte. Ltd. | Integrated scaling and stretching platform for optimizing monolithic integration and/or heterogeneous integration in a single semiconductor die |
US11755459B2 (en) * | 2021-03-23 | 2023-09-12 | Western Digital Technologies, Inc. | Management of a debug buffer based on priority information |
US20220327063A1 (en) * | 2021-04-07 | 2022-10-13 | Nokia Solutions And Networks Oy | Virtual memory with dynamic segmentation for multi-tenant fpgas |
US11675722B2 (en) * | 2021-04-16 | 2023-06-13 | Apple Inc. | Multiple independent on-chip interconnect |
US20230057903A1 (en) | 2021-08-20 | 2023-02-23 | Xilinx, Inc. | Controlling a data processing array using an array controller |
US11720735B2 (en) | 2021-08-20 | 2023-08-08 | Xilinx, Inc. | Flat shell for an accelerator card |
US12007895B2 (en) | 2021-08-23 | 2024-06-11 | Apple Inc. | Scalable system on a chip |
US20220004635A1 (en) * | 2021-09-21 | 2022-01-06 | Intel Corporation | Computing peripheral interface management mechanism |
EP4164184A1 (en) * | 2021-10-07 | 2023-04-12 | Renesas Electronics Corporation | A communication controller and communication control method |
US11983264B2 (en) * | 2021-12-06 | 2024-05-14 | Xilinx, Inc. | Adaptive acceleration of transport layer security |
US11995021B2 (en) | 2022-01-12 | 2024-05-28 | Xilinx, Inc. | Zoned accelerator embedded processing |
US20230244824A1 (en) * | 2022-02-03 | 2023-08-03 | Bae Systems Information And Electronic Systems Integration Inc. | Firewall for on-chip signaling |
US11848670B2 (en) | 2022-04-15 | 2023-12-19 | Xilinx, Inc. | Multiple partitions in a data processing array |
US12079158B2 (en) | 2022-07-25 | 2024-09-03 | Xilinx, Inc. | Reconfigurable neural engine with extensible instruction set architecture |
US12019576B2 (en) * | 2022-08-02 | 2024-06-25 | Xilinx, Inc. | Systems and methods to transport memory mapped traffic amongst integrated circuit devices |
US11983133B2 (en) | 2022-08-22 | 2024-05-14 | Xilinx, Inc. | Adaptive integrated programmable data processing unit |
US12086083B2 (en) | 2022-08-22 | 2024-09-10 | Xilinx, Inc. | Multi-tenant aware data processing units |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2007129699A (ja) * | 2005-10-03 | 2007-05-24 | Honeywell Internatl Inc | チップ上の再構成可能なネットワーク |
EP2985914A2 (en) * | 2014-08-15 | 2016-02-17 | Altera Corporation | Programmable circuit having multiple sectors |
CN106716843A (zh) * | 2014-09-24 | 2017-05-24 | 赛灵思公司 | 带有安全子系统的可编程ic |
WO2018227518A1 (en) * | 2017-06-16 | 2018-12-20 | Intel Corporation | Reconfigurable device bitstream key authentication |
US20180367147A1 (en) * | 2017-06-16 | 2018-12-20 | Intel Corporation | Methods and apparatus for unloading data from a configurable integrated circuit |
Family Cites Families (20)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6627985B2 (en) * | 2001-12-05 | 2003-09-30 | Arbor Company Llp | Reconfigurable processor module comprising hybrid stacked integrated circuit die elements |
US7635987B1 (en) * | 2004-12-13 | 2009-12-22 | Massachusetts Institute Of Technology | Configuring circuitry in a parallel processing environment |
US7882307B1 (en) * | 2006-04-14 | 2011-02-01 | Tilera Corporation | Managing cache memory in a parallel processing environment |
US9135185B2 (en) * | 2012-12-23 | 2015-09-15 | Advanced Micro Devices, Inc. | Die-stacked memory device providing data translation |
US9471537B2 (en) * | 2013-03-14 | 2016-10-18 | Altera Corporation | Hybrid programmable many-core device with on-chip interconnect |
US9442751B2 (en) * | 2014-03-24 | 2016-09-13 | International Business Machines Corporation | Virtual credential adapter for use with virtual machines |
US11099894B2 (en) * | 2016-09-28 | 2021-08-24 | Amazon Technologies, Inc. | Intermediate host integrated circuit between virtual machine instance and customer programmable logic |
US10664413B2 (en) | 2017-01-27 | 2020-05-26 | Lear Corporation | Hardware security for an electronic control unit |
US10573598B2 (en) * | 2017-09-28 | 2020-02-25 | Xilinx, Inc. | Integration of a programmable device and a processing system in an integrated circuit package |
US10346346B1 (en) * | 2017-12-21 | 2019-07-09 | Xilinx, Inc. | Inline ECC function for system-on-chip |
US10621129B2 (en) | 2018-03-27 | 2020-04-14 | Xilinx, Inc. | Peripheral interconnect for configurable slave endpoint circuits |
US10747690B2 (en) | 2018-04-03 | 2020-08-18 | Xilinx, Inc. | Device with data processing engine array |
US10635622B2 (en) | 2018-04-03 | 2020-04-28 | Xilinx, Inc. | System-on-chip interface architecture |
US11347861B2 (en) | 2018-04-10 | 2022-05-31 | Raytheon Company | Controlling security state of commercial off the shelf (COTS) system |
US10853134B2 (en) | 2018-04-18 | 2020-12-01 | Xilinx, Inc. | Software defined multi-domain creation and isolation for a heterogeneous System-on-Chip |
US10838908B2 (en) | 2018-07-20 | 2020-11-17 | Xilinx, Inc. | Configurable network-on-chip for a programmable device |
US10893005B2 (en) | 2018-09-17 | 2021-01-12 | Xilinx, Inc. | Partial reconfiguration for Network-on-Chip (NoC) |
US10708247B2 (en) | 2018-09-27 | 2020-07-07 | Intel Corporation | Technologies for providing secure utilization of tenant keys |
US11044238B2 (en) * | 2018-10-19 | 2021-06-22 | International Business Machines Corporation | Secure communications among tenant virtual machines in a cloud networking environment |
US11256520B2 (en) | 2019-09-18 | 2022-02-22 | Xilinx, Inc. | Tracing status of a programmable device |
-
2019
- 2019-03-27 US US16/367,108 patent/US10673439B1/en active Active
-
2020
- 2020-03-13 WO PCT/US2020/022764 patent/WO2020197803A1/en unknown
- 2020-03-13 EP EP20716366.8A patent/EP3948554A1/en active Pending
- 2020-03-13 CN CN202080025155.4A patent/CN113632069A/zh active Pending
- 2020-03-13 JP JP2021557307A patent/JP2022527760A/ja active Pending
- 2020-03-13 KR KR1020217028142A patent/KR20210143745A/ko active Search and Examination
- 2020-05-11 US US16/872,009 patent/US11063594B1/en active Active
-
2021
- 2021-06-17 US US17/350,639 patent/US11683038B1/en active Active
-
2023
- 2023-05-18 US US18/320,168 patent/US20230291405A1/en active Pending
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2007129699A (ja) * | 2005-10-03 | 2007-05-24 | Honeywell Internatl Inc | チップ上の再構成可能なネットワーク |
EP2985914A2 (en) * | 2014-08-15 | 2016-02-17 | Altera Corporation | Programmable circuit having multiple sectors |
CN106716843A (zh) * | 2014-09-24 | 2017-05-24 | 赛灵思公司 | 带有安全子系统的可编程ic |
WO2018227518A1 (en) * | 2017-06-16 | 2018-12-20 | Intel Corporation | Reconfigurable device bitstream key authentication |
US20180367147A1 (en) * | 2017-06-16 | 2018-12-20 | Intel Corporation | Methods and apparatus for unloading data from a configurable integrated circuit |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114911740A (zh) * | 2022-06-02 | 2022-08-16 | 中国长城科技集团股份有限公司 | PCIe拆分方法、装置、电子设备及可读存储介质 |
Also Published As
Publication number | Publication date |
---|---|
EP3948554A1 (en) | 2022-02-09 |
US11063594B1 (en) | 2021-07-13 |
KR20210143745A (ko) | 2021-11-29 |
US11683038B1 (en) | 2023-06-20 |
US20230291405A1 (en) | 2023-09-14 |
WO2020197803A1 (en) | 2020-10-01 |
JP2022527760A (ja) | 2022-06-06 |
US10673439B1 (en) | 2020-06-02 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11683038B1 (en) | Adaptive integrated programmable device platform | |
US11580057B2 (en) | Subsystem for configuration, security, and management of an adaptive system | |
US11336287B1 (en) | Data processing engine array architecture with memory tiles | |
EP3432152B1 (en) | Disabling communication in a multiprocessor system | |
US11256520B2 (en) | Tracing status of a programmable device | |
US11520717B1 (en) | Memory tiles in data processing engine array | |
US12105667B2 (en) | Device with data processing engine array that enables partial reconfiguration | |
US11182110B1 (en) | On-chip memory block circuit | |
JP7402798B2 (ja) | データセンタにおけるプログラマブルデバイス向けのセキュリティ | |
US11443091B1 (en) | Data processing engines with cascade connected cores | |
KR20210137096A (ko) | 데이터 센터 내의 라이센싱된 프로그램가능 디바이스들에 대해 코어들의 실행 로킹 |
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 |