# US 11,030,023 B2 · Processing system with interspersed processors DMA-FIFO

> Agents: this data is available as JSON from the patentgrep API and MCP server — see https://patentgrep.com/llms.txt

- Number: US 11,030,023 B2
- Document ID: US11030023B2
- Status: Granted
- Kind: B2
- Application number: 15/219,018
- Filed: 2016-07-25
- Published: 2016-11-17
- Granted: 2021-06-08
- Earliest claimed: 2012-11-21
- Assignees: Coherent Logix, Incorporated
- Applicants: Coherent Logix, Incorporated
- Inventors: Carl S. Dobbs; Michael R. Trocino; Keith M. Bindloss
- Web page: https://patentgrep.com/patent/US11030023B2

## CPC

- G06F 9/546: {Message passing systems or structures, e.g. queues}
- G06F 11/3006: {where the computing system is distributed, e.g. networked systems, clusters, multiprocessor systems (multiprogramming arrangements G06F9/46; allocation of resources G06F9/50)}
- G06F 9/44505: {Configuring for program initiating, e.g. using registry, configuration files}
- G06F 11/3419: {by assessing time}
- G06F 13/1673: {using buffers}
- G06F 13/28: using burst mode transfer, e.g. direct memory access {DMA}, cycle steal (G06F13/32 takes precedence)
- G06F 13/4022: {using switching circuits, e.g. switching matrix, connection or expansion network (G06F13/4009 takes precedence)}
- G06F 13/4027: {using bus bridges (G06F13/4022 takes precedence)}
- G06F 13/4282: {on a serial bus, e.g. I2C bus, SPI bus (on daisy chain buses G06F13/4247)}
- G06F 15/76: Architectures of general purpose stored program computers (with program plugboard G06F15/08; multicomputers G06F15/16)
- G06F 15/8038: {Associative processors}
- Y02D 10/00: Energy efficient computing, e.g. low power processors, power management or thermal management
- G06F: ELECTRIC DIGITAL DATA PROCESSING (computer systems based on specific computational models G06N)
- Y02D: CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE

## Abstract

Embodiments of a multi-processor array are disclosed that may include a plurality of processors, local memories, configurable communication elements, and direct memory access (DMA) engines, and a DMA controller. Each processor may be coupled to one of the local memories, and the plurality of processors, local memories, and configurable communication elements may be coupled together in an interspersed arrangement. The DMA controller may be configured to control the operation of the plurality of DMA engines.

## Claims

### Claim 1

An apparatus, comprising:
a plurality of processors configured to execute at least one program;
a plurality of memories, wherein each memory of the plurality of memories is coupled to a subset of the plurality of processors;
a plurality of configurable communication elements, wherein each configurable communication element of the plurality of configurable communication elements includes a plurality of communication ports, a first memory, and a routing engine;
wherein to execute the at least one program, each processor of the subset of the plurality of processors is configured to communicate with at least one other processor of the subset of the plurality of processors via a particular configurable communication element of the plurality of configurable communication element; and
a plurality of direct memory access (DMA) engines, wherein each DMA engine of the plurality of DMA engines is configured to transfer data between selected memories of the plurality of memories and selected configurable communication elements of the plurality of configurable communication elements;
a controller circuit configured to coordinate operation of a first subset of DMA engines of the plurality of DMA engines independent of the plurality of processors; and
wherein the first subset of DMA engines is configured to:
receive respective input data streams and generate a single output data stream with a first data rate by storing the respective input data streams with a second data rate in a buffer located in a portion of a particular memory of the plurality of memories, wherein the first data rate is greater than the second data rate; and
in response to a determination that a particular DMA engine of the plurality of DMA engines cannot receive the single output data stream, signal a second subset of DMA engines sending the respective input data streams to pause before continuing to send the respective input data streams, wherein the particular DMA engine is not included in the first subset of DMA engines.

### Claim 2 (depends on 1)

The apparatus of claim 1, wherein a second subset of the plurality of DMA engines is configured to operate on a common portion of a different memory of the plurality of memories to implement a first in first out (FIFO) buffer.

### Claim 3 (depends on 2)

The apparatus of claim 2, wherein to implement the FIFO buffer, the subset of the plurality of DMA engines is further configured to enable a plurality of read operations to be performed on the FIFO buffer for each single write operation to the FIFO buffer.

### Claim 4 (depends on 1)

The apparatus of claim 1, wherein the plurality of DMA engines includes a plurality of DMA read (DMAR) engines and a plurality of DMA write (DMAW) engines.

### Claim 5

A method for operating a multiprocessor system, the method comprising:
executing at least one program on a plurality of processors, each processor comprising at least one arithmetic logic unit, an instruction processing unit, and a plurality of processor ports;
wherein executing the at least one program comprises:
at least a subset of the plurality of processors, each of which coupled to a respective one of a plurality of memories, communicating with each other through a plurality of configurable communication elements, each comprising a plurality of communication ports, a first memory, and a routing engine;
controlling, by a controller circuit independently of the plurality of processors, a plurality of direct memory access (DMA) engines coupled to a particular memory of the plurality of memories, wherein each DMA engine of the plurality of DMA engines is configured to transfer first data between selected ones of the communication ports and the plurality of memories; and
wherein the controlling the plurality of DMA engines includes:
receiving, by the plurality of DMA engines at a first data rate, respective input data streams;
generating, by the plurality of DMA engines, a single output data stream with a second data rate by storing the respective input data streams in a buffer located in a portion of the particular memory, wherein the first data rate is greater than the second data rate;
routing, by a particular DMA engine of the plurality of DMA engines, the single output data stream to a corresponding location; and
in response to determining that the particular DMA engine cannot receive the single output data stream, signal a subset of DMA engines sending the respective input data streams to pause before continuing to send the respective input data streams.

### Claim 6 (depends on 5)

The method of claim 5, wherein controlling the plurality of DMA engines comprises implementing one or more first in first out (FIFO) buffers in one or more memories of the plurality of memories.

### Claim 7 (depends on 6)

The method of claim 6, wherein controlling the plurality of DMA engines further comprises enabling a plurality of read operations to occur to a given one of the one or more FIFO buffers for each single write operation to the given one of the one or more FIFO buffers.

### Claim 8 (depends on 6)

The method of claim 6, wherein controlling the plurality of DMA engines further comprises enabling a plurality of write operations to occur to a given one of the one or more FIFO buffers for each single read operation to the given one of the one or more FIFO buffers.

### Claim 9 (depends on 6)

The method of claim 6, wherein the plurality of DMA engines includes a plurality of DMA read (DMAR) engines and a plurality of DMA write (DMAW) engines.

### Claim 10 (depends on 6)

The method of claim 6, wherein the plurality of DMA engines comprises a plurality of DMA read (DMAR) engines, and a plurality of DMA write (DMAW) engines, wherein controlling the plurality of DMA engines further comprises:
controlling a given one of the plurality of DMAR engines and a given one of the plurality of the DMAW engines;
setting a wrap bit based on a first determination that a write pointer of the given one of the plurality of DMAW engines advances from an end to a start of a given FIFO buffer of the one or more FIFO buffers;
re-setting the wrap bit based on a second determination that a read pointer of the given one of the plurality of DMAR engines advances from the end to the start of the given FIFO buffer;
comparing the read pointer and the write pointer; and
stalling the given DMAR engine and the given one of the plurality DMAW engines dependent upon the wrap bit and a result of comparing the read pointer and the write pointer.

### Claim 11 (depends on 10)

The method of claim 10, wherein controlling the plurality of DMA engines further comprises:
comparing respective read pointers for the plurality of DMAR engines to a corresponding write pointer of a respective DMAW engine of the plurality of DMAW engines; and
stalling the plurality DMAR engines and the respective DMAW engine based on another result of comparing the respective read pointers and the write pointer of the respective DMAW engine.

### Claim 12 (depends on 6)

The method of claim 6, wherein the plurality of DMA engines includes a plurality of DMA read (DMAR) engines and a DMA write (DMAW) engine, and wherein controlling the plurality of DMA engines further comprises:
comparing a read pointer for each DMAR engine of the plurality of DMAR engines to a write pointer of the DMAW engine; and
stalling the plurality of DMAR engines and the DMAW engine based on a result of comparing the read point to the write pointer.

### Claim 13 (depends on 8)

The method of claim 8, wherein the plurality of DMA engines comprises a plurality of DMA write (DMAW) engines, and a DMA read (DMAR) engine, and wherein controlling the plurality of DMA engines further comprises:
comparing a write pointer for each DMAW engine of the plurality of the DMAW engines to a read pointer of the DMAR engine; and
stalling the plurality of DMAW engines and the DMAR engine based on a result of comparing the write point for each DMAW engine to the read pointer of the DMAR engine.

### Claim 14 (depends on 5)

The method of claim 5, wherein controlling the plurality of DMA engines comprises providing a respective plurality of read strides for the plurality of DMA engines.

### Claim 15 (depends on 5)

The method of claim 5, wherein controlling the plurality of DMA engines comprises providing a respective plurality of write strides for the plurality of DMA engines.

### Claim 16 (depends on 6)

The method of claim 6, wherein controlling the plurality of DMA engines comprises selecting a subset of the plurality of DMA engines to operate on each of the one or more FIFO buffers.

### Claim 17 (depends on 16)

The method of claim 16, wherein selecting the subset of the plurality of DMA engines comprises receiving second data, wherein selecting the subset of the plurality of DMA engines is dependent upon the second data.

### Claim 18

A system, comprising:
a plurality of processors configured to execute at least one program; and
a plurality of configurable communication elements coupled to the plurality of processors in an interspersed fashion, wherein each configurable communication element includes:
a plurality of communication ports;
a plurality of memories, wherein each memory of the plurality of memories is coupled to a respective processor of the plurality of processors;
a routing engine configured to modify route information included in a message being relayed using congestion information for a planned route to a destination, wherein the route information includes a direction to a subsequent configurable communication element along the planned route;
a plurality of direct memory access (DMA) engines coupled to one or more of the plurality of memories, wherein each DMA engine of the plurality of DMA engines is configured to transfer data between selected ones of the communication ports and the plurality of memories; and
a controller circuit coupled to a subset of the plurality of DMA engines, wherein the controller circuit is configured to coordinate operation of the subset of the plurality of DMA engines;
wherein the subset of the plurality of DMA engines is configured to:
receive respective input data streams and generate a single output data stream with a first data rate by storing the respective input data streams with a second data rate in a buffer located in portion of a particular memory of the plurality of memories, wherein the first data rate is greater than the second data rate;
in response to a determination that a particular DMA engine of the plurality of DMA engines cannot receive the single output data stream, signal one or more of plurality of DMA engines sending the respective input data streams to pause before continuing to send the respective input data streams, wherein the particular DMA engine is not included in the subset of the plurality of DMA engines and
wherein to execute the at least one program, each processor of a subset of the plurality of processors is configured to:
communicate with at least one other processor of the subset of the plurality of processors via a particular configurable communication element of the plurality of configurable communication element; and
control the plurality of DMA engines.

### Claim 19 (depends on 18)

The system of claim 18, wherein to control the plurality of DMA engines, each processor of the subset of the plurality of processors is further configured to implement one or more first in first out (FIFO) buffers in one or more memories of the plurality of memories.

### Claim 20 (depends on 18)

The system of claim 18, wherein to control the plurality of DMA engines, each processor of the subset of the plurality of processors is further configured to enable a plurality of read operations to occur to a given one of the one or more FIFO buffers for each single write operation to the given one of the one or more FIFO buffers.
