Description
Most CDL object instances can be created with an associated dimensionality. This is primarily used for describing the scheduling of data-parallel execution and allows for multiple instances of active circuitry to execute in parallel.
CDL adopts the standard 'C' array syntax and dimensions are enclosed in square braces '[]'. Objects can have up to 8 dimensions, and circuit elements can contain multi-dimensional objects including multi-dimensional sub-circuits.
Object dimensionality follows the object's optional type and name fields. If there are no items in square braces then the object is assumed to be scalar (one dimension with one element).
The connectivity that is required between any pair of array objects is described by a Connection Mapping, and this is therefore a property of the connection rather than the nodal object.
Dimensionality is not the same thing as Reentrancy although there are some cases where the two mechanisms are equivalent.
The following example shows an N x M transient store named 'A', that is collected by an 'N' element collector called 'B', that is multiplexed by a scalar multiplexer called 'C' which triggers a scalar method called 'D'. This example uses standard connections (see Array Connections) and so each of the collector's elements will collect 'M' store events and the multiplexer will pass these elements, one at a time, to the 'D' method. The net result is that the method is triggered with an 'M' element array of store events.
Standard Connection Mappings
The following example produces a scalar connection between each of the object pairs, each collector connects to its partner store (same index):
The following circuit effectively produces a 2-d array of connections (a 1-d connection array for every element of the 1-d collector). Each element of the collector connects to every element of the store:
Where two multi-dimensional objects are connected, if both objects have a common dimension then elements are mapped one-to-one for that dimension between the two objects. All non-matching dimensions are mapped all-to-all:
In the simplest case this reduces to:
Or alternatively:
CDL also allows for objects to make repeated connections to objects
This allows the collector to collect N sequential events from the store (which must have a buffer depth of at least N).