The first step is to draw (or import) a template layout. This is an ordinary layout where the features to be changed must have unique names. Then, the initial value, final value and increment of one or two variables (one for each axis) must be given. They will determine the number of different layouts generated and control the variation size of each step.
The third step specifies the constraints. They are used two folded: to generate premature exit conditions or warning messages using the keywords exit and warning respectively, or in order to force some relations between masks through the keyword force (which will have maximum priority). To understand the importance of constraints one should note, that changes in the mask dimensions can cause wafer geometries that are completely topologically dissimilar. As presented in Figure 3.6, the increase in the width of the two interconnect lines can originate a short. Here the constraint is that the distance between them must be larger than the minimum pitch allowed by the lithographic system that is available.
Checking the distance of two layers is available with the function minDistance that accepts as input, two layer names and a float number (the allowed minimum distance). The test conditions fullInside, fullOutside (each one accepts two layer names as input variables) check if a layer is totally inside or totally outside another one.
In the last step, the rules to build the output layouts are given. The layers are formed as the result of operations with masks of the template layout. The operations are the usual boolean operations (AND, OR and NEGATION) and a set of operators that can depend on the values of the step variables (so they may change at each iteration).
The last three steps are specified in an auxiliary ASCII file, whose syntax looks like the one in Figure 3.8. This file corresponds to the example presented in Section 3.3.2. The syntax used for boolean operations is the same as standard C [28]. The dollar character before a layer name marks a variable as internal, which will not be written to the output layouts. The evaluate-functions perform various operations in . A list of the available functions is presented in Table 3.1.