Combinatorial
All combinatorial logic functions in the array are computed by nand combination of an arbitrary number of inputs to produce a single output. Any input can be complemented or not. Since the true or complement form of any signal can be determined at the input of the logic function there is no point in providing both true and complement values at the outputs. Furthermore, the signal can be inverted an arbitrary number of times during routing, with the fixup occuring at the input to the next logic function. Here is a model of the primitive logic function.
----------
[ Nectarine figure; type 'Artwork on' to a CommandTool ]
----------
Transforming a set of equasions into a form which uses this primitive is not the subject of this note. It is assumed that some previous piece of software accomplishes that task. Nor does this note concern itself with routing a collection of these primitives once they have been placed on the surface. It is assumed that some subsequent piece of software accomplishes that task.
Initially we will restrict the number of inputs to be d min(a, b), i.e. every primitive logic function will fit inside of a minor array in both vertical and horizontal orientations. We assign the color red to input, the color green to output, and yellow squares to indicate that an input participates in forming a particular output. Here is a graphical representation of the 8 nontrivial 2-input functions (x`(y`), (x(y), (x`(y), (x(y`), (x'y), (x`'y`), (x`'y), and (x'y`). The only 2-input functions which cannot be done with this primitive are the constant functions, 0 and 1, xor, and xnor. The four functions which merely invert or buffer are unnecessary, although possible.
----------
[ Nectarine figure; type 'Artwork on' to a CommandTool ]
----------
There is a stitch cell between each minor grid within the major grid. The function computed by the above graphical representation depends upon which inputs are complemented as they are driven onto the red lines by the stitch cell. A combinatorial element is presented to the placement software as the tuple (o, li) where o is the output label and li is a list of input labels, i. No two combinatorial elements may have the same o. The same label may not appear twice in any single li. For each combinatorial element given as input the placement software must supply as output the tuple (o, op, lip), where o is the same output label, op is a grid position to indicate the placement of the output, and lip is a list of input positions, ip, in the same order as li. Each ip is a single number. If op.t=h then ip [0..a) else ip [0..b).
For convenience we define a combinatorial tuple to be the tuple (o, op, lpi), ignoring the distinction of what the placement software accepts as input and what it generates as output. lpi is simply a list of positioned inputs, pi, each represented as the tuple (i, ip) that groups the input label and its position together.
Sequential
There is a single edge-triggered flip-flop for every minor grid column and major grid row as shown below.
----------
[ Nectarine figure; type 'Artwork on' to a CommandTool ]
----------
Since the details of connecting the flip-flop input and output do not concern the placement algorithm they are not described here. A sequential element is presented to the placement software as the tuple (o, i) where o is the output label and i is the input label. For each sequential element given as input the placement software must supply as output the tuple (o, ffp), where o is the same label and ffp is a flip-flop position. A flip-flop position, ffp, is the tuple (ap, cp, dp), where ap [0..a), cp [0..c), and dp [0..d). For convenience we define a sequential tuple to be the tuple (o, i, ffp), ignoring the distinction of what the placement software accepts as input and what it generates as output.