Data processing engine array architecture with memory tiles
By integrating memory tiles within the DPE array, the bandwidth demands on the SoC interface are mitigated, addressing the increased data processing needs of DPE arrays and optimizing memory access within integrated circuits.
Patent Information
- Authority / Receiving Office
- JP · JP
- Patent Type
- Patents
- Current Assignee / Owner
- XILINX INC
- Filing Date
- 2021-11-14
- Publication Date
- 2026-04-10
AI Technical Summary
The increasing data processing capabilities of data processing engine (DPE) arrays in integrated circuits (ICs) lead to higher bandwidth requirements at the system-on-chip (SoC) interface, necessitating a solution to reduce the need for external memory access and alleviate this burden.
Incorporating memory tiles within the DPE array as hardwired and programmable circuit blocks, allowing for a larger pool of memory and reducing the need for external access, thereby decreasing SoC interface bandwidth demands.
The integration of memory tiles within the DPE array provides a flexible and efficient memory solution, reducing external memory access requirements and enhancing data processing capabilities without overwhelming the SoC interface.
Smart Images

Figure 0007843771000001 
Figure 0007843771000002 
Figure 0007843771000003
Abstract
Description
Technical Field
[0001] The present disclosure relates to integrated circuits (ICs), and more particularly to an architecture for an array of data processing engines implemented within an IC, the data processing engine array having one or more memory tiles.
Background Art
[0002] A programmable integrated circuit (IC) refers to a type of IC that includes programmable circuit mechanisms. An example of a programmable IC is a field programmable gate array (FPGA). An FPGA is characterized by including programmable circuit blocks. Examples of programmable circuit blocks that can be found on a programmable IC include, but are not limited to, input / output blocks, configurable logic blocks, dedicated random access memory blocks, digital signal processing blocks, processors, clock managers, and delay lock loops. In some cases, a programmable IC may include one or more programmable processing elements arranged in an array.
[0003] Circuit design can be physically implemented within the programmable circuit mechanisms of a programmable IC by loading configuration data into the device's internal configuration memory. The configuration memory may include a plurality of individual configuration memory cells and / or registers. The collective state of the configuration memory determines the functionality of the programmable IC. For example, the specific operations performed by various programmable circuit blocks and the connectivity between the programmable circuit blocks of the programmable IC are defined by the collective state of the configuration memory after the configuration data is loaded.
Summary of the Invention
[0004] In one embodiment, an integrated circuit (IC) may include a data processing engine (DPE) array having multiple tiles. The multiple tiles may include multiple DPE tiles, each DPE tile including a stream switch, a core configured to perform operations, and a memory module. The multiple tiles may include multiple memory tiles, each memory tile including a stream switch, a direct memory access (DMA) engine, and random-access memory (RAM). The DMA engine of each memory tile may be configured to access RAM within the same memory tile and RAM in at least one other memory tile. A selected DPE tile from the multiple DPE tiles may be configured to access a selected memory tile from the multiple memory tiles via a stream switch.
[0005] In another embodiment, an IC having a DPE array may include a plurality of memory tiles. A first memory tile may include a first direct memory access (DMA) engine, a first RAM connected to the first DMA engine, and a first stream switch coupled to the first DMA engine. The first DMA engine may be coupled to a second RAM disposed within a second memory tile. The first stream switch may be coupled to a second stream switch disposed within a second memory tile.
[0006] This summary section is provided solely to introduce a particular concept and is not intended to identify any significant or essential features of the claimed subject matter. Other features of the present invention will become apparent from the accompanying drawings and the following detailed description.
[0007] The configuration of the present invention is illustrated in the accompanying drawings as an example. However, the drawings should not be construed as limiting the configuration of the present invention to only the specific implementations shown. Various aspects and advantages will become apparent when we consider the following detailed description and refer to the drawings. [Brief explanation of the drawing]
[0008] [Figure 1] This section illustrates exemplary architectures of integrated circuits (ICs). [Figure 2A] This section illustrates different exemplary implementations of a data processing engine (DPE) array. [Figure 2B] This section illustrates different exemplary implementations of a data processing engine (DPE) array. [Figure 2C] This section illustrates different exemplary implementations of a data processing engine (DPE) array. [Figure 2D] This section illustrates different exemplary implementations of a data processing engine (DPE) array. [Figure 3] This section illustrates another exemplary implementation of a DPE array. [Figure 4] This document provides an example of a typical implementation of Network-on-Chip (NoC). [Figure 5] This section illustrates an example of the connection between endpoint circuits within the IC shown in Figure 1, using a NoC (Network Interface Card). [Figure 6A] This section illustrates an exemplary architecture of DPE tiles in a DPE array. [Figure 6B] This section illustrates an exemplary architecture of DPE tiles in a DPE array. [Figure 7A] This document illustrates an exemplary architecture for implementing interface tiles for the SoC interface of a DPE array. [Figure 7B] This document illustrates an exemplary architecture for implementing interface tiles for the SoC interface of a DPE array. [Figure 7C]This document illustrates an exemplary architecture for implementing interface tiles for the SoC interface of a DPE array. [Figure 8] This section illustrates an example implementation of a programmable logic (PL) interface for the interface tile of an SoC interface. [Figure 9] This section illustrates an exemplary implementation of a stream interface in the interface tile of an SoC interface. [Figure 10] This document illustrates an exemplary implementation of a direct memory access (DMA) engine in the interface tile of an SoC interface. [Figure 11A] This section illustrates an example implementation of memory tiles. [Figure 11B] This section illustrates an example implementation of memory tiles. [Figure 11C] This section illustrates an example implementation of memory tiles. [Figure 12A] This document illustrates an exemplary circuit architecture for separating physical memory for multiple applications. [Figure 12B] This document illustrates an exemplary circuit architecture for separating physical memory for multiple applications. [Figure 13A] This section illustrates an exemplary circuit architecture for performing virtual address translation. [Figure 13B] This section illustrates an exemplary circuit architecture for performing virtual address translation. [Figure 14A] This paper illustrates an exemplary circuit architecture for providing secure register access to a virtualized accelerator. [Figure 14B] This paper illustrates an exemplary circuit architecture for providing secure register access to a virtualized accelerator. [Figure 14C] This paper illustrates an exemplary circuit architecture for providing secure register access to a virtualized accelerator. [Figure 15]Illustrate an exemplary packet processing mode implemented by one or more DMA engines of the IC of FIG. 1.
BRIEF DESCRIPTION OF THE DRAWINGS
[0009] The present disclosure ends with claims that define novel features, but the various features described within the present disclosure are believed to be better understood when considered in conjunction with the drawings and the description. The processes, machines, manufactures, and any variations thereof described herein are provided for illustrative purposes. The specific structural and functional details described within the present disclosure are not to be construed as limiting, but rather are to be construed merely as a basis for the claims and as a representative basis for teaching one skilled in the art to variously employ the features described in any appropriately detailed structure. Further, the terms and phrases used within the present disclosure are not intended to be limiting, but rather are intended to provide an understandable description of the features being described.
[0010] The present disclosure relates to an integrated circuit (IC), and more particularly, to an architecture for a data processing engine (DPE) array including one or more memory tiles within the IC. The DPE array can include a plurality of DPE tiles coupled to a system-on-chip (SoC) interface. Each DPE tile is capable of processing a significant amount of data. The data operated on by the DPE tiles may be provided as input to the DPE array from one or more other systems and / or circuits of the IC through the SoC interface. Similarly, the data output from the DPE array may be provided to one or more other systems and / or circuits on the IC through the SoC interface.
[0011] As the DPE tiles become more powerful and are able to process more data per unit time, the amount of data that must flow through the SoC interface increases, regardless of whether it is an input to or an output from the DPE array. The increased bandwidth requirements of the SoC interface can be attributed to the DPE array data inflow and the DPE array data outflow. These DPE array data inflows and outflows can communicate with off-chip circuitry such as other on-chip circuit blocks and memories. According to the configuration of the invention described within the present disclosure, a DPE array architecture incorporating an additional type of circuit block or tile called a "memory tile" is provided. The memory tile may be implemented as a hardwired and programmable circuit block contained within the DPE array itself. By incorporating the memory tile within the DPE array, a larger pool of memory becomes available to the DPE tiles, thereby reducing the need to access memory external to the DPE array. This also reduces the bandwidth requirements imposed on the SoC interface.
[0012] The present disclosure also provides an exemplary architecture for implementing the memory tile. According to the examples provided herein, the memory tile can be configured such that two or more of the memory tiles operate as a single larger memory within the DPE array, referred to as a composite memory. Thus, by including two or more memory tiles in the DPE array, a flexible formation of composite memories can be made available to different clusters of DPE tiles, depending on the workload in the DPE array and / or the particular application being executed.
[0013] Further aspects of the configuration of the present invention are described in more detail below with reference to the drawings. For simplicity and clarity in the illustration, the elements shown in the figures are not necessarily drawn to scale. For example, some dimensions of the elements may be exaggerated relative to others for clarity. Furthermore, where appropriate, reference numerals are repeated between the figures to indicate corresponding, similar, or identical features.
[0014] Figure 1 illustrates an exemplary architecture of IC100. IC100 is an example of a heterogeneous device in that it contains multiple different types of systems within which the device is contained. IC100 is also an example of a programmable IC, an adaptive system, and a system-on-a-chip (SoC). In this example, IC100 includes multiple different systems, including a DPE array 102, a programmable logic (PL) 104, a processor system (PS) 106, a network-on-a-chip (NoC) 108, a platform management controller (PMC) 110, and one or more hardwired circuit blocks 112.
[0015] In the example shown in Figure 1, IC100 is mounted on a single die provided within a single package. In other examples, IC100 may be mounted using multiple interconnected dies within a single package, and the various systems of IC100 shown in Figure 1 are mounted across different interconnected dies. The specific number of dies used to form or mount IC100 is not intended to be limiting.
[0016] The DPE array 102 is formed from several different types of circuit blocks called tiles. The DPE array 102 includes two or more DPE tiles, one or more memory tiles, and an SoC interface that includes multiple interface tiles. Each type of tile in the DPE array 102 is hardwired and programmable. The DPE tiles are capable of performing data processing operations and manipulating large amounts of data. Each DPE tile includes a core connected to a memory module. The core is capable of accessing the memory module and performing data processing operations. In one embodiment, the core is capable of executing program code. In another embodiment, the core may be implemented as custom circuitry that does not execute program code. The memory modules of the DPE tiles are configured to store application data. The DPE tiles are described in more detail herein in reference to Figures 6A and 6B.
[0017] Each memory tile may include random access memory (RAM) and a direct memory access (DMA) engine coupled to the RAM within the same memory tile. Each DMA engine in a memory tile may be coupled to one or more RAMs in other memory tiles included in the DPE array 102. Memory tiles are described in more detail herein with reference to Figures 11A to 11C. The SoC interface provides an interface between the DPE tiles and / or memory tiles and other systems and / or circuits of IC 100. The SoC interface and interface tiles are described in more detail herein with reference to Figures 2A to 2D and Figures 7A to 7C.
[0018] PL104 is a circuit mechanism that can be programmed to perform a specified function. For example, PL104 may be implemented as a field-programmable gate array type circuit mechanism. PL104 can include an array of programmable circuit blocks. As defined herein, the term “programmable logic” means a circuit mechanism used to construct reconfigurable digital circuits. Programmable logic is formed from many programmable circuit blocks that provide basic functionality. The topology of PL104 is highly configurable, unlike hardwired circuit mechanisms. Each programmable circuit block of PL104 typically includes a programmable element 126 (e.g., a functional element) and a programmable interconnect 142. The programmable interconnect 142 provides the highly configurable topology of PL104. The programmable interconnect 142 may be configured wire by wire to provide connectivity between the programmable elements 126 of the programmable circuit blocks of PL104, and is bit by bit configurable, unlike the connectivity between tiles in a DPE array 102 (e.g., each wire carries a single bit of information).
[0019] Examples of programmable circuit blocks in the PL104 include configurable logic blocks having lookup tables and registers. Unlike hardwired circuit mechanisms, which are described below and are sometimes called hardwired circuit blocks, these programmable circuit blocks have functions that are undefined at the time of manufacture. The PL104 may also include other types of programmable circuit blocks that provide basic defined functions with more limited programmability. Examples of these circuit blocks may include digital signal processing blocks (DSPs), phase-locked loops (PLLs), and block random access memory (BRAMs). There are many of these types of programmable circuit blocks, as with others in the PL104, and they are mixed with other programmable circuit blocks in the PL104. These circuit blocks may also have an architecture that generally includes programmable interconnects 142 and programmable elements 126, and are therefore part of the highly configurable topology of the PL104.
[0020] Before use, PL104, such as programmable interconnects and programmable elements, must be programmed or "configured" by loading configuration data into its internal configuration memory cells. The configuration data used to configure PL104 is sometimes called a configuration bitstream. Once the configuration data is loaded, the configuration memory cells define how PL104 is configured, for example, defining its topology and how it operates (for example, performing specific functions).
[0021] The PS106 is implemented as a hardwired circuit mechanism manufactured as part of the IC100. The PS106 may be implemented as, or include, various different processor types, each capable of executing program code. For example, the PS106 may be implemented as individual processors, each containing one or more cores, or as multiple processors, each containing one or more cores. Another example of the PS106 is one or more processors, modules, coprocessors, I / O interfaces, and / or other resources. The PS106 may be implemented using any of various different types of architecture. Examples of architectures that may be used to implement the PS106 include, but are not limited to, the ARM processor architecture, the x86 processor architecture, the graphics processing unit (GPU) architecture, the mobile processor architecture, the DSP architecture, a combination of the aforementioned architectures, or other suitable circuit architectures capable of executing computer-readable instructions or program code.
[0022] NoC108 is a programmable interconnect network for sharing data between endpoint circuits in IC100. Endpoint circuits may be located within the DPE array 102, PL104, PS106, and / or selected hardwired circuit blocks 112. NoC108 may include high-speed data paths with dedicated switching. In one example, NoC108 may include one or more horizontal paths, one or more vertical paths, or both horizontal and vertical paths. The configuration and number of regions shown in Figure 1 are merely examples. NoC108 is an example of a common infrastructure available within IC100 for connecting selected components and / or systems.
[0023] The nets to be routed through NoC108 are unknown until the design is created for implementation within IC100. NoC108 can be programmed by loading configuration data into its internal configuration registers that defines how elements within NoC108, such as switches and interfaces, are configured and operate to pass data from switch to switch and between NoC interfaces connecting endpoint circuits. NoC108 is fabricated as part of IC100 (e.g., hardwired) and is not physically modifiable, but can be programmed to establish connectivity between various master and slave circuits in user circuit designs. NoC108 cannot implement any data paths or routes within itself when powered on. NoC108 can be configured by a master circuit, such as PMC110, to implement data paths or routes between endpoint circuits of IC100. In another embodiment, NoC108 may include one or more default data paths implemented therein when powered on, and the master circuit may reconfigure such data paths and / or program NoC108 to add additional data paths between endpoint circuits.
[0024] The PMC110 is responsible for managing IC100. The PMC110 is an in-IC100 system capable of managing other programmable circuit resources throughout IC100. The PMC110 can maintain a safe and secure environment, boot IC100, and manage IC100 during normal operation. For example, the PMC110 can provide unified programmable control over power-on, boot / configuration, security, power management, safety monitoring, debugging, and / or error handling for different systems within IC100, such as the DPE array 102, PL104, PS106, and NoC108. The PMC110 acts as a dedicated platform manager, separating PS106 from PL104. Therefore, PS106 and PL104 can be managed, configured, and / or powered on and / or powered off independently of each other.
[0025] In one embodiment, PMC110 may be implemented as a processor with dedicated resources. PMC110 can operate as the root of trust for the entire IC100. For example, PMC110 can authenticate and / or verify a device image containing configuration data for any of IC100's programmable resources that may be loaded into IC100. PMC110 can further protect IC100 from tampering during operation. By operating as the root of trust for IC100, PMC110 can monitor the operation of PL104, PS106, and / or any other programmable circuit resources that may be included in IC100. The root of trust capability performed by PMC110 is distinct from and separate from the operation performed by PS106 and PL104, and / or any operation performed by PS106 and / or PL104.
[0026] The hardwired circuit block 112 is a special-purpose circuit block fabricated as part of IC 100. Although hardwired, the hardwired circuit block 112 can be configured by loading configuration data into control registers to implement one or more different operating modes. Examples of hardwired circuit blocks 112 include input / output (I / O) blocks, transceivers for sending and receiving signals to and from external circuits and / or systems of IC 100, and memory controllers. Various I / O block examples include single-ended and pseudo-differential I / O. An example of a transceiver is a high-speed differential clock transceiver. Other examples of hardwired circuit blocks 112 include, but are not limited to, cryptographic engines, digital-to-analog converters (DACs), and analog-to-digital converters (ADCs). Generally speaking, the hardwired circuit block 112 is a special-purpose circuit block.
[0027] The various programmable circuit resources shown in Figure 1 can be initially programmed as part of the boot process of IC100. During runtime, the programmable circuit resources can be reconfigured. In one embodiment, PMC110 can initially configure the DPE array 102, PL104, PS106, and NoC108. At any point during runtime, PMC110 can reconfigure all or part of IC100. In some cases, PS106, once initially configured by PMC110, can configure and / or reconfigure PL104 and / or NoC108.
[0028] It should be understood that the exemplary architecture shown in Figure 1 is provided for illustrative purposes only and not as an limitation. In this regard, IC100 may include fewer or more systems than those shown in Figure 1. In one or more exemplary implementations, IC100 may omit PMC110 and rely on PS106 to perform certain operations that would otherwise be performed by PMC110. In other exemplary implementations, IC100 may include DPE array 102 in combination with any one or more of the other systems described herein. In yet another exemplary implementation, IC100 may be implemented to include DPE array 102 without any other systems.
[0029] Figures 2A to 2D illustrate different exemplary implementations of the DPE array 102. In the example of Figure 2A, the DPE array 102 includes a plurality of DPE tiles 202 arranged in a grid having rows and columns. The DPE array 102 also includes a plurality of memory tiles 204. For illustrative purposes, the memory tiles 202 are grouped into two rows, and the individual memory tiles 202 in each row are aligned with the columns of the grid configuration. The DPE array 102 further includes an SoC interface 206. The SoC interface 206 includes interface tiles 208 arranged in a single row, and the individual tiles 208 are aligned with the columns of the grid configuration of the DPE array 102.
[0030] In this disclosure, the term “tile” as used with respect to the DPE array 102 refers to the DPE tile 202, the memory tile 204, and / or the interface tile 208. In the example in Figure 2A, each row of tiles in the grid is homogeneous in that each row contains only DPE tiles 202, only memory tiles 204, or only interface tiles 208. Rows of similar tiles are grouped together or adjacent to one another. For example, all rows of DPE tiles 202 are grouped together without any rows of other tile types intervening. Similarly, all rows of memory tiles 204 are grouped together without any rows of other tile types intervening.
[0031] The columns of the grid are heterogeneous in that each column contains a different type of tile. Each column contains multiple DPE tiles 202, multiple memory tiles 204, and (e.g., one) interface tile 208. In the example in Figure 2A, the specific number of rows and / or columns included in the grid configuration is not intended to be limiting. The DPE array 102 may contain fewer or more rows of DPE tiles 202, fewer or more rows of memory tiles 204, and / or fewer or more columns of tiles.
[0032] The example in Figure 2B is similar to the example in Figure 2A. In the example in Figure 2B, there is only one row of memory tiles 204. In Figure 2B, as in the example in Figure 2A, each row of tiles in the grid is homogeneous in that each row contains only DPE tiles 202, only memory tiles 204, or only interface tiles 208. The columns of the grid are heterogeneous in that each column contains a different type of tile. Each column contains multiple DPE tiles 202, one memory tile 204, and (for example, one) interface tile 208. In the example in Figure 2B, the specific number of rows and / or columns included in the grid configuration is not intended as a limitation. The DPE array 102 may contain fewer or more rows of DPE tiles 202, fewer or more rows of memory tiles 204, and / or fewer or more columns of tiles.
[0033] In the examples of Figures 2A and 2B, the rows of memory tiles 204 may be located in different places or positions within the grid configuration than those shown. For example, one row or groups of two or more rows of memory tiles 204 may be located at the top of the grid configuration, at the bottom of the grid configuration (e.g., between the SoC interface 206 and any row of DPE tile 202), between selected rows of DPE tile 202, or any combination thereof. Furthermore, the DPE array 102 may include multiple rows or groups of rows of memory tiles 204, each of which is separated from another row or group of memory tiles 204 by one or more intervening tiles of a different type.
[0034] The example in Figure 2C is similar to the example in Figure 2A. In the example in Figure 2C, the rows of memory tiles 204 are not grouped together. As shown, one row of memory tiles is positioned at the top of the grid configuration, and a second row of memory tiles 204 is positioned towards the bottom of the grid configuration between the rows of DPE tiles 202 and interface tiles 208. It should be understood that two or more rows of memory tiles 204 may be positioned between the DPE tiles 202 and the SoC interface 206 and / or at the top of the grid configuration. For example, two or more rows of memory tiles 204 may be positioned at the top of the grid, and two or more rows of memory tiles 204 may be positioned towards the bottom. Furthermore, depending on the size of the DPE array 102, additional rows or groups of two or more rows of memory tiles 204 may be included between other rows of DPE tiles 202. In one example, the rows of DPE tiles 202 and rows of memory tiles 204 may alternate. In an alternative configuration, groups of two or more rows of DPE tiles 202 may alternate with groups of two or more rows of memory tiles. For example, the DPE array 102 may be formed in a repeating pattern of DPE tiles 202 in rows of two, three, four, etc., followed by memory tiles 204 in rows of two, three, or four, etc.
[0035] In the example in Figure 2D, the memory tiles 204 are arranged in columns, not rows. Therefore, in the example in Figure 2D, each row containing one or more DPE tiles 202 also contains one or more memory tiles 204. The columns are still heterogeneous in that each column contains either DPE tiles 202 and interface tiles 208, or memory tiles 204 and interface tiles 208. Therefore, on each interface tile 208, the column contains either only DPE tiles 202 or only memory tiles 204, rather than a combination of both.
[0036] In this example, two columns of memory tiles 204 are shown. Other exemplary implementations may include fewer or more columns of memory tiles 204. Furthermore, the columns of memory tiles 204 may be located in positions different from those illustrated in the grid configuration. For example, one or more columns of memory tiles 204 may be located at the left end of the grid configuration, the right end of the grid configuration, between selected columns of DPE tiles 202, or any combination thereof. In one example, the columns may alternate between one or more columns containing DPE tiles 202 and interface tiles 208 and one or more columns containing memory tiles 204 and interface tiles 208.
[0037] In the examples in Figures 2A to 2D, the memory tiles 204 are arranged so that they are placed in columns or rows. In one or more other exemplary implementations, individual memory tiles 204 or groups of memory tiles 204 may be scattered among the DPE tiles 202. For example, a cluster of multiple memory tiles 204 may be placed in the center of the DPE array 102, with the DPE tiles 202 surrounding the cluster of memory tiles 204. In another example, the DPE tiles 202 may be scattered among the memory tiles 204 so that one or more columns and / or one or more rows are formed from alternating DPE tiles 202 and memory tiles 204. In a particular example, the grid configuration may be organized in a checkerboard pattern where each row and column is formed from alternating DPE tiles 202 and memory tiles 204.
[0038] Figure 3 illustrates another exemplary implementation of the DPE array 102. The DPE array 102 includes DPE tiles 202, memory tiles 204, and interface tiles 208. The interface tiles 208 collectively form the SoC interface 206. In the example in Figure 3, fewer tiles are shown for the sake of clarity. Furthermore, some connections between components and / or tiles have been omitted for the sake of clarity.
[0039] In the example in Figure 3, each tile, for example, each DPE tile 202, memory tile 204, and interface tile 208, includes a stream switch 306 and a memory-mapped (MM) switch 308. Each stream switch 306 is connected to the stream switches of adjacent tiles. For example, each stream switch 306 is connected to the stream switch 306 of the tile above, the stream switch of the tile below, the stream switch of the tile to the left, and the stream switch of the tile to the right, as long as such adjacent tiles exist within the DPE array 102. The stream switches 306 implement the packet-switched network within the DPE array 102 through which application data is transmitted. Generally, the stream switches 306 are programmable to establish logical connections with other stream switches to form clusters of tiles that communicate application data during operation. Application data includes data that is manipulated or generated by the tiles of the DPE array 102 during runtime.
[0040] The MM switches 308 are connected vertically in a column. That is, each MM switch 308 is connected to the MM switches 308 of the tile above and the MM switches 308 of the tile below, as long as such adjacent tiles exist in the DPE array 102. The MM switches 308 may be used to read from and / or write to any control registers and / or memories contained in the tiles of the DPE array 102. In this regard, the MM switches 308 form a memory-mapped network used to transmit configuration data to the tiles of the DPE array 102. Configuration data is data loaded into the control registers of the tiles of the DPE array 102 for the purpose of configuring the tiles to implement specific connectivity with other tiles and / or enable / disable specific functions of the tiles. Configuration data may also include data written to the tile's memory for initialization. Configuration data should be distinguished from application data.
[0041] The master circuit within IC100 can, for example, read from and / or write to any memory and / or register of the DPE array 102 coupled to the MM switch 308. Although not shown, each of tiles 202, 204, and 208 includes a control register that can be read from and written to by the MM switch 308, thereby enabling each of such tiles to be programmed with configuration data.
[0042] Each DPE tile 202 further includes a core 302 and a memory module 304. Each memory tile 204 further includes a DMA engine 310 and RAM 312. In the example in Figure 3, each DMA engine 310 is capable of accessing (e.g., reading from and / or writing to) the RAM 312 contained within the same memory tile 204. Depending on the configuration data loaded into each memory tile 204, as performed using the MM switch 308, the DMA engine 310 of a given memory tile 204 may also read from and / or write to the RAM 312 of an adjacent memory tile 204, as shown.
[0043] Each interface tile 208 also includes one or more interfaces 314. In the example in Figure 3, the interfaces 314 can be connected to other systems and / or circuits of IC 100. For illustrative purposes, the interfaces 314 can be coupled to NoC 108, PL 104, PS 106, PMC 110, and / or hardwired circuit block 112. The interface tiles 208 can transmit data to the tiles placed on top of each interface tile 208, whether it be application data via the stream switch 306 or configuration data via the MM switch 308. Furthermore, the interface tiles 208 can be configured by loading configuration data into the control registers of each interface tile 208 via the MM switch 308.
[0044] Figure 4 illustrates an exemplary implementation of NoC108. NoC108 includes a NoC master unit (NMU) 402, a NoC slave unit (NSU) 404, a network 414, and a register 412. The NMU 402 and NSU 404 can be connected to an endpoint circuit. The endpoint circuit connected to the NMU 402 and NSU 404 can be a hardwired circuit block 112, a circuit implemented in PL 104, a component in PS 106, and / or a DPE tile 202 or memory tile 204 in DPE array 102. A given endpoint circuit can be connected to two or more NMU 402s or two or more NSU 404s.
[0045] The NMU402 can issue transactions, such as reads and writes, on the NoC108, while the NSU404 responds to transactions issued by the NMU402. The NMU402 is connected to the NSU404 through the network 414. In one example, the network 414 includes NoC packet switches (NPS) 406 and routing 408 between the NPS406s. Each NPS406 performs switching of NoC packets. The NPS406s are connected to each other and to the NMU402 and NSU404 through routing 408 to implement multiple physical channels. The NPS406 also supports multiple virtual channels for each physical channel.
[0046] The NMU402, NSU404, and NPS406 may include a register 412 that determines their function. The register 412 in the NoC108 supports interrupts, Quality of Service (QoS), error handling and reporting, transaction control, power management, and address mapping control. The register 412 can be initialized to a usable state before reprogramming. Following initialization, the register 412 can be reprogrammed by writing to it using a write request. Configuration data for the NoC108 can be loaded into the IC100 to program the NoC108 and / or other endpoint circuits.
[0047] Figure 5 is a block diagram illustrating an example of the connection between endpoint circuits within IC100 to NoC108 via NoC. In this example, endpoint circuit 502 is connected to endpoint circuit 504 via NoC108. Endpoint circuit 502 is a master circuit coupled to NMU402 of NoC108. Endpoint circuit 504 is a slave circuit coupled to NSU404 of NoC108. Each endpoint circuit 502 and 504 can be a circuit within PS106, a DPE tile 202 within DPE array 102, a memory tile 204 within DPE array 102, a circuit within the area of PL104, or a hardwired circuit block 112.
[0048] Network 414 includes multiple physical channels 506. Each physical channel 506 is implemented by programming a NoC 108. Each physical channel 506 includes one or more NPS 406s and associated routing 408s. The NMU 402 connects to the NSU 404 through at least one physical channel 506. A physical channel 506 may also have one or more virtual channels 508s. The connections through network 414 use a master-slave configuration. In one example, the most basic connection on network 414 includes a single master connected to a single slave. However, other examples can implement more complex structures.
[0049] Figures 6A and 6B illustrate an exemplary architecture of a DPE tile 202 in a DPE array 102. For illustrative purposes, Figures 6A and 6B may be collectively referred to as "Figure 6". Referring to Figure 6A, the DPE tile 202 includes a core 302 and a memory module 304. The DPE tile 202 further includes a stream switch 306 and an MM switch 308.
[0050] Core 302 provides data processing capabilities for DPE tile 202. Core 302 can be implemented as one of several different processing circuits. In the example in Figure 6A, core 302 includes an optional program memory 606. In one or more exemplary implementations, core 302 is implemented as a processor capable of executing program code, e.g., computer-readable instructions. Program memory 606 is capable of storing instructions executed by core 302. Core 302 can be implemented, for example, as a CPU, GPU, DSP, vector processor, or other type of processor capable of executing instructions. The core can be implemented using one of the various CPU and / or processor architectures described herein. In another example, core 302 is implemented as a very long instruction word (VLIW) vector processor or DSP.
[0051] The program memory 606 may be implemented as a dedicated program memory that is private to the core 302. The program memory 606 may be used only by the core of the same DPE tile 202. Thus, the program memory 606 can only be accessed by the core 302 and is not shared with any other DPE tile 202 or any other component of DPE tile 202 in the DPE array 102. The program memory 606 may include a single port for read and write operations and is addressable using the memory-mapped network of the DPE array 102 via the MM switch 308. For example, the program memory 606 may be loaded with program code by a master circuit outside the DPE array 102 via the MM switch 308. The program code loaded into the program memory 606 can be executed by the core 302.
[0052] In one or more exemplary implementations, the core 302 may have a customized architecture to support a specific instruction set. For example, the core 302 may be customized for wireless applications and configured to execute wireless-specific instructions. In another example, the core 302 may be customized for machine learning and configured to execute machine learning-specific instructions.
[0053] In one or more other exemplary implementations, core 302 is implemented as a hardwired circuit mechanism, such as an enhanced intellectual property (IP) core, dedicated to performing one or more specific operations. In this case, core 302 does not need to execute program code. In implementations where core 302 does not execute program code, program memory 606 may be omitted. As an exemplary and non-limiting example, core 302 may be implemented as an enhanced forward error correction (FEC) engine or other circuit block.
[0054] In some exemplary implementations, different DPE tiles 202 may contain different types of cores 302. For example, one or more cores 302 may be implemented to execute program code, while the cores 302 of other DPE tiles 202 may not be able to execute program code. In any case, each core 302 may be configured to perform computations, whether through the execution of program code / instructions or not, and may contain one or more internal registers 626 that can be used in conjunction with the cascading connectivity described herein.
[0055] The core 302 may include a control register 608. The control register 608 may be loaded with configuration data for controlling the operation of the DPE tile 202. For example, the configuration data loaded into the control register 608 can configure and / or control the operation of the core 302, memory module 304, stream switch 306, and cascade interfaces 622, 624 of the DPE tile 202, which are described in more detail herein. In one or more exemplary implementations, the DPE tile 202 may be activated and / or deactivated, for example, as a whole, based on the configuration data loaded into the control register 608. Similarly, the core 302 may be activated and / or deactivated based on the configuration data loaded into the control register 608. The core 302 may be activated and / or deactivated independently of the memory module 304, so that the memory module 304 can be accessed by one or more other cores. In the example in Figure 6A, the control register 608 is addressable (e.g., can be read and / or written) via the memory-mapped network through the MM switch 308. Deactivation refers to putting a circuit block into a low-power mode or cutting off power (e.g., supply voltage) from the circuit block. When a particular component or DPE tile 202 is deactivated, that component or tile becomes inoperable until it is activated.
[0056] In one or more exemplary implementations, the memory module 304 is capable of storing data used and / or generated by the core 302, which is referred to herein as application data. The memory module 304 may include read / write memory such as RAM. Thus, the memory module 304 is capable of storing data that can be read and consumed by the core 302. The memory module 304 is also capable of storing data (e.g., results) that is written by the core 302.
[0057] In one or more other exemplary implementations, the memory module 304 can store data, such as application data, that may be used and / or generated by one or more other cores 302 of other DPE tiles 202 in the DPE array 102. One or more other cores 302 of DPE tiles 202 can also read from and / or write to the memory module 304. In certain exemplary implementations, the other cores 302 that can read from and / or write to the memory module 304 may be cores 302 of one or more adjacent DPE tiles 202. Two tiles are adjacent if the tiles share a boundary with each other. By enabling one or more other cores 302 from the core 302 in Figure 6A and adjacent DPE tiles (e.g., DPE tiles adjacent above, below, and to the right and / or left of the target DPE tile 202) to read from and / or write to the memory module 304, the memory module 304 implements shared memory that supports communication between different DPE tiles 202 and / or cores 302 that are able to access the memory module 304.
[0058] As described above, the DPE array 102 may include several different independent networks, sometimes referred to as "DPE interconnection circuit mechanisms." The stream network is formed from stream switches 306 that exchange application data. As illustrated, the stream switch 306 of DPE tile 202 in Figure 6A is coupled to the stream switches of adjacent tiles to the left, right, above, and below. Depending on the grid configuration of the DPE array 102, the tile may include one or more other DPE tiles 202, interface tiles 208, one or more memory tiles 204, or any combination thereof.
[0059] The stream switch 306 is coupled to the core 302 and is capable of communicating with the core 302. The core 302 includes, for example, a stream interface that connects to the stream switch 306, thereby enabling the core 302 to communicate directly with other tiles of the DPE array 102 via a DPE interconnection circuit mechanism. For example, the core 302 may include instructions or hardwired circuit mechanisms that enable the core 302 to directly send and / or receive application data to such other tiles via the stream switch 306.
[0060] The stream switch 306 is coupled to the memory module 304 and is capable of communicating with the memory module 304. The memory module 304 includes, for example, a stream interface that connects to the stream switch 306, thereby enabling other tiles in the DPE array 102 to communicate with the memory module 304 in Figure 6A via the DPE interconnection circuit mechanism. In general, the stream switch 306 facilitates communication between non-adjacent tiles in the DPE array 102. For example, via the stream switch 306, the core and / or memory module of other DPE tiles 202 that are not directly connected to the memory interface of the memory module 304 in Figure 6A or the core interface of the core 302 in Figure 6A can communicate with the core 302 and / or memory module 304 in Figure 6A via the DPE interconnection circuit mechanism. Thus, the core 302 and / or memory module 304 in Figure 6A can also communicate with any of the tiles in the DPE array 102 via the stream switch of the DPE interconnection circuit mechanism, whether such other tiles are adjacent or not.
[0061] The stream switch 306 may also be used to communicate with other systems, such as PL104, NoC108, hardwired block 112, or other circuit blocks described herein. Generally, the stream switch 306 can be programmed to operate as a circuit-switched stream interconnect or a packet-switched stream interconnect. A circuit-switched stream interconnect can implement point-to-point dedicated streams suitable for high-bandwidth communication between tiles of the DPE array 102. A packet-switched stream interconnect allows for medium-bandwidth communication by sharing streams and time-multiplexing multiple logical streams onto a single physical stream.
[0062] The stream switch 306 may be configured via a control register 608. The configuration data loaded into the control register 608 instructs, for example, which other DPE tiles 202 and / or systems of IC 100 the DPE tile 202 in Figure 6A will communicate with, and whether such communication will be established as a circuit-switched point-to-point connection or a packet-switched connection.
[0063] The memory-mapped network can exchange data such as configuration data, control data, and / or debug data for the DPE tile 202. The memory-mapped network is formed from MM switches 308. Each component of the DPE tile 202 in Figure 6, which can be read and / or written, such as the control register 608, program memory 606, memory module 304, and event broadcast circuit mechanism (e.g., Figure 6B), can be read and / or written using the MM switches 308. The MM switches 308 may also be used to exchange configuration data, control data, and debug data for other types of tiles in the DPE array 102. In the example in Figure 6A, the MM switches 308 can receive configuration data used to configure the DPE tile 202. The MM switches 308 may also receive configuration data from MM switches of tiles in the DPE array 102 located beneath the DPE tile 202 in Figure 6A. The MM switch 308 can transfer the received configuration data to one or more other MM switches in the tile of the DPE array 102 above the DPE tile 202 in Figure 6A, the core 302 in Figure 6A (e.g., program memory 606 and / or control register 608), and / or the memory module 304 in Figure 6A (e.g., memory in the memory module 304 for initialization). Thus, the MM switch 308 in Figure 6A communicates with the MM switches in adjacent tiles of the DPE array 102 below and / or the MM switches in adjacent tiles of the DPE array 102 above.
[0064] The control register 608 of each DPE tile 202 may be programmed by loading configuration data through each MM switch 308. Through configuration, the stream switch 306 is programmed to establish connections with other endpoints, whether packet-switched or circuit-switched, whether within one or more other DPE tiles 202, memory tiles 204, and / or interface tiles 208.
[0065] The MM switch 308 in Figure 6A, in combination with memory-mapped switches on other tiles of the DPE array 102, implements a shared transaction exchange network where transactions propagate from MM switch to MM switch. Each of the MM switches 308 can dynamically route transactions based on, for example, an address. The MM switches 308 allow other systems of IC 100 to access the resources (e.g., components) of the tiles of the DPE array 102. For example, the DPE array 102 may be mapped to the address space of a processor (e.g., the processor of PS 106 or PMC 110). Thus, any control registers and / or memories within the tiles of the DPE array 102 may be accessed via the MM interface. For example, the memory in memory module 304, program memory 606, and / or control register 608 can be read and / or written via the MM switch 308 in each DPE tile 202.
[0066] In the example in Figure 6A, the memory module 304 includes several memory interfaces 610-1, 610-2, 610-3, and 610-4. In Figure 6A, memory interfaces 610-1 and 610-2 are abbreviated as "MI". The memory module 304 further includes several memory banks 612-1 to 612-N. In a particular exemplary implementation, the memory module 304 includes eight memory banks 612. In other exemplary implementations, the memory module 304 may include fewer or more memory banks 612. In the example in Figure 6A, each of the memory banks 612-1 to 612-N has its own arbitration circuit 614-1 to 614-N. Each arbitration circuit 614 may include arbitration logic. Furthermore, each arbitration circuit 614 may include a crossbar. Thus, any master can write to any one or more of the memory banks 612.
[0067] The memory module 304 may include a memory-mapped interface (not shown) that communicates with the MM switch 308. The memory-mapped interface in the memory module 304 may be connected to communication lines in the memory module 304 that are coupled to the DMA engine 616, the memory interface 610, and the arbitration circuit 614 for reading from and / or writing to the memory bank 612.
[0068] The DMA engine 616 may include two or more interfaces. For example, one or more interfaces may receive input data streams from other tiles of the DPE array 102 via the stream switch 306 and write the received data to the memory bank 612. One or more other interfaces may read data from the memory bank 612, send the data out through the stream interface of the DMA engine 616, and transmit it to other tiles of the DPE array 102 via the stream switch 306.
[0069] The memory module 304 can operate as a shared memory that can be accessed by multiple different DPE tiles 202. In the example in Figure 6A, memory interface 610-1 is coupled to core 302 via core interface 618-1 included in core 302. Memory interface 610-1 provides core 302 with access (e.g., read and write capabilities) to memory bank 612 through arbitration circuit 614. Memory interface 610-2 is coupled to the core interface of a DPE tile in DPE array 102 adjacent to DPE tile 202 in Figure 6A. Memory interface 610-2 provides the core of the DPE tile adjacent to DPE tile 202 in Figure 6A with access to memory bank 612. Memory interface 610-3 is coupled to the core interface of a DPE tile in DPE array 102 adjacent to the right of DPE tile 202 in Figure 6A. Memory interface 610-3 provides access to memory bank 612 to the core of the DPE tile adjacent to the right of DPE tile 202 in Figure 6A. Memory interface 610-4 is coupled to the core interface of the DPE tile of the DPE array 102 adjacent below DPE tile 202 in Figure 6A. Memory interface 610-4 provides access to memory bank 612 to the core 302 of the DPE tile 202 adjacent below DPE tile 202 in Figure 6A.
[0070] Core 302 can access the memory modules of other neighboring DPE tiles via core interfaces 618-2, 618-3, and 618-4. In the example in Figure 6A, core interface 618-2 is connected to the memory interface of the DPE tile adjacent to DPE tile 202 below in Figure 6A. Therefore, core 302 can access the memory module of the DPE tile adjacent to DPE tile 202 below in Figure 6A. Core interface 618-3 is connected to the memory interface of the DPE tile adjacent to the left of DPE tile 202 in Figure 6A. Therefore, core 302 can access the memory module of the DPE tile adjacent to the left of DPE tile 202 in Figure 6A. Core interface 618-4 is connected to the memory interface of the DPE tile adjacent to DPE tile 202 above in Figure 6A. Therefore, core 302 can access the memory module of the DPE tile adjacent to DPE tile 202 above in Figure 6A.
[0071] As described above, core 302 is capable of mapping read and / or write operations in the correct direction through core interfaces 618-1, 618-2, 618-3, and / or 618-4 based on the address of such operations. When core 302 generates an address for a memory access, core 302 is capable of decoding the address to determine the direction (e.g., the specific DPE tile 202 to be accessed) and transferring the memory operation to the correct core interface in the determined direction.
[0072] The memory module 304 may include a hardware synchronization circuitry (HSC) 620. Generally, the HSC 620 can synchronize the operation of different cores 302 (e.g., the core 302 of a neighboring DPE tile 202), the core 302 of Figure 6A, the DMA engine 616, and other external masters (e.g., processors) that can communicate with DPE tiles such as the DPE tile 202 of Figure 6A via the DPE interconnect circuit. As an exemplary and non-limiting example, the HSC 620 can synchronize two different cores 302 in different DPE tiles 202 that access the same buffer, e.g., a shared buffer, within the memory module 304 of Figure 6A. The HSC 620 may be accessed by the core 302 and / or the core of a neighboring DPE tile (e.g., the core 302 of another DPE tile 202 connected to the memory interface 610), and / or by the stream switch 306 of the other DPE tile 202.
[0073] In addition to communicating with neighboring DPE tiles 202 through the shared memory module 304 and with neighboring and / or non-neighboring DPE tiles 202 via the DPE interconnect circuitry, the core 302 may include one or more cascading interfaces 622, 624, such as cascading inputs (indicated as "CI" 622) and cascading outputs (indicated as "CI" 624). Cascading interfaces 622 and 624 can provide direct communication with other cores 302 of adjacent DPE tiles 202. As shown in the figure, the cascading interface 622 of the core 302 can directly receive input data streams from cores 302 of adjacent DPE tiles 202 (e.g., left, above, or below DPE tiles 202). The data streams received via the cascading interface 622 can be provided to data processing circuitry within the core 302. The cascade interface 624 of core 302 can directly transmit output data streams to core 302 of adjacent DPE tiles 202 (e.g., DPE tiles 202 to the right, above, or below).
[0074] In the example in Figure 6A, each of cascade interfaces 622 and 624 may include a first-in-first-out (FIFO) interface (not shown) for buffering. In exemplary implementations, cascade interfaces 622 and 624 are capable of transmitting data streams that may be several hundred bits wide. The specific bit widths of cascade interfaces 622 and 624 are not intended to be limiting. In the example in Figure 6A, cascade interface 622 is coupled to an internal register (or a group of registers) 626 in the core 302. The internal register 626 may store data generated and / or manipulated by the data processing circuitry in the core 302.
[0075] In one embodiment, internal register 626 may be an accumulation register. The accumulation register of core 302 is an internal register in which intermediate results of operations performed by core 302 may be stored. The accumulation register allows core 302 to store intermediate results of such calculations without having to write such content / data to separate memory located outside core 302. In another embodiment, internal register 626 is another register that may be connected to the accumulation register. For example, internal register 626 may be a register that is connected to the accumulation register and is specifically accessible for receiving data via cascade interface 622, writing that data to the accumulation register via cascade interface 624, and / or outputting data from the accumulation register. Cascade interface 624 may output the contents of internal register 626, and may do so every clock cycle.
[0076] In the example shown in Figure 6A, cascade interfaces 622 and 624 can be programmed based on configuration data loaded into control register 608. For example, cascade interface 622 can be activated or deactivated based on control register 608. Similarly, cascade interface 624 can be activated or deactivated based on control register 608. Cascade interface 622 can be activated and / or deactivated independently of cascade interface 624.
[0077] In an exemplary implementation, cascade interfaces 622 and 624 are controlled by core 302. For example, core 302 may include instructions for reading / writing to cascade interfaces 622 and / or 624. In another example, core 302 may include a hardwired circuit mechanism capable of reading and / or writing to cascade interfaces 622 and / or 624. In a particular exemplary implementation, cascade interfaces 622 and 624 may be controlled by an entity outside of core 302.
[0078] In one or more exemplary implementations, the DPE array 102 may be formed from homogeneous DPE tiles 202. In one or more other exemplary implementations, the DPE array 102 may be formed from different types of DPE tiles 202. For example, the DPE tiles 202 may include different types of cores 302, such as cores 302 that execute program code, hardwired cores that do not execute program code, special-purpose cores, or any combination thereof. In yet another exemplary implementation, the DPE array 102 may include one or more DPE tiles that are, for example, dummy DPE tiles that are not functional DPE tiles. Each different DPE array may include a different number of DPEs and / or different types of DPEs, whether implemented on the same die or on different dies.
[0079] Figure 6B illustrates an example of an event processing circuit within a DPE tile 202. A DPE tile may include event processing circuits interconnected with event processing circuits of other DPE tiles, memory tiles, and / or interface tiles. In the example in Figure 6B, the event processing circuits are implemented within a core 302 and a memory module 304. The core 302 may include an event broadcast circuit 652. The memory module 304 may include a separate event processing circuit that includes an event broadcast circuit 662.
[0080] The event broadcast circuit 652 may be connected to the event broadcast circuit in the core of each of the neighboring DPE tiles above and below DPE tile 202 in Figure 6. The event broadcast circuit 652 may also be connected to the event broadcast circuit in the memory module of the neighboring DPE tile to the left of DPE tile 202 in Figure 6B. The event broadcast circuit 652 is connected to the event broadcast circuit 662. The event broadcast circuit 662 may also be connected to the event broadcast circuit in the memory module of each of the neighboring DPE tiles above and below DPE tile 202 shown in Figure 6B. The event broadcast circuit 662 may also be connected to the event broadcast circuit in the core of the neighboring DPE to the right of DPE tile 202 in Figure 6B.
[0081] In this way, the event processing circuitry of the DPE tile may form an independent event broadcast network within the DPE array 102. The event broadcast network within the DPE array 102 may exist independently of the other networks described herein. Furthermore, the event broadcast network may be individually configured by loading preferred configuration data into the control register 608.
[0082] In the example shown in Figure 6, the control register 608 programs the event broadcast circuits 652 and 662 to detect specific types of events occurring within the core 302 and memory module 304, respectively. The data loaded into the control register 608 determines, for example, which of several different types of predetermined events will be detected by the event broadcast circuits 652 and 662. Examples of events that may be detected by the event broadcast circuit 652 are events occurring within the core 302. These events may include, but are not limited to, the start and / or end of read operations by the core 302, the start and / or end of write operations by the core 302, stalls, and the occurrence of other operations performed by the core 302. Examples of events that may be detected by the event broadcast circuit 662 are events occurring within the memory module 304. These events may include, but are not limited to, the start and / or end of read operations by the DMA engine 616, the start and / or end of write operations by the DMA engine 616, stalls, and the occurrence of other operations performed by the memory module 304. The data loaded into the control register 608 determines, for example, which of several different types of predetermined events will be detected by the event broadcast circuitry 652 and / or 662. It should be understood that the event broadcast circuitry 652 and / or 662 can detect events originating from and / or related to the DMA engine 616, MM switch 308, stream switch 306, memory interface 610, core interface 618, cascade interfaces 622, 624, and / or other components located within the DPE tile.
[0083] For example, configuration data loaded into control register 608 may determine which events received by event broadcast circuits 652 and / or 662 from other event broadcast circuits are propagated to other event broadcast circuits or other circuits. The configuration data may also specify which events generated internally by event broadcast circuits 652 and / or 662 are propagated to other event broadcast circuits and / or other circuits.
[0084] Therefore, events generated by event broadcast circuits 652 and / or 662 may be broadcast to other tiles of the DPE array 102. In the example in Figure 6B, event broadcast circuits 652 and / or 662 can broadcast events to the tile above, the tile to the left (e.g., via event broadcast circuit 652), the tile to the right (e.g., via event broadcast circuit 662), and the tile below, regardless of whether the events were generated internally or received from other tiles of the DPE array 102. Event broadcast circuit 652 can also broadcast events to event broadcast circuit 662 in the memory module 304.
[0085] In the example in Figure 6B, an event broadcast circuit located within a core communicates vertically with event broadcast circuit locations located within the cores of neighboring DPE tiles above and / or below. Similarly, an event broadcast circuit located within a memory module communicates vertically with event broadcast circuit locations located within the memory modules of neighboring DPEs above and / or below. An event broadcast circuit can also communicate with the event broadcast circuit immediately to its left and / or right, regardless of the type of tile in the DPE array 102 where other event broadcast circuit locations are located.
[0086] When control register 608 is written, event broadcast circuits 652 and 662 can operate in the background. In one or more exemplary implementations, event broadcast circuit 652 generates an event only in response to detecting a specific condition within core 302, and event broadcast circuit 662 generates an event only in response to detecting a specific condition within memory module 304.
[0087] In general, within this disclosure, stream switches are described as connecting to other stream switches. MM switches are described as connecting to other MM switches, and event broadcast circuits are described as connecting to other event broadcast circuits on similar tiles. That is, such components are described as connecting between DPE tiles, between MM tiles, etc. It should be understood that stream switches, MM switches, and event broadcast circuits may also be coupled to the respective stream switches, MM switches, and event broadcast circuits of other neighboring tiles of the DPE array 102, regardless of whether such other tiles are DPE tiles 202, memory tiles 204, or interface tiles 208. Thus, although Figure 6 is primarily illustrated in the context of such components connecting to similar components in other DPE tiles, such components may also connect to similar components in other types of tiles of the DPE array 102, depending on the implementation of the DPE array 102 and the location of the various types of tiles contained therein.
[0088] In the example in Figure 6, the DPE tiles may be arranged such that the DPE tiles are arranged in columns where the cores and memory modules are aligned. In another example, adjacent DPE tiles within the same row may be inverted and alternating. That is, in the same column, from left to right, odd-numbered DPE tiles may have the core on the left and the memory module on the right (e.g., uninverted), while even-numbered DPE tiles may be inverted to have the core on the right and the memory module on the left, or vice versa. Furthermore, the rows may be spaced apart to form a checkerboard pattern, resulting in columns of DPE tiles that are alternating in the sense of being inverted, rather than as described.
[0089] Figures 7A, 7B, and 7C illustrate exemplary architectures for implementing interface tiles of the SoC interface 206. The SoC interface 206 includes a plurality of interconnected interface tiles 208 organized in a row. In one example, each of the interface tiles 208 may have the same architecture. In another example, the interfaces 208 may be implemented with different architectures, and each different interface tile architecture supports communication with different types of resources of IC 100. The interface tiles 208 are connected so that data can propagate bidirectionally from one tile to another. Each interface tile 208 can act as an interface for a row of tiles of the DPE array 102 directly above it.
[0090] Figure 7A illustrates an exemplary implementation of interface tile 208. The architecture shown in Figure 7A can also be used to implement any of the other interface tiles 208 included in SoC interface 206.
[0091] Interface tile 208 includes an MM switch 308. The MM switch 308 can include multiple memory-mapped interfaces for communication in each of several different directions. As an exemplary and non-limiting example, the MM switch 308 may include one or more memory-mapped interfaces, each having a master that connects perpendicularly to the MM switch for the tile of the adjacent DPE array 102 above. Thus, the MM switch 308 can operate as a master for the memory-mapped interfaces of one or more tiles of the DPE array 102. In a particular example, the MM switch 308 may operate as a master for one or more DPE tiles 202 and / or one or more memory tiles 204. For example, the MM switch 308 may operate as a master for a row of DPE tiles 202 and / or memory tiles 204 above the interface tile 208. It should be understood that the MM switch 308 can include additional memory-mapped interfaces for connecting to multiple different tiles of the DPE array 102. The memory-mapped interface of the MM switch 308 may include one or more slaves capable of communicating with different tiles of the DPE array 102 located on the interface tile 208.
[0092] In the example in Figure 7A, the MM switch 308 may include one or more memory-mapped interfaces to facilitate horizontal communication to the MM switch within neighboring interface tiles of the SoC interface 206. For illustrative purposes, the MM switch 308 may be connected to horizontally adjacent tiles via memory-mapped interfaces, each of which includes one or more masters and / or one or more slaves. Thus, the MM switch 308 can move data (e.g., configuration data, control data, and / or debug data) from one interface tile to another to reach the correct tile and / or a subset of tiles of the DPE array 102, directing the data to the target tile regardless of whether such tile is in the row above interface tile 208 or on a different interface tile 208. For example, if a memory-mapped transaction is received from another system of IC 100, the MM switch 308 can distribute the transaction horizontally, for example, to other interface tiles within the SoC interface 206.
[0093] The MM switch 308 may also include a memory-mapped interface having one or more masters and / or slaves coupled to a control register 736 within the interface tile 208. Through the MM switch 308, configuration data can be loaded into the control register 736 to control various functions and operations performed by the components within the interface tile 208. Figures 7A, 7B, and 7C illustrate connections between the control register 736 and one or more elements of the interface tile 208. However, the control register 736 may also control other elements of the interface tile 208 and, as such, may have connections to such other elements, but such connections are not shown in Figures 7A, 7B, and / or 7C.
[0094] The MM switch 308 may include a memory-mapped interface coupled to the NoC interface 726 via a bridge 718. The memory-mapped interface may include one or more masters and / or slaves. The bridge 718 can convert data transfers from the NoC interface 726 (e.g., configuration data, control data, and / or debug data) into memory-mapped data that can be received by the MM switch 308.
[0095] The interface tile 208 may also include an event broadcast circuitry 704. The event broadcast circuitry 704 may be comprised of a control register 736. In the example in Figure 7A, the event broadcast circuitry 704 is coupled to a control, debug, and trace (CDT) circuit 720. Configuration data loaded into the control register 736 defines specific events that can be detected locally within the interface tile 208. Each control register 736 in the event broadcast circuitry 704 can detect various different events originating from and / or related to the DMA engine 712, the MM switch 308, the stream switch 306, the first-in, first-out (FIFO) memory located within the PL interface 710, and / or the stream interface 714. Examples of events may include, but are not limited to, DMA completion transfers, lock releases, lock acquisitions, PL transfer terminations, or other events related to the start or end of data flow through the interface tile 208.
[0096] The interface tile 208 may further include an event broadcast circuit mechanism 730. In one embodiment, the event broadcast circuit mechanism 730 may be included only as a broadcast circuit mechanism and may not provide event generation and / or detection. In this case, the event broadcast circuit mechanism 730 may be included to receive events broadcast from other event broadcast circuit mechanisms in tiles above the interface tile 208. The event broadcast circuit mechanism 730 may provide such events to the event broadcast circuit mechanism 704 and / or the CDT circuit 720. In the example of Figure 7A, the event broadcast circuit mechanism 730 may not have a direct connection to the CDT circuit 720, but rather may be connected to the CDT circuit 720 via the event broadcast circuit mechanism 704.
[0097] Each of the event broadcast circuitry 704 and event broadcast circuitry 730 provides an interface between the event broadcast network of the DPE array 102 and other interface tiles of the SoC interface 206. Event broadcast circuitry 704 is coupled to event broadcast circuitry in the adjacent left interface tile 208 of the SoC interface 206 and to event broadcast circuitry 730. Event broadcast circuitry 730 is coupled to event broadcast circuitry in the adjacent right interface tile 208 of the SoC interface 206. Event broadcast circuitry 704 and / or event broadcast circuitry 730 may be connected to event broadcast circuitry located in other tiles on the interface tile 208.
[0098] The event broadcast circuit 704 is also coupled to the PL interface 710. In another exemplary implementation, though not shown, the event broadcast circuit 730 may also be coupled to the PL interface 710. The event broadcast circuit 704 and the event broadcast circuit 730 are capable of transmitting events generated internally by the event broadcast circuit 704, events received from other interface tiles 208 of the SoC interface 206, events received from DPE tiles 202, and / or events received from memory tiles 204 to other tiles of the DPE array 102. The event broadcast circuit 704 is further capable of transmitting such events to other systems and / or circuits of IC 100 via the PL interface 710. Furthermore, the PL interface 710 may receive events from other systems and / or circuit blocks of IC 100 and provide such events to the event broadcast circuit 704 and / or 730 to propagate such events to specific DPE tiles 202 and / or specific memory tiles 204, triggering further actions by the respective receiving tiles.
[0099] In one example, the event broadcast circuitry 704 can transmit any event received from the system and / or circuit block of IC 100 via the PL interface 710 to other interface tiles 208 of the SoC interface 206, and / or to the DPE tiles 202 and / or memory tiles 204 of the DPE array 102. Since the event can be broadcast among the interface tiles 208 within the SoC interface 206, the event can reach any tile in the DPE array 102 by traversing through the interface tiles 208 within the SoC interface 206 and the event broadcast circuitry within them to the target (e.g., intended) tile in the DPE array 102. For example, an event broadcast circuitry in an interface tile 208 of the SoC interface 206 below a row (or subset) of tiles managed by an interface tile 208 containing one or more target tiles may propagate the event to the target tile in the DPE array 102.
[0100] In the example shown in Figure 7A, the event broadcast circuit 704 is coupled to the CDT circuit 720. The event broadcast circuit 704 can transmit events to the CDT circuit 720. The CDT circuit 720 can packetize the received events and transmit them from the event broadcast circuit 704 to the stream switch 306. In certain exemplary implementations, the event broadcast circuit 730 may also be connected to the stream switch 306 and / or the CDT circuit 720.
[0101] In one or more exemplary implementations, the event broadcast circuit 704 and the event broadcast circuit 730 are capable of collecting broadcast events from one or more or all directions (e.g., via any of the connections shown in Figure 7A), as illustrated in Figure 7A. In some cases, the event broadcast circuit 704 and / or the event broadcast circuit 730 are capable of performing a logical "OR" of signals and forwarding the result in one or more or all directions (e.g., including the CDT circuit 720). Each output from the event broadcast circuit 704 and the event broadcast circuit 730 may include a bitmask configurable by configuration data loaded into the control register 736. The bitmask determines which events are individually broadcast in each direction. Such a bitmask can, for example, eliminate undesirable or duplicate propagation of events.
[0102] In one or more exemplary implementations, the event broadcast circuitry 704 and the event broadcast circuitry 730 may be integrated and implemented as a single, larger event broadcast circuitry module. In this case, the integrated event broadcast circuitry module may implement the respective connections and / or functions described in relation to the event broadcast circuitry 704 and the event broadcast circuitry 730.
[0103] The interrupt handler 734 is coupled to the event broadcast circuit 704 and is capable of receiving events broadcast from the event broadcast circuit 704. In one or more exemplary implementations, the interrupt handler 734 may be configured by configuration data loaded into the control register 736 to generate interrupts to the NoC interface 726 in response to selected events and / or combinations of events from the event broadcast circuit 704. Based on the configuration data, the interrupt handler 734 can generate interrupts to the IC 100 system and / or other circuit blocks. For example, the interrupt handler 734 can notify the processor or other device-level management block, such as the PS 106, of events occurring on any tile of the DPE array 102 based on the interrupts generated by the interrupt handler 734.
[0104] The PL interface 710 is coupled to the PL interconnect block 722. In one or more exemplary implementations, the PL interface 710 provides asynchronous clock domain crossing between the DPE array 102 and another clock domain. The PL interface 710 may also provide level shifters and / or isolation cells for integration with power rails. In certain exemplary implementations, the PL interface 710 may be configured to provide 32-bit, 64-bit, and / or 128-bit interfaces with FIFO support for handling back pressure. The specific width of the bitwise interface 710 may be controlled by configuration data loaded into the control register 736.
[0105] In one or more other exemplary implementations, the PL interface 710 is coupled to other types of circuit blocks and / or systems in other dies via the PL interconnect block 722. Thus, the PL interface 710 is capable of transferring data between the interface tile 208 and such other systems and / or circuit blocks of IC 100.
[0106] In the example in Figure 7A, interface tile 208 includes a stream switch 306. The stream switch 306 is coupled to stream switches in adjacent or neighboring interface tiles through one or more stream interfaces. Each stream interface may include one or more masters and / or one or more slaves. In a particular exemplary implementation, each pair of neighboring stream switches can exchange data through one or more streams in each direction. The stream switch 306 is also coupled to stream switches in tiles of the DPE array 102 adjacent to interface tile 208 through one or more stream interfaces. The stream switch 306 is also coupled to PL interface 710, DMA engine 712, and / or stream interface 714 via a stream multiplexer / demultiplexer 708 (abbreviated as stream mux / demux in Figure 7A). The stream switch 306 may include one or more stream interfaces used to communicate with each of the PL interface 710, the DMA engine 712, and / or stream interface 714, for example, through a stream multiplexer / demultiplexer 708.
[0107] The stream switch 306 may be configured by configuration data loaded into the control register 736. The stream switch 306 may be configured, for example, to support packet switching and / or circuit switching operations based on the configuration data. Furthermore, the configuration data defines specific tiles of the DPE array 102 with which the stream switch 306 communicates. In one or more exemplary implementations, the configuration data defines specific tiles or subsets of tiles of the DPE array 102 in the row of tiles directly above the interface tile 208 with which the stream switch 306 communicates.
[0108] The stream multiplexer / demultiplexer 708 can direct data received from the PL interface 710, the DMA engine 712, and / or the stream interface 714 to the stream switch 306. Similarly, the stream multiplexer / demultiplexer 708 can direct data received from the stream switch 306 to the PL interface 710, the DMA engine 712, and / or the stream interface 714. For example, the stream multiplexer / demultiplexer 708 may be programmed by configuration data stored in the control register 736 to route selected data to the PL interface 710, to route selected data to the DMA engine 712 so that such data is sent to the NoC interface 726 as a memory-mapped transaction, and / or to route selected data to the stream interface 714 so that the data is sent via the physical NoC interface 726 as one or more data streams.
[0109] The DMA engine 712 can operate as a master directing data to the NoC interface 726 through the selector block 716. The DMA engine 712 can receive data from tiles of the DPE array 102 and provide such data to the physical NoC interface 726 as memory-mapped data transactions. In one or more exemplary implementations, the DMA engine 712 includes a hardware synchronization circuit mechanism that can be used to synchronize multiple channels contained in the DMA engine 712 and / or channels within the DMA engine 712 with a master that polls and drives lock requests. For example, the master may be a processor and / or a processor system in another system of IC 100. The master may also receive interrupts generated by the hardware synchronization circuit mechanism within the DMA engine 712.
[0110] In one or more exemplary implementations, the DMA engine 712 is capable of accessing external memory (e.g., memory outside IC 100) and / or memory implemented within IC 100. For example, the DMA engine 712 can receive a data stream from a tile of the DPE array 102 and transmit that data stream to memory through NoC 108. Similarly, the DMA engine 712 can receive data from external memory, and the data may be distributed to other interface tiles 208 of the SoC interface 206 and other tiles of the DPE array 102.
[0111] In one or more exemplary implementations, the DMA engine 712 includes security bits that can be set using the DPE Global Control Setting Register (DPE GCS register) 738. The memory may be divided into different regions or partitions, and the DPE array 102 is permitted to access only specific regions of memory. The security bits in the DMA engine 712 may be set so that the DPE array 102 can access only the specific regions of memory permitted by the DMA engine 712 for each security bit. For example, an application implemented by the DPE array 102 may be restricted to accessing only specific regions of memory, restricted to reading from specific regions of memory, and / or restricted to writing to memory, using this mechanism to the fullest extent.
[0112] The security bits in the DMA engine 712 that control access to memory may be implemented to control the DPE array 102 as a whole, or they may be implemented in a finer-grained manner in which access to memory is specified and / or controlled for each tile and / or tile group of the DPE array 102, and such tiles or tile groups are configured to work together, for example, to implement the kernel and / or other applications.
[0113] The stream interface 714 can receive data from the NoC interface 726 and forward that data to the stream multiplexer / demultiplexer 708. The stream interface 714 can also receive data from the stream multiplexer / demultiplexer 708 and forward that data to the NoC interface 726. The selector block 716 can be configured to pass data from the DMA engine 712 or the stream interface 714 to the NoC interface 726.
[0114] The CDT circuit 720 is capable of performing control, debug, and trace operations within the interface tile 208. For debugging purposes, each register located within the interface tile 208 is mapped onto a memory map accessible via the MM switch 308. The CDT circuit 720 may include circuits such as trace hardware, a trace buffer, performance counters, and / or stall logic. The trace hardware of the CDT circuit 720 is capable of collecting trace data. The trace buffer of the CDT circuit 720 is capable of buffering trace data. Furthermore, the CDT circuit 720 can output trace data to the stream switch 306.
[0115] In one or more exemplary implementations, the CDT circuit 720 can collect data, such as trace data and / or debug data, packetize such data, and then output the packetized data through the stream switch 306. For example, the CDT circuit 720 can output the packetized data and provide such data to the stream switch 306. In addition, control registers 736 or others can be read or written during debugging via memory-mapped transactions through the MM switch 308 of each tile. Similarly, performance counters within the CDT circuit 720 can be read or written during profiling via memory-mapped transactions through the MM switch 308 of each tile.
[0116] In one or more exemplary implementations, the CDT circuit 720 can receive any event propagated by the event broadcast circuit 704 (or event broadcast circuit 730), or selected events for each bitmask used by the interface of the event broadcast circuit 704 coupled to the CDT circuit 720. For example, the CDT circuit 720 can receive events broadcast from an event broadcast circuit located within any tile of the DPE array 102. The CDT circuit 720 can pack multiple such events into packets, for example, and associate the packetized events with a timestamp. The CDT circuit 720 can further transmit the packetized events to an external destination outside the interface tile 208 via the stream switch 306. The events may be transmitted by the stream switch 306 and the stream multiplexer / demultiplexer 708 via the PL interface 710, the DMA engine 712, and / or the stream interface 714 to other systems and / or circuit blocks of IC 100.
[0117] The DPE GCS register 738 may store DPE global control settings / bits (also referred to herein as “security bits”) used to enable or disable secure access to and / or from the DPE array 102. The DPE GCS register 738 can be programmed via the SoC secure / initialization interface, which is described in more detail below in relation to Figure 7C. Security bits received from the SoC secure / initialization interface can propagate across the bus from one interface tile to the next of the SoC interface 206, as shown in Figure 7A.
[0118] In one or more exemplary implementations, external memory-mapped data transfers to the DPE array 102 may not be secure or trusted. Any entity within IC 100 that can communicate via memory-mapped data transfer without setting a security bit in the DPE GCS register 738 can communicate with the DPE array 102. By setting a security bit in the DPE GCS register 738, the specific entities permitted to communicate with the DPE array 102 may be defined such that only specified entities capable of generating secure traffic can communicate with the DPE array 102.
[0119] In one or more exemplary implementations, memory-mapped data transfers may include additional sideband signals, such as bits, that indicate whether a transaction is secure or not. When the security bit in the DPE GCS register 738 is set, a memory-mapped transaction entering the SoC interface 206, for example, interface tile 208, must have a sideband signal set to indicate that the memory-mapped transaction arriving at the SoC interface 206 is secure. If a memory-mapped transaction arriving at the SoC interface 206 does not have the sideband bit set and the security bit is set in the DPE GCS register 738, the SoC interface 206 will not allow the transaction to enter or pass to other tiles of the DPE array 102.
[0120] In one or more exemplary implementations, IC100 includes a secure agent (e.g., a circuit) that acts as the root of trust. For example, PMC110 may be the secure agent. The secure agent can configure different entities (e.g., circuits) within IC100 with the necessary permissions to set sideband bits in memory-mapped transactions in order to access the DPE array 102 when the security bits of the DPE GCS register 738 are set. The secure agent grants permissions to different masters that may be implemented within IC100 when IC100 is configured, thereby giving such masters the ability to issue secure transactions to the DPE array 102.
[0121] Figure 7B illustrates an exemplary implementation of interface tile 208. The exemplary architecture shown in Figure 7B can also be used to implement any of the other interface tiles included in SoC interface 206. The example in Figure 7B illustrates a simplified version of the architecture shown in Figure 7A. The architecture in Figure 7B provides connectivity between the DPE tile 202 and / or memory tile 204 and other systems and / or circuit blocks within IC 100. In the example in Figure 7B, the DMA engine 712, stream interface 714, selector block 716, bridge 718, and stream multiplexer / demultiplexer 708 are omitted. Therefore, interface tile 208 in Figure 7B can be implemented using less area of IC 100. Furthermore, as shown, the stream switch 306 is directly coupled to the PL interface 710.
[0122] The exemplary architecture in Figure 7B cannot directly receive memory-mapped data, such as configuration data, from external circuitry to the DPE array 102 for the purpose of configuring the tiles of the DPE array 102. Such configuration data may be received from neighboring interface tiles via the MM switch 308 and directed to a subset of DPE tiles 202 and / or memory tiles 204 managed by interface tile 208 (for example, to the row of tiles above interface tile 208 in Figure 7B).
[0123] Figure 7C illustrates another exemplary implementation of interface tile 208. In a particular exemplary implementation, the architecture shown in Figure 7C may be used to implement only one tile within the SoC interface 206. The architecture shown in Figure 7C is similar to the architecture shown in Figure 7B. Figure 7C includes additional components such as a secure / initialization interface 740, a clock signal generator 742, and a global timer 744.
[0124] In the example shown in Figure 7C, the secure / initialization interface 740 can provide access to the global reset register (not shown) and the DPE GCS register 738 of the DPE array 102. The DPE GCS register 738 may include a control register for the clock signal generator 742. As shown, the secure / initialization interface 740 can provide security bits to the DPE GCS register 738 and propagate security bits to other DPE GCS registers 738 in other interface tiles of the SoC interface 206. The secure / initialization interface 740 can implement a single slave endpoint for the SoC interface 206.
[0125] In the example shown in Figure 7C, the clock signal generator 742 is capable of generating one or more clock signals 746 and / or one or more reset signals 750. The clock signals 746 and / or reset signals 750 may be distributed to each of the DPE tiles 202, the memory tiles 204, and other interface tiles 208 of the SoC interface 206. For example, the clock signal generator 742 may include one or more phase-locked loop (PLL) circuits. As shown, the clock signal generator 742 is capable of receiving a reference clock signal generated by another circuit outside the DPE array 102. In another example, the reference clock may be received from a source outside IC 100. The clock signal generator 742 is capable of generating a clock signal 746 based on the received reference clock signal.
[0126] In the example in Figure 7C, the clock signal generator 742 is configured via the secure / initialization interface 740. For example, the clock signal generator 742 may be configured by loading data into the DPE GCS register 738. Thus, the generation of one or more clock frequencies and reset signals 750 for the DPE array 102 can be set by writing appropriate configuration data to the DPE GCS register 738 through the secure / initialization interface 740. For test purposes, the clock signal 746 and / or reset signal 750 may also be routed directly to the PL 104.
[0127] The secure / initialization interface 740 may be coupled to a control / debug (circuit) block (e.g., a control and / or debug system for IC 100, not shown). In one or more exemplary implementations, the secure / initialization interface 740 may provide status signals to the control / debug block. As an exemplary and non-limiting example, the secure / initialization interface 740 may provide a "PLL lock" signal generated from within the clock signal generator 742 to the control / debug block. The PLL lock signal may indicate when the PLL has acquired a lock on a reference clock signal.
[0128] The secure / initialization interface 740 is capable of receiving instructions and / or data via interface 748. The data may include security bits, clock signal generator configuration data, and / or other data that can be written to the DPE GCS register 738 as described herein. In one embodiment, the PMC 110 or another master circuit may be coupled to interface 748.
[0129] The global timer 744 can interface with the CDT circuit 720. For example, the global timer 744 may be coupled to the CDT circuit 720. The global timer 744 can provide signals used by the CDT circuit 720 to timestamp events used for tracing. In one or more exemplary implementations, the global timer 744 may be coupled to the CDT circuit 720 in other interface tiles of the SoC interface 206 interface tile. For example, the global timer 744 may be coupled to the CDT circuit 720 in the exemplary interface tile of Figures 7A, 7B, and / or 7C. The global timer 744 may also be coupled to a control / debug block.
[0130] Figure 8 illustrates an exemplary implementation of the PL interface 710. In the example in Figure 8, the PL interface 710 includes multiple channels that connect the PL interconnect block 722 to the stream switch 306 and / or stream multiplexer / demultiplexer 708, depending on the specific tile architecture used. The specific number of channels shown in Figure 8 within the PL interface 710 is for illustrative purposes only and not limiting. In other examples, the PL interface 710 may include fewer or more channels than those shown in Figure 8.
[0131] In one or more exemplary implementations, other systems and / or circuit blocks of IC100 coupled to the PL interface 710 operate at a different reference voltage and / or clock speed than the DPE array 102. Thus, in the example of Figure 8, the PL interface 710 includes a plurality of shift isolation circuits 802 and a plurality of asynchronous FIFO memories 804. Each channel includes a shift isolation circuit 802 and an asynchronous FIFO memory 804. A first subset of channels transmits data from PL104 or other circuits to stream switch 306 and / or stream multiplexer / demultiplexer 708. A second subset of channels transmits data from stream switch 306 and / or stream multiplexer / demultiplexer 708 to PL104 or other circuits.
[0132] The shift isolation circuit 802 can interface between domains of different voltages. In this case, the shift isolation circuit 802 can provide an interface for transitions between the operating voltage of PL104 and / or other circuit mechanisms and the operating voltage of the tiles of DPE array 102. The asynchronous FIFO memory 804 can interface between two different clock domains. In this case, the asynchronous FIFO memory 804 can provide an interface for transitions between the clock rate of PL104 or other circuit mechanisms and the clock rate of DPE array 102.
[0133] In one or more exemplary implementations, the asynchronous FIFO memory 804 has a 32-bit interface to the DPE array 102. The connections between the asynchronous FIFO memory 804 and the shift isolation circuit 802, and between the shift isolation circuit 802 and the PL 104, may have a programmable (e.g., configurable) width. For example, the connections between the asynchronous FIFO memory 804 and the shift isolation circuit 802, and between the shift isolation circuit 802 and the PL 104, may be configured to have a width of 32 bits, 64 bits, or 128 bits. As described, the PL interface 710 is configurable by an MM switch 308 that writes configuration data to a control register 736 to achieve the described bit width. Using the MM switch 308, the side of the asynchronous FIFO memory 804 on the PL 104 side may be configured to use 32 bits, 64 bits, or 128 bits. The bit widths provided herein are for illustrative purposes only. Other bit widths may be used in other exemplary implementations. In either case, the width of the various components described can be changed based on the configuration data loaded into the control register 736.
[0134] Figure 9 illustrates an exemplary implementation of the stream interface 714. The DPE array 102 has two common ways of communicating via the NoC 108 using the stream interface within the tiles. In one embodiment, the DPE tile 202 and / or memory tile 204 can access the DMA engine 712 using the stream switch 306. The DMA engine 712 can convert memory-mapped transactions from the NoC 108 into data streams for transmission to tiles in the DPE array 102, and convert data streams from tiles in the DPE array 102 into memory-mapped transactions for transmission via the NoC 108. In another embodiment, the data stream may be directed to the stream interface 714.
[0135] In the example in Figure 9, the stream interface 714 includes multiple channels connecting NoC108 to stream switch 306 and / or stream multiplexer / demultiplexer 708. Each channel may include a FIFO memory and either an upsizing or downsizing circuit. A first subset of channels transmits data from NoC108 to stream switch 306 and / or stream multiplexer / demultiplexer 708. A second subset of channels transmits data from stream switch 306 and / or stream multiplexer / demultiplexer 708 to NoC108. The specific number of channels shown in Figure 9 within the stream interface 714 is for illustrative purposes only and not limiting. In other examples, the stream interface 714 may include fewer or more channels than those shown in Figure 9.
[0136] In one or more exemplary implementations, each upsizing circuit 908 (abbreviated as “US circuit” in Figure 9) is capable of receiving a data stream and increasing the width of the received data stream. For example, each upsizing circuit 908 may receive a 32-bit data stream and output a 128-bit data stream to the corresponding FIFO memory 910. Each of the FIFO memories 910 is coupled to an arbitration / multiplexer circuit 912. The arbitration / multiplexer circuit 912 is capable of arbitrating between received data streams using a specific arbitration scheme or priority (e.g., round-robin or other style) to provide the resulting output data stream to the NoC interface 726. The arbitration / multiplexer circuit 912 is capable of processing and accepting new requests each clock cycle. Clock domain crossing between the DPE array 102 and the NoC 108 may be handled within the NoC 108 itself. In one or more other embodiments, clock domain crossing between the DPE array 102 and the NoC 108 may be handled within the SoC interface 206. For example, clock domain crossing can be handled within the stream interface 714.
[0137] The demultiplexer 902 can receive a data stream from the NoC 108. For example, the demultiplexer 902 may be coupled to the NoC interface 726. For illustrative purposes, the data stream from the NoC interface 726 may be 128 bits wide. The demultiplexer 902 can transfer the received data stream to one of the FIFO memories 904. The specific FIFO memory 904 to which the demultiplexer 902 provides the data stream may be encoded within the data stream itself. The FIFO memory 904 is connected to a downsizing circuit 906 (abbreviated as "DS circuit" in Figure 9). The downsizing circuit 906 can downsize the received stream to a narrower width after buffering it using time-division multiplexing. For example, the downsizing circuit 906 can downsize the stream from 128 bits wide to 32 bits wide.
[0138] As shown in the figure, the downsizing circuit 906 and the upsizing circuit 908 are coupled to a stream switch 306 or a stream multiplexer / demultiplexer 708, depending on the specific architecture of the interface tile 208 used. Figure 9 is provided for illustrative purposes only and is not intended to limit the order and / or connectivity of components within the channel (e.g., the upsizing / downsizing circuit and FIFO memory may vary). In one or more exemplary implementations, the DPE array 102 may operate at a faster or higher clock rate than one or more or all other systems in IC 100.
[0139] In one or more other examples, the PL interface 710, as described in relation to Figure 8, may include upsizing and / or downsizing circuits, as described in relation to Figure 9. For example, downsizing circuits may be included in each channel that transmits data from the PL 104 (or other circuit mechanism) to the stream switch 306 and / or stream multiplexer / demultiplexer 708. Upsizing circuits may be included in each channel that transmits data from the stream switch 306 and / or stream multiplexer / demultiplexer 708 to the PL 104 (or other circuit mechanism).
[0140] In one or more other exemplary implementations, each downsizing circuit 906, although shown as an independent element, may be combined with the corresponding FIFO memory 904, for example, as a single block or circuit. Similarly, each upsizing circuit 908 may be combined with the corresponding FIFO memory 910, for example, as a single block or circuit.
[0141] Figure 10 illustrates an exemplary implementation of the DMA engine 712. In the example of Figure 10, the DMA engine 712 includes a data path circuitry 1002. The data path circuitry 1002 may be divided into multiple modules or interfaces. Each interface can operate independently of the others. The data path circuitry 1002 may include a memory-mapped-stream interface (interface) 1004 and a stream-memory-mapped interface (interface) 1006. Each of interfaces 1004 and 1006 may include one or more distinct channels. For example, interface 1004 may include multiple memory-mapped stream channels, and interface 1006 may include multiple stream-memory-mapped channels. Each channel may be independently configurable. Thus, the DMA engine 712 can receive two or more incoming streams (e.g., one stream per channel) from the stream switch 306 via interface 1006 and send two or more outgoing streams (e.g., one stream per channel) to the stream switch 306 via interface 1004. The data path circuit mechanism 1002 may further include a master memory-mapped interface 1014. The master memory-mapped interface 1014 connects No.C 108 to interfaces 1004 and 1006.
[0142] The DMA engine 712 may also include a buffer descriptor register file 1008 and a hardware synchronization circuit 1010. The buffer descriptor register file 1008 and the hardware synchronization circuit 1010 may be accessed via the multiplexer 1012, thereby facilitating access to the buffer descriptor register file 1008 and the hardware synchronization circuit 1010 by other circuit mechanisms having a control interface coupled to the multiplexer 1012. Examples of such control interfaces include, but are not limited to, a memory-mapped interface or a control stream interface. The control interface may be coupled to a DPE tile 202 of the DPE array 102, a memory tile 204 of the DPE array 102, PS 106, or another master including a processor of an external host computing system connected to IC 100 via a communication bus such as a Peripheral Component Interconnect Express (PCIe) bus. An example of a control stream interface is a streaming interface, such as those described in relation to the DPE tile 202 and / or memory tile 204.
[0143] The hardware synchronization circuit mechanism 1010 may be used to synchronize multiple channels included in the DMA engine 712 and / or channels within the DMA engine 712 with a master that polls and drives lock requests. For example, the master may be a device implemented in the PS106 or PL104. In another example, the master may also receive interrupts generated by the hardware synchronization circuit mechanism 1010 within the DMA engine 712 when a lock is available.
[0144] DMA transfers can be defined by buffer descriptors stored in the buffer descriptor register file 1008. Interface 1006 can request read transfers to NoC108 based on the information in the buffer descriptors. Outgoing streams from interface 1004 to stream switch 306 can be configured as packet-switched or circuit-switched based on the configuration registers for the stream switch and / or the configuration of individual channels of interface 1004.
[0145] The DMA engine 712 may include one or more additional circuits described herein in relation to Figures 12A and 12B and Figures 13A and 13B. For example, the DMA engine 712 may include a physical memory protection circuit as described in relation to Figure 12 and / or a memory management unit as described in relation to Figure 13.
[0146] Figures 11A, 11B, and 11C illustrate exemplary implementations of the memory tile 204. In the example of Figure 11A, the memory tile 204 includes a stream switch 306, an MM switch 308, a DMA engine 310, and RAM 312. The memory tile 204 also includes a broadcast circuit 1102, optionally an event broadcast circuit 1112, a CDT circuit 1104, a control register 1106, and a lock circuit block (shown as "lock" in Figure 11A) 1108.
[0147] In the example in Figure 11A, the stream switch 306 is coupled to the DMA engine 310, the CDT circuit 1104, and stream switches located within each tile of the DPA array 102 adjacent to the memory tile 204 in Figure 11A. In this example, the stream switch 306 connects to other stream switches in the tiles adjacent to the memory tile 204 above, below, to the right, and to the left. The adjacent tiles may be one or more other memory tiles 204, one or more DPE tiles 202, one or more interface tiles 208, or a combination thereof, depending on the tile configuration and the location of the memory tile 204 within it. The specific tiles of the DPE array 102 adjacent to the memory tile 204 vary based on the specific grid configuration implemented for the DPE array 102.
[0148] In one or more other exemplary implementations, the stream switch 306 may be connected to the DMA engine 310 and to stream switches in fewer adjacent tiles of the DPE array 102. In one embodiment, the stream switch 306 may be connected only to stream switches in adjacent tiles of the DPE array 102 above and below the memory tile 204. In such an example, the stream switch 306 is not connected to stream switches in adjacent left and adjacent right tiles.
[0149] The MM switch 308 is connected to the CDT circuit 1104 and the control register 1106. The MM switch 308 is also connected to MM switches in tiles of the DPE array 102 adjacent to the memory tile 204 above, and to MM switches in tiles of the DPE array 102 adjacent to the memory tile 204 below. The tiles adjacent to the memory tile 204 above and below may be one or more other memory tiles 204, one or more DPE tiles 202, one or more interface tiles 208, or any combination of two tile types. As described above, the specific tiles of the DPE array 102 adjacent to the memory tile 204 vary based on the grid configuration of the DPE array 102.
[0150] The DMA engine 310 can access, for example, read from and / or write to, the RAM 312 and any RAM located in any memory tile adjacent to the left and right of memory tile 204 in Figure 11A. The DMA engine 310 is further connected to a lock circuit block 1108 and can request that a specific portion of the RAM 312 be locked to prevent other circuits from accessing the same portion of memory simultaneously. Similarly, the DMA engine 310 can access the locks of the memory tiles adjacent to the left and right and request that a lock be placed on a specific portion of the RAM located in each adjacent memory tile.
[0151] In an exemplary implementation, the lock circuit block 1108 can provide 64 semaphore locks and a 6-bit state for each lock. Each lock circuit block 1108 is accessible by a DMA engine in the same memory tile and by DMA engines in each memory tile adjacent to its right and / or left.
[0152] Event broadcast circuits 1102 and 1112 are connected to event broadcast circuits located within tiles of the DPE array 102 adjacent to memory tile 204 in Figure 11A. In this example, broadcast circuit 1102 connects to other event broadcast circuits in tiles adjacent to memory tile 204 above, below, and to the left. Event broadcast circuit 1112 connects to other event broadcast circuits in tiles adjacent to memory tile 204 above, below, and to the right. Event broadcast circuit 1102 is coupled to event broadcast circuit 1112. Adjacent tiles may be one or more other memory tiles 204, one or more DPE tiles 202, one or more interface tiles 208, or any combination thereof. The specific tiles of the DPE array 102 adjacent to memory tile 204 vary based on the grid configuration of the DPE array 102.
[0153] The event broadcast circuits 1102 and 1112 can operate similarly to event broadcast circuits in other tiles of the DPE array 102. For example, the event broadcast circuits 1102 and 1112 can propagate events received from other tiles and / or circuits of IC 100 to specific destinations. The event broadcast circuits 1102 and 1112 can also generate events. The events generated by the event broadcast circuits 1102 and 1112 are related to operations performed by the memory tile 204. Examples of events that may be generated by the event broadcast circuits 1102 and / or 1112 include, but are not limited to, the start and / or completion of read operations by the DMA engine 310, the start and / or completion of write operations by the DMA engine 310, and the start and / or end of transactions performed by the stream switch 306. The event broadcast circuit mechanisms 1102 and 1112 can be programmed by the control register 1106 to detect selected events from exemplary events and forward such selected events to specific destinations, such as other event broadcast circuit mechanisms and / or CDT circuit 1104.
[0154] In another exemplary implementation, memory tile 204 may contain only event broadcast circuitry 1102 (omitting event broadcast circuitry 1112). If event broadcast circuitry 1112 is omitted and event broadcast circuitry 1102 connects to other tiles above and / or below (e.g., interface tile 208 and / or DPE tile 202) that contain two instances of event broadcast circuitry, event broadcast circuitry 1102 may include additional ports to connect to both instances of event broadcast circuitry in such tiles above and / or below. Furthermore, event broadcast circuitry 1102 connects to event broadcast circuitry in tiles adjacent to the right and left of memory tile 204.
[0155] The CDT circuit 1104 is capable of performing operations similar to other CDT circuits described herein. For example, the CDT circuit 1104 is capable of performing control, debug, and trace operations within the memory tile 204. With regard to debugging, each of the registers located within the memory tile 204 is mapped onto a memory map accessible via the MM switch 308. The CDT circuit 1104 may include circuits such as trace hardware, a trace buffer, a performance counter, and / or stall logic. The trace hardware of the CDT circuit 1104 is capable of collecting trace data. The trace buffer of the CDT circuit 1104 is capable of buffering trace data. The CDT circuit 1104 is also capable of outputting trace data to the stream switch 306.
[0156] In an exemplary implementation, the CDT circuit 1104 can packetize event data received from the event broadcast circuit mechanism 1102 and forward the packetized event data to the stream switch 306. Any trace data generated by the CDT 1104 can also be packetized before forwarding such data to the stream switch 306. The stream switch 306 can forward the packetized event data to other destinations via other connected stream switches.
[0157] Configuration data can be loaded into control register 1106 via MM switch 308. The configuration data loaded into control register 1106 instructs the operation of memory tile 204. For example, the configuration data loaded into control register 1106 can be used to configure which events are generated by event broadcast circuits 1102, 1112 and / or passed to other destinations, logical connections established by stream switch 306 with other stream switches, RAM of memory tiles accessible by DMA engine 310, and / or debug and trace modes implemented by CDT circuit 1104.
[0158] By loading appropriate configuration data into the control register 1106, different memory tiles 204 can be interconnected (e.g., logically) using the stream switch 306 and / or interconnected with other tiles in the DPE array 102, e.g., DPE tile 202. Thus, based on the configuration data, the DMA engine 310 can initiate access to RAM 312 in the DPE array 102 and / or RAM in adjacent left and / or right memory in order to perform DMA transfers requested by other tiles in the DPE array 102.
[0159] One or more DPE tiles 202 can initiate read and / or write operations to a memory tile 204 or a group of memory tiles 204 that form a composite memory (e.g., memory tiles 204 configured to access each other's RAM 312 using a DMA engine 310). The composite memory is formed from two or more memory tiles 204, and a DMA engine 310 in such a memory tile 204 can read and / or write to the RAM 312 in at least one other memory tile 204. In an exemplary implementation, the DPE array 102 may be configured to form multiple clusters, each cluster comprising one or more DPE tiles 202 and optionally one or more memory tiles 204. Tiles within the same cluster of the DPE array 102 may communicate with each other to implement a particular application. The clusters can operate independently of each other, provided that each different cluster is capable of running a cluster-specific application (or a different instance of an application running in another cluster). The DPE tiles 202 and memory tiles 204 of a particular cluster may be logically isolated from each other.
[0160] The DPE tile 202 can perform its operations more efficiently by providing a pool of memory in the form of memory tiles 204 configured to work together as a single larger memory, or in the form of multiple memory tiles 204. If the memory modules 304 contained in the DPE tile 202 are not large enough for the efficient execution of the application, the DPE tile 202 may access a larger pool of memory within the DPE array 102 from one or more memory tiles 204 without having to access memory located outside the DPE array 102. For example, access to external memory can be avoided, thereby increasing the speed and bandwidth of the DPE array 102.
[0161] Figure 11B illustrates an exemplary implementation of memory tile 204. The example in Figure 11B shows an exemplary read channel for memory tile 204. In the example in Figure 11B, certain components of memory tile 204 are omitted to better illustrate the operation of the read channel. In the example in Figure 11B, RAM 312 includes multiple memory banks. For illustrative purposes, RAM 312 includes 16 memory banks 0 to 15. Each memory bank has associated arbitration circuits with multiple read and write interfaces.
[0162] In an exemplary implementation, RAM312 may be 512KB of SRAM. Each of the 16 physical memory banks may be 128 bits wide and 2k words deep. RAM312 may be configured to provide ECC memory protection. Each of memory banks 0-15 may be single-port and may support one read operation or one write operation per clock cycle. Each of the arbitration circuits 0-15 for memory banks 0-15 may include nine read interfaces and nine write interfaces. Each read interface and write interface may be 128 bits wide. An example of the read interface of the arbitration circuit is illustrated in Figure 11B.
[0163] The DMA engine 310 includes multiple different channels and switching circuit mechanisms 1114. In this example, the DMA engine 310 includes multiple memory-mapped-to-stream (MM2S) channels 0-5, multiple stream-to-memory-mapped (S2MM) channels 0-5, and an MM interface 1110. The MM2S and S2MM channels are connected to a stream switch 306. Each MM2S channel is capable of performing read operations. Each S2MM channel is capable of performing write operations.
[0164] In exemplary implementations, the MM2S channel, S2MM channel, and MM interface 1110 may conform to the Advanced Microcontroller Bus Architecture (AMBA) eXtensible Interface (AXI) bus protocol. The AMBA AXI bus is an embedded microcontroller bus interface for use in establishing on-chip connectivity between circuit blocks and / or systems. AMBA AXI, or "AXI," is provided as an exemplary example of an interface and does not limit the configurations of the present invention described herein. Other suitable interconnection architectures and / or bus architectures may be used instead of AXI.
[0165] MM2S channels 0-3 are connected to arbitration circuits 0-15 via switching circuit mechanism 1114, and are therefore capable of reading data from any one or more of memory banks 0-15. Similarly, via switching circuit mechanism 1114, MM2S channels 0-3 are connected to arbitration circuits 0-15 for memory banks located in adjacent memory tiles to the left and right in the example of Figure 11B. Therefore, MM2S channels 0-3 are capable of reading data from any one or more of memory banks 0-15 in adjacent memory tiles to the left and right in the example of Figure 11B. MMS2 channels 4-5 are connected to arbitration banks 0-15 via switching circuit mechanism 1114 in the same memory tile and are only capable of reading data from memory banks 0-15 in the same memory tile. Using the architecture shown in Figure 11B, the DMA engine 310 can initiate a read from memory banks 0-15 in the same memory tile and direct the read to memory banks 0-15 in adjacent memory tiles to the left and / or right.
[0166] MM2S channels 0-5 can initiate reading from a memory bank coupled to one of the MM2S channels 0-5. Data read from a memory bank using an MM2S channel is read as memory-mapped data, converted from memory-mapped data to stream data by each MM2S channel, and sent out as stream data. In one embodiment, the operation of MM2S channels 0-5 can be controlled by generating buffer descriptors and storing them in a buffer descriptor register file (not shown) accessible by MM2S channels 0-5. For example, the DMA engine 310 can support 48 buffer descriptors that can be shared across all DMA channels, including MM2S channels 0-5 and S2MM channels 0-5.
[0167] In one embodiment, each MM2S channel includes a 32-bit stream interface and a 128-bit memory-mapped interface for accessing the memory bank. Each of MM2S channels 0-5 supports features such as address generation, support for 40-tensor address generation, insertion of zero-padding into the data stream, and the ability to store incremental address offset buffer descriptor calls. To support access to memory banks of adjacent memory tiles, MM2S channels 0-3 are capable of accessing locks in adjacent left and / or right memory tiles. Each of MM2S channels 0-5 may further support task queues and task completion tokens, task iteration counts, and data compression.
[0168] The MM interface 1110 includes read ports coupled to arbitration circuits 0-15, and therefore allows reading from any one or more of memory banks 0-15. The MM interface 1110 is further connected to an MM switch 308, thereby allowing any master circuit connected to the MM switch 308 to read from memory banks 0-15 located within the same memory tile 204 as the MM interface 1110. Through the MM interface 1110, a master can initialize memory banks 0-15.
[0169] Figure 11C illustrates another exemplary implementation of the memory tile 204. The example in Figure 11C illustrates an exemplary write channel (e.g., an S2MM channel) for the memory tile 204. In the example in Figure 11B, certain components of the memory tile 204 are omitted to better illustrate the operation of the read channel.
[0170] S2MM channels 0-3 are connected to arbitration circuits 0-15 via switching circuit mechanism 1116, and are therefore capable of writing data to any one or more of memory banks 0-15. Similarly, via switching circuit mechanism 1116, S2MM channels 0-3 are connected to arbitration circuits 0-15 for memory banks located in adjacent memory tiles to the left and right in the example of Figure 11C. Therefore, S2MM channels 0-3 are capable of writing data to any one or more of memory banks 0-15 in adjacent memory tiles to the left and right in the example of Figure 11C. S2MM channels 4-5 are connected to the arbitration circuits for memory banks 0-15 via switching circuit mechanism 1116 within the same memory tile, and are only capable of writing data to memory banks 0-15 within the same memory tile. Using the architecture shown in Figure 11C, the DMA engine 310 is capable of writing data to memory banks 0-15 within the same memory tile and to memory banks 0-15 in adjacent memory tiles to the left and / or right.
[0171] S2MM channels 0-5 can initiate writing to memory banks coupled to one of each of the S2MM channels. The data to be written may be received as a data stream via the stream switch 306. The data to be written is converted from stream data to memory-mapped data by each S2MM channel and written to the appropriate memory bank. Any acknowledgment may be sent as stream data. In one embodiment, the operation of S2MM channels 0-5 may be controlled by generating and storing buffer descriptors in a buffer descriptor register file (not shown) accessible by the S2MM channels, as described in relation to Figure 11B.
[0172] In one embodiment, each S2MM channel includes a 32-bit stream interface and a 128-bit memory-mapped interface for accessing memory banks 0-15. Each of S2MM channels 0-5 supports features such as address generation, support for 40-tensor address generation, and the ability to store incremental address offset buffer descriptor calls. To support access to memory banks of adjacent memory tiles, S2MM channels 0-3 are capable of accessing locks in memory tiles adjacent to the left and / or right. Each of MM2S channels 0-5 may further support task queues and task completion tokens, task iteration counts, and data decompression. In one embodiment, S2MM channels 0-5 may also support out-of-order packet forwarding.
[0173] Referring to the exemplary circuit architectures of Figures 11A to 11C in conjunction with the example in Figure 2B, a composite memory may be formed from one or more memory tiles 204-1, 204-2, 204-3, 204-4, and / or 204-5. That is, the DMA engine of each memory tile 204 in a row in Figure 2B can access the RAM in that memory tile and the RAM of the adjacent left and / or adjacent right memory tiles, so that a larger memory can be formed, for example, from two or three memory tiles. The composite memory may be accessed by a specific DPE 202 via a stream switch of the DPE array 102.
[0174] In exemplary implementations where memory tiles are not aligned in the same row but in the same column, it should be understood that the DMA engine functions described herein in relation to accessing RAM for memory tiles adjacent to the left and right may also be implemented for memory tiles adjacent to the above and below. That is, the DMA engine may form composite memory in columns rather than rows.
[0175] Figures 12A and 12B illustrate exemplary circuit architectures for isolating physical memory for multiple accelerators. IC100 can simultaneously contain two or more different accelerators. Each accelerator may be implemented in one or more of the various systems described herein. For example, an accelerator may be implemented as one or more tiles of a DPE array 102, as a circuit implemented in PL104, as a hardwired circuit block 112, etc. The accelerator can perform functions such as video decoding, error correction, encryption / decryption, etc. Architecture 1200, as implemented in IC100, can provide isolation for accelerators operating simultaneously within IC100. Architecture 1200 can prevent a first accelerator from accessing memory allocated to a second different accelerator running concurrently with the first accelerator within IC100.
[0176] In the example of Figure 12A, architecture 1200 includes accelerators 1204 and 1206. Accelerator 1204 may be implemented in the DPE array 102, in the PL 104, or as an enhanced circuit block 112 (e.g., ASIC) using one or more DPE tiles 202 and / or 0, and one or more memory tiles 204 within IC 100. Similarly, accelerator 1206 may be implemented in the DPE array 102, in the PL 104, or as an enhanced circuit block 112 (e.g., ASIC) using one or more DPE tiles 202 and / or 0, and one or more memory tiles 204 within IC 100.
[0177] Accelerator 1204 operates simultaneously within accelerator 1206 in IC 100. While it is shown that two accelerators operate simultaneously, it should be understood that in other exemplary implementations, three or more accelerators may operate simultaneously within IC 100. Accelerator 1204 is coupled to physical memory protection (PMP) circuit 1208. Accelerator 1206 is coupled to PMP 1210. In the example in Figure 12A, each of the PMP circuits 1208 and 1210 is connected to NoC 108. NoC 108 is connected to an optional memory protection circuit (MPC) 1212.
[0178] In one embodiment, memory 1214 may be external memory, such as DDR or other RAM outside of IC 100. In another embodiment, memory 1214 may be high-bandwidth memory (HBM) located outside of IC 100 or implemented as part of IC 100. When included in IC 100, memory 1214 may be implemented on the same die as accelerators 1204 and 1206 or on a different die of IC 100. IC 100 may access memory 1214 using a memory controller (not shown). In another embodiment, memory 1214 may be internal memory of IC 100. In any case, memory 1214 includes a memory area 1216 allocated to accelerator 1204 and a memory area 1218 allocated to accelerator 1206.
[0179] Accelerators 1204 and 1206 can be isolated within IC 100 in that the two accelerators operate independently of each other and do not share data. However, maintaining isolation becomes more difficult if accelerators 1204 and 1206 access memory 1214. If accelerator 1204 is allowed to access memory area 1218, or if accelerator 1206 is allowed to access memory area 1216, one or both of accelerators 1204 and 1206 may fail. Such failures could also compromise the security and functionality of IC 100 as a whole.
[0180] In some implementations, memory protection is implemented using a centralized approach. In a centralized approach, the MPC is implemented at the transaction destination. For example, the MPC may be implemented in or within a memory controller that accesses external memory, or in the memory being accessed internally. The MPC discards read and / or write transactions directed to unauthorized memory. In the centralized example, PMP circuits 1208 and 1210 are not included, and memory protection is implemented only through an MPC located at the transaction destination (e.g., memory).
[0181] For illustrative purposes, transactions from accelerator 1204 are permitted only to access memory regions allocated to accelerator 1204, such as memory region 1216. Similarly, transactions from accelerator 1206 are permitted only to access memory regions allocated to accelerator 1206, such as memory region 1216. MPC1212 can enforce these restrictions only by allowing transactions with appropriate identifiers for the target memory regions to pass through.
[0182] For example, when each master initiates a transaction to memory 1214, it may include a secure master identifier (SMID) within the transaction. The SMID uniquely identifies the master issuing the transaction. In the example in Figure 12A, accelerators 1204 and 1206 are each masters. Accelerator 1204 may be assigned a first unique SMID, and accelerator 1206 may be assigned a second unique SMID (e.g., different from the first unique SMID). Each transaction from accelerator 1204 or 1206 includes the master's SMID, the operation to be performed (read or write), and the memory address to be accessed. In some embodiments, each accelerator may be assigned multiple SMIDs. Furthermore, an SMID assigned to a given accelerator is not shared or common with any other accelerator.
[0183] The MPC1212 is capable of storing data structures in its memory. These data structures may be tables specifying a list of SMIDs and memory ranges of memory 1214 that each master (SMID) is permitted to access. The MPC1212 can receive a transaction, extract the SMID from it, and find a matching SMID within the stored table. The MPC1212 further compares the transaction address to a range of allowed addresses in the table to ensure that the master that initiated the transaction is permitted to access the addresses specified within the transaction.
[0184] In response to determining that the master is authorized to access the address specified in the transaction, the MPC1212 authorizes the transaction. In response to determining that the master is not authorized to access the address specified in the transaction, the MPC1212 discards the transaction. As described above, in the case of centralized physical memory protection, the MPC1212 is used, and PMP circuits 1208 and 1210 are omitted.
[0185] Centralized memory protection implemented using a single circuit such as the MPC1212 without a PMP circuit presents several different problems. One problem is the number of entries that can be stored in the table within the MPC1212. The table has a limited size but must accommodate each master (and / or master's SMID) in IC100 that is granted access to memory 1214. Often, the amount of memory available to implement such a table within the MPC1212 is limited, which in turn limits the number of entries that can be included in the table.
[0186] Another problem is that when a transaction is rejected by MPC1212, it has already traversed various paths through IC100, consuming bandwidth. In the example in Figure 12A, the transaction has already traversed NoC108. If an accelerator is a "bad actor," it can intentionally issue transactions that will be rejected by MPC1212, thereby flooding NoC108 with invalid transactions. This means that one accelerator can degrade the performance of another accelerator and / or IC100 by consuming bandwidth on resources such as NoC108 that would otherwise be available to a different accelerator.
[0187] According to the configuration of the present invention as described herein, one or more PMP circuits, such as PMP circuits 1208, 1210, may be included. PMP circuits 1208, 1210 may be distributed and implemented near the source of a transaction rather than the destination of the transaction. For example, PMP circuits 1208, 1210 are local to the source of a transaction (e.g., accelerators 1204, 1206, respectively) in that they may be implemented within IC 100 within a predetermined wiring distance of their respective transaction sources. PMP circuits 1208, 1210 can discard a transaction under certain circumstances before the transaction consumes bandwidth on the signal path of IC 100. Referring to the example in Figure 12A, PMP circuit 1208 can discard an invalid transaction from accelerator 1204 before such a transaction enters or traverses NoC 108. Similarly, PMP1210 can discard invalid transactions from accelerator 1206 before such transactions enter NoC108.
[0188] In an exemplary implementation, the PMP circuit may be implemented within the interface tile 208 of the SoC interface 206. More specifically, each DMA engine 712 in the interface tile 208 can include the PMP circuit. By including the PMP circuit in the interface tile 208, invalid transactions originating from the DPE array 102 can be stopped at the source. Furthermore, the distributed PMP circuits can operate in parallel and simultaneously.
[0189] In an exemplary implementation in which accelerators 1204 and 1206 are implemented in the DPE array 102, the SMID may be formed from multiple bits. In one embodiment, the most significant bit (MSB) of the SMID may be obtained from the DPE GCS register 738 (e.g., the security bit described herein). Each SMID may be 8 bits, and the DPE GCS register 738 may provide four MSBs of the SMID. Any accelerator implemented in the DPE array 102 will have a common bit as the MSB of the SMID with any other accelerator implemented in the DPE array 102. The least significant bits, for example, four LSBs, may be obtained from a buffer descriptor received by the DMA engine 712 for the transaction. Thus, for each transaction originating from the DPE array 102, the DMA engine 712 can generate the SMID by concatenating the four MSBs from the DPE GCS register 738 with the four LSBs obtained from the buffer descriptor for the transaction.
[0190] Each PMP circuit may include memory configured to store a data structure specifying permitted SMIDs and a corresponding range of addresses in memory 1214 that transactions with the specified SMIDs are permitted to access. In one exemplary implementation, each PMP circuit stores a table of permitted SMIDs and their associated addresses or ranges of addresses in memory 1214 that can be accessed by transactions with the associated SMIDs.
[0191] For example, PMP circuit 1208 may include a table containing the SMID used by accelerator 1204 and the address or range of addresses in memory 1214 allocated to accelerator 1204. Similarly, PMP circuit 1210 may include a table containing the SMID used by accelerator 1206 and the address or range of addresses in memory 1214 allocated to accelerator 1206. By distributing protection and tables among multiple different circuits at or near the transaction originating point, the tables contained in each of the PMP circuits 1208, 1210 may be smaller than when implemented at the destination (e.g., in MPC 1212) using a centralized protection technique. For example, if an accelerator is allocated to a specific tile of the DPE array 102 and assigned to a specific interface tile 208, the table stored in PMP circuit 1208 only needs to contain data for accelerator 1204 and does not need to contain data corresponding to accelerator 1206. Similarly, the table stored in the PMP circuit 1210 only needs to contain data for accelerator 1206 and does not need to contain data corresponding to accelerator 1204.
[0192] For example, a table stored in each PMP circuit may contain multiple entries. Each entry may include the SMID, the starting physical address of the range (range_start), the number of bytes in the range (range_length), and whether the range can be read and / or written (access_types).
[0193] In another exemplary implementation, the data structure stored by each PMP circuit may be a bitmap covering memory 1214. For example, each bit in the bitmap may represent a specific page of memory 1214 and indicate whether that page is accessible by the accelerator processed by the PMP circuit. Rather than indicating the address range of memory 1214, the bitmap can be used to check which pages of memory 1214 are accessible to a given DPE tile 202 or accelerator (based on SMID).
[0194] The data structure of the PMP circuit (e.g., a table or bitmap) can be managed by the host computer's operating system or a guest operating system when virtualization is used on the host computer. The valid physical address range can be efficiently programmed by the operating system or a guest operating system via an MM switch. For example, using an MM switch, the data structure of the PMP circuit can be updated as different accelerators are implemented in the IC100 system over time.
[0195] Since each DMA engine 712 may include a PMP circuit, the PMP circuit utilizes the physical address of memory 1214 rather than a virtual address. The physical address of memory 1214 can be known, for example, by each respective accelerator 1204, 1206. By using physical addresses instead of virtual addresses for the purpose of checking transaction validity, address translation is not required. The distributed nature of the described architecture effectively removes the limitations on the number of accelerators that can run concurrently on IC100 due to data structure size limitations. The distributed architecture also provides greater flexibility to accelerators by providing an increased number of physical address ranges per accelerator.
[0196] When the accelerator is implemented within the DPE array 102 using the SMID generation technique described, the PMP circuit can adjust specific addresses in memory 1214 that can be accessed by DPE tile 202 and / or memory tile 204. Each PMP circuit can compare the SMID and target memory address for a given transaction with a list of acceptable SMIDs and acceptable memory addresses stored therein. In response to determining that the transaction's SMID is on the list of acceptable SMIDs and that the memory address accessed by the transaction is permitted for the transaction's SMID, the PMP circuit allows the transaction to pass. The transaction is determined to be valid. If the transaction's SMID does not match an acceptable SMID, or if the address accessed by the transaction does not match an permitted address, the PMP circuit invalidates and discards the transaction.
[0197] While it is shown that two accelerators operate simultaneously, it should be understood that in other examples, three or more accelerators may operate simultaneously within IC100. A PMP circuit can be assigned to each accelerator. Each PMP circuit, in turn, can process transactions from one or more accelerators.
[0198] Figure 12B illustrates exemplary implementations of PMP circuits, such as PMP circuits 1208 and / or 1210. In the example of Figure 12B, PMP circuits 1208 and 1210 include a check circuit 1220. In the example of Figure 12B, the check circuit 1220 receives data from a buffer descriptor received by the DMA engine. As shown, the check circuit 1220 receives the SMID, the starting physical address of the transaction being checked, the length of the DMA transfer (e.g., the amount of data transferred by the transaction), and whether the transaction is a read or a write.
[0199] A check circuit may be coupled to memory storing data structure 1222. In one embodiment, data structure 1222 is a table, as described in relation to Figure 12A. The check circuit 1220 can index data structure 1222 based on entries arranged using SMID, the type of access requested (e.g., read or write), the starting physical address for access, and the length of the transaction, and calculate whether each byte of a DMA transfer involving memory 1214 is permitted. Each byte transferred to and from memory 1214 must be within the permitted range in the entries arranged using SMID and permitted for the type of transaction being performed (read or write). In response to a determination that a given transaction is valid, for example, that each byte is valid, the check circuit 1220 can assert a valid address signal (e.g., logical high) indicating a valid transaction. The transaction is permitted to pass as valid in response to the valid address signal indicating a valid address. In response to a decision that a given transaction is invalid, the check circuit 1220 may deassert a valid address signal indicating that the transaction is invalid. The transaction may be discarded.
[0200] If the data structure 1222 is a bitmap as described in relation to Figure 12A, the data structure 1222 may include separate bitmaps corresponding to read transactions and write transactions. The first bitmap may be used for write transactions, and the second bitmap may be used for read transactions. In one embodiment, each bitmap may be stored in a different internal memory, such as SRAM, coupled to the check circuit 1220.
[0201] The check circuit 1220 can determine whether each transaction is permitted to access each page from memory 1214 required for the DMA transfer. Furthermore, the check circuit 1220 can determine whether each page required for the DMA transfer is accessible for a specified transaction type. The check circuit 1220 can determine each page of memory 1214 included in the DMA transfer and verify that the application (originating master) is permitted to access such pages for a given transaction type. In response to a determination that a given transaction is valid, the check circuit 1220 can assert a valid address signal indicating a valid transaction. The transaction is permitted to pass as valid in response to the valid address signal indicating a valid address. In response to a determination that a given transaction is invalid, the check circuit 1220 can deassert a valid address signal indicating that the transaction is invalid. The transaction may be discarded.
[0202] Exemplary implementations of accelerators 1204 and 1206 are described in relation to the DPE array 102, but in other exemplary implementations, the accelerators may be implemented in different systems and / or combinations of systems of IC 100. Thus, the PMP circuitry may be implemented in a distributed manner at various locations on IC 100 that are local to the transaction source. For example, the PMP circuitry may be implemented in the NMU 402 of NoC 108. The NMU 402 is described in relation to Figure 4. Each NMU 402 may contain one PMP circuitry. By including the PMP circuitry in the NMU 402, it becomes possible to check the validity of transactions local to the originating point rather than the destination point, thereby avoiding a situation in which the accelerator floods the path of IC 100 (e.g., NoC 108) with invalid transactions. Such transactions can be discarded before the transaction traverses NoC 108. Such PMP circuit implementations can be used in combination with accelerators implemented in DPE arrays 102 and PL104, and / or as hardwired circuit blocks 112.
[0203] In the example in Figure 12, the MPC1212 may be included as an option. For example, if a PMP circuit cannot be implemented for each master in IC100, the MPC1212 may be included to protect memory 1214. In other exemplary implementations where enough PMP circuits are implemented in IC100 so that each accelerator is allocated to a PMP circuit, the MPC1212 may be omitted.
[0204] A PMP circuit, such as the one described in relation to Figure 12, can be incorporated into any of the various circuits described herein, either at or near the point of origin of a transaction, to check the validity of such transactions passing through it. Such a circuit, whether an interface circuit or a DMA engine, may be configured to pass on or drop received transactions based on the state of the valid address indicator signal output from the PMP circuit.
[0205] The inclusion of a PMP circuit not only protects memory such as memory 1214 or RAM from improper access by the accelerator, but also protects other types of memory within IC100 from improper access. For example, the available memory of IC100 may include internal memory (RAM), configuration registers and / or control registers, on-chip memory of PS106, on-chip memory of PMC110, and / or external memory. Each of the above-mentioned memories conforms to a unified address space for IC100. The PMP circuit also further protects IC100 by preventing the accelerator from improperly accessing any of the described different types of memory other than RAM or application memory by checking the validity of transactions as described.
[0206] Figures 13A and 13B illustrate exemplary circuit architectures for performing virtual address translation. In the example of Figure 13A, architecture 1300 includes accelerators 1304 and 1306. Accelerators 1304 and 1306 may operate simultaneously in IC 100. Accelerators 1304 and 1306 may be implemented as described primarily in relation to Figure 12, in that accelerators 1304 and 1306 may be implemented in any of the various systems of IC 100 described herein. In the example of Figure 13, accelerators 1304 and 1306 are virtual accelerators in that each utilizes a virtual address rather than a physical address.
[0207] Accelerator 1304 is coupled to memory management unit (MMU) 1308. Accelerator 1306 is coupled to MMU 1310. In the example in Figure 13A, MMUs 1308 and 1310 are each connected to NoC 108. NoC 108 is connected to an optional MPC 1212. Memory 1214 includes memory area 1316 allocated to accelerator 1304 and memory area 1318 allocated to accelerator 1306.
[0208] Figure 13A illustrates an exemplary implementation where MMU functionality is distributed or decentralized across multiple different MMU circuits, rather than using a centralized MMU. In conventional systems, a single centralized MMU is implemented as part of the processor system and serves the entire IC. The MMU assists with requests to translate virtual memory addresses to physical memory addresses (address translation requests). In the example in Figure 13A, for accelerators 1304 and 1306 to access their respective allocated regions 1316 and 1318 of memory 1214, each application must first request the translation of its virtual address to a physical address. As the number of accelerators in the IC increases, so does the number of address translation requests to the centralized MMU. Therefore, when many different circuits require address translation functionality, accessing a centralized MMU can add latency to each transaction and create a bottleneck that limits data throughput within the IC.
[0209] In the example shown in Figure 13A, the MMU can be added to interface tile 208 of the SoC interface 206. The distributed MMUs within interface tile 208 can operate simultaneously and in parallel. Including multiple distributed MMUs within IC 100 can achieve several different advantages. In one embodiment, bottlenecks that limit latency and data throughput when accessing a centralized MMU can be avoided. Each interface tile 208 on which an MMU is implemented is capable of translating virtual addresses to physical addresses.
[0210] In another embodiment, a centralized MMU must cover the entire dataset accessed by all accelerators implemented within IC100. As a result, the centralized MMU is larger in size to store data structures large enough to perform address translation for all accelerators. Decentralized MMUs can be smaller in size than centralized MMU implementations, as each MMU only needs to translate a limited set of virtual addresses. For example, each MMU may translate virtual addresses for a limited number of accelerators (e.g., a subset of accelerators in IC100 or a single accelerator). In another example, each MMU may contain only the dataset necessary for address translation that provides assistance to the accelerators or subsets of accelerators using a particular MMU. For example, an MMU located within interface tile 208 may contain only the dataset necessary for address translation that provides assistance to the accelerators or subsets of accelerators in the DPE array 102 using the particular interface tile 208 in which the MMU is located.
[0211] In another aspect, using decentralized MMUs allocated to specific accelerators allows each MMU to use a single page size (e.g., the page size supported by the accelerator allocated to each MMU), thereby reducing the complexity and size of the MMUs. A centralized MMU must support different page sizes, such as 4KB and 16KB, as required by the CPU. If a decentralized MMU supports larger page sizes, fewer entries are required in the address translation data structures stored in the MMU. Fewer entries are needed to cover the same amount of memory compared to an MMU that must also support smaller page sizes. This feature further reduces the size of distributed MMUs.
[0212] In the example in Figure 13, MMUs 1308 and 1310 can be local to accelerators 1304 and 1306, respectively, in that they can be implemented within IC 100 within a predetermined wire distance of their respective transaction sources. In addition, since address translation can be performed at or near the transaction originating point, the address used by NoC 108 is a verified physical address. Furthermore, additional circuitry required to create a data path between accelerators requiring address translation and a centralized MMU that may be implemented within PS 106 can be omitted from IC 100.
[0213] Figure 13B illustrates an exemplary implementation of a decentralized MMU, such as the MMU 1308. The exemplary architecture in Figure 13B can also be used to implement the MMU 1310 or another decentralized MMU within IC 100. In the example in Figure 13B, the MMU 1308 includes a translation circuit 1320 and a fill circuit 1322. In the example in Figure 13B, the translation circuit 1320 receives data from a buffer descriptor received by a DMA engine, such as the DMA engine 712. As shown, the translation circuit 1320 receives the starting virtual address of the transaction, the length of the DMA transfer (e.g., the amount of data transferred by the transaction), and whether the transaction is a read or a write. In response to receiving the data, the translation circuit 1320 submits a request to the fill circuit 1322 for a physical address translation of the received virtual address.
[0214] The fill circuit 1322 may contain associative data structures, such as lookup tables, which can be used to perform translations. The fill circuit 1322 searches the data structures contained within it for entries that match the request received from the translation circuit 1320. For example, the fill circuit 1322 may search the data structures within it for a virtual address corresponding to a starting virtual address. In response to determining a matching entry (e.g., a hit) for the received virtual address, the fill circuit 1322 returns the physical address mapped to the received virtual address to the translation circuit 1320. In response to determining that the data structures do not contain an entry that matches the received virtual address (e.g., a miss), the fill circuit 1322 may request further data from the page table in memory 1214 to update the data structures contained within it. For example, the fill circuit 1322 may send a physical address to fetch data from memory 1214 to refresh the data structures contained within it. The fill circuit 1322 can continue searching for updated data to find an entry that matches the received starting virtual address, and can also continue fetching data from memory 1214 to find a match with the received virtual address.
[0215] The conversion circuit 1320 can output a physical address in response to receiving the physical address converted from the virtual address from the fill circuit 1322. The conversion circuit 1320 can further assert a valid address signal indicating that the output physical address is valid (e.g., logical high).
[0216] In one or more exemplary implementations, the fill circuit 1322 may limit the number of times data is retrieved from the page table. In response to a miss after an enumerated number of data retrievals from the page table, the fill circuit 1322 may return an invalid physical address. In response, the translation circuit 1320 may output a signal indicating that the address output from it is invalid (e.g., deasserting the valid address indicator or outputting a logic row).
[0217] In the example in Figure 13, an MPC 1212 may still be included to check that each transaction received to access memory 1214 is permitted to access the intended region of memory. In another exemplary implementation, a decentralized MMU may be included in NoC 108. For example, an MMU 402, as described in relation to Figure 4, may be implemented to include an MMU. Each NMU 402 may contain one MMU. Including an MMU in an MMU 402 also supports a decentralized implementation of the MMU within IC 100. Furthermore, in implementations where the MMU is included on the boundary of NoC 108, the MMU may be used for an accelerator implemented as a hardwired circuit block and / or implemented within PL 104. A distributed MMU, as described in relation to Figure 13, may be incorporated into any of the various circuits described herein that may require address translation. Such circuits, whether interface circuits or DMA engines, may be adapted to use a distributed MMU as described herein.
[0218] Figures 14A to 14C illustrate exemplary circuit architectures for providing secure register access to a virtualized accelerator. The example in Figure 14A illustrates an implementation of a DPE array 102 having an SoC interface 206 including an interface tile 208. The DPE array 102 also includes a tile 1404 which may include any combination of DPE tiles 202 and / or memory tiles 204. The SoC interface 206 is coupled to a NoC interface 726 of the NoC 108, which includes an NPI 410.
[0219] In the example in Figure 14A, each interface tile 208 includes a secure access circuit 1402. In one embodiment, the secure access circuit 1402 may be enabled based on a value written to a secure access register, which may be located within the DPE GCS register 738. The value may be specified entirely or partially by one or more security bits. The value stored in the secure access register determines whether the secure access circuit 1402 is enabled to implement secure transactions in the DPE array 102. For example, when enabled, each secure access circuit 1402 can determine whether an incoming memory-mapped write transaction meets certain security criteria. If not enabled, the secure access circuit 1402 does not check memory-mapped write transactions entering the interface tile 208 against the criteria. The value written to the secure access register may also enable writing to a write enable register 1406 located within the NPI 410.
[0220] In an exemplary implementation, each column of tile 1404 has a unique column ID hardwired to IC 100. For example, the unique column ID may be specified using an e-fuse or by connecting the circuit node to VCC or ground. Since the column ID of each column of tile 1404 is implemented in the silicon within IC 100, the column ID cannot be spoofed or altered. When a secure transaction is enabled based on a value written to the secure access register, the write enable register 1406 may be written to by privileged software running in a host computer via a communication bus such as the PCIe bus, PS106, or PMC110, with data facilitating secure access to one or more columns of tile 1404.
[0221] The secure access circuit 1402 can perform a comparison between the data written to the write enable register 1406 and the hardwired column ID. In response to determining that the data matches the column ID of the column in tile 1404, the column's secure access circuit 1402 allows the memory-mapped transaction to be passed to tile 1404 in that column. In response to determining that the data does not match the column ID, the secure access circuit 1402 does not allow the memory-mapped transaction to be passed to tile 1404 in the column.
[0222] In one embodiment, the secure access circuit 1402 may be implemented within the bridge circuit 718 of the interface tile 208. In another embodiment, the secure access circuit 1402 may be implemented as a separate or independent circuit block in the data path between the NoC 108 and the bridge circuit 718 within each interface tile 208.
[0223] For illustrative purposes, consider an example in which the first accelerator is implemented using tiles 1404 of the DPE array 102 in columns 1, 2, and 3, and the second accelerator is implemented using tiles 1404 in columns 4 and 5. Each accelerator may be controlled by corresponding program code executed on the host computer or PS106. For example, the first accelerator may be controlled by first program code (e.g., a first application), and the second accelerator may be controlled by second program code (e.g., a second application). When secure transactions are enabled globally for the entire DPE array 102, both the first and second applications may write to control registers or memory attached to MM switches in the DPE array 102. This means that the first application may interfere with the second accelerator, and the second application may interfere with the first accelerator. Such an implementation omits, for example, the secure access circuit 1402. Furthermore, the write enable register 1406 may store only a single write enable bit, rather than being configured to store multiple bits of data corresponding to a column. In such an implementation, a malicious application could write to the registers and / or memory of another accelerator within the DPE array 102, thereby raising security concerns.
[0224] In the example in Figure 14A, secure transactions may be enabled and checked on a column-by-column basis for the DPE array 102. This means that applications running within a processor and / or host computer, such as the PS106, are prevented from writing data to tiles 1404 that implement accelerators not managed or controlled by the application. Applications running within a processor only need to write to the registers and / or memory of tiles 1404 (e.g., accelerators) belonging to their application via the MM switches of the DPE array 102. Applications cannot access the registers and / or memory of tiles 1404 belonging to different applications via the MM switches of the DPE array 102, as long as accelerators are divided and allocated to tiles 1404 in the DPE array 102 according to their columns. That is, a column of tiles 1404 may be used to implement only one accelerator at a time.
[0225] Figure 14B illustrates an exemplary implementation of the secure access circuit 1402 in Figure 14A. In the example of Figure 14B, the secure access circuit 1402 includes a comparator circuit 1408. As described, privileged software running on the host computer, PS106, and / or PMC110 writes a write enable column ID to the write enable register 1406 in the NPI410. For a write transaction directed to the DPE array 102, the NPI410 provides the write enable column ID from the write enable register 1406 to the secure access circuit 1402. The write enable column ID may be provided with or as part of the transaction. The comparator circuit 1408 compares the write enable column ID from the NPI410 with a column ID hardwired to IC100 for that column. In response to determining that the write enable column ID matches the column ID, the comparator circuit 1408 asserts a write enable signal (e.g., logical high). A write enable signal is provided to the various memory and / or control registers of tile 1404 in the column so that data from a memory-mapped write transaction can be written to the appropriate memory and / or control registers of the column of tile 1404. In response to determining that the write enable column ID does not match the column ID, the comparator circuit 1408 does not assert the write enable signal (e.g., generates a logical row). Therefore, the memory-mapped write transaction to the column of tile is discarded.
[0226] The value stored in the write enable register 1406 can be provided to each secure access circuit 1402 of the interface tile 208, so that only one of the columns 1-5 of tile 1404 can be written to at a time. To write to different columns of tile 1404, different write enable column IDs for different columns must be written to the write enable register 1406. Thus, in the example in Figure 14B, only one column of tile 1404 can be configured at a time. In another embodiment, a transaction may be routed to the appropriate column rather than attempting to write to two or more or all columns. The secure access circuit 1402 in that column can still perform the described checks to ensure that the entity attempting the write operation is authorized or permitted to do so.
[0227] Figure 14C illustrates another exemplary implementation of the secure access circuit 1402 in Figure 14A. In the example of Figure 14C, the secure access circuit 1402 includes a comparison circuit 1408 and a mask application circuit 1410. In the example of Figure 14C, privileged software running in the host computer, PS106, and / or PMC110 writes the write enable column ID mask and the write enable column ID value to the write enable register 1406 in the NPI410. For write transactions directed to the DPE array 102, the NPI410 provides the write enable column ID mask to the mask application circuit 1410 and the write enable column ID value comparison circuit 1408. In one embodiment, in the example of Figure 14C, the write enable register 1406 may be implemented as two separate registers, one storing the write enable column ID mask and the other storing the write enable column ID value.
[0228] The mask application circuit 1410 applies the write-enabled column ID mask to the hardwired column IDs to generate an output value. In one exemplary implementation, the write-enabled column ID mask may specify a range of columns. The range can specify the column ID of the first column of tile 1404 within the range and the column ID of the last column of tile 1404 within the range. The comparison circuit 1408 compares the output value from the mask application circuit 1410 with the write-enabled column ID value.
[0229] In response to determining that the write-enabled column ID value matches the output value from the mask application circuit 1410, the comparator circuit 1408 asserts a write-enabled signal (e.g., a logical high). The write-enabled signal is provided to the various memory and / or control registers of tile 1404 in the column so that data from the memory-mapped write transaction can be written to the appropriate memory and / or control registers of the column of tile 1404. If the write-enabled column ID value matches the output value from the mask application circuit 1410, the column of tile 1404 is determined to be within the range of columns specified by the write-enabled column ID mask. In response to determining that the write-enabled column ID value does not match the output value from the mask application circuit 1410, the comparator circuit 1408 does not generate a write-enabled signal (e.g., generates a logical low). Therefore, the memory-mapped write transaction to the column of the tile is discarded.
[0230] The example in Figure 14C allows one or more columns of tile 1404, for example, a range of columns, to be written simultaneously. This architecture allows one or more columns of tile 1404, for example, a range of columns, to be written based on a write-enabled column ID mask and a write-enabled column ID value stored in the write-enabled register 1406. Different write-enabled column ID masks and / or write-enabled column ID values must be written to the write-enabled register 1406 in order to write to different ranges of one or more columns of tile 1404.
[0231] The example in Figure 14 is described in relation to the DPE array 102. In one or more other exemplary implementations, the circuit architecture described in relation to Figure 14 may be implemented and / or used with any of the various other accelerator arrays in which accelerators are arranged in a grid where limited or restricted access to only specific columns or ranges of columns of accelerators is desired.
[0232] Figure 15 illustrates exemplary packet processing modes that may be implemented by one or more DMA engines in IC 100. The example in Figure 15 illustrates an exemplary implementation of DMA engine 310. The exemplary circuit architecture shown in Figure 15 may be incorporated into other DMA engines implemented in IC 100 to facilitate "out-of-order" packet processing modes (OOO modes). For illustrative purposes, the exemplary circuit architecture in Figure 15 may also be used or incorporated within the DMA engine of Figure 10 and / or the DMA engine 616 of DPE tile 202.
[0233] In one or more exemplary implementations described herein, the DMA engine 310 may be programmed to operate using one of several different packet processing modes. These packet processing modes may include "in-order" packet processing modes (IO modes) and OOO modes. In the example of Figure 15, the DMA engine 310 includes a data path circuitry 1502. In this example, the data path circuitry 1502 includes a stream-memory-mapped (S2MM) channel 1504. The S2MM channel 1504 may be implemented as one of the S2MM channels described in relation to Figure 11. In other exemplary implementations, the data path circuitry 1502 may include other S2MM channels, MM2S channels, and / or master memory-mapped interfaces, depending on the specific implementation of the DMA engine. The data path circuitry 1502 is coupled to a memory 1510. The memory 1510 may be implemented as RAM 312 in the same memory tile, or as RAM located in a different memory tile from the DMA engine 310.
[0234] In this example, the DMA engine 310 also includes a buffer descriptor register file 1506 and a buffer descriptor task queue 1508. The buffer descriptor register file 1506 may be implemented as memory, e.g., a buffer, configured to store one or more buffer descriptors. The buffer descriptor task queue 1508 may be implemented as memory, e.g., a buffer, configured to store a list of buffer descriptors. Each buffer descriptor in the buffer descriptor register file 1506 includes one or more parameters, such as the length of the data to be read or written, and the address to which the data is written or read. Thus, for Figure 15 and the S2MM channel 1504, each buffer descriptor specifies where the received data, e.g., a packet, should be written. The list stored in the buffer descriptor task queue 1508 specifies the order in which buffer descriptors from the buffer descriptor register file 1506 are processed or executed. In one embodiment, as part of the IO mode, the order in which buffer descriptors are executed is predetermined based on the list stored in the buffer descriptor task queue 1508.
[0235] In this example, each of tiles 1512-1 and 1512-2 is connected to bus 1514. Bus 1514 may be implemented or formed by streaming interconnects of each of the illustrated tiles 1512. For illustrative purposes, tiles 1512 may be DPE tiles. A DMA engine within each tile 1512 (e.g., DMA engine 616) may include a memory MM2S channel that transmits data to DMA engine 310. That is, DMA engine 310 receives data from each of tiles 1512-1 and 1512-2. As an example, each of tiles 1512-1 and 1512-2 may transmit data to be written to memory 1510.
[0236] In the example in Figure 15, tile 1512 writes data to bus 1514. In IO mode, data arrives at S2MM channel 1504 from tiles 1512-1 and 1512-2 in a predetermined known order. That is, as each of tiles 1512-1 and 1512-2 writes data to bus 1514 according to a predetermined schedule, the data arrives in a deterministic manner. Thus, the data arrives at S2MM channel 1504 in a predetermined known order expected by the DMA engine 310. In an exemplary implementation, each received packet may be processed based on a specific buffer descriptor. The order in which buffer descriptors are executed is determined by an ordered list stored in the buffer descriptor task queue 1508.
[0237] As an illustrative and non-limiting example, the buffer descriptor register file 1506 may contain buffer descriptors "BD1" and "BD2". BD1 specifies instructions for storing data received from tile 1512-1 (e.g., the length or amount of data and the destination address). BD2 specifies instructions for storing data from tile 1512-2. The buffer descriptor task queue 1508 specifies the order of the buffer descriptors. For example, if the predetermined order in which data is received from tile 1512 is packets from tile 1512-1, followed by packets from tile 1512-2, the list stored in the buffer descriptor task queue 1508 will be "BD1, BD2". If the predetermined order in which packets are received from tile 1512 is packets from tile 1512-2, followed by packets from tile 1512-1, the list stored in the buffer descriptor task queue 1508 will be "BD2, BD1".
[0238] In OOO mode, data from tile 1512 arrives in an arbitrary or unknown order. In OOO mode, each tile 1512 can attempt to place data on bus 1514, rather than tile 1512 placing data on bus 1514 according to a predetermined known schedule. Each tile 1512 includes, for example, an arbitration circuit that controls which tile is allowed to place data on bus 1514 at any given time. Thus, the specific order in which tiles 1512 place data on bus 1514 and such data arrives in S2MM channel 1504 is non-deterministic.
[0239] According to the configuration of the present invention described herein, as part of the OOO mode, packets from tile 1512 transmitted to the DMA engine 310 via bus 1514 are generated to include a header. The header includes a buffer descriptor identifier in a specified field. Rather than relying on the order of buffer descriptor execution specified in the buffer descriptor task queue 1508, the S2MM channel 1504 can extract the buffer descriptor identifier from a specified field in the header of the received packet. The S2MM channel 1504 uses the buffer descriptor identifier to determine which buffer descriptor to execute from the buffer descriptor register file 1506. For example, the buffer descriptor identifier may specify a particular buffer descriptor such as "BD0" or "BD1", or it may specify an index that can be used to find the correct buffer descriptor from the buffer descriptor register file 1506. The S2MM channel 1504 then processes the payload of the received packet by executing the buffer descriptor specified by the buffer descriptor identifier from the header of the packet itself. By including a buffer descriptor identifier used for processing packets within the header of each packet, the DMA engine 310 is able to process packets received in a non-deterministic order.
[0240] Therefore, in one embodiment, when operating in OOO mode, a memory-mapped stream channel of a data path circuit mechanism located within the transmitting DMA engine (e.g., within tile 1512) can format data to be sent to the DMA engine 310 as a packet. As part of packet generation, the memory-mapped stream channel creates a packet header that includes the data to be sent as the packet payload and a buffer descriptor identifier that specifies a particular buffer descriptor to be used when processing the packet. The referenced buffer descriptor is stored in the buffer descriptor register file 1506.
[0241] In exemplary implementations, each different S2MM channel may be independently configured to operate in either IO mode or OOO mode. Therefore, if the DMA engine 310 includes multiple S2MM channels 1504, each may be independently configured to operate in either IO mode or OOO mode. In one embodiment, each S2MM channel may be configured to use a specific packet processing mode by writing suitable configuration data to the control register of the memory tile for its respective S2MM channel. The configuration data can specify the particular packet processing mode to be used for each S2MM channel. In another embodiment, the ability to switch between packet processing modes may be dynamic in that the S2MM channel can switch between using IO mode and using OOO mode while in operation.
[0242] In an exemplary implementation, the S2MM interface 1504 can switch between IO mode and OOO mode based on the data stored in the buffer descriptor task queue 1508, or the absence thereof. For example, if the task stored in the buffer descriptor task queue 1508 is a start buffer descriptor, the S2MM interface 1504 implements IO mode. For example, if the task stored in the buffer descriptor task queue 1508 is not a start buffer descriptor (for example, does not point to a buffer descriptor stored in the buffer descriptor register file 1506) and instead indicates OOO mode, the S2MM interface 1504 implements OOO mode.
[0243] In one or more other exemplary implementations, OOO mode supports the use of a repeat function. The repeat function may specify a packet count (e.g., an integer value) of packets that can be processed using the same buffer descriptor, specified by the buffer descriptor identifier of a first packet received as part of multiple packets from a given tile. For example, tile 1512-1 can transmit M packets, where "M" is an integer value. In response to receiving the first packet, the DMA engine 310 determines a specific buffer descriptor to be used to process the received data. Furthermore, the DMA engine 310 determines that the buffer descriptor indicated by the buffer descriptor identifier should be used to process the M packets. That is, the DMA engine 310 uses the same buffer descriptor to process the first received packet and the next M-1 packets. The DMA engine 310 considers processing M packets using the same buffer descriptor as a single task. In one embodiment, the value of M may be specified in a field in the header of the first packet. In another embodiment, the value of M may be specified by a task stored in the buffer descriptor task queue 1508.
[0244] For illustrative purposes, consider an example where the S2MM interface 1504 receives packets from N different sources (e.g., tiles 1512-1 and 1512-2, where N=2). In one embodiment, the S2MM interface 1504 implements OOO mode in response to determining that the buffer descriptor task queue 1508 does not contain any pending (e.g., incomplete) tasks (e.g., is empty). Thus, the buffer descriptor register file 1506 is configured (e.g., programmed) to store N buffer descriptors. The buffer descriptor register file 1506 can store one buffer descriptor per source. Each buffer descriptor can specify the base address and buffer length to be used.
[0245] In one embodiment, a task may be stored in a buffer descriptor task queue 1508. The task specifies the number of packets to be processed from each of N sources. For example, if each of N sources sends M data packets (where M is an integer greater than or equal to 1), the task stored in the buffer descriptor task queue 1508 specifies N × M packets to be processed. This allows multiple packets sent from the same source to be processed using the same buffer descriptor. A new buffer descriptor does not need to be stored in the buffer descriptor register file 1506 for each packet to be processed, which improves data transfer efficiency within IC100.
[0246] Asynchronously, buffer descriptors are configured and stored in the buffer descriptor register files of each MM2S channel in tiles 1512-1 and 1512-2. Furthermore, in-order tasks are inserted into the buffer descriptor task queues of each MM2S interface in tiles 1512-1 and 1512-2. Each of tiles 1512-1 and 1512-2 can simultaneously push data to bus 1514. Arbitration hardware implemented within each stream switch enables the transfer of complete data past the merge point (e.g., all "M" packets from a source) from one source before arbitration is permitted to another source.
[0247] In response to a packet, the S2MM interface 1504 reads the packet header and extracts the buffer descriptor identifier. The S2MM interface 1504 retrieves the buffer descriptor specified by the buffer descriptor identifier from the buffer descriptor register file 1506. The S2MM interface 1504 processes the received packet by executing the retrieved buffer descriptor. When processing the packet, the S2MM interface 1504 drops or discards the packet header and stores the rest of the packet (e.g., the payload) at the correct address determined from the buffer descriptor. If the header is dropped, the packet length matches the buffer length in the buffer descriptor. In response to detecting a TLAST on the word intermediate buffer, or detecting that a TLAST is missing from the last word, the S2MM interface 1504 may generate an error event (e.g., via the event broadcast circuitry). The S2MM interface 1504 can repeat this process for each packet from the same source.
[0248] In an exemplary implementation where the repeat function is used, when the process has been repeated for N × M packets (for example, M packets from each of N sources), the S2MM channel 1504 considers the task from the buffer descriptor task queue 1508 to be complete. In response to its determination that the task is complete, the S2MM channel 1504 can issue a task completion token and then attempt to execute the next task in the buffer descriptor task queue 1508.
[0249] In one embodiment, since each buffer descriptor may be used to process two or more packets from a given source, the S2MM channel 1504 may include an iterative state address offset circuit mechanism that adjusts the address to which data is written for each iteration using the same buffer descriptor to prevent unintended or incorrect overwriting of data. When the task is complete, the memory 1510 stores N × M subbuffers, which can collectively be considered as a single larger buffer for future data movement operations.
[0250] In other exemplary implementations, a task can be assigned to each source so that, when configured in such a way, each different source can forward a different number "M" packets. In such a case, the task is completed when "M" packets have been written from a given source. As mentioned above, the repeat function does not have to be used. In such a case, in OOO mode, each packet can specify a particular buffer descriptor to be used to process the packet by a buffer descriptor identifier in a specified field of the packet header.
[0251] As described above, the S2MM channel 1504 can switch modes using various different mechanisms. For example, the S2MM channel 1504 can be configured to operate in a selected packet processing mode by loading suitable configuration data into the control register of the tile that determines the packet processing mode. In another example, the S2MM channel 1504 can start OOO mode in response to detecting that no tasks are stored in the buffer descriptor task queue 1508. In yet another example, the S2MM channel 1504 can start OOO mode in response to detecting a particular type of task stored in the buffer descriptor task queue 1508. In this case, the task may also specify a value to be used for repeat function processing. In any case, buffer descriptors can be used to process two or more packets from a given source. Therefore, buffer descriptors do not need to be written to the buffer descriptor register file 1506 for each packet to be processed, which significantly reduces the overhead of initiating DMA data transfer.
[0252] For explanatory purposes, specific names are given to provide a complete understanding of the various inventive concepts disclosed herein. However, the technical terms used herein are intended solely to describe specific aspects of the constructs of the invention and are not intended to limit them.
[0253] Where defined herein, the singular forms “a,” “an,” and “the” are intended to include the plural forms as well, unless otherwise explicitly stated in the context. Where defined herein, the terms “at least one,” “one or more,” and “and / or” are open-ended expressions that are both conjunctive and disjunctive in action, unless otherwise explicitly stated. For example, each of the expressions “at least one of A, B, and C,” “at least one of A, B, or C,” “one or more of A, B, and C,” and “A, B, and / or C” means A alone, B alone, C alone, a combination of A and B, a combination of A and C, a combination of B and C, or a combination of A, B, and C.
[0254] Where defined herein, “automatically” means without human intervention. Where defined herein, “user” means a human being.
[0255] Where defined herein, the term “case” means, depending on the context, “when,” “on the occasion,” “in response to,” or “in accordance with.” Thus, the phrases “when it is determined that…” or “when [the described condition or event] is detected” are to be interpreted, depending on the context, as “when it is determined that…” or “in response to having determined that…” or “when [the described condition or event] is detected,” or “in response to having detected [the described condition or event],” or “in accordance with having detected [the described condition or event].”
[0256] Where defined herein, the term “in response to” and similar words as described above, such as “when,” “when,” or “on the occasion,” mean readily responding to or reacting to an action or event. The response or reaction is performed automatically. Therefore, if a second action is performed “in response to” a first action, there is a causal relationship between the occurrence of the first action and the occurrence of the second action. The term “in response to” indicates a causal relationship.
[0257] Terms such as "First," "Second," etc., may be used herein to describe various elements. These elements should not be limited by these terms, for unless otherwise stated or the context clearly indicates otherwise, these terms are used only to distinguish one element from another.
[0258] All means or step-plus-function elements that can be found in the following claims are intended to include any structures, materials, or actions for performing a function in combination with other claimed elements, as specifically claimed.
[0259] The IC may include a DPE array having multiple tiles. The multiple tiles may include multiple DPE tiles and multiple memory tiles. Each DPE tile may include a stream switch, a core configured to perform operations, and a memory module. Each memory tile may include a stream switch, a DMA engine, and RAM. The DMA engine of each memory tile may be configured to access RAM within the same memory tile and RAM in at least one other memory tile. A selected DPE tile from the multiple DPE tiles may be configured to access a selected memory tile from the multiple memory tiles via a stream switch.
[0260] Each of the aforementioned and other implementations may optionally include one or more of the following features, either individually or in combination. Some exemplary implementations may include all of the following features in combination.
[0261] In one embodiment, the DPE array includes an SoC interface having multiple stream switches coupled to stream switches for multiple DPE tiles and multiple memory tiles. The SoC interface links the DPE array to one or more other circuit blocks of an IC so that they can communicate with each other.
[0262] In another embodiment, the memory tiles are arranged in one or more rows between multiple rows of DPE tiles and the SoC interface.
[0263] In another embodiment, the DMA engine for a selected memory tile is configured to access the RAM of at least two other memory tiles.
[0264] In another embodiment, the stream switch of a selected memory tile is configured to establish a logical connection with the stream switch of a selected DPE tile, and the logical connection couples the selected DPE tile with the DMA engine of the selected memory tile in order to pass data between the selected memory tile and the DPE tile.
[0265] In another embodiment, multiple tiles are arranged in a grid having rows and columns. The stream switches of each memory tile are connected to the stream switches of the adjacent tiles above and below within the same column. Stream switches of adjacent memory tiles within the same row may also be connected.
[0266] In another embodiment, the stream switch of each DPE tile is connected to the stream switch of each adjacent tile.
[0267] In another embodiment, each row of tiles includes one or more DPE tiles and one or more memory tiles.
[0268] In another embodiment, one or more rows of tiles include DPE tiles but do not include memory tiles, and one or more other rows of tiles include memory tiles but do not include DPE tiles.
[0269] In another embodiment, multiple DPE tiles are arranged in a grid having multiple rows and multiple columns. Multiple memory tiles are scattered within one or more rows such that one or more rows contain one or more DPE tiles and one or more memory tiles.
[0270] In another embodiment, each memory tile includes an event broadcast circuitry. The event broadcast circuits of the memory tiles may be interconnected to form an event broadcast network independent of the network formed by the stream switches. The event broadcast network may transmit events detected within the memory tile.
[0271] In another embodiment, an event broadcast network for multiple memory tiles is configured to transmit debug and trace information for multiple memory tiles.
[0272] In another embodiment, each memory tile includes a memory-mapped switch. The memory-mapped switches of the memory tiles are interconnected to form a memory-mapped network independent of the network formed by the stream switches. The memory-mapped network transmits configuration data to the memory tiles.
[0273] In another embodiment, the IC comprises a PMP circuit coupled to an accelerator circuit, the PMP circuit being local to the accelerator circuit and configured to selectively pass transactions originating from the accelerator circuit to memory based on a secure master identifier assigned to each transaction and a region of memory to be accessed by each transaction.
[0274] In another embodiment, the PMP circuit is implemented within the SoC interface of the DPE array or within the NoC of the IC.
[0275] In another embodiment, the IC comprises an MMU coupled to an accelerator circuit, the MMU being local to the accelerator circuit and configured to translate virtual memory addresses used by the accelerator circuit to physical memory addresses.
[0276] In another aspect, the MMU is implemented within the SoC interface of the DPE array or within the NoC of the IC.
[0277] In another aspect, the IC is configured to selectively pass memory-mapped transactions to a selected one of a plurality of columns of tiles of the DPE array based on matching a column identifier for the memory-mapped transaction to a hardwired and unique column identifier assigned to each of the plurality of columns of tiles within the DPE array.
[0278] In another aspect, the IC comprises a plurality of protection circuits configured to selectively pass memory-mapped transactions to a range of a plurality of columns of tiles of the DPE array based on matching an expected value generated by applying a column identifier mask to a hardwired and unique column identifier assigned to each of the plurality of columns of tiles within the DPE array.
[0279] The IC can include a DPE array. The DPE array includes a plurality of memory tiles. The first of the memory tiles can include a first DMA engine, a first RAM connected to the first DMA engine, and a first stream switch coupled to the first DMA engine. The first DMA engine is coupled to a second RAM disposed within a second memory tile. The first stream switch is coupled to a second stream switch disposed within the second memory tile.
[0280] Each of the foregoing and other implementations can optionally include, alone or in combination, one or more of the following features. Some exemplary implementations include all of the following features in combination.
[0281] In another aspect, the first DMA engine is programmable to access the first RAM and the second RAM to form a composite memory formed from the first memory tile and the second memory tile.
[0282] In another embodiment, the first memory tile and the second memory tile are adjacent to each other. In another embodiment, the first DMA engine is programmable to access a third RAM located within a third memory tile.
[0283] In another embodiment, the third memory tile is adjacent to the first memory tile. In another embodiment, the first memory tile includes a first event broadcast circuit mechanism configured to generate events corresponding to read and write operations of a first DMA engine. The first event broadcast circuit mechanism is programmable to provide selected events from among the events to one or more selected destination circuits.
[0284] In another embodiment, the first event broadcast circuit mechanism is connected to the second event broadcast electrical circuit of the second memory tile.
[0285] In another embodiment, the first memory tile includes a control, debug, and trace circuit configured to packetize selected events and provide the packetized selected events to a first stream switch. The first stream switch can then transmit the packetized selected events to further destination circuits.
[0286] In another embodiment, the first memory tile includes a first lock circuit coupled to a first DMA engine and a second DMA engine of the second memory tile. The first lock circuit is configured to allow lock requests for portions of the first RAM received from the first DMA engine and the second DMA engine.
[0287] In another embodiment, the first memory tile includes a first memory-mapped switch configured to receive configuration data and program a first stream switch and a first DMA engine.
[0288] In another embodiment, the DPE array includes a plurality of tiles arranged in a grid having columns and rows. A first memory-mapped switch is connected to memory-mapped switches in adjacent tiles above and in adjacent tiles below. The memory-mapped switches are capable of transmitting configuration data between tiles of the DPE array within the same column.
[0289] In another embodiment, the first RAM includes a plurality of first arbitration circuits and a plurality of first memory banks coupled to each of the plurality of first arbitration circuits. Each first arbitration circuit is coupled to a plurality of second arbitration circuits coupled to a plurality of stream-memory-mapped channels of the first DMA engine, a plurality of memory-mapped-stream channels of the first DMA engine, and each of the second memory banks of the second RAM.
[0290] In another embodiment, the first memory tile includes a first memory-mapped switch configured to receive configuration data and program a first stream switch and a first DMA engine. The first memory-mapped switch is coupled to each of a plurality of first arbitration circuits.
[0291] In another embodiment, the first DMA engine includes a plurality of stream-memory-mapped channels, each of which can be independently configured to operate using one of a plurality of different packet processing modes.
[0292] In another embodiment, the packet processing modes include an in-order mode in which packets received from other tiles of the DPE array arrive in a predetermined order, and an out-of-order mode in which packets received from other tiles of the DPE array arrive in a non-deterministic order.
[0293] In another embodiment, the first DMA engine includes a plurality of stream-memory-mapped channels, at least one of which is configured to operate using an out-of-order mode in which packets received from other tiles of the DPE array arrive in a non-deterministic order.
[0294] In another embodiment, the DPE array includes a plurality of tiles arranged in a grid having rows and columns, wherein the plurality of tiles include a plurality of DPE tiles, a plurality of memory tiles, and a plurality of interface tiles. The plurality of interface tiles form an SoC interface that links the DPE array to one or more other circuit blocks of the IC in a communicative manner.
[0295] In another embodiment, each DPE tile includes a DMA engine comprising multiple stream-memory-mapped channels, each stream-memory-mapped channel being independently configurable to operate using one of several different packet processing modes.
[0296] In another embodiment, the packet processing modes include an in-order mode in which packets received from other tiles of the DPE array arrive in a predetermined order, and an out-of-order mode in which packets received from other tiles of the DPE array arrive in a non-deterministic order.
[0297] In another embodiment, each DPE tile includes a DMA engine comprising multiple stream-memory-mapped channels, at least one of which is configured to operate using an out-of-order mode in which packets received from other tiles of the DPE array arrive in a non-deterministic order.
[0298] The description of the configuration of the present invention provided herein is for illustrative purposes only and is not intended to be exhaustive or to limit oneself to the disclosed forms and examples. The terms used herein have been selected to describe the principles, practical applications, or technical improvements to the configuration of the present invention and / or to enable other persons skilled in the art to understand the configuration of the present invention disclosed herein. Modifications and variations may be apparent to persons skilled in the art without departing from the scope and spirit of the configuration of the present invention described herein. Accordingly, the following claims should be referenced, rather than the foregoing disclosure, to illustrate the scope of such features and implementations.
Claims
1. It is an integrated circuit, A data processing engine (DPE) array having multiple tiles, wherein the multiple tiles are Multiple DPE tiles, each DPE tile including a stream switch, a core configured to perform an operation, and a memory module, A plurality of memory tiles, each memory tile including a stream switch, a direct memory access (DMA) engine, and a random access memory, The DMA engine of each memory tile is configured to access the random access memory within the same memory tile and the random access memory of at least one other memory tile. An integrated circuit configured such that a selected DPE tile from the plurality of DPE tiles accesses a selected memory tile from the plurality of memory tiles via the stream switch.
2. The aforementioned DPE array is The system-on-chip (SoC) interface includes a plurality of stream switches coupled to the stream switches of the plurality of DPE tiles and the plurality of stream switches of the plurality of memory tiles, The integrated circuit according to claim 1, wherein the SoC interface links the DPE array to one or more other circuit blocks of the integrated circuit in a communicative manner.
3. The memory tiles are arranged in one or more rows between the multiple rows of DPE tiles and the SoC interface. The integrated circuit according to claim 2.
4. The DMA engine of the selected memory tile is configured to access the random access memory of at least two other memory tiles. The integrated circuit according to claim 1.
5. The stream switch of the selected memory tile is configured to establish a logical connection with the stream switch of the selected DPE tile, and the logical connection connects the selected DPE tile to the DMA engine of the selected memory tile in order to pass data between the selected memory tile and the DPE tile. The integrated circuit according to claim 1.
6. The aforementioned plurality of tiles are arranged in a grid having rows and columns, Each memory tile's stream switch is connected to the stream switches of the adjacent tiles above and below it in the same column. The integrated circuit according to claim 1.
7. The stream switches of adjacent memory tiles within the same row are connected, The integrated circuit according to claim 6.
8. Each memory tile includes an event broadcast circuit mechanism. The event broadcast circuit mechanisms of the memory tiles are interconnected to form an event broadcast network independent of the network formed by the stream switch. The event broadcast network transmits events detected within the memory tile. The event broadcast network is configured to transmit debug and trace information for the plurality of memory tiles. The integrated circuit according to claim 1.
9. Each of the aforementioned memory tiles includes a memory-mapped switch, The memory-mapped switches of the memory tiles are interconnected to form a memory-mapped network independent of the network formed by the stream switches. The memory-mapped network transmits configuration data to the memory tiles. The integrated circuit according to claim 1.
10. The system includes a physical memory protection circuit coupled to an accelerator circuit, the physical memory protection circuit being local to the accelerator circuit and configured to selectively pass transactions originating from the accelerator circuit to memory based on a secure master identifier assigned to each transaction and the memory region to be accessed by each transaction. The integrated circuit according to claim 1.
11. The integrated circuit according to claim 10, wherein the physical memory protection circuit is implemented within the system-on-chip interface of the DPE array or within the network-on-chip of the integrated circuit.
12. The system includes a memory management unit coupled to the accelerator circuit, the memory management unit being local to the accelerator circuit and configured to translate virtual memory addresses used by the accelerator circuit to physical memory addresses. The integrated circuit according to claim 1.
13. The integrated circuit according to claim 12, wherein the memory management unit is implemented within the system-on-chip interface of the DPE array or within the network-on-chip of the integrated circuit.
14. The DPE array comprises multiple protection circuits configured to selectively pass the memory-mapped transaction to a selected column among the multiple columns of the tile in the DPE array, based on matching the column identifier corresponding to the memory-mapped transaction with a hardwired and unique column identifier assigned to each of the multiple columns of the tile in the DPE array. The integrated circuit according to claim 1.
15. The DPE array comprises multiple protection circuits configured to selectively pass memory-mapped transactions to the range of multiple columns of a tile in the DPE array, based on matching the expected value generated by applying a column identifier mask to the hardwired and unique column identifiers assigned to each of the multiple columns of the tile in the DPE array. The integrated circuit according to claim 1.
Citation Information
Patent Citations
Processor architecture
JP2008226275A
Processing system with distributed processors with multi-layer interconnect
JP2019040641A
System-on-chip interface architecture
US20190303328A1