Programmable tiles
This application is a division of application Ser. No. 07/166,596 filed Mar. 10, 1988 now U.S. Pat. No. 4,931,946. 
    
    
     FIELD OF THE INVENTION 
     This invention relates generally to the design and layout of integrated circuits, and, in particular, to structures comprised of a set of component &#34;tiles&#34; which facilitate the design and layout process, resulting in the creation of dense integrated circuits the functionality of which can be modified easily and inexpensively. 
     BACKGROUND OF THE INVENTION 
     Two stages in the creation of integrated circuits--logic design and the layout of circuit components--are heavily interrelated. There are a variety of different design and layout methodologies in use today, each with its corresponding advantages and disadvantages. Some emphasize ease of design and/or modification of the logic/layout of the chip, while others emphasize maximum overall chip density. 
     Gate arrays, for example, provide logic designers with a large degree of flexibility, both for producing initial logic designs and for later modifying those designs to alter functionality or simply to fix bugs. Gate arrays achieve this degree of flexibility by providing a large number of individual gate resources, each of which has already been fabricated up to but not including the final few mask layers. 
     With gate arrays, the layout process is greatly simplified. The designer simply connects the gate elements on the uppermost few mask layers utilizing a standard design technique often referred to as &#34;late mask programming.&#34; Generally, connections on the top three chip layers (two metal layers and the via between them) may be modified, though sometimes a fourth layer (connecting the lower metal layer and the active gate elements themselves) may also be modified. 
     Late mask programming, however, includes modifications to virtually any mask layers involved in later &#34;interconnection&#34; steps of the integrated circuit fabrication process. When modifications are required (whether due to design changes or the discovery of bugs), the designer merely alters these layers of the integrated circuit, avoiding the significant time and expense which would be required to modify the layout of additional chip layers. 
     A significant disadvantage results, however, from the fact that the gate array itself, including the individual resources repeated throughout the array, is not customized for any particular logic design. Many gates may therefore be unused in any particular design, resulting in lower chip density due to this inefficient use of space. 
     So-called &#34;channelless&#34; gate arrays reduce the amount of wasted space by permitting the routing of connections over the gate resources themselves rather than requiring dedicated space in between these resources. See, e.g., Hui et al., &#34;A 4.1K Gates Double Metal HCMOS Sea of Gates Array,&#34; IEEE 1985 Custom Integrated Circuits Conference, June, 1985, pp. 15-17; LSI Semiconductor Device and Fabrication Thereof, Balyoz et al., U.S. Pat. No. 4,249,193, Feb. 3, 1981. 
     Although the channelless technique yields significant improvements in density over the traditional gate array approach, this technique (because it is not customized for a particular design) still inevitably results in unused resources and hence wasted space. Such wasted space leaves less room for minimizing the size of active transistor elements, thereby resulting in greater chip area dedicated to routing, and hence slower performance. 
     One alternative to using gate arrays is to use previously created libraries of standard cells. One significant advantage to such an approach is the greater density achieved within each standard cell itself (although not within the channels dedicated to routing connections among standard cells). It is not difficult to understand why a custom 4-bit counter cell, for example, is far more dense than the equivalent counter designed with a gate array Knowing in advance which transistors will be used for a desired function yields significantly greater density. 
     Standard cell design techniques, however, create at least two significant problems First, although each standard cell is quite dense, the design of complex functions requires that significant space on the integrated circuit be allocated to route connections among such standard cells. The space dedicated to routing channels often exceeds (for complex functions) the space dedicated to the functional units (e.g., transistors) themselves. 
     A channelless approach to standard cell design (analogous to that employed with gate arrays) results in a minor increase in density, although not nearly of the significance of the density increases yielded by channelless gate arrays. See Raza et al., &#34;Channelless Architecture: A New Approach For CMOS Standard Cell Design,&#34; IEEE 1985 Custom Integrated Circuits Conference, June, 1985, pp. 12-14 for a discussion of channelless standard cell design. 
     The relatively minor density improvement yielded by channelless standard cells can be explained by the difference between gate array and standard cell design. Small areas at the boundaries of standard cells are used for routing, rather than creating dedicated routing channels between cells. While this approach yields some improvement in density, little room for improvement remains within each individual cell due to the customized design of each such cell. In other words, traditional gate arrays leave far greater room for density improvements than do standard cells, because individual gate resources can simply be moved up to replace formerly dedicated routing channels in places where (after the functionality has been determined) little routing actually occurs. 
     A second disadvantage to standard cell design techniques is the limited ability to achieve changes in functionality when bugs are found or functional modifications are desired. Aside from modifying the routing between cells, little room for functional changes exists. Making even slight modifications to a hand-crafted standard cell is quite difficult, and often requires that many layers of the cell be laid out again from scratch. 
     Another design alternative, and one which significantly increases chip density, is to create a fully customized layout for each integrated circuit. Not surprisingly, custom integrated circuits are difficult both to design and to modify, and thus require significantly more time and expense than either gate array or standard cell design methods. 
     A cheaper, more flexible alternative to custom designs is the logic array. Logic arrays provide flexibility comparable to that of gate arrays, but in a different manner. Logic arrays facilitate (some to a greater extent than others) the creation of &#34;distributed functionality&#34;--i.e., functions, such as logic gates, whose inputs, outputs and functional units (e.g., transistors) are distributed throughout the integrated circuit, as opposed to being self-contained within a discrete area, as in a gate array. 
     The concept of distributed functionality is quite important because it enables the logic designer to vary the number, and often the location, of inputs, outputs and functional elements. Typical logic arrays such as PLAs and PALs, however, permit relatively little distribution of functionality. Although the number and location of the inputs to individual gates along each row of the &#34;AND&#34; and &#34;OR&#34; arrays can be modified, the entire length of an array row is utilized whether it forms a two-input or a ten-input AND/OR gate. Moreover, the gate resources themselves cannot be relocated throughout the array, nor can functional distribution beyond the &#34;gate level&#34; be achieved (because each &#34;sum of products&#34; occupies an entire row and column of the array, the result of which must be fed back into the array, if possible, as an input). 
     Another type of logic array, however, known as a storage logic array or SLA, enables a more significant distribution of functionality than is possible with a PLA or PAL. SLAs permit the AND and OR arrays to be interleaved. In addition, SLAs provide means for segmenting the array&#39;s rows and columns, as well as for connecting storage elements to any row/column segment. These features dramatically increase design ease, not by limiting flexibility, but by permitting the creation of isolated functionality, such that intermediate results of computations may be utilized within other portions of the array itself. See, e.g., Storage/Logic Array, Patil, U.S. Pat. No. 4,293,783, Oct. 6, 1981; Asynchronous Logic Array, Patil, U.S. Pat. No. RE No. 31,287, Jun. 21, 1983; Storage Cells For Use in Two Conductor Data Column Storage Logic Arrays, Knapp et al., U.S. Pat. No. 4,442,508, Apr. 10, 1984; Storage Logic Array Having Two Conductor Data Column, Knapp et al., U.S. Pat. No. 4,414,547, Nov. 8, 1983. 
     SLAs can, of course, be utilized in the same manner as are PLAs and PALs, with the added benefits of achieving isolated functionality (by segmenting array rows and columns) and faster feedback mechanisms (by employing storage elements within the array itself, rather than merely along the periphery). But, adoption of the SLA approach does not in and of itself yield integrated circuits with densities approaching that of custom designs. 
     What is needed to achieve such densities is an implementation of the basic SLA approach which permits functionality not only to be isolated within discrete areas of the array, but also to be distributed throughout that area (or perhaps throughout the entire array itself). 
     Although others have in the past considered applying SLA to other technologies, such as the static CMOS technology employed in the preferred embodiment of this invention, such approaches have previously been analyzed from a limited, local perspective, and thus thought to yield insufficient densities. See, e.g., Smith, Kent F., &#34;Design of Regular Arrays Using CMOS in PPL, 1983 IEEE International Conference on Computer Design/VLSI in Computers,&#34; Oct. 31, 1983-Nov. 3, 1983. In fact, as is demonstrated below, the use of static CMOS technology not only provides for low power usage, high speed and relatively high noise immunity, but also yields global densities formerly achieved only with hand-crafted, custom designs. 
     SUMMARY OF THE INVENTION 
     The preferred embodiment of this invention (the Cirrus CMOS Cell Set described below) enables a significant degree of distribution of functionality by providing for the &#34;tiling&#34; of subgate and other subfunction components throughout an SLA using a set of static CMOS tiles, while still maintaining the flexibility of modifying individual functional units (tiles) via late mask programming techniques. 
     By enabling the distribution of functionality throughout a storage logic array, this invention facilitates the creation of dense integrated circuits which can be modified quite easily. As is explained below, however, such high densities are achieved not locally (within individual tiles) but globally (throughout the entire integrated circuit), by dramatically reducing the required area for routing interconnections among individual tiles. 
     This invention achieves densities approaching that of hand-crafted, custom designs while still maintaining a significant degree of repairability. It involves the mapping of a set of standard &#34;tiles&#34; (logic and/or memory elements) onto one or more grids of a storage logic array, thus combining the advantages of standard cell, gate array and logic array techniques. In effect, this invention yields, for the first time, integrated circuits with densities approaching that of custom designs, yet which are relatively simple both to design (via tiling) and to modify (via late mask programming). 
     Disclosed is a set of dense component tiles, consisting in part of subgate elements, which make possible a unique logic design and layout approach. These tiles enable the designer of an integrated circuit to achieve a dense circuit simply by tiling such components throughout a storage logic array, creating, for example, orthogonal logic gates as well as individual gates (and more complex functions) which are distributed horizontally, vertically and even in a zigzag fashion, without forfeiting the ability to modify the functionality of individual tiles by late mask programming techniques. 
     In one respect, the preferred embodiment of this invention consists of a set of static CMOS tiles, consisting of both memory elements, such as flip flops, and logic elements ranging from subgate components to decrementers, adders and ALUs. This set of tiles, however, has a number of advantageous characteristics, the combination of which is not only unique, but also enables the design of extremely dense integrated circuits which are easy both to design and to modify. 
     Like typical standard cells, the individual tiles of this invention are quite dense--because the intended function of each tile is predetermined. Unlike traditional standard cells, however, the tiles of this invention include subfunction (e.g., subgate) components. 
     For example, one such tile is a horizontal sub-NAND gate, the layout of which consists of one n-channel and one p-channel transistor. By dissecting the CMOS NAND gate into components at the gate&#39;s &#34;lowest common denominator,&#34; it becomes possible to design subgate tiles in such a manner as to permit the &#34;tiling&#34; of adjacent cells to form larger, more complex functional units, without requiring dedicated routing channels (or, for that matter, few if any routing channels outside the boundaries of the individual tiles themselves). 
     This tiling concept yields a number of significant benefits. One such benefit of this tiling of subgate components is that the design and layout of arbitrary gates of fanin &#34;n&#34; is greatly simplified. For example, with a horizontal sub-NAND gate tile, both the logic design and layout of an n-input static CMOS NAND gate can be achieved simply by tiling n of these tiles together. 
     The two endmost tiles (connecting to &#34;ground&#34; and to the gate output) are distinguished by appropriate differences in the uppermost three mask layers (in the preferred embodiment), while the middle tiles (creating a series of n-channel and p-channel transistors) are identical to one another. This tiling process is described below in greater detail. 
     What is significant about this horizontal sub-NAND gate tile is that, with this one tile (whether programmed as a leftmost, rightmost or middle tile), an arbitrary n-input horizontal NAND gate can be constructed with no additional space dedicated for routing. 
     Additional benefits of logic arrays are also achieved, by utilizing the SLA array structure to permit an almost arbitrary distribution of functionality. Unlike a PLA or PAL, a gate need not occupy an entire row and/or column of the array. 
     The tiles of an n-input NAND gate need not even be adjacent. By utilizing unused array conductor wires (&#34;free conductor&#34; wires) of a &#34;special blank&#34; subfunction tile (which cannot, without modification, perform any sub-NAND gate function) or of a &#34;normal subfunction&#34; tile (i.e., the other sub-NAND gate tiles of the class of horizontal sub-NAND gate tiles), one can distribute the inputs, outputs and functional elements of an n-input NAND gate partially or totally across an SLA row or down an SLA column. 
     The &#34;free conductor&#34; wires of a normal subfunction (or a special blank) tile permit signals to be passed between two tiles, each of which is adjacent to the tile with the unused wires, but not to each other. By repeating this technique with additional tiles containing such unused wires (&#34;free conductor tiles&#34;), signals can be passed along virtually any row or column of the array. Signals can also be passed straight through another type of tile (across any row or column) which is truly a &#34;blank&#34; tile, containing solely metal row and column conductors. 
     Orthogonal gates can be created, for example, by passing the output signal along a row wire of a horizontal gate&#39;s tile to the input signal along a column wire of an adjacent tile of a vertical gate. Moreover, by employing special &#34;ohmic&#34; contact tiles, an individual gate can even &#34;zigzag&#34; across rows and down columns throughout the array. Functionality can thus be distributed almost arbitrarily throughout the SLA structure, particularly by utilizing these &#34;free conductor tiles&#34; (whether the free row or column conductors are found in normal subfunction tiles, special blank tiles, blank tiles or ohmic contact tiles). 
     This distribution of functionality is by no means restricted to logic gates. More complex functions can be created by tiling together &#34;subfunction&#34; components, each of which consists of one or more basic tiles, yielding an extremely dense integrated circuit which is relatively simple to design. Such an approach lends itself quite well to automated software design tools. 
     Because these tiles are, in essence, mapped onto a storage logic array, the actual layout will require few if any additional routing channels while permitting both the number and location of function inputs, outputs and active elements to be varied almost without limitation. This degree of design flexibility exceeds that of PLAs, in which only gate inputs can be distributed, and even then only across a row of the &#34;AND&#34; array, the length of which is the same regardless of the number of such inputs. 
     Finally, the functionality of individual tiles can be modified easily, by late mask programming techniques. For example, the orientation of a sub-NAND gate tile (e.g., leftmost, rightmost or middle) can be altered, yielding a significant degree of repairability, perhaps even exceeding that of a gate array (which can be altered, but only by effecting significant modifications to the uppermost mask layers). 
     Although such changes might on the surface appear minor, significant functional modifications are made possible, such as the transformation of an individual logic gate into multiple gates, as well as the modification of the number and location of inputs. In particular, the ability to modify the control portion of an integrated circuit is enhanced significantly. 
     Thus, as a result of designing subfunction tiles that can easily be tiled together, thereby enabling the distribution of functionality throughout a storage logic array without requiring dedicated routing channels, an extremely dense integrated circuit can be obtained. In fact, the density yielded by this invention approaches that yielded by full custom designs, but with the significant added advantage of repairability, permitting the designer to effect functional modifications within individual cells (at the gate or even subgate level) via late mask programming techniques. 
     Moreover, as routing area is decreased, performance is enhanced Design time is also significantly decreased due to the ease of tiling, and then subsequently repairing or enhancing individual tiles (by transforming them into other tiles of the same &#34;tile class&#34;), thereby enabling designers to move rapidly from a prototype to high volume production. 
     In summary, the preferred embodiment of this invention encompasses a set of customized tiles described in detail below. By tiling these tiles together, much as a child builds houses and trees with a set of basic &#34;LEGO&#34; blocks, the integrated circuit designer obtains a number of significant benefits, including design ease, performance and flexibility beyond that yielded by gate arrays, PLAs and PALs (due to the ability to distribute functionality throughout a storage logic array), density beyond that obtained with channelless gate arrays and standard cells, and approaching that of full custom designs (due to the tiling of subfunction components), and repairability, via late mask programming techniques, comparable to that afforded by gate arrays (due to the incorporation of individual subfunction tiles within the structure of an SLA). 
     This invention will be more fully understood in conjunction with the following detailed description, illustrated by the attached drawings. 
    
    
     BRIEF DESCRIPTION OF THE DRAWINGS 
     FIGS. 1a, 1b, 1c and 1d illustrate typical gate array, channelless gate array, standard cell and PLA structures, respectively. 
     FIG. 2 illustrates a structure created by tiling together component tiles of the Cirrus CMOS Cell Set (the preferred embodiment of this invention) onto an SLA template. 
     FIG. 3 illustrates the SLA template &#34;grid,&#34; one or more of which is utilized to map each tile onto the SLA structure. 
     FIGS. 4a and 4b illustrate a typical n-input static CMOS NAND gate circuit and its standard cell layout, respectively. 
     FIGS. 5a and 5b illustrate the circuit/layout schematic of n-input Cirrus CMOS Cell Set horizontal and vertical NAND gates, respectively. 
     FIG. 6 illustrates how, by mere metal and via mask changes, a horizontal sub-NAND gate tile can be transformed among any of five different tile orientations, thereby enabling the creation of arbitrary n-input horizontal NAND gates. 
     FIGS. 7a, 7b, 7c, 7d and 7e illustrate tiles of various tile classes in the Cirrus CMOS Cell Set (in addition to distributed logic subgate tiles), including, respectively, &#34;connectivity and interface&#34; tiles, &#34;inverter&#34; tiles, &#34;transmission gate&#34; tiles, &#34;storage&#34; tiles, and a relatively complex class of logic tiles, which perform the &#34;exclusive NOR&#34; (XNOR) function. 
     FIGS. 8a, 8b and 8c illustrate how, by utilizing two special tiles (a &#34;blank&#34; tile and an &#34;ohmic&#34; contact tile) along with the two classes of horizontal and vertical sub-NAND gate tiles, one can create multiple orthogonal logic gates as well as an individual logic gate whose inputs, outputs and active transistors are distributed along a particular SLA row or column, or throughout the array in a zigzag fashion. Illustrated are the circuit, logic and symbolic schematics, respectively. 
     FIGS. 9a and 9b illustrate how complex functions can be designed by tiling together tiles among various classes of tiles, thereby distributing the inputs, outputs and active components of complex functions (not merely logic gates) throughout the SLA. Illustrated are the transistor and logic schematics, respectively. 
     FIGS. 10a, 10b and 10c illustrate the logic schematic and two Cirrus CMOS Cell Set layout representations of a relatively complex combinational logic circuit. 
     FIGS. 11a, 11b, 11c and 11d illustrate potential complex extensions to the basic building block tiles of the Cirrus CMOS Cell Set, including dynamic AND and OR gates, static CMOS &#34;complex gates&#34; and dynamic CMOS &#34;complex gates.&#34; 
     FIGS. 12a, 12b, 12c and 12d illustrate the significant degree of repairability, via late mask programming, afforded Cirrus CMOS Cell Set users. Illustrated are the state graph, tabular and symbolic (before and after repair) representations, respectively, of the control portion of a finite state machine. 
    
    
     DETAILED DESCRIPTION OF THE PREFERRED EMBODIMENT 
     The following description is meant to be illustrative only and not limiting. While the preferred embodiment of this invention is described, other embodiments (which implement the same modular, yet repairable design features of this invention, but which utilize different tiles, sets of tiles and layout technologies) will be obvious in view of the following description. 
     Tiling in a Storage Logic Array 
     FIGS. 1a-1d, when contrasted with FIG. 2, illustrate the dramatic differences between prior art approaches and that of the preferred embodiment--the Cirrus CMOS Cell Set, consisting of cells (&#34;tiles&#34;) to be tiled onto a storage logic array template. 
     For example, the typical &#34;gate array,&#34; although highly repairable through late mask programming, has significant density problems, illustrated quite clearly in FIG. 1a. Because the Random Logic area 1 (consisting, in this example, of four &#34;gates&#34; or more complex functions, A, B, C and D) is not determined prior to fabrication of the underlying active logic resources, it is inevitable that certain of those resources will be unused in the final integrated circuit (as illustrated in the Unused Logic Area 2). 
     In addition to this wasted space for the active logic resources themselves, additional loss of density occurs due to the gate array&#39;s dedicated routing channels 3 and 4. Just as certain logic resources go unused, it is also inevitable that the gate array&#39;s use of fixed-width routing channels will result in unused channels 5 once the actual logic is implemented and interconnections are determined. 
     Some of these unused routing channels and unused active logic resources can be reclaimed, as illustrated in FIG. 1b, by a structure known as a channelless gate array. Rather than defining fixed routing channels, the channelless gate array utilizes a &#34;sea of gates&#34; (i.e., active logic elements throughout the entire integrated circuit) which can be used for mere routing. 
     In essence, if we assume that routing channel 3, between the Flip Flops 6 and Random Logic area 1 in FIG. 1a, is no longer a fixed-width routing channel, that area can then be utilized for both logic and routing, by &#34;pushing up&#34; both the actual routing 7 and the Random Logic area 1 over the area formerly occupied by unused routing channels 5. In other words, because channelless gate arrays have no fixed routing channels, they enable this wasted space to be reclaimed. 
     Thus, looking at FIG. 1b, instead of beginning with dedicated logic and routing channels, the channelless gate array initially is comprised of a &#34;sea of gates&#34; any area of which can be used to build random logic, with the remaining areas being utilized for the necessary routing. Once Random Logic area 1 has been determined (with functions A, B, C and D occupying, of course, the same area as the Random Logic area 1 in FIG. 1a), it can be placed as close to the Flip Flops 2 as is possible while still leaving sufficient area for the actual routing 3 between Random Logic area 1 and Flip Flops 2. In essence, the unused routing channels 5 and unused logic area 2 of FIG. la are reclaimed for other routing 4 between Random Logic area 1 and any additional logic which may be required on the channelless gate array in FIG. 1b. 
     Yet, even channelless gate arrays do not achieve densities comparable to those of standard cell designs, as illustrated in FIG. 1c. Although the Routing Area 1 of a standard cell design is roughly as large as that of a channelless gate array, significant improvements in density occur in the Flip Flops 2 and in the Random Logic 3, because these components (&#34;standard cells&#34;) are designed &#34;from scratch.&#34; Thus, for example, each of functions A, B, C and D is compressed into a relatively dense area because only the necessary logic resources are used, and they are placed so as to provide for minimal routing among such resources. 
     The disadvantage of standard cell (custom) designs, however, is that they cannot be modified without redesigning many of the base layers of the integrated circuit (unlike gate arrays, which can be modified relatively easily, via late mask programming techniques). 
     Finally, FIG. 1d illustrates another common design approach, the PLA, in which the routing area 1 between the active logic elements (contained within the AND and OR arrays 2 and 3) and the flip flops 4 is comparable to that of standard cells and channelless gate arrays. Yet, the area occupied by the active logic elements within the AND and OR arrays 2 and 3 is significantly larger than, for example, the random logic within standard cells. Yet, the PLA offers not only a significant degree of repairability (via late mask programming), but also the ability, albeit limited, to distribute the functionality of individual logic gates. The significance of distribution of functionality is discussed in greater detail below. 
     Thus, the prior art techniques illustrated in FIGS. 1a-1d, as well as hand-crafted, custom design techniques, all sacrifice to a significant degree either density (gate arrays, channelless gate arrays and PLAs) or repairability (standard cells and hand-crafted custom designs). 
     Comparing these prior art design techniques with the Cirrus CMOS Cell Set tiling approach illustrated in FIG. 2, it is apparent that the preferred embodiment of this invention virtually eliminates the need for routing channels (much less dedicated, fixed-length routing channels). Individual &#34;tiles&#34; (such as the Flip Flops 1 and logic functions 2 illustrated in FIG. 2) are tiled together with adjacent tiles much like a child connects adjacent &#34;LEGO blocks.&#34; 
     Although certain distributed function tiles (as opposed to large single function tiles, such as flip flops) might not be quite as dense as their &#34;standard cell&#34; counterparts, the significant increase in inter-tile routing density afforded by the flexible approach of tiling adjacent subgate (or more complex &#34;subfunction&#34;) components on an SLA template more than compensates for the lower density of individual tiles, resulting in overall densities approaching that of custom, hand-crafted designs. 
     This result can be explained by the fact that a significant portion of the area occupied by complex integrated circuits is utilized by the interconnections (routing) among logic and/or memory elements. Thus, this invention increases overall density not by increasing the number of logic and/or memory elements (e.g., transistors) on an integrated circuit, but by decreasing the amount of routing area required to interconnect such elements. 
     Moreover, as demonstrated below, the flexibility afforded by the design of the Cirrus CMOS Cell Set tiles (e.g., subgate tiles) provides the designer with the ability not only to distribute complex functionality throughout a dense integrated circuit, but to repair and enhance that functionality through late mask programming techniques. 
     Tiled Logic Gates Using the Cirrus CMOS Cell Set 
     The individual tiles of the Cirrus CMOS Cell Set are each mapped onto one or more grids of a storage logic array. A typical grid is illustrated in FIG. 3 (although the basic grid can, of course, be varied in other embodiments of this invention). 
     In the odd column, the grid consists of four horizontal signal wires, O (Orange), Y (Yellow), C (Cyan) and U (Umber) on the lower metal layer, four vertical signal wires, B (Blue), G (Green), R (Red) and P (Purple), on the upper metal layer, and power Vdd and ground GND wires running vertically along the left and right edges, respectively. In even columns, the vertical wires (B, G, R and P) and the power Vdd and ground GND wires are reversed (i.e., from left to right, GND, P, R, G, B and Vdd). 
     The grid is designed such that one grid overlaps with the next adjacent grid in the same row, enabling the sharing of power Vdd and ground GND wires between adjacent grids. The basic philosophy of building wires in the Cirrus CMOS Cell Set is that each tile (including the one or more grids upon which that tile is mapped) provides the necessary &#34;wire pieces&#34; within that tile. 
     When individual tiles are tiled together (or when one tile occupies multiple grids), the wire pieces do not form one continuous wire, but actually leave small gaps at the interface between tiles and/or grids. Small pieces of wires, known as &#34;joins,&#34; fill in these gaps. This technique greatly facilitates the process of modifying (whether repairing or enhancing) previous designs utilizing software design tools. 
     Thus, individual tiles of the Cirrus CMOS Cell Set each occupy one or more grids of a storage logic array. Logic gates, for example, are constructed by tiling together individual subgate tiles, rather than by designing a custom gate. This approach provides far greater flexibility not only for the design but for the subsequent modification of integrated circuits. 
     Consider the example of a static CMOS NAND gate. A typical circuit schematic of an n-input static CMOS NAND gate is illustrated in FIG. 4a. Note that the gate consists of a set of p-channel transistors 1 (with the drain of each such transistor tied together to the output wire 2, and the sources connected to the power wire (Vdd) 3) and a series of n-channel transistors 4 (with one end of the series connected to the output wire 2 and the other end connected to the ground wire (GND) 5) Each input (I1-In) 6 to the gate is connected to one p-channel and one n-channel transistor gate. 
     A typical layout footprint of a hand-crafted (standard cell) and lumped construction of this n-input static CMOS NAND gate is illustrated in FIG. 4b. The gate functionality is lumped into a rectangular area 1, with the power 2, ground 3, inputs 4 and output terminal 5 brought out at the periphery of the block. 
     The n-input static CMOS NAND gates constructed in this manner would require a customized design for each value of &#34;n.&#34; Moreover, changes to that design, such as converting a three-input gate to a four-input gate, would require an entirely new cell layout. 
     Using the Cirrus CMOS Cell Set, however, far greater flexibility is permitted for both the design and subsequent modification of such a gate. FIGS. 5a and 5b illustrate how horizontal and vertical n-input static CMOS NAND gates are constructed, respectively, using subgate tiles of the preferred embodiment of this invention. 
     These subgate tiles take advantage of the fact that a common component of static CMOS NAND gates is the pairing of one n-channel and one p-channel transistor. Thus, each subgate tile contains one n-channel and one p-channel transistor. The only difference between the various horizontal sub-NAND gate tiles (discussed in greater detail below) is the interconnection of the sources and drains of these transistors to power, ground or I/O wires. 
     This division of logic gates into their components facilitates the tiling of these subgate tiles, by enabling the mask layers of these tiles to be identical, with the exception of the metal and via layers. Not only can one tile together the different subgate tiles of each class (e.g., horizontal NAND gates) to form arbitrary n-input logic gates, but one can also transform any such subgate tile into another subgate tile of the same class, merely by modifying the metal and via layers, via late mask programming. 
     FIG. 5a illustrates three different horizontal sub-NAND gate tiles of the Cirrus CMOS Cell Set. The n-p transistor pair 1 on the far left of FIG. 5a can be described as a &#34;leftmost&#34; horizontal sub-NAND gate tile, while the transistor pair 2 on the far right can be described as a &#34;rightmost&#34; horizontal sub-NAND gate tile, and the transistor pairs 3 and 4 in the middle as &#34;middle&#34; horizontal sub-NAND gate tiles. The underlying base layers of each of these tiles are identical, but one can create horizontal n-input NAND gates merely by modifying the metal and via layers. 
     The source of each p-channel transistor (1p, 3p, 4p and 2p from left to right) is connected to &#34;power&#34; (Vdd) 5, while the drain of each such transistor is connected to the logic gate&#39;s output wire 6. The transistor gates of each n-p transistor pair are connected together via the corresponding input wires, I1, I2, I3 and In. 
     Because the n-channel transistors must form a serial chain (i.e., to &#34;ground&#34; the output signal only if every n-channel transistor in the chain is &#34;turned on&#34; by a &#34;high&#34; input), the sources and drains of these transistors must be connected differently depending upon their position in the chain (leftmost, rightmost or middle). 
     At the ends of the chain, the drain of leftmost n-channel transistor 1n connects to the logic gate&#39;s output wire 6, and the source of rightmost n-channel transistor 2n connects to &#34;ground&#34; (GND) 7. The source of leftmost n-channel transistor 1n connects to the drain of the n-channel transistor immediately to its right in the chain. Similarly, the drain of rightmost n-channel transistor 2n connects to the source of the n-channel transistor immediately to its left in the chain. 
     The sources of middle n-channel transistors 3n and 4n are connected to the drains of the n-channel transistors immediately to their right in the chain, whereas their drains are connected to the sources of the n-channel transistors immediately to their left in the chain. These wires, along which signals are merely transferred from one transistor to the next transistor in the chain, are referred to as &#34;lame&#34; wires. 
     Thus, utilizing these three types of sub-NAND gate tiles, one can construct n-input horizontal NAND gates, merely by tiling (n-2) &#34;middle&#34; tiles in between a leftmost and a rightmost tile. To create a one-input NAND gate (i.e., an inverter), however, requires a fourth type of tile, the n-channel transistor of which has its source connected to ground and its drain connected to the output wire. 
     Moreover, a fifth type of tile, a special blank tile (described in greater detail below), enables the distribution of subgate tiles, and thus logic gate functionality, with arbitrary columnar position of each input. Even without utilizing special blank tiles, certain row or column conductor wires of an individual tile may be &#34;free&#34; to transmit signals along that tile to the next adjacent tile. 
     In essence, this set of tiles permits the construction of horizontal NAND gates of arbitrary logical and physical &#34;spread.&#34; As will be explained below, the significant power and flexibility afforded by this &#34;tiled functionality&#34; approach enables the creation (and subsequent modification) not only of individual logic gates, but of extremely complex functions. 
     The vertical sub-NAND gate tiles illustrated in FIG. 5b are virtually identical to those in FIG. 5a, except that the inputs are transmitted along horizontal wires and the output along a vertical wire. The orientation of the transistor pairs is, of course, aligned accordingly, requiring slightly different base mask layers. Although one cannot transform a horizontal sub-NAND gate tile into a vertical sub-NAND gate tile via late mask programming (at least in the current preferred embodiment), these two classes of tiles can be tiled together (as illustrated below) to form even &#34;zigzag&#34; NAND gates, as well as orthogonal structures, the functionality of which is distributed along rows and columns throughout the array. 
     Late Mask Programming of Individual &#34;Tiles&#34; 
     As discussed above, there are five distinct classes of horizontal sub-NAND gate tiles, the layout of each differing from that of the others with respect only to the metal and via mask layers. FIG. 6 illustrates the layout of each of these five classes (leftmost, middle, rightmost, inverter and special blank, respectively), including the metal and via layer connections unique to each class. Although three-layer (two metal and via) late mask programming is utilized in the preferred embodiment of this invention, comparable results might be achieved by modifying different combinations of mask layers (e.g., some or all of the uppermost four layers, including the layer connecting lower metal to the poly layer under which transistor sources and drains are formed by diffusion). 
     The layout symbology used in FIG. 6 (composed of FIGS. 6a and 6b) is illustrated in the legend near the bottom of FIG. 6b. The different mask layers are represented by differently shaded symbols. The &#34;Upper metal&#34; rectangular regions are those vertical regions outlined by thick dashed lines, while the &#34;Lower metal&#34; regions are those horizontal regions represented by solid lines with no fill. The &#34;Via&#34; layer, which connects the upper and lower metal regions, is shown by dark boxes each having an X fill, while the &#34;Contact&#34; layer, which connects the lower metal and polysilicon/diffusion layers, is represented by boxes filled with closely-spaced hatching. 
     The actual transistors are formed by the polysilicon layer (&#34;Poly&#34;), which includes the transistor gate and is represented by the widely spaced hatched areas, and on the diffusion layer (&#34;Diffusion&#34;), which includes the transistor source and drain and is represented by the dot-filled areas. 
     The dot outlines with no fill (&#34;p plus&#34;) represent the heavily doped p regions which form the source and drain of p-channel transistors. Thus, the transistors on the left side of each tile are the n-channel transistors, while the transistors on the right side are the p-channel transistors. The ground (GND) and power (Vdd) signals are shown running along the upper metal wires on the left and right sides, respectively, of each sub-NAND gate tile. 
     Looking at tile A in FIG. 6 (i.e., the leftmost sub-NAND gate tile of a horizontal NAND gate), it can be seen that the transistor gates 1 and 2 of the n-channel and p-channel transistors, respectively, are tied together by common polysilicon 3, which connects transistor gates 1 and 2 to the vertical upper metal input wire labeled &#34;IN&#34; for one of the NAND gate inputs, through contact 4 and via 5 connections. Connections 4 and 5 enable the input along that vertical upper metal wire to be transmitted to the transistor gates of both the n-channel and p-channel transistors of this leftmost sub-NAND gate tile (as is illustrated at the circuit level in FIG. 5a). 
     The p-channel transistor source 6 is connected to the vertical upper metal wire labeled &#34;Vdd&#34; through contact 7 and via 8 connections. The drains 9 and 10 of the n-channel and p-channel transistors, respectively, are each connected to the horizontal lower metal wire labeled &#34;OUT,&#34; through contact connections 11 and 12, respectively. Finally, the n-channel transistor source 13 is connected to the horizontal lower metal wire labeled &#34;SERIES,&#34; through a contact 14 connection. Note that, in this leftmost tile A, diffusion region 15, although connected to the vertical upper metal layer wire labeled &#34;GND,&#34; through contact 16 and via 17 connections, is not connected to either the n-channel or p-channel transistors (but is used for connecting the &#34;well&#34; to a fixed biasing potential). 
     Now, comparing the other tiles illustrated in FIG. 6 with the leftmost tile, it can be seen that the only differences are in the source and drain connections of the n-channel transistor (as is also illustrated, at the circuit level, in FIG. 5a). 
     Thus, in tile B (a &#34;middle&#34; horizontal sub-NAND gate tile), instead of connecting the drain 18 of the n-channel transistor to the output wire (OUT), drain 18 is connected to the series wire (SERIES), which carries the signal from the adjacent sub-NAND gate tile on this tile&#39;s right to the adjacent sub-NAND gate tile on this tile&#39;s left. 
     In tile C (a &#34;rightmost&#34; horizontal sub-NAND gate tile), the n-channel transistor drain 19 is also connected to the series wire (SERIES), but, instead of also connecting the source 20 of that n-channel transistor to the series wire, source 20 is connected to the vertical upper metal layer ground wire (GND), to initiate the process in which a &#34;low&#34; signal is transmitted along the chain, to reach the output wire (OUT) only if all inputs are &#34;high.&#34; 
     In tile D (a &#34;one-input horizontal NAND gate&#34;--i.e., an inverter), the drain 21 of the n-channel transistor is connected to the output wire (as in &#34;leftmost&#34; tile A), and the source 22 of that n-channel transistor is connected to the ground wire (as in &#34;rightmost&#34; tile C). Thus, if the one input is &#34;high,&#34; the n-channel transistor will be activated (and the p-channel transistor will not), causing the ground signal (GND) to be transmitted to the output wire (OUT). Otherwise, if the one input is &#34;low,&#34; the p-channel transistor will be activated (and the n-channel transistor will not), causing the power signal (Vdd) to be transmitted to the output wire (OUT). Thus, this one tile performs the function of a static CMOS inverter. 
     Finally, tile E (the &#34;special blank&#34; tile) is somewhat unique, in that it performs no active function unless it is modified (via late mask programming), but contains the same underlying base layers as the other horizontal sub-NAND gate tiles and can thus be transformed into any one of such tiles (if the appropriate enhancements or repairs are desired). 
     Moreover, if an active function is not desired, but rather, one desires simply to pass the signals from an adjacent tile along a row of the SLA so as to enable the distribution of NAND gate inputs along that row, then this tile is ideally suited for that task. Of course, the free conductor wires of any free conductor tile would be just as effective (in the event that such wires happen to be available). 
     Looking at this &#34;special blank&#34; tile, it can be seen that the only via connections 23 and 24 are to the power (Vdd) and ground (GND) wires, respectively. For example, no via exists between the input wire (IN) and the common polysilicon 25 from which the transistor gates of the n-channel and p-channel transistors are formed. 
     The sources 26 and 27, of the n-channel and p-channel transistors are &#34;initialized&#34; to GND and Vdd, respectively. The drains 28 and 29 of these transistors are tied together, while the transistor gates 30 and 31 of these transistors are connected to the ground wire (GND). These connections effectively &#34;initialize&#34; both the n-channel and the p-channel transistors to an inactive state. 
     Yet, contact connections 32, 33, 34 and 35 are made, respectively, from the n-channel transistor source 26 and drain 28, common polysilicon 25 (in which the n-channel 30 and p-channel 31 transistor gates are formed) and p-channel transistor drain 29. With these connections already in place, additional via connections to upper metal wires will transform this &#34;special blank&#34; tile into any of the four other &#34;active&#34; horizontal sub-NAND gate tiles (normal subfunction tiles). Even if this transformation is not desired, all four upper metal and the top and bottom lower metal wires are available for use as &#34;free&#34; wires (to route signals from one adjacent tile to another). 
     Thus, FIG. 6 illustrates that any of the five horizontal sub-NAND gate tiles can be transformed into any other such tile via late mask programming. This degree of flexibility permits significant enhancements and repairs even to complex logic functions. In the control section of a microprocessor, for example, changing the position and number of inputs of certain logic gates effects significant functional changes. Examples of such complex modifications are illustrated below. 
     Illustrations of the Various Tile Classes of the Cirrus CMOS Cell Set 
     In addition to the class of horizontal NAND gates, the Cirrus CMOS Cell Set includes a number of other classes of logic (and even memory) tiles. Other tile classes of distributed subgate tiles are vertical NAND gates, and horizontal and vertical NOR gates (all of which are based on the same principle of dividing the gate elements into common active components, such as the n-p transistor pairs of the horizontal sub-NAND gate tiles). 
     FIG. 7a illustrates the SLA template/circuit schematic of a tile of one of the classes of &#34;connectivity and interface tiles,&#34; in which a single constant output (in this case, &#34;ground&#34;) 1 is transmitted along two lower metal horizontal wires 2 and 3. What is significant about this relatively simple tile, in addition to the possible variations regarding the wire on which constant output signal 1 is transmitted, is the use of horizontal &#34;free&#34; wires 4 and 5, and vertical free wires 6, 7, 8 and 9, which enable the signals of particular tiles to be transmitted along rows and columns of the array to non-adjacent tiles, thus effecting a significant distribution of functionality. 
     FIG. 7b illustrates both the SLA template and the corresponding circuit schematic of a tri-state inverter tile. Note that this one tile occupies four of the basic SLA grids, and includes a relatively large number of free wires, enabling this common tile to be placed frequently throughout an integrated circuit. 
     The logical tri-state is achieved if the enable signal 1 is &#34;low&#34; (and thus its complement 2 is &#34;high&#34;) because neither n-channel transistors 3 and 4 nor p-channel transistor 5 is activated. If, however, enable signal 1 is &#34;high,&#34; activating n-channel transistors 3 and 4, then a &#34;high&#34; input signal 6 will be inverted, by activating n-channel transistors 7 and 8, permitting &#34;ground&#34; signal 9 to flow to output 10. If input 6 is &#34;low,&#34; that signal is inverted, by activating p-channel transistor 11, permitting power signal &#34;Vdd&#34; 12 to flow to output 10 (through p-channel transistor 5 which is activated by the &#34;low&#34; complement 2 of &#34;high&#34; enable signal 1). 
     FIG. 7c illustrates the SLA template, and circuit schematic, of a tile of the class of &#34;in-line horizontal transmission gate&#34; tiles. This tile, which occupies only one SLA grid, provides a switch which, when enabled by enable signal 1, activating n-channel transistor 2 (while the complement 3 of enable signal 1 activates p-channel transistor 4), causes input signal 5 to pass through this tile and be transmitted as output signal 6. By setting enable signal 1 &#34;low,&#34; neither n-channel transistor 2 nor p-channel transistor 4 will be activated, thus leaving output signal 6 unaffected. Thus, the state of enable signal 1 determines whether the switch will be &#34;on&#34; (allowing input signal 5 to flow through to output signal 6) or whether the switch will be &#34;off&#34; (preventing input signal 5 from flowing through to output signal 6). Note that this tile can function equally well as a transmission gate in the other direction (i.e., transmitting signal 6 into this tile and out again as signal 5). 
     FIG. 7d illustrates both the SLA template and associated circuit schematic for one of the classes of storage tiles, a basic clocked &#34;latch.&#34; Note that this tile occupies four SLA grids, and contains a relatively large number of free wires, to facilitate the tiling of this tile to an adjacent tile of another class, such as a subgate logic tile (which receives its input from the output of this latch and performs some logic function on that input). The ability to tile together tiles of different classes is a significant feature of the Cirrus CMOS Cell Set, explained in greater detail below. 
     This simple latch tile is controlled by a two-phase clock (&#34;phi1&#34; 1 and &#34;phi2&#34; 2) the operation of which is well known in the art. During the first phase (phil) of the clock, both n-channel transistor 3 and p-channel transistor 4 are activated (because phi1 1 is &#34;high&#34; and phi2 2 is &#34;low&#34;), permitting input (&#34;d&#34;) 5 to be &#34;latched into&#34; this tile, where it is inverted first by inverter 6 (and transmitted as the complement 7 of the output 8 of this latch--i.e., the complement of input 5), and then inverted back to its original state by inverter 9 and transmitted as the output 8 of this latch. 
     During the second phase (phi2) of the clock, however, this latch insures that output 8 (and its complement 7) is available, even if input 5 is no longer available. Neither n-channel transistor 3 nor p-channel transistor 4 is activated (because phi1 1 is &#34;low&#34; and phi2 2 is &#34;high&#34;), although n-channel transistor 10 and p-channel transistor 11 are both activated (because phi1 1 and phi2 2 are reversed, such that phi1 1 is transmitted to the transistor gate of a p-channel transistor, while phi2 2 is transmitted to the transistor gate of an n-channel transistor. Thus, output signal 8 &#34;loops back&#34; (during the second phase of the clock) through activated transistors 10 and 11, and through inverters 6 and 9. Thus, input 5 to this latch tile is &#34;clocked&#34; or &#34;latched&#34; in during the first phase phi1 1 of the clock, and &#34;clocked&#34; or &#34;latched&#34; out (as output signal 8 and its complement 7) during the second phase phi2 2 of the clock. 
     Note that output signal 8 and its complement 7 are available during phase phi1 (once stabilized). Yet, once phi1 goes &#34;low&#34; (and phi2 goes &#34;high&#34;), the latch becomes insensitive to changes in input 5. 
     FIG. 7e illustrates a relatively complex class of tiles in the Cirrus CMOS Cell Set, which perform the &#34;exclusive NOR&#34; (XNOR) function. Note that this tile requires four SLA grids and, like many of the Cirrus CMOS Cell Set tiles, provides many free wires to facilitate placement of this tile in a variety of desired grid locations throughout the integrated circuit. 
     There are of course two inputs 1 and 2 to this tile. The first input 1 is sourced into the rightmost pair 3 of p-channel 4 and n-channel 5 transistors, while its complement (produced via inverter 6) is sourced into the leftmost pair 7 of n-channel 8 and p-channel 9 transistors. The second input 2 (and its complement, produced via inverter 10) determines whether transistor pair 3 or 7 is activated. If input 2 is &#34;high,&#34; then the complement of input 1 passes through transistor pair 7, and is again inverted (via inverter 11) back to its original state, and is transmitted as the output 12 of this XNOR tile. If input 2 is &#34;low,&#34; then input 1 passes through transistor pair 3, and is inverted, so that the complement of input 1 is transmitted as the output 12 of this XNOR tile. Thus, output 12 attains a &#34;high&#34; state only when inputs 1 and 2 are both &#34;high&#34; or both &#34;low.&#34; 
     Distributed Logic Gates Using the Cirrus CMOS Cell Set 
     Returning to the notion of distributed logic gates, FIGS. 8a, 8b and 8c illustrate how the Cirrus CMOS Cell Set facilitates the almost arbitrary distribution, throughout the integrated circuit, of the functionality (in this example) of logical NAND gates. Such NAND gates can be distributed along part or all of a row of the SLA, with almost any desired column(s) left free to perform other logic and/or memory functions. 
     Moreover, an individual NAND gate need not be restricted to a single SLA row or column, but instead can &#34;zigzag&#34; along rows and columns in almost any fashion desired. The interconnection of multiple NAND gates (where, for example, the output of one NAND gate is one of the inputs to another NAND gate) can be implemented orthogonally (much like the pieces of a jigsaw puzzle) so as to limit the need for routing channels (much less dedicated, fixed-area routing channels) outside the individual tiles themselves. 
     Although the collective area occupied by the individual sub-NAND gate tiles themselves might not be quite as dense as a typical &#34;standard cell&#34; NAND gate, the flexibility for distribution of functionality inherent in the design of these tiles so reduces the relatively large area otherwise occupied by routing channels external to those &#34;standard cells&#34; that a significant increase in the overall density of the integrated circuit (comparable to that found in handcrafted custom designs) can be obtained. Moreover, these tiles also permit more optimal &#34;mixing&#34; of logic and storage functions which in turn reduces the need for routing channels. 
     FIG. 8b illustrates the logic schematic for the circuit illustrated in FIG. 8a. FIG. 8c illustrates the &#34;tiling schematic&#34; corresponding to that circuit. Although the logic in this example is relatively simple, it is apparent that the tiling approach implemented in the preferred embodiment of this invention will handle logic functions of greater complexity with equal ease. Moreover, as functions become more and more complex, the savings in routing area become more and more significant (and the slight extra area occupied by the individual tiles themselves becomes less and less significant). 
     Looking at both FIG. 8a and FIG. 8b, it can be seen that logical NAND gate G1 consists of only one tile and is, in essence, an inverter. Input signal I1 is inverted by activating, as discussed above, either the n-channel transistor of NAND gate G1, if I1 is &#34;high&#34; (causing the source &#34;ground&#34; signal to be transmitted as output OUT1), or the p-channel transistor, if I1 is &#34;low&#34; (causing the source &#34;power&#34; signal to be transmitted as output OUT1). Signal OUT1 is then transmitted as an input both to two-input NAND gate G2 and to four-input NAND gate G3. 
     Output signal OUT2 of NAND gate G2 is &#34;low&#34; when both inputs OUT1 and I2 (to the transistor gates of both n-channel and both p-channel transistors of gate G2) are &#34;high,&#34; deactivating both p-channel transistors, and activating both n-channel transistors, in turn causing the &#34;ground&#34; signal to be transmitted as output signal OUT2. 
     Output signal OUT2 of NAND gate G2 is &#34;high&#34; when either input OUT1 or input I2 is &#34;low,&#34; breaking the serial chain of the n-channel transistors of gate G2 (preventing the &#34;ground&#34; signal from passing through either one or both of those transistors), and activating either or both of the p-channel transistors of gate G2, causing the &#34;power&#34; signal to be transmitted as output signal of OUT2. 
     As mentioned above, signal OUT1 is also transmitted as an input to four-input NAND gate G3. The functions of NAND gates G2 and G3 are very similar, although NAND gate G3 contains two &#34;middle&#34; tiles to account for the extra (third and fourth) inputs not found in NAND gate G2. 
     Output signal OUT3 of NAND gate G3 is &#34;low&#34; when all four inputs I2, I3, OUT1 and I4 (to the transistor gates of the four corresponding n-channel transistors of gate G3) are &#34;high,&#34; deactivating all p-channel transistors and activating all n-channel transistors of gate G3, in turn causing the &#34;ground&#34; signal to be transmitted as output signal OUT3. 
     Output signal OUT3 of NAND gate G3 is &#34;high&#34; when any of the four inputs I2, I3, OUT1 or I4 is &#34;low,&#34; breaking the serial chain of the n-channel transistors (preventing the &#34;ground&#34; signal from passing through any or all of those four n-channel transistors), and activating one of the four p-channel transistors, causing the &#34;power&#34; signal to be transmitted as output signal OUT3. 
     Thus, vertical NAND gate G1 (a one input inverter) is orthogonal to both two-input horizontal NAND gate G2 (sharing column wire signal OUT1, which is both the output of NAND gate G1 and an input to NAND gate G2) and four-input horizontal NAND gate G3 (sharing column wire signal OUT1 which is both the output of NAND gate G1 and an input to NAND gate G3). Note that orthogonal gates need not (but may be) adjacent, as are NAND gates G1 and G2. They can be separated by blank or normal subfunction tiles (through &#34;free&#34; wires), as are NAND gates G1 and G3. They can even overlap orthogonally (tiling together like pieces of a jigsaw puzzle), as illustrated below with gates G4 and G5. 
     The designer has a significant degree of flexibility with respect to the actual placement of individual functions, including the almost arbitrary distribution of the functional components (e.g., subgate tiles) of such more complex functions. NAND gate G3, for example, is a &#34;zigzag&#34; gate, containing both horizontal and vertical sub-NAND gate tiles. 
     Normally, horizontal and vertical subfunction tiles will result in multiple orthogonal functions, with the output of one function feeding into the input of the orthogonally disposed function. With the use of &#34;ohmic&#34; tiles, however, it is possible to &#34;bend&#34; wires such that the &#34;lame&#34; wire (extending the signal along the series of n-channel transistors) coming into the ohmic tile can be output at a right angle, enabling a single gate to &#34;zigzag&#34; along virtually any row and column of the array. 
     In the example illustrated in FIG. 8a, input I2 to NAND gate G3 enters a horizontal sub-NAND gate tile the signals of which are routed through an ohmic tile into a vertical sub-NAND gate tile, which receives input I3. Two additional ohmic tiles enable the transfer of that tile&#39;s signals across a row of the array and back up to another vertical sub-NAND gate tile in the next column (receiving input I4), whereupon another ohmic tile bends the output signals of that tile and transfers them into the &#34;rightmost&#34; horizontal sub-NAND gate tile (receiving input OUT1). 
     Thus, individual NAND gate G3 contains four subfunction tiles, distributed (in a zigzag fashion) along four rows and four columns of the array. Such flexibility permits significant variation in the placement of gate inputs and outputs, as is apparent from the various rows and columns in which inputs I2, I3, OUT1 and I4, and output OUT3, are located. The sub-NAND gate tiles are thus extremely compatible with tiles of other classes, such as flip flops as well as other memory and logic functions with which NAND gate logic is utilized. 
     Vertical NAND gate G4 has three inputs--I1 (which is also an input to NAND gate G1), and the outputs, OUT2 and OUT3 of NAND gates G2 and G3, respectively. 
     Output signal OUT4 of NAND gate G4 is &#34;low&#34; when all three inputs I1, OUT2 and OUT3 (to the transistor gates of the n-channel and p-channel transistor pairs associated with each of the three inputs) are &#34;high,&#34; deactivating all three p-channel transistors, and activating all three n-channel channel transistors, in turn causing the &#34;ground&#34; signal to be transmitted as output signal OUT4. 
     Output signal OUT4 of NAND gate G4 is &#34;high&#34; when any of the three inputs I1, OUT2 and OUT3 is &#34;low,&#34; breaking the serial chain of the three n-channel transistors (preventing the &#34;ground&#34; signal from passing through any or all of those three n-channel transistors), and activating one of the three p-channel transistors, causing the &#34;power&#34; signal to be transmitted as output signal OUT4. 
     The leftmost tile of two-input horizontal NAND gate G5 not only lies in the very same row along which output signal OUT5 of NAND gate G5 (which is an input to vertical NAND gate G6) is transmitted, but directly in between two tiles of NAND gate G4. 
     Output signal OUT5 of NAND gate G5 is &#34;low&#34; when both inputs OUT4 and I2 (to the transistor gates of the n-channel and p-channel transistor pairs associated with each of the two inputs) are &#34;high,&#34; deactivating both p-channel transistors, and activating both n-channel transistors, in turn causing the &#34;ground&#34; signal to be transmitted as output signal OUT5. 
     Output signal OUT5 of NAND gate G5 is &#34;high&#34; when either input OUT4 or input I2 is &#34;low,&#34; breaking the serial chain of both n-channel transistors (preventing the &#34;ground&#34; signal from passing through either one or both of those transistors), and activating either or both p-channel transistors, causing the &#34;power&#34; signal to be transmitted as output OUT5. 
     In contrast to the &#34;T&#34; formation of orthogonal NAND gates G4 and G5, the output signal OUT5 of NAND gate G5 is distributed across a row of the array, passing through two columns of tiles before reaching the middle tile of three-input vertical NAND gate G6, to which it is orthogonal. NAND gate G3, on the other hand, is (in a sense) orthogonal both to NAND gate G4 and to NAND gate G6, but lies in between these two gates along the row on which its output OUT3 is transmitted. 
     NAND gate G6 is also distributed along the column on which output OUT6 is transmitted, leaving a blank tile along the row upon which signal I1 is transmitted. Note that this tile need not be blank, but could be any &#34;free conductor&#34; tile (described above), such as a &#34;special blank&#34; tile (which, if necessary could be transformed, by late mask programming, into another sub-NAND gate tile) or any other tile (whether a sub-NOR gate tile or a flip flop) which contains a free column conductor permitting output signal OUT6 to be transmitted through that free conductor tile. 
     Output signal OUT6 of NAND gate G6 is &#34;low&#34; when all three inputs OUT5, OUT2 and OUT3 (to the transistor gates of the three n-channel transistors associated with these three inputs) are &#34;high,&#34; deactivating all three p-channel transistors, and activating all three n-channel transistors, in turn causing the &#34;ground&#34; signal to be transmitted as output signal OUT6. 
     Output signal OUT6 of NAND gate G6 is &#34;high&#34; when any of the three inputs OUT5, OUT2 or OUT3 is &#34;low&#34; (preventing the &#34;ground&#34; signal from passing through any or all of those three n-channel transistors), and activating one or more of the three p-channel transistors, causing the &#34;power&#34; signal to be transmitted as output signal OUT6. 
     Thus, the circuitry in FIG. 8a, and its associated logic schematic in FIG. 8b, illustrate that the Cirrus CMOS Cell Set tiling approach enables the distribution of NAND gate functionality not only along a row or column of the array (via &#34;blank&#34; or other tiles containing free wires), but also (in a zigzag fashion) both along virtually any row and any column. Add to that the capability of multiple orthogonal gates (the output of one gate feeding into the input of another orthogonally disposed gate), and it becomes apparent that NAND gate functionality (as well as more complex functions) can be distributed almost arbitrarily throughout the integrated circuit. Gate (or function) inputs and outputs can be placed along almost any row or column of the array, as can the actual subfunction elements (tiles) themselves. 
     Interconnected gates can be tiled together orthogonally, and individual gates can &#34;zigzag&#34; along rows and columns (with the use of ohmic tiles, as illustrated above). These functions can then be isolated in distinct portions (i.e., modules) of the SLA. As connections among these isolated functions are required, individual gates, and even subgate tiles, can be moved to different rows and columns of the SLA (further distributing functionality) so as to facilitate such connections. 
     FIG. 8c illustrates how a logic designer might actually create the SLA layout of the logic illustrated in FIG. 8b, utilizing software to aid in the transformation of storage logic array grids, comprised of Cirrus CMOS Cell Set tiles, into an actual digital database layout. Inverter G1 is comprised of only one vertical sub-NAND gate tile E-2, the output OUT1 of which is fed into tile E-1 of horizontal NAND gate G2, and into tile E-4 of zigzag NAND gate G3. 
     NAND gate G2 is distributed along row 1 so that it may share input I2 (in column B) with horizontal sub-NAND gate tile B-3 of horizontal NAND gate G5 and with horizontal sub-NAND gate tile B-4 of zigzag NAND gate G3. The output of horizontal NAND gate G2 is fed as an input into vertical sub-NAND gate tile A-1 of vertical NAND gate G4 and into vertical sub-NAND gate tile F-1 of vertical NAND gate G6. 
     NAND gate G3 zigzags along four columns and four rows by using ohmic tile C-4 to transfer the n-channel transistor series and output signals of horizontal sub-NAND gate tile B-4 to vertical sub-NAND gate tile C-6, and using ohmic tiles C-7 and D-7 to transfer those signals further to vertical sub-NAND gate tile D-6 and, finally, using ohmic tile D-4 to transfer those signals to &#34;rightmost&#34; horizontal sub-NAND gate tile E-4, completing this eight-tile, four-input zigag NAND gate (distributed along four columns and four rows). 
     Zigzag NAND gate G3 illustrates the significant degree of flexibility, with respect to the distribution of functionality, provided by the Cirrus CMOS Cell Set. Functionality (whether of gates or more complex functions) can be distributed throughout virtually any row and column of the integrated circuit array, enabling maximum flexibility with respect to the placement of input and output signals, as well as the placement of the active subfunction elements (tiles) themselves. 
     Vertical NAND gate G4 illustrates another example of the orientation of multiple orthogonal gates. Whereas NAND gates G1 and G2 achieve their orthogonal orientation by the placement of adjacent tiles E-2 (of gate G1) and E-1 (of gate G2), NAND gates G4 and G5 fit together orthogonally as do the pieces of a jigsaw puzzle, with tile A-3 (of gate G5) &#34;inserted&#34; in between tiles A-2 and A-4 (of gate G4). Such an orientation enables tile B-3 of two-input horizontal NAND gate G5 to share input I2 with gate G-3 while the other tile A-3 of gate G5 receives, orthogonally, output OUT4 (of gate G4). 
     The output of horizontal NAND gate G5 is then fed, across row 4, as an input to vertical three-input NAND gate G6, the final output of which is transmitted along column F of the array. 
     Although there are many tile layouts, in addition to the one illustrated in FIG. 8c, which implement the logic diagrammed in FIG. 8b, what is significant is that, by utilizing the Cirrus CMOS Cell Set, the designer has a great deal of flexibility with respect to the placement of subfunction tiles. If a particular gate does not quite line up in the array, the designer need merely insert a blank tile to move a piece of that gate further along a row or column, or use an ohmic contact tile to &#34;bend&#34; that gate around another gate lying in its path. It is thus apparent that this invention significantly reduces the limitations of the array structure itself, which currently make the design of complex PLA and PAL logic designs quite difficult. 
     It should also be noted that, by mapping Cirrus CMOS Cell Set tiles onto an SLA template, the segmentation of rows and columns provides the ability not only to distribute functionality, but also to isolate functionality. For example, returning to FIG. 8c, note that output OUT3 of gate G3 does not extend fully along row 4. Instead, ohmic contact tiles C-4, C-7, D-7 and D-4 permit that signal to be &#34;bent&#34; down column C and back up column D, until it can again continue along row 4. Moreover, ohmic contact tiles are only one means of bending rows and columns to permit a particular function (whether an individual gate or a more complex function, such as an ALU) to be isolated electrically from another function to which it may or may not be connected (elsewhere in the circuit). 
     Distributing Complex Functionality with the Cirrus CMOS Cell Set 
     In addition to providing significant increases in density, via the tiling of subgate and more complex subfunction components, the Cirrus CMOS Cell Set also provides a significant degree of repairability (unlike traditional logic design and layout approaches which trade off either density or repairability). Whenever complex logic is designed, the need for various functional enhancements and repairs is inevitable. For example, a designer may discover that an additional signal input to a NAND gate is required in the control portion of a microprocessor, or that an entirely new condition is desired, requiring the &#34;NANDing&#34; of three new signals from an instruction decoder. 
     Such modifications cannot be made to a standard cell design without a significant alteration of the layout of the circuit itself, which almost certainly will require the redesign of the layout of various base mask layers. Even gate arrays, which can be modified solely by modifying metal and via mask layers, do not provide the significant flexibility afforded by the Cirrus CMOS Cell Set, because gate array changes require significant modifications to those uppermost layers, in contrast to the relatively minor late mask changes necessary, for example, to transform a &#34;rightmost&#34; sub-NAND gate tile into a &#34;middle&#34; sub-NAND gate tile. By simplifying these changes, this invention enables significant functional modifications to be made locally, without affecting performance of other, unmodified portions of the chip. 
     For example, a five-input NAND gate can be &#34;split&#34; into one two-input and one three-input NAND gate. Additional sub-NAND gate tiles can be connected to add input signals (e.g., to impose an additional condition under which a register is write-enabled). Entire gates, consisting of multiple tiles, can even be moved to different areas of the SLA, freeing up those gate resources to perform other desired functions which require resources as basic as, for example, NAND gates (provided that sufficient &#34;special blank&#34; tile resources are available). 
     Not only are these changes effected merely through modifications to metal and via mask layers, but they are implemented without requiring the addition of circuitous routing channels or, for that matter, any additional routing area outside of the individual tiles themselves. This is made possible by a number of factors, including the various &#34;free&#34; wires already provided within individual tiles, the ability to mix logic and storage functions within discrete, isolated sections of the array, and the ability to distribute functionality by moving subgate elements within a row or column of the SLA or even to multiple other rows and columns (leaving &#34;holes&#34; in the middle of gates, filled by other tiles which perform other, perhaps unrelated, functions). 
     Illustrated below are examples of how this distribution of functionality facilitates the design, and subsequent enhancement and repair, of complex functionality. 
     FIG. 9a illustrates the logic schematic for the circuit illustrated in FIG. 9b. It is quite common for the data outputs of a register, for example (consisting of n flip flops where n is the bit width of the register) to be fed into certain random logic for further processing, and then be fed back into the register to implement a sequential machine. Rather than create dedicated routing channels between &#34;standard cell&#34; flip flop and logic modules, the flip flop and, for example, NAND gate tiles of the Cirrus CMOS Cell Set are designed to tile together without any routing in addition to that within the individual tile themselves. 
     The two input horizontal NAND gate 1 in the top left corner of FIG. 9a, for example (receiving inputs a and b), determines the appropriate condition under which a register is to be write-enabled (e.g., when particular bits of a microinstruction indicate that the register is the destination of a particular macroinstruction). In the example illustrated in FIGS. 9a and 9b, two input signals a and b are &#34;NANDed&#34; together to determine whether D flip flop 2 is to be write-enabled. This NAND gate, however, butts directly up against (i.e., tiles to) flip flop 2, without requiring any routing channels. 
     If both inputs a and b are &#34;high,&#34; then both n-channel transistors of gate 1 are activated (and, conversely, both p-channel transistors are deactivated), causing the &#34;ground&#34; signal to be transmitted as the complement 3 of write-enable signal 4, in turn causing flip flop 2 to be write-enabled. If either input a or input b is &#34;low,&#34; however, then either of the p-channel transistors of gate 1 is activated (while both n-channel transistors are deactivated), causing the &#34;power&#34; signal to be transmitted as the complement 3 of write-enable signal 4, in turn causing flip flop 2 to be write-disabled. 
     The clock signal (&#34;CLK&#34;) 5 and its complement 6, of course determine when data can be read from and written to flip flop 2. The output (&#34;Q&#34;) 7 of flip flop 2, and its complement 8, also interface directly to random logic NAND gate 9 through tiling, and then NAND gate 10, so that further logic can be performed on those outputs (by &#34;NANDing&#34; them with signals &#34;X&#34; and &#34;Y,&#34; respectively), the outputs of which are &#34;NANDed&#34; together by NAND gate 11 to generate the next input (&#34;D&#34;) 12 to flip flop 2. Of course, any random logic can be tiled to flip flop 2 so as to generate the next state input based upon the current state output. 
     Looking at FIG. 9a, it is apparent once again that the Cirrus CMOS Cell Set embodiment of this invention effects a significant increase in density by permitting gates 9, 10 and 11 not only to be tiled to flip flop 2 without additional routing channels outside of those gate tiles, but to be distributed among themselves so as to share only two rows and four columns of the array. Horizontal NAND gate 9, comprised of tiles 9a and 9b, is distributed along the row also containing tile 11a of vertical NAND gate 11. The other tile of gate 11, tile 11b, is on the next row down, in between tiles 10a and 10b of horizontal NAND gate 10. 
     This placement of tiles illustrates the flexibility afforded the designer for placing random logic gates 9, 10 and 11 so as to &#34;line up&#34; with signals 7, 8 and 12 of flip flop 2. Thus, even &#34;standard&#34; tiles of different classes (such as sub-NAND gate tiles and flip flop tiles) can be tiled together to perform useful logic functions without requiring external routing channels. 
     A logic schematic of a relatively complex combinational logic circuit is illustrated in FIG. 10a. Two possible Cirrus CMOS Cell Set tiled layouts are illustrated in FIGS. 10b and 10c, respectively. As is apparent from a visual comparison of the far more compact layout of FIG. 10c to the scattered layout of FIG. 10b, the tiling approach of the Cirrus CMOS Cell Set permits the designer to effect rapid design changes (such as the reorientation of inputs from FIG. 10b to FIG. 10c), and to redistribute functionality almost at will, thus providing for a significant increase in density. 
     Looking first at FIG. 10a, six inputs (A, B, C, D, E and F) are processed through this combinational logic circuit, which generates two outputs (OUT1 and OUT2). The circuit consists of eleven logical NAND gates (N-1-N-11), five logical OR gates (NR-1-NR-5) and many inverters (not labeled). 
     The implementation of this combinational logic circuit illustrated in FIG. 10b calls for inputs A, B and C to be fed vertically from the top right side of the circuit (where output OUT1 is generated), and for inputs D, E and F to be fed horizontally from the bottom left side of the circuit (where output OUT2 is generated). 
     Three-input logical NAND gate N-1 of FIG. 10a is implemented as three distributed sub-NAND gate tiles at row-column coordinates 16-d, 7-i and 7-k (the output of which is inverted), with tile 16-d being a vertical sub-NAND gate tile, connected to horizontal sub-NAND gate tiles 7-i and 7-k (and inverter 7-1) via an ohmic contact tile. Similarly, two-input NAND gate N-2 is comprised of vertical sub-NAND gate tile 17-e, connected to horizontal sub-NAND gate tile 9-i via an ohmic contact tile. The output of NAND gate N-2 is also inverted. Two-input NAND gate N-3 is comprised of vertical sub-NAND gate tile 17-f, connected to horizontal sub-NAND gate tile 10-k via an ohmic contact tile. The output of this NAND gate N-3 is also inverted. 
     The inverted outputs of these three NAND gates, N-1, N-2 and N-3, are fed as inputs into logical NOR gate NR-1, which is comprised of three vertical sub-NOR gate tiles 7-m, 9-m and 10-m, the output of which is not only fed directly into horizontal sub-NAND gate tile 8-m of two-input NAND gate N-9, but is also inverted (and then fed into vertical sub-NAND gate tile 13-o of vertical NAND gate N-11). 
     The other input to NAND gate N-9, fed into horizontal sub-NAND gate tile 8-k, is generated by inverting the output of three-input NOR gate NR-3, which is comprised of vertical sub-NOR gate tiles 17-d and 18-d, connected by an ohmic contact tile to horizontal sub-NOR gate tile 8i. The output of NOR gate NR-3 is inverted and then routed by two ohmic contact tiles down column j, across row 9 and then up column k, until it reaches horizontal sub-NAND gate tile 8-k. Finally, the output of NAND gate N-9 is inverted and then fed into vertical sub-NOR gate tile 8-p of NOR gate NR-4. 
     Three-input logical NAND gate N-4 of FIG. 10a is implemented as three horizontal distributed sub-NAND gate tiles 11-i, 11-j and 11-k of FIG. 10b, the output of which is inverted and then fed into vertical sub-NOR gate tile 11-n of NOR gate NR-2. The other two inputs to NOR gate NR-2 are fed into vertical sub-NOR gate tile 10-n (from the inverted output of NAND gate N-3, passing through a &#34;free&#34; horizontal wire of vertical sub-NOR gate tile 10-m of NOR gate NR-1), and vertical sub-NOR gate tile 12-n (from the inverted output of four-input NAND gate N-5, which is comprised of vertical sub-NAND gate tile 16-e, connected via an ohmic contact tile to horizontal sub-NAND gate tiles 12-i, 12-j and 12-k). 
     The output of NOR gate NR-2 is produced by vertical sub-NOR gate tiles 10-n, 11-n and 12-n, and then inverted and fed into vertical sub-NAND gate tile 9-o of three-input NAND gate N-11. The other two inputs to NAND gate N-11 are fed into vertical sub-NAND gate tile 13-o (from the inverted output of NOR gate NR-1) and vertical sub-NAND gate tile 14-o (from the inverted output of three-input NAND gate N-10, which is comprised of vertical sub-NAND gate tiles 17-h and 18-h, connected via an ohmic contact tile to horizontal sub-NAND gate tile 14-j). 
     The output of vertical sub-NOR gate tiles 10-n, 11-n and 12-n of NOR gate NR-2 is not only inverted (and fed into NAND gate N-11), but is also fed directly into horizontal sub-NAND gate tile 15-n of three-input NAND gate N-8. The other two inputs to NAND gate N-8 are fed into horizontal sub-NAND gate tile 15-g (from the inverted output of two-input NAND gate N-6, which is comprised of vertical sub-NAND gate tiles 17-g and 18-g) and vertical sub-NAND gate tile 15-k (from the inverted output of two-input NAND gate N-7, which is comprised of horizontal sub-NAND gate tiles 13-i and 13-j, and which is transmitted down to tile 15-k through a &#34;free&#34; column wire in column k). 
     Finally, two-input NOR gate NR-4 is comprised of vertical sub-NOR gate tile 8-p (fed from the inverted output of NAND gate N-9) and vertical sub-NOR gate tile 10-p (fed from the inverted output of NAND gate N-11). The inverted output of NOR gate NR-4 (OUT1) is one of the two final outputs of the combinational logic circuit illustrated in FIG. 10a. 
     Two-input NOR gate NR-5 is comprised of horizontal sub-NOR gate tile 19-1 (fed from the inverted output of horizontal NAND gate N-8) and horizontal sub-NOR gate tile 19-o (fed from the output of vertical NAND gate N-11. The inverted output of NOR gate NR-5 (OUT2) is the second of the two final outputs of the combinational logic circuit illustrated in FIG. 10a. 
     Thus, the distributed NAND and NOR gate function tiles of this invention, illustrated in FIG. 10b (including one-input NAND gate inverters), implement the combinational logic circuit illustrated in FIG. 10a. Moreover, FIG. 10b also illustrates how this invention facilitates the design and layout of complex circuits through the use of computer-aided design software. Individual tiles are merely laid out on an SLA template, and then moved around (i.e., distributing the functionality of gates and more complex functions) to accommodate other functions and their interconnections. 
     Note, however, that although this invention significantly increases overall density by reducing significantly the need for routing channels external to the individual tiles themselves, it does not completely eliminate the need for such routing channels (as is evident from the wasted space surrounding the ohmic contact tiles on the left side of FIG. 10b. In this example, the significant amount of wasted space is due primarily to the orientation of inputs A-F. 
     Yet, this invention provides such a significant degree of flexibility, with respect to the distribution of functionality (including the placement of inputs and outputs of logic gates and more complex functions) and the architecture of the layout, that even this wasted space can be minimized, as illustrated in the alternative, more compact, layout of FIG. 10c. Such flexibility illustrates how this invention enables the creation of complex integrated circuits with densities comparable to those obtained from hand-crafted custom design methods. 
     Looking at FIG. 10c, it can quickly be seen that this layout is far more straightforward and easier to follow, due to the reorientation of inputs A-F. All subgate elements are numbered as they were in FIG. 10b, although their orientation (horizontal/vertical) may have changed. NAND gates N-1-N-7 are densely tiled next to one another (in rows 6-12). NAND gates N-1-N-7 each consist of n horizontal sub-NAND gate tiles (where n is the number of gate inputs), the output of which is inverted by inverter tiles in columns i (inverting N-1-N-3) and j (inverting N-4-N-7). 
     Comparing this layout in FIG. 10c to the schematic logic diagram of FIG. 10a, it can easily be seen how the outputs of NAND gates N-1-N-3 are inverted and then fed into the inputs of NOR gate NR-1 (at sub-NOR gate tiles 6-j, 7-j and 8-j, respectively). In other words, this invention permits subgate elements to be tiled together so densely that the layout schematic of FIG. 10c follows naturally from the logic schematic of FIG. 10a, with the inter-gate routing virtually eliminated. 
     Similarly, it can easily be seen how the outputs of NAND gates N-3-N-5 are inverted and then fed into the inputs of NOR gate NR-2 (at sub-NOR gate tiles 8-k, 9-k and 10-k, respectively). Moreover, all of this functionality is implemented solely with sub-NAND gate tiles (the locations of which are distributed by the use of &#34;blank&#34; tiles or other &#34;free conductor&#34; tiles (not shown) to account for the various input combinations). 
     Contrasting FIGS. 10b and 10c, it is immediately apparent that the wasted space surrounding the ohmic contact tiles in FIG. 10b has been reclaimed in FIG. 10c. The same subgate elements (tiles) are present in both FIGS. 10b and 10c, but the bending of wires necessary to tile together orthogonally oriented subgate tiles in FIG. 10b has been eliminated in FIG. 10c. For example, the tiling of vertical sub-NAND gate tile 17-e and horizontal sub-NAND gate 9-i in FIG. 10b, via an ohmic contact tile (and its associated routing area) has been replaced by the relatively dense tiling of horizontal sub-NAND gate tiles 7-d and 7-h. 
     Thus, a significant improvement in density was obtained merely by reorienting the inputs all in the vertical direction, permitting the elimination of the routing area associated with the ohmic contact tiles in FIG. 10b. The only additional routing area added in FIG. 10c is the relatively small area occupied by two &#34;new&#34; ohmic tiles, used to route the output of vertical NOR gate NR-2 into vertical NAND gate N-8 (by transferring the signal down column k, back across row 14, up column j and across row 13 into vertical sub-NAND gate tile 13-k of NAND gate N-8). 
     Potential Extensions to the Basic Building Block Tiles of the Cirrus CMOS Cell Set 
     In addition to the subgate tiles of the preferred embodiment of this invention, future embodiments might include more generalized subfunction tiles. For example, the various horizontal sub-NAND gate tiles of the Cirrus CMOS Cell Set are quite flexible in that &#34;leftmost&#34; tiles can be transformed into &#34;middle&#34; or &#34;rightmost&#34; tiles merely by late mask programming changes. As discussed above, this degree of flexibility provides for significant modifications of functionality. 
     Nevertheless, a horizontal sub-NAND gate tile cannot be transformed into a vertical sub-NAND gate tile or into any type of sub-NOR gate tile. It is conceivable that the degree of flexibility necessary to modify the functionality of these subgate (or subfunction) tiles could be enhanced significantly by generalizing the subfunction tiles, or by at least creating subfunction tiles which can be modified, via late mask programming, into functions of greater and greater complexity. 
     For example, illustrated in FIG. 11a is a 3-input dynamic AND gate. Future embodiments may well contain general subgate tiles which, when combined with other such tiles of the same &#34;tile class,&#34; will form arbitrary n-input versions of this gate. 
     Being dynamic, this gate generates an output synchronously with &#34;high&#34; pulses of clock signal (CLK) 1. Upon each such pulse of CLK 1, inputs A 2, B 3 and C 4 are logically ANDed, thereby generating output (OUT) 5. On alternating &#34;low&#34; CLK 1 signals, p-channel transistor 10 is activated, enabling the power signal (Vdd) to be transmitted through inverter 11, generating a &#34;low&#34; output 5 (&#34;precharge phase&#34;). 
     The logical AND function is generated by transmitting inputs 2, 3 and 4 into the transistor gates of n-channel transistors 6, 7 and 8, respectively. Only when all three inputs (and CLK 1) are &#34;high&#34; will the &#34;GND&#34; signal be transmitted through the series of active n-channel transistors 9, 8, 7 and 6, and through inverter 11, finally generating a &#34;high&#34; output 5. 
     Similarly, the 4-input dynamic OR gate illustrated in FIG. 11b generates an output synchronously with &#34;high&#34; pulses of CLK signal 1, upon which inputs A 2, B 3 C 4 and D 5 are logically ORed. Because n-channel transistors 7, 8, 9 and 10 (corresponding to inputs 2, 3, 4 and 5, respectively) have their sources tied together and their drains tied together (as opposed to being connected in series as in FIG. 11a), any &#34;high&#34; input will permit the &#34;GND&#34; signal to be transmitted through n-channel transistor 12 and inverter 13, generating a &#34;high&#34; output 6. 
     Even more complex gates could be constructed (such as the Static CMOS Complex Gate illustrated in FIG. 11c) by creating subgate tiles consisting of pairs of n-channel and p-channel transistors, such as n-channel transistor 8 and p-channel transistor 14, each of which receives input A 1 at its transistor gate. Focusing on the lower portion of FIG. 11c, it can be seen that the output 20 of this gate is &#34;low&#34; when (1) input D 4 is &#34;high&#34; (activating n-channel transistor 11)-or both input E 5 and input F 6 are &#34;high&#34; (activating n-channel transistors 12 and 13, respectively), (2) input C 3 is &#34;high&#34; (activating n-channel transistor 10) and (3) either input A 1 or B 2 is &#34;high&#34; (activating either n-channel transistor 8 or 9, respectively). 
     Conversely, focusing on the upper portion of FIG. 11c, output 20 of this gate is &#34;high&#34; when (1) both input A 1 and input B 2 are &#34;low&#34; (activating p-channel transistors 14 and 15, respectively), (2) input C 3 is &#34;low&#34; (activating p-channel transistor 16) or (3) input D 4 and either input E 5 or F 6 are &#34;low&#34; (activating p-channel transistor 17 and either p-channel transistor 18 or 19, respectively). 
     The Dynamic CMOS Complex Gate illustrated in FIG. 11d performs the converse logic function of that of FIG. 11c. Rather than generating a &#34;low&#34; output when the condition ((A+B) * C * (D+E F)) is met, this circuit inverts the &#34;GND&#34; signal (via inverter 17), generating a &#34;high&#34; output 8 when that condition is met. 
     The one other difference between FIGS. 11c and 11d is due to the fact that FIG. 11d illustrates a dynamic (not a static) circuit. Thus, the circuit is enabled only on &#34;high&#34; pulses of CLK signal 1, activating n-channel transistor 16 (and permitting the &#34;GND&#34; signal to flow through the circuit). When CLK signal 1 is &#34;low,&#34; p-channel transistor 9 is activated, causing Vdd to be inverted (via inverter 17), generating a &#34;low&#34; output 8, a process known as &#34;precharging.&#34; 
     An Example of the Significant Degree of Repairability Permitted by the Cirrus CMOS Cell Set 
     FIGS. 12a-12d illustrate the significant degree of repairability afforded by the seemingly simple late mask programming changes which transform one sub-NAND gate tile into any other such tile. Changing a &#34;rightmost&#34; horizontal sub-NAND gate tile into a &#34;middle&#34; tile, for example, might permit the addition of a &#34;rightmost&#34; tile which permits an additional input to the NAND gate. Thus, a three-input NAND gate could be transformed into a four-input NAND gate, permitting a new condition (mistakenly omitted or newly added) to be involved in the determination, for example, of whether a particular register is write-enabled. 
     FIG. 12a illustrates the state graph for a two-input control state machine consisting of eight states (A-H). Particular inputs will cause the machine to change states. For example, if the machine is currently in state A (represented by &#34;0000&#34;), and the two inputs are &#34;00,&#34; then the state of the machine changes to state B (represented by &#34;1000&#34;). If the inputs are &#34;11,&#34; then the state of the machine changes to state C (represented by &#34;0010&#34;). The other two permutations of input pairs (&#34;01&#34; and &#34;10&#34;) will not cause the machine to change states. A clock controls the state sequencing. 
     This control state machine might, for example, control the functioning of an ALU in a microcoded microprocessor. If the ALU is in a particular state (e.g., the ALU most recently performed an arithmetic operation), and if particular control signals are received from the currently executing microinstruction, then the ALU might make a transition to a different state (in which it automatically performs a branch operation if the result of the most recent operation was &#34;0&#34;), and also transmit two bits of output indicating that a branch might occur. 
     The important point is that, regardless of the particular function being performed by the control state machine, that function can be represented in a state graph and then relatively easily transformed into the actual transistor layout of the circuit itself, as is illustrated in FIGS. 12c and 12d, and explained below. 
     FIG. 12b represents this same information in tabular form. Both the top and bottom tables, labeled &#34;Incorrect Control State Machine&#34; and &#34;Correct Control State Machine,&#34; respectively, are designed to include one row for each of the twelve state transitions. 
     The leftmost two columns, labeled &#34;I1 and &#34;I2,&#34; represent the values of the two inputs to the machine. The next four columns, labeled &#34;S3,&#34; &#34;S2,&#34; &#34;S1&#34; and &#34;S0,&#34; together represent the four-bit value of each of the eight states of the machine. Because four bits are used in this example, eight additional states could be added. Each bit of the state will, of course, be implemented as an individual flip flop tile (see FIGS. 12c and 12d). 
     The last two columns, labeled &#34;01&#34; and &#34;02,&#34; represent two output bits which indicate that particular state transitions have occurred, and which can be used for any purpose, by tiling these outputs to additional logic and/or memory tiles. It should be noted that a &#34;+&#34;in any of the four state bit columns indicates that the particular state bit will be &#34;toggled&#34; (from &#34;0&#34; to &#34;1&#34; or from &#34;1&#34; to &#34;0&#34;) if the conditions for that state transition are met, whereas a &#34;+&#34;in either of the output bit columns indicates that the output bit will &#34;fire&#34; (i.e., will be a &#34;1&#34; or &#34;high&#34; signal) if the conditions for that state transition are met. 
     The Incorrect Control State Machine table on the top of FIG. 12b illustrates that, as the complexity of the logic increases, mistakes are likely to occur. Moreover, specifications may change and, of course, designers frequently modify their logic throughout the design process, necessitating subsequent modifications to the actual implementation itself. The preferred embodiment of this invention permits these modifications to be made quite easily at any stage of the process. 
     For example, in the second row of the Incorrect Control State Machine table, the designer might accidentally specify the wrong condition upon which a state transition will occur. Rather than specifying a &#34;1&#34; for input &#34;I2,&#34; the designer might specify a &#34;0.&#34; This &#34;wrong symbol&#34; is represented by a &#34;W&#34; next to that symbol. 
     In the third row, the designer might accidentally specify a &#34;1&#34; for input &#34;I1&#34; when in fact an &#34;X&#34; (i.e., no symbol) should be specified, because that particular state transition will occur regardless of the value of input &#34;I1.&#34; The incorrectly specified &#34;1&#34; is therefore an &#34;extra symbol which is represented by an &#34;E&#34; next to that symbol. The &#34;X&#34; (or the absence of a symbol) represents a &#34;spare cell,&#34; such as the &#34;special blank&#34; sub-NAND gate tile discussed above, which can be transformed into any other sub-NAND gate tile should the necessity arise (e.g., when a new condition needs to be added to a 3-input NAND gate, requiring this extra resource to form a 4-input NAND gate). These spare cells are often liberally utilized throughout a circuit design, particularly in places where the space occupied by these spare cells is already within the geometrical area occupied by the chip. 
     Also in the third row, the designer might specify an &#34;X&#34; for input &#34;I2&#34; when in fact a &#34;0&#34; or &#34;1&#34; symbol is necessary, because the state transition of that row is dependent upon the value of input &#34;I2.&#34; The absence of this &#34;missing symbol&#34; is represented by an &#34;M.&#34; 
     The designer might even mistakenly leave out an entire row (such as the twelfth row), representing a forgotten state transition. Or perhaps a new state transition is determined to be necessary at some later point during the implementation of this control state machine. 
     In any event, the Corrected Control State Machine table at the bottom of FIG. 12b illustrates the changes necessary to fix the tabular representation of this machine. But, the designer may not discover these mistakes, or desired additions, until later in the implementation process. FIG. 12c illustrates the actual incorrect SLA implementation of this machine which the designer might produce utilizing the tiles of the Cirrus CMOS Cell Set. 
     The two inputs to this machine, &#34;I1&#34; and &#34;I2,&#34; are transmitted vertically from the top of this machine, and the two outputs, &#34;01&#34; and &#34;02,&#34; are also transmitted vertically out the top of this machine. Each of the four state bits is held in an individual T (toggle) flip flop (&#34;TFR&#34;), representing (from left to right) bits &#34;S3,&#34; &#34;S2,&#34; &#34;S1&#34; and &#34;S0.&#34; 
     The most notable feature of this tiled layout is the direct correlation between the tabular representation of the machine, in the Incorrect Control State Machine table at the top of FIG. 12b, and the actual layout schematic in FIG. 12c. For example, the twelve rows in that table on FIG. 12b correspond directly to the twelve rows of horizontal (&#34;0&#34; or &#34;1&#34;) and vertical (&#34;+&#34;) sub-NAND gate tiles (including spare tiles represented by a vertical bar to the left of an &#34;X&#34; for vertical spare tiles, and a horizontal bar on top of an &#34;X&#34; for horizontal spare tiles). 
     Looking at the first row of the sub-NAND gate tiles in FIG. 12c, it can be seen that a six-input horizontal NAND gate is formed from six horizontal sub-NAND gate tiles at row-column coordinates 1-1, 1-2, 1-3, 1-5, 1-7 and 1-9. Tiles 1-1 and 1-2 receive as input the complements of inputs &#34;I1&#34; and &#34;I2,&#34; respectively (as indicated by a &#34;0&#34; in those tiles), while tiles 1-3, 1-5, 1-7 and 1-9 receive as input the complements of state bits &#34;S3,&#34; &#34;S2&#34; &#34;S1&#34; and &#34;S0,&#34; respectively. 
     Note that any tile corresponding to a &#34;1&#34; condition for a state transition (e.g., tiles 3-1 and 3-2) receives the actual column value (columns &#34;I1&#34; and &#34;S3,&#34; respectively), rather than the complement of such value. This scheme insures that &#34;1&#34; signals are received as an indication that the input and state conditions are met, such that only if all conditions are met will the NAND function generate a &#34;0.&#34; Otherwise (if any condition is not met), the result of the NAND function will be a &#34;1,&#34; which will not cause a state transition. 
     As represented by the first row of the Incorrect Control State Machine at the top of FIG. 12b, the state transition will occur only if all six of these bits (the two input bits and the four state bits) are &#34;0&#34; (i.e., a &#34;low&#34; signal). In other words, if all six bits are &#34;0,&#34; each of their complements will be a &#34;1,&#34; generating a &#34;0&#34; as the result of the NAND function. If any of these six bits is a &#34;1,&#34; then this state transition will not occur because the complement of any such bit will be a &#34;0,&#34; generating a &#34;1&#34; as the result of the NAND function. 
     If the result of the NAND function is a &#34;0,&#34; the appropriate output is transmitted as signals &#34;01&#34; and &#34;02,&#34; and a state transition occurs, causing (in the case of row 1) state bit &#34;S3&#34; to be toggled, leaving the machine in state B (&#34;1000&#34;). 
     For example, in row 1 of the sub-NAND gate tiles in FIG. 12c, the result of the NAND function is transmitted along the uppermost wire of each of the tiles into vertical sub-NAND gate tile 1-12 (and out of the array as &#34;01&#34;). In fact, each row which generates a &#34;1&#34; as output signal &#34;01&#34; in response to a state transition in that row (e.g., row 4) contains such a tile (tile 4-4). If no output is to be generated by that row (e.g., row 1 generates no output signal &#34;02&#34;), then a spare tile (tile 1-13) is employed. This enables the designer to later change his mind and modify this portion of the circuit, via late mask programming, so as to generate an output signal &#34;02.&#34; 
     If the result of the NAND function is a &#34;0,&#34; then output signal &#34;01&#34; is a &#34;1,&#34; because the value of output signal &#34;01&#34; is determined by &#34;NANDing&#34; the output from each row &#34;n&#34; which generates a &#34;0&#34; as the input to &#34;tile n-12.&#34; Thus, if row 1 generates a &#34;0&#34; (because all six signals &#34;I1,&#34; &#34;I2,&#34; &#34;S3,&#34; &#34;S2,&#34; &#34;S1&#34; and &#34;S0,&#39;equal &#34;0&#34;), or if any of the rows which contains such a vertical sub-NAND gate tile generates a &#34;0,&#34; then column 12 (&#34;01&#34;) will generate a &#34;1&#34; (as the logical NAND of all &#34;0s&#34;). 
     Note, however, that row 1 generates no output on signal &#34;02&#34; (although other rows, such as row 2, might generate such an output), because tile 1-13 is a spare tile which is not part of the vertical NAND gate (consisting of tiles 2-13, 3-13, 6-13, 7-13 and 11-13). 
     In addition to generating outputs, row 1 also causes a state transition to occur (from state A to state B) if all six signals are &#34;0.&#34; Looking at row 1 of the Incorrect Control State Machine on the top of FIG. 12b, or the graph in FIG. 12a, it is apparent that, when the machine is in state A (&#34;0000&#34;) and inputs &#34;00&#34; are received as &#34;I1&#34; and &#34;I2,&#34; a state transition occurs to state B (&#34;1000&#34;). In other words, state bit &#34;S3&#34; is toggled from a &#34;0&#34; to a &#34;1.&#34; 
     Looking back at FIG. 12c, it can be seen that this is accomplished by tiling the output of the six-input horizontal NAND gate, comprised of tiles 1-1, 1-2, 1-3, 1-5, 1-7 and 1-9, into tile 1-4, a vertical sub-NAND gate tile. Just as any &#34;0&#34; signal generated along a row with a sub-NAND gate tile in column 12 (&#34;01&#34;) generates a &#34;1&#34; as signal &#34;01,&#34; any such &#34;0&#34; signal generated along a row with a sub-NAND gate tile in column 4 (&#34;S3&#34;), such as tile 1-4 in row 1, generates a &#34;1&#34; in column 4, which causes the flip flop representing state bit &#34;S3&#34; to be toggled (in this case from &#34;0&#34; to &#34;1&#34;). 
     The other eleven rows of horizontal and vertical sub-NAND gate tiles in FIG. 12c operate in a similar manner, with &#34;tiles n-1, n-2, n-3, n-5, n-7 and n-9&#34; NANDing together signals &#34;I1,&#34; &#34;I2,&#34; &#34;S3,&#34; &#34;S2,&#34; &#34;S1&#34; and &#34;S0,&#34; the result of which is an input to vertical sub-NAND gate tiles in columns 4 (&#34;S3&#34;), 6 (&#34;S2&#34;), 8 (&#34;S1&#34;), 10 (&#34;S0&#34;), 12 (&#34;01&#34;) and 13 (&#34;02&#34;), respectively. 
     Thus, FIGS. 12b and 12c illustrate the direct correlation between the tabular representation and the actual transistor layout of an integrated circuit, such as this control state machine. Such a correlation demonstrates how this invention facilitates the rapid design of a densely tiled integrated circuit. It is not difficult to imagine how the Cirrus CMOS Cell Set permits the extremely quick transformation from a prototype to high volume production. 
     But, as mentioned earlier, it is almost guaranteed that a complex design will result, at least initially, in many specification changes and logic errors, such as those illustrated by the Incorrect Control State Machine table on the top of FIG. 12b. Perhaps an even more significant feature of this invention is the ease with which those changes can be effected, and errors corrected, at any stage of the design (whether by modifications to the tabular representation on paper, the transistor layout as represented in software, or even to the actual fabricated chip itself, via late mask programming). 
     A comparison of FIGS. 12c and 12d illustrates how, even in a relatively complex design, modifications such as those from the Incorrect Control State Machine to the Corrected Control State Machine of FIG. 12b can be effected with relative ease. It is important to emphasize again that the modifications to FIG. 12c (resulting in corrected FIG. 12d) can be made not only on paper (or, more likely, in software) but also after the chip has been fabricated. Such modifications involve, as discussed above, late mask programming changes which transform individual subfunction (in this case sub-NAND gate) tiles into other tiles which are usually (but not necessarily) of the same tile class. 
     For example, tile 2-2 of FIG. 12c (which was specified mistakenly as a &#34;0&#34; instead of a &#34;1&#34;) has been correctly specified as a &#34;1&#34; in FIG. 12d. Similarly, tile 5-8 of FIG. 12c (which was specified mistakenly as a &#34;+&#34;instead of an &#34;X&#34;) has been correctly specified as an &#34;X&#34; in FIG. 12d. All other differences between FIGS. 12c and 12d similarly correspond to those changes illustrated in FIG. 12b (from the Incorrect Control State Machine to the Corrected Control State Machine). Such changes are easily effected in software, and can also be effected after the chip has been fabricated, via the late mask programming modifications discussed above with respect to FIG. 6. 
     It can thus be seen quite clearly that the tiling of the Cirrus CMOS Cell Set tiles enables the relatively simple creation not only of an extremely dense integrated circuit, but of one which can be modified, simply and inexpensively, throughout the design process, and even after a chip has been fabricated.