Some Basic Concepts of CAD for Nanostructure Fabrication

Before we dig into the details of the layout procedure, I’m going to give a little background:
The type of CAD we’re going to be doing here, which still forms the basis of all microelectronics designs in use in every fab in the world, has the following characteristics:
  • Two-dimensional
  • Grid-based
  • Multi-Layer
  • Hierarchical
Let me explain each of these:


Since microelectronics CAD is based on the idea that the data will be used to generate a photomask, the shapes within a CAD layout are all two-dimensional shapes, such as squares and polygons. Shapes have X and Y dimensions, but no Z. The shapes that make up your design are each defined as some number of 2-D coordinates, such as: (X1,Y1), (X2,Y2), (X3,Y3) etc.... Shapes to be exposed on your mask or wafer have area. In the case of a photomask, this area will either be opaque (eg chrome) or transparent (no chrome); whereas in direct write, after exposure and development, the area in your cad will either have resist removed (positive resist) or resist remaining (negative resist).


All data points within a design are positioned on a fixed-spacing square grid of points in 2-dimensional space. For our ebeam, this grid size is typically 1 nm. Each vertex in your shape must be located at integer multiples of this fundamental grid. If you use an exposure tool with less resolution, all vertices will be rounded (snapped) to the nearest vertex in that instrument’s grid.


Occasionally something we want to build is simple enough to just be built with one layer of lithography, but more commonly, we need to build multiple layers, one after the other. So our CAD drawings accommodate this by having multiple layers within each drawing. Each shape within your drawing is assigned to exactly one layer. In the actual data file, layers are assigned a numerical label, from 0-255 (but there are several different upper values in use...)


A very simple CAD program might let you define shapes as described above, but to build up a more complex layout, you would have to define each and every shape individually. This would be very tedious and inefficient. A hierarchical CAD program allows you to group shapes together into “cells”, sometimes called “structures” or “blocks”. Then you can place a copy of the entire grouping of objects at multiple locations in your layout. And each cell can contain instances of other cells, so it is possible to build up a very complex layout of simple, repeated elements.

Layout Primitives

Even the most complex layouts are built up from a very simple set of primitive objects. Layouts built in KLAYOUT, and GDS-II layouts in general, contain just 5 different primitives. Let’s now look at each possible primitive object (the next section will step through creating and editing these objects -- for now, I’m just showing you what they are.)


A box is described by just two (X,Y) coordinate pairs, and a layer specification. The figure shows an example. The box, which is on layer 3, has lower left corner at (3,5) and upper right at (10,9). That’s all there is to it!

In this figure from KLayout, you see box itself, drawn with a background grid. If you look closely, you can also see that the two vertices are shown as black dots. On the right side of the figure is KLayout’s “Object Properties” dialog box. As you can see, you can edit the vertices in this box. KLayout also provides the convenience of displaying the box’s Width and Height for you. (For now, don’t worry about the other options shown in these dialogs.)


A polygon, also called a Boundary in some CAD systems, is only slightly more complicated than a box. As you can see in the figure, a polygon is specified as a layer and a list of coordinate points which define the outline of a closed shape. You can define very complex shapes as polygons, but with the increased complexity comes more rules and limitations. I’m not going to get in to those just yet, but soon...


Paths are not nearly as commonly used as boxes or polygons, but they can be useful in some cases. A path is defined as a layer, a width, and a list of points. The points define the center line of the shape and the width is evenly split on either side of that center line. In other words, the path width, 1.5 microns in this example, is the full width of the path, so 0.75 um on either side of the center line.

There is an additional option for paths, but you need to be careful with this one, because some systems you might send your GDS-II pattern data to might or might not support each of these options. The option is called “Extension Type”, it controls how the ends of the path are formed, and there are 4 options: Flush, Square, Round, and Variable. Shown here are Flush, Square, and Round, and you can see how they each behave. The forth option, Variable, allows you to specify a different extension value for each end, which behave like the “Square” option by providing a square extension beyond the path endpoint of that size (including 0, which then behaves like “Flush”.) I’ve found all 4 path types seem to work with LayoutBEAMER, so JEOL ebeam users should be ok choosing any type. Again, beware, different programs interpret path end types differently! The most common denominator is the “Flush” end type, so if you stick to that one, you’re likely safe.


It’s nice to be able to put labels inside your drawing. But, there are two very distinct sorts of labels. In one case, you want labeling text just to identify different sections of your pattern as you work on your drawing. In the other case, you actually want text to be written on your wafer, to identify items on the wafer, for example, in inspection or testing. Well, GDSII supports text, but it is really intended for the former case -- just as a reference within your drawing while you’re sitting at the CAD screen. For almost all CAD data conversion applications, the TEXT defined as GDS-II text objects is ignored and will not be written on your wafer or mask. The way to make text on your mask or ebeam writing is to make polygons in the shape of your text letters. There are ways to convert TEXT objects to POLYGON objects, but that’s more complicated than I’m covering here.

The text object is specified with a Layer, a text string, an (X,Y) coordinate, an orientation (direction), and a size. Again, be aware that by default, text is NOT exposed in most systems, but it is handy to use in your designs.


An instance is the object by which we create hierarchy in a design. First, let’s say we have a cell called “first_cell” as shown in this figure (the details on how to create this cell will be shown in the next page). In this example. the cell “first_cell” contains 6 objects, 3 boxes and 3 polygons, and these objects are on 3 different layers shown in different colors.

And now we look at an Instance of that cell:

In this case, from the properties dialog we see that we are “instantiating” (fancy word for “putting”) the cell called “first_cell”, at the position (20,10). There are also options for rotation, mirroring, and scaling (magnification), but those are more advanced. The next section down, however, is very important and powerful. Because the “Array Instance” checkbox is checked, I’m not placing just a single instance of the cell “first_cell”; instead, I’m placing many instances of this cell in an array. In this example, there are 6 placements of “first_cell”, in an array 3 across (columns) by 2 down (rows), with a spacing of 100 microns in both X and Y directions.

If you’re comfortable with this basics, continue to the next page where we’ll step through creation of a layout in KLayout.