KIC: A Graphics Editor for Integrated Circuits Based on the tutorial by Giles Billingsley & Ken Keller University of California, Berkeley 1. Introduction The following is a tutorial for KIC, an interactive, color graph- ics program for the laying out of integrated circuits. If the minimum resovlable unit of distance in your process is termed lambda (L), your layout may be as large as 200,000,000 by 200,000,000 L units on each of 25 layers. KIC can easily be recomplied to increase the maximum number of layers if 25 is not enough. KIC has symbolic layout and split-screen capabilities that, when employed correctly, allow it to respond quickly with most low- cost, low-performance graphics terminals. You can also control how layer interactions are displayed. Because KIC uses the model frame buffer graphics package mfb, KIC can run on several terminals. This tutorial assumes that you are now logged in at a SUN workstation with a color monitor on which xkic is installed. At Berkeley, KIC is installed on janus, and all the CAD machines. It is assumed you know the basics of UNIX to include: - logging in and out - editing files with a test editor like vi - deleting files using rm - listing file and directory names using ls - copying files using cp - creating directories using mkdir - running commands If you are not at all familiar with UNIX, try to get some help from a fellow student. Questions may also be directed to Robin Rudell, but please try to obtain the information you require first by reading the on-line manual pages on the com- puter, which are invoked by typing man command.name where command.name is the name of the command you wish to learn about, such as ls, mv, cp etc. 2. Running KIC KIC is stored in the ~cad/new directory in most Berkeley com- puters, as it is on the SUN system used in the Microlab. Running KIC on the SUNS is slightly different than running it on a standard graphics terminal, such as a Tektronix 4109, because the SUNs use a windowing system called X, to which the standard kic program had to be adapted before it would run on such a system. The resulting program is called xkic, to distinguish it from the program kic which runs on standard graphics terminals. Following the instructions given below for the type of system you are using, run kic or xkic now. A. Standard Graphics Terminals If you are on a standard graphics terminal (like a Tek- tronix) with a tablet (a white plastic surface next to the terminal with a little plastic box (a mouse) on top of it), invoke KIC by typing kic -g xx where xx is the mfb identifier for the graphics terminal that you are using. For example, on the Tektronix 4107 such as the one used in the Microlab's student area, you will run KIC by typing kic -g t7b Usually, the mfb identifier is written down somewhere on or near a given terminal. If you are not sure what it is, ask an experienced student for assistance. B. SUN Workstations Running KIC on the SUN workstations is a little more complicated to learn, but following these directions to the letter guarantees success. After logging in and getting your window manager (uwm) running, (Robin Rudell will show you how to do this), invoke xkic by typing xkic & The ampersand (&) at the end of the command line tells the computer to run xkic in the background. This is very important if, for some reason, the xkic program "locks up", i.e., suddenly does not allow you to execute any commands. Running the program in the background will allow you to return to the original login window and abort the program, where otherwise you would have to kill the process remotely. After hitting the return key, you will notice after 5 seconds or so that the cursor changes to the shape of an upper left hand corner. This tells you that xkic is ready for you to open a window in which you will do your layout editing. Move the cursor to the upper left hand corner of your screen. Then, press the middle mouse button and HOLD IT DOWN! Drag the cursor down toward the lower right hand corner of the screen. When the window is the size you want it (make it fairly large or you will find yourself cramped), only then release the mouse button. The window will then fill itself in. You can give the xkic or kic command a file name (e.g., kic filename). If the file name you specify does not yet exist, invoking xkic in this way creates a new, empty kic file with this name. If the file does exist, you can now edit the file. If KIC gives you trouble at any time, contact Robin Rudell or Dave Mudie for assistance. 3. The Screen Layout At this point, do not type anything or manipulate the mouse. Most of the screen is covered by the layout viewports which is where your layout will be displayed. Notice the KIC logo. You should be aware of the difference between a viewport and a window. A viewport describes a rectangular area on the screen and a window describes a rectangular area in a coordi- nate system. KIC provides two such viewports: the coarse viewport and below it the fine-positioning viewport or mag- nifying glass. This will become more clear as you proceed. Along the left side of the screen, you see the command menu. The prompt viewport is located just above the row of colored boxes near the bottom of the screen. If KIC prompts you for information, anything you type will be displayed in this viewport. It is also used by KIC to communicate instructions and various other information to you. Watch it: it will make using KIC easier for you. If KIC ever types -MORE- in this viewport, it has more to show you, which you can bring up by hitting the return key. If KIC seems to stop for some reason or is slow, check this viewport. KIC may be asking you to answer a question. The row of colored boxes followed by text near the bottom of the screen is called the layer menu viewport. Each colored box is associated with an IC layer and has the layer's name next to it. The creation of a specific set of layers for a particular process will be described later. The layer menu you see if for the local digital MOS process and is the de- fault menu. The first character of a layer name stands for the technology (N for nmos) and the rest stands for the layer type. NI stands for implant, ND for diffusion, NP for poly, NM for metal, NC for contact cut and NG for overglass. The LYRL and LYRR are used by the LYRA layout rule checking pro- gram, and the layers that end in S are symbolic, as discussed later. There is always a current layer selected with its name out- lined in black. When KIC is invoked, the layer associated with the leftmost box is the current layer. There is one viewport that has not been mentioned. It is the row at the bottom of the screen called the parameter viewport. It displays the position information to be dis- cussed later, the name of the cell currently being edited, and the width in L of the coarse window. 4. Pointing The cursor is a small x that is displayed on the monitor. Move it around by pushing the mouse along the tablet surface. To inform KIC that the cursor is where you want it, you press the yellow button (on a 4-button mouse such as that on the Tektronix), or the left button (on the 3-button SUN mouse). Pressing the space bar on the keyboard yields the same result: pointing. For example, to change the current layer, point at the layer that you want to be the current one. One invokes a command by simply pointing at it as describe above. Try pointing at the command redraw When a command is selected, the command's ;name changes color. Note that the pointing process includes pressing the mouse button or the space bar. 5. Editing a Cell Mask sets or layouts are known as cells. Each cell is stored in a disk file and its name must be a valid file name. These names can be mixed case and up to 14 characters long. It is suggested that you use the convention of using a .kic suffix on your kic file names, to distinguish them from cif or mann files. Cells can be copied and/or renamed using the mv andcp commands. The ls command is used to list or display cell names. The cells that you will use in this tutorial are from Robin Rudell's personal layout library, and can be found in ~cad/lib/kic Point to the edit command by pointing at it in the command menu. KIC will ask you for a cell name in the prompt viewport. If you wish to start a new cell, type the name of a non-existent file and KIC will create a cell for you. If you ever select edit by mistake, simply pushing the return key will return you to the current cell. For this exercise, type Cntdown The cell will appear in the layout viewports. 5.1. Fine Positioning: The Magnifying Glass There is a small, black outlined box in the coarse viewport. This identifies the area that is displayed in detail in the magnifying glass. To identify the area that you are interest in viewing in detail, move the cursor to the center of the area and press the white button (4-button mouse) or the mid- dle button (SUN mouse). The analogous keyboard command is ctrl-f (for 'fine'). If you use the keyboard, you will be prompted to point to the area's center. The box will move so that its center is where you pointed and the area in which you are interested will be shown in the magnifying glass. You may use the fine positioning command at any time. You may also define the relative size of the magnifying glass. When you type ctrl-g KIC will as you to point to the diagonal endpoints of the area that you want to magnify. Do this. KIC will do its best to fit the magnifying glass with its fixed aspect ration into this area. You may notice that the grid in the magnify- ing glass has disappeared; KIC has decides that the magnify- ing glass is large enough that the spacing between grid lines would obscure the user's view of the area being magnified. To define the magnifying area using a mouse, press the green button (4-button mouse) or the left button in combination with the shift key (SUN mouse) while pointing to the diagonal points of the area to be magnified. Thus two stylus buttons are dedicated to the control of the magnifying glass; ________________________________________________ | | | | | Mouse | Move | Change Size of | | Type | Magnifying Glass| Magnifying Glass| |_________|__________________|__________________| | | | | | SUN | Middle | shift-Left | | | | | |_________|__________________|__________________| | | | | | 4-Button| White | Green | |_________|__________________|__________________| It is possible to change the orientation of the coarse and fine- positioning viewports from top-bottom to left-right with respect to the display by typing ctrl-t The screen will redraw with the fine positioning viewport on the right side of the screen and the coarse viewport on the left. Typing ctrl-t again will restore the original top-bottom confi- guration (t is for toggle.) Be sure to read the section on routing (Section 15) before at- tempting any substantial routing. 5.2. Expanding Instance You can see that the cell Cntdown consists of geometry and a large, labeled, outlined box. A labeled box such as this one is the symbolic or unexpanded picture of an instance. An instance is simply a referenced and placed cell. The box you now see is labeled Passdown: this is the placed cell's name. In the lower left corner of the box, the dimensions of the instance are given in L. Now point to expnd You will see the instance of Passdown expanded into full detail (the labeled box is no longer visible) and that the menu selec- tion remains highlighted. When you invoke KIC, it is in the mode where instances are not expanded. Buy by pointing at expnd, you have changed the mode of KIC such that instances are expanded (i.e., KIC is in expand mode). We could change back to the unex- panded mode by pointing again at expnd. Now point at peek and you will see the instance of Passdown expanded only in the fine-positioning viewport or magnifying glass at the bottom of the screen. You also see that expnd was deselected when you pointed at peek. Again, point at expnd and you will see that peek is deselected and the full instance of Passdown is expanded in both the coarse and fine-positioning viewports. 5.3. Traversing the Hierarchy Because Cntdown contains an instance of Passdown, Passdown is below Cntdown in the hierarchy. Hierarchies can be operationally as deep as you like: the limit is currently 100. Put KIC in the unexpanded mode and point to selec This puts KIC in selection mode, and you will see a different menu displayed in the menu viewport: the selection menu. Now, point at Passdown. KIC will highlight the cell by outlining it to show that it has been selected. Also, you will see a diamond shaped instance marker that identifies the reference point where the dell was placed. Now, point at push in the selection menu. You will see Passdown appear centered, in full detail. Notice that KIC is still in the unexpanded mode. Point at pop in the selection menu. You will see Cntdown appear again in the same place where you left it. KIC remembered this context. You have just gone down and then backup the hierarchy. If you have changed Passdown, popped up a level, and put KIC in expand mode, you would see any changes to Passdown reflected in Cntdown. Now return to the basic menu by selecting basic in the selection menu, and put KIC in expand mode. 5.4. Grids You can tell KIC not to show a grid by selecting grid You will be prompted for a number. If you do not want KIC to display a grid, type 0 (zero). When you want the grid to be displayed again, select grid and type the number of L you want between grid points. When you in- voke KIC, this number defaults to one. You can tell KIC to snap the cursor to the grid points by select- ing the snap command. KIC will ask you for the number of L between pints to which the cursor input will be snapped. Enter the number 5 and point several times in the layout viewport; you will notice by reading the parameter viewport that all coordinated you point to are integer multiples of 5. Now select the snap command again and set the snapped grid spacing back to 1 L. 5.5. Command Line Arguments When you invoked KIC, you could have commanded it to edit the Cntdown cell by typing kic Cntdown (or xkic Cntdown &) The general format for invoking KIC is (A) for standard graphics terminals: kic -g mfb.identifer [-d device.name] [cell.name] (B) for SUN workstations: xkic [cell.name] & If you do not specify a cell name on the command line, KIC will expect you to use the edit command. If you specify several cell names on the command line, KIC will begin editing the first cell in the list of names. To begin editing the next cell in the list, point at the edit com- mand and simply push the return key when KIC prompts you for a cell name. KIC will tell you when you have editing all the cells in the list. If KIC is running under UNIX, you can tell KIC to send the graph- ics data to another terminal by using the -d option. The device.name argument specifies the terminal and may be a full pathname to the device or simply the tty name (e.g., tty16). 5.6. Coordinate System You will be creating geometries on a mask coordinate system. Is is a 2D Cartesian system with integer coordinates. A coordinate value can range between plus and minus 200,000,000. The units of the system are L. If you are not certain that this is enough precision, consider a process with 0.1 micron minimum geometries and 2 centimeters max- imum die size. Layouts for such a process can be done in a 200,000 by 200,000 coordinate system. Thus, there is plenty of precision. Now, simply point in one of the layout viewports. The (x,y) coordinate in L of the position that you pointed at is shown to you in the parameter viewport. Each time you point, the distance you moved the cursor since the last time you pointed is shown in the viewport to you as (dx,dy). You can measure distances in this way. Point at the left edge of the coarse layout viewport and then at the right edge. Notice that dx is approximately the value of the width parameter which is shown in the parameter viewport and is the width of the coarse layout viewport in L. 5.7. Panning and Zooming Change the coarse layout viewports center by invoking pan Notice that the menu selection is still highlighted. You will be asked to point at the center for the new viewport. Do so. KIC will redisplay the layout centered at the position that you selected. Notice that the menu selection and the cursor vanished until redisplay is complete. Again, notice that the menu selec- tions still a different color indicating that the KIC is still in panning mode. Now point at the center for a new viewport. You can pan the viewport as often as you like or need. Panning enables you to move around in a layout. To move to an area whose center is not presently visible such that you cannot point at it, type ctrl-c after selecting pan instead of point at the new center. KIC will prompt you for an (x,y) coordinate which you then type as x y The layout is then redisplayed with the center of the viewport at this point. Try selecting zoom You will see that the pan command is deselected, indicating that KIC has left the panning mode. You will be asked to select the magnification of the layout in the coarse layout viewport by choosing the viewport's width in L. Type in a width of perhaps 200. KIC will redraw the layout centered about the same window center, but with a different magnification. The magnifying glass will go away and the coarse viewport will grow to cover it when the width is sufficiently small and hence the magnification suf- ficiently great. Try zooming again, this time with a width of 40. Notice the magnifying glass in gone. Trying zooming again with a width of 200. Zooming out has cause the coarse viewport to split again. Try selecting the command windo You will be asked to define an area of interest by pointing at the endpoints of the area's defining diagonal. Point at the lower left corner of the geometries in Cntdown and then at the upper right. KIC will redisplay the layout, and Cntdown should fit in the coarse viewport. The viewports are rectangular; not square. Thus, this command will show you everything inside the area you define, but the area will usually be somewhat larger than you defined. Notice that the windo command remains a dif- ferent color, indicating that KIC is now in a windowning mode. You can define a new window as often as is necessary. 6. The Layer Attributes Menu As an exercise of what you have learned in the previous section, manipulate Cntdown so that the cell overs the whole coarse layout viewport. Notice that geometries are either filled incompletely, filled in with a pattern, or simply outlined. Notice also the priorities of the layers. Black writes over red. Thus, black has higher priority than red. The leftmost layer which is yellow has lowest priority. Priority is one of several layer attri- butes; priority, visibility, name, color, minimum dimensions, outlining, blinking, fill type and symbolic. There are good reasons for the selection of the layer attributes in the default nMOS process layer menu. Depletion and enhance- ment MOSFETs can be differentiated at a glance. Polysilicon gates are clear. MOSFET diffusion paths are unobstructed. The metal pattern is clearly defined, but you can see what is unit it easily. Contacts are also visible: you see a black hole sur- rounded by some metal. Overglass is typically only seen on pads. At this point, you may be asking questions such as the following: what if you don't like this layer menu? What if you are laying out for a 10-layer CMOS process? When you invoke KIC, it ini- tializes itself with a file named This file has the description of the particular layer menu in it. It is possible to alter the layer menu wile running KIC and to save these changes in the .KIC file. Creation of .KIC files is dis- cussed later in section 16. Six layer attributes can be changed while KIC is running: visi- bility, color, fill type, outlining, blinking, and minimum dimen- sions. Point to the command attri You will see the attribute menu displayed in the menu viewport. To change the fill pattern of a particular layer, try the fille command. KIC will display a menu of fill patterns in the area of the magnifying glass. Point at a pattern that is different from the current fill pattern for metal (NM, CM), and then point at metal in the layer menu. You have just redefined the fill pat- tern for metal. The effect of the command will not be visible until you tell KIC to redisplay by pointing at the rdraw command. Try it. To change the visibility of layers, point at the visib command. You will see all of the small boxes in the layer menu disappear, and the layer names will remain visible. This means that all layers will now be invisible during a redisplay. If a layer name in the layer menu is not immediately preceded by a small box, then that layer is invisible. KIC is now asking you to point at EACH layer int he layer menu that you wish to be visible. Do so. As you point to each layer, you will see the small box appear immediately to the left of the layer name, indi- cating that the layer is now visible. Make all layers except me- tal visible to see only transistors. Again, the effect of the command will not be visible until you ask KIC to redisplay by point at the rdraw command. To change the minimum dimensions of a particular layer, try the dimen command. KIC will ask you to type the minimum dimensions in L. It is possible to set specific layers to a blinking mode. Point at the blink that you wish to blink. This command will not work for all graphics terminals, depending on their capabilities. If you do not want stippled boxes to be outlined, try pointing at the outln command and then redraw the layout. When KIC is invoked, the outline attribute is selected by default. By having KIC NOT out- line stippled boxes, the time required for a redraw of the layout can be decreased by as much as a factor of two. There are also color selection commands in the attribute menu, but they are dis- cussed later int he section on .KIC files (Section 16). You may pop back up to the basic menu by selecting basic The remaining commands in this menu are discussed later in the section on 7. Selection For this section, you should be editing the little cell Passdown All layers should be visible. You may edit Passdown by selecting an instance of it in Cntdown and pointing to push or by pointing to edit in the basic menu and typing passdown{ when asked for the name of the cell you wish to edit. Try both ways and then read on. You can select and object by pointing at selec in the basic menu to place KIC in the selection mode. Again the selection menu appears in the menu viewport, and the selec com- mand is invoked. To select an object, point somewhere inside the boundary of the object. (Note: to select a polygon or wire, you most point at a vertex.) When an object is selected, its boundary is outlined. Pointing at a selected object deselects it (i.e., the command toggles). Notice that the layer command is selected. This indicates layer specific selection mode (i.e., you can only select geometries on the current layer in the layer menu.) Try to select a metal box when the current layer is not metal. You will see that nothing happens. Now, change the current layer to metal and try to select the same metal box. The box will be highlighted as described above. Now point at layer The layer command turns off, removing KIC from the layer specific selection mode. Now pointing at any selected object deselects it, and any deselected object selects it. Notice that if you point at an area that is common to several geometries, all will be selected or deselected. Instances are always selected when you point at them regardless of whether layer is on or off. You can easily see that pointing when KIC is in selection mode has a toggling effect. You can have a large number of objects selected at any time; however, the highlighting of selected ob- jects can severly increase the time required for a redraw. There are several operations you can perform on selected objects. Each of these commands can be "undone" by point at undo Pointing to delet causes the selected objects to be erased and their descriptions deleted from the cell. Try deleting selected metal box. Try to undo the deletion. To change the layer of all selected geometries, point to the chlyr command. You will be asked to point to the new layer to which all selected objects (excluding instances, of course) will be changed. Try it and then point to undo to undo the change. Selection can be tricky. Play with it until you are comfortable in using it. Remember to deselect selected objects after you are done invoking selection commands on them. Commands such as delet and move apply to all select objects, and therefore if you forget to deselect objects, you might easily destroy your layout. The desel command deselects all selected objects. One convenient habit to learn is to invoke the desel command before returning to the basic menu. There is also the command area that enales you to select all objects (geometries and instances) whose bounding box intersects an area that you define. This com- mand also has a layer specific mode depending on whether the layer command is invoked. With the layer command active, try selecting all the metal boxes in a given area. Now deselect these boxes by pointing at the desel command. Remove KIC from the layer specific selection mode by deselecting the layer com- mand, and perform an area selection on this same area. You will see that all objects in this area are selected. This command is useful for quick deletion of many objects. Try it and undo the deletion. Thus, there are four selection modes in KIC: - layer specific point select - layer specific area select - global point select (layer turned off) - global area select Layer specific point selection will select geometries on the current layer and will select instances only if you point directly at them (i.e., if you point at a geometry on the current layer that is on top of an instance, the geometry will be selected and the instance will not). Layer specific area selection will select all geometries on the current layer in an area that you identify. As with the layer specific point selection, instances will be selected by a layer specific area selection only if the area of interest does not contain any geometry on the current layer. Global area and point selection will select everything that you identify. I f you do not understand these commands, you should practice until you do and then read on. It is also possible to copy the selected objects. Using area or point selection, select several objects on at least two layers. Now point to the copy command. You will be asked to point to a reference point and then to a point where the reference point should be copied to. Try it. You will see all the selected objects copied exactly, and the copy command will remain active (i.e., copy is a mode). Now point to the 0 and you will see it change to a 90 You have just told KIC to rotate selected objects 90 degrees around its reference point (the same point which you defined for the first copy operation) when the objects are coped. Point again in the layout viewport, and you will see the selected objects copied to this point with a 90 degree rota- tion. Point again at 90, and it will be replaced with 180 Can you guess what this will do? Point again in the layout viewport to see if your guess is right. Now point at 180, and it will be replaced by 270 Point again, and the zero will retun. Now point at the mx command. You have just told KIC to mirror the selected ob- jects in the x-direction when the objects are copied. point again in the layout viewport, and you will see the selected objects copied to this point and mirrored in the x-direction. The my command allows you to mirror in the y-direction. Try it. The copy command is indeed very powerful and confusing to the novice user. Play with it until it is comfortable. Also, try to undo a copy operation. Once you have learned how to copy geometries, point to move You will be asked to point to a reference point and then to a point where the reference point should map to. Try it. You will see that the selected objects will be moved with whatev- er rotation and mirroring transformation is currently de- fined. Thus, it is possible, for example. to move, rotate and mirror a geometry with the same command. Note that the selected objects remain selected, so you can point again and again until they are positioned just right (i.e., move is a mode). There are two more selection commands that you should learn. stbox allows you to stretch all selected boxes, and stpth allows you to stretch any selected wire or polygon. These will be reviewed after you lean how to creat wires and po- lygons with KIC. 8. The KIC Layout Geometries 8.1. Boxes The box or rectangle is the most frequently used type of KIC geometry. KIC will not let you create a box whose length or width is less than the minimum dimensions allowed on a given mask layer. Boxes oriented at non-Manhattan angles must be created as polygons or wires. 8.2. Polygons You cannot create a polygon with a hold in it (self- intersecting), unless you define with with wires. KIC will not allow you to create a polygon with more than 200 ver- tices. A polygon is selected by pointing to any one of its vertices; you will probably find the magnifying glass to be very useful for this purpose. 8.3. Wires A wire is simply a path whose width must not be less than the minimum dimensions for that layer. You can change the wire width of the current layer (it defaults to minimum dimen- sions) by invoking the command width You will be asked by KIC to two manhattan, colinear points to show the new wire width. KIC will not allow you to change the wire width to a value that is less than the minimum di- mension for that layer. The command for changing the minimum dimension of a layer is described in the section that discusses the Layer Attributes Menu (Section 6). Wires can be VERY useful. Please do not use only boxes. Wires can save you layout time. A wire is selected by point- ing at one of its reference points, There is not limit to the size (i.e., number of reference points) of a wire that you can create with KIC. 8.4. Labels Labels have two uses. The first is as a not. The second is as a node label for the cifplot transistor-level schematic extraction program discussed in Fitzpatrick [1981]. A label is selected by pointing near the lower left corner of its first character; again, you will probably find the magnify- ing glass to be very useful for this purpose. 8.5. Flashes The diameter of a flash or circle may not be less than the minimum dimension for that layer. A flash is represented by KIC as a rounded polygon. A round flash is selected as a po- lygon by pointing to one of the vertices. you may only create a flash while in the basic menu of KIC. You can control the number of sides to this rounded polygon by going into the attributes menu via the attri command, and invoking the sides command. KIC will then ask for the number of sides to be used when creating a round flash, arc or doughnut (discussed below). The default is 12, and changing the value of this parameter does not change the number of sides of any previ- ously created round flash. Also, KKIC will ask you lwhether or not the vertices of he rounded polygons will not be clipped to the nearest grid pint by default. This process of clipping the vertices to grid points can produce an oddly shaped polygon for a round flash with a small radius. 8.6. Arcs An arc might be thought of as a wire whose width may not be less than the minimum dimension for that layer, which is bent around a central point. KIC represents an arc as a single polygon. Since you may not have self-intersecting polygons, KIC will not allow you to create an arc of more than 360 de- grees. An arc is selected as a polygon by pointing to one of the vertices. You may only create an arc while in the basic menu of KIC. 8.7. Doughnuts A doughnut is a circle with a hole in it. KIC represents a doughnut as two overlapping arcs. A doughnut is selected by selecting both arcs (or polygons) that comprise the doughnut. You may only create a doughnut while in the basic menu of KIC. 9. Creating a Cell While in the basic menu, point to the dir command. In the magnifying glass you will see a list of all files in your current working directory. Now point to edit in the basic menu. Be sure to read what is in the prompt viewport now. Because you may have modified Passdown (you did some moving and deleting), KIC will ask you if you wish to save the changes. Answer no by typing no. Finally, you will be prompted for a cell name. Type any valid file name that does not exist in your current directory, for example Foo.kic, and then the return key. KIC will tell you that you are editing a new cell after it displays an empty viewport for you. Editing a cell that has never been edited before creates that cell. Using names that end in .kic is a nice convention that allows you to readily recognize a file as storing a KIC cell. Zoom and pan until the coarse layout viewport's width is small enough for the magnifying glass to go away and and the center is the origin. We are now going to create layout geometries. Any time you create a geometry, you are creating it on the currently selected layer in the layer menu viewport. Point to boxes Then point inside the coarse layout viewport to the two end- points of the diagonal of the box you wish to create. A box is displayed on the current layer. Pointing to undo at this time will erase the box and delete it from the cell. To undo the creation of a geometry, you must point to undo before pointing at anything else. Now, create another box on another layer so that the box overlaps slightly the box you previously created. Notice also that the boxes command is a mode. The following sequence is valid. Point to boxes, point to poly layer, create three boxes in a row, undo the last one, point to dif- fusion layer, create a box, etc. For all of the above se- quence, the boxes command was pointed at only once. You will now make a box with a width of exactly 13 lambda and height of 11 lambda in order to introduce another useful com- mand. Point to the first endpoint of the box. Notice what (x,y) is by looking in the parameter viewport after the point has been selected. Now find (x+13,y+11) by repeatedly moving the cursor around and pressing the blue stylus button (4- button mouse) or the left button (SUN mouse), else type ctrl-w (w is for where) and KIC will ask you to point. Each time you invoke this where am i command, KIC updates the (x,y) display, but does NOT assume you are ready to point. When the (x,y) display shows that you are ready to finish the box, press the yellow button if you are using a tablet, otherwise press the space bar. The box will appear. Note that ctrl-c could have been used to do this. After you pointed to the first endpoint, say it was (3,3), you would type ctrl-c fol- lowed by the (x,y) coordinate of the next endpoint, which in this case would be 16 14. To create a wire, point to wires Then point to its reference points: pointing to the last reference point twice so the program knows you are done creating the wire. When you point to the undo command while entering a wire, the most recently entered reference point will be deleted from the path. As described earlier, you can set the width of the wire being created by using the width command. A wire is displayed in the color and fill pattern of the current layer. KIC will constrain the orientation of wire segments and po- lygon edges to multiples of 45 degrees by default. Thus at small magnification, you can still easily make horizontal and vertical segments and edges. To disable 45 lock mode, point at the menu selection 45s To enable the 45 lock mode again, point at the 45s command again. To create a polygon, point to polyg Then point to its reference points or vertices: pointing to the last vertex twice so the program knows you are finished creating the polygon. When you point to the undo command while entering a polygon, the most recently entered vertex is deleted from the path of the polygon. A polygon is displayed in the color and fill pattern of the current layer. To create a round flash, you must be in the basic menu. Point to the flash command. Then point to the center of the flash. You will see a small diamond displayed to identify the center of the flash. Finally point to the perimeter so as to define the radius of the flash. A round flash is displayed in the color and fill pattern of the current layer. To create a doughnut, you must again be in the basic menu. Point to the donut command. Then point to the center of the doughnut. You will see a small diamond displayed to identify the center. Next point to identify the inner radius and outer radius of the doughnut. A doughnut is displayed in the color and fill pat- tern of the current layer. To create an arc, you must also be in the basic menu. Point to the arc command. Then point to the center of the arc. You will see a small diamond displayed to identify the center. Next point to identify the inner radius and outer radius of the arc. Finally, point twice to identify the path of the arc in a clockwise direction. An arc is displayed in the color and fill pattern of the current layer. To create a label, point to the label command. KIC will ask you to type the label that you want created (no spaces or nonprintable characters are allowed). Type This_is_a_label . KIC now asks you to point to where you want the label with respect to the lower left hand corner. After pointing once, you will see that KIC ask you again to point to where you want the label. Thus, the label command is a mode, and you may place as many appearances of that same label as you need. You may notice that the new labels are not displayed in the large coarse viewport. KIC has decided that the window is sufficiently large that the labels will obstruct the view mask detail. Therefore, labels are not displayed in this viewport. If you would like to have labels displayed regard- less of the size of the coarse window, go into the attributes menu and point to the label command. You will immediately see that this command is quite different from the label command that you just used. KIC will tell you that labels will always be displayed. Now point to the rdraw command to see the labels displayed. Point again at the label command in the attributes menu, and KIC will tell you that labels will not be displayed in large windows. 10. Stretch Commands Now that you have created several geometries, go into the selection menu via the selec command in the basic menu. After selecting several boxes using point selection, point to the stbox command and note that the left and the top commands are active. KIC will ask you to point to a refer- ence point. Point to the top - left corner of one of the selected boxes. Now KIC is asking you to point to where the selected boxes should be stretched. Point 3 lambda to the left and 6 lambda below the reference point. You will see all selected boxes stretched 3 lambda to the left and 6 lamb- da downward. If you had a polygon or a wire selected, the stbox command would have no effect on them. Now point at the left command, and you will see it replaced by the right command. Point at the right command and you will see it re- placed again by the left command. Likewise, the top command becomes the bottm command. Try stretching the selected boxes while in the left - bottom stretching mode, as well as in the right - bottom and the right - top stretching modes. Also, try to undo each of the stretch operations, and then try to undo the undo com- mand. Select at least one wire and polygon. Now point to the stpth command (stretch path command). KIC will ask you to point to a vertex of one of the selected polygons or wires. Do this. Now KIC is asking you to point to identify where this vertex should be stretched. When you point, you will see that one vertex stretched to exactly where you pointed. Try this com- mand several times with both wires and polygons. Try to undo a stpth command with the undo command, and the undo the undo command. 11. Saving a Cell When you have edited for a while, you should select the save command which is in the basic, instance, and selection menus. KIC will try to save your cell for you and inform you whether or not it did. For example, it will fail if the file or directory in which the cell is to be stored is not writable by you. If you don't trust it, try aborting KIC by pointing at the menu selection abort in the basic menu and invoking KIC again with one of the cells you saved. You will see it come up on the screen. You can also look at the file your cell is stored in with a text editor: it is just a layout file stored in the CIF format with a few user extension commands added. The CIF format is given in Hon [1980]. 12. Reflection on What You Have Learned You should now be able to create and edit cells. Design a W/L=4 depletion load and save it and layout a W/L=1 enhance- ment transistor and save it. We will place these two cells together later to make a k=4 inverter. If you don't know how to do this, lay out something even if it is just a little block diagram made of boxes, 0-width wires, and labels. 13. Instances Point to insta in the basic menu. At this time, you should be viewing a new command menu: the instance menu. Instances are best introduced via an example. Point to the master command and you will be prompted for the name of the master cell you are creating an instance of. Let's create an in- stance of our old friend the Passdown cell, so type Passdown. Now, point at where in one of the layout viewports you would like to see a Passdown cell. The Passdown cell should be displayed. If you don't like it, point to undo and it will vanish. When you create an instance, the origin of the master cell is mapped to where you point to. This point is also where the diamond-shaped instance marker appears when the cell is selected, as mentioned earlier. So, when you create your own cells to be used as masters, put them close to the origin. One convention is to put the lower left corner of the cell at the origin. Another is to center it on the origin. When you are just sketching, don't worry about this. When the layout is stable, you may use area to select everything in the layout, and the move command to drag the center of the layout to the origin or wherever. Point at basic You're back on familiar ground. Point to the selection insta again. This time, you are going to create an array of cells. Notice that the program assumes you are going to create another instance of Passdown. If you weren't, you could point to master again to inform KIC of the new master you'll be working with. Point to #x Type some small number like 2. Point to #y Type some small number. Now point to where in one of the layout viewports you would like to see a #x by #y array of Passdown cells. The array should appear. You have created a two-level hierarchy. At the root is the name of the cell you're editing. Both leaves of the hierar- chy are arrays of Passdown cells. One of them is just a 1 by 1 array. This description of the tree is incomplete. Associated with each instance array is a transformation. When you create an instance, you define the translation part of the transform when you point at where you want the instance to be placed. You can define other parts of the transformation also. You can mirror and rotate instance arrays by pointing at the ap- propriate selections in the instance creation menu. Play with this capability. For example, pointing at mx once adds mirroring about the y axis to the transformation. If you suddenly decide you don't want to add it, point to mx once more. This deselects the mx transform. Pointing at it again later will select it again, etc. You can also control the spacing between instances in an array using dx and dy commands. dx and dy can be negative to cause adjacent in- stances to overlap. positive values cause instances to be separated, and there default value is zero. Recursion (a cell referencing itself) is prohibited, because it is not meaningful here: there is no basis to terminate the recursion. So, don't try creating an instance of Foo.k within Foo.k for example. How do instances interact with selection? You can point at an instance when you are in selection mode and the program will highlight the instance so you can operate on it just as if it was a simple geometry: moving it or deleting it. We did this at the beginning of the tutorial when you were learning about contexts and traversal. You selected an in- stance of Passdown and then invoked push Note that the instance command menu contains a small subset of the commands in the selection menu. This provides the user the capability of easily moving or deleting instances without having to leave the instance command menu. Also, note that there is a new selection command, the flatn command for flattening instances. Select one of the in- stances that you have just created. Again, you should see the bounding box of the instance highlighted. Now point at the flatn menu command, and you should see the bounding box of the instance erased and replaced by the geometries (boxes, wires, and polygons) that are defined within the cell. Remember the depletion load and enhancement transistor you created a while ago? Create a cell called Inverter4 and place the load right above the pulldown. Connect the pulldown's drain to the load's source with a diffusion wire. Maybe extend the pulldown's gate and take the inverter's out- put off the load's source. You now have an inverter that you can use as a logic gate cell. 14. Property Lists You can assign a list of properties to any object in KIC, and these properties are preserved with the respective geometries in the KIC cell. A property in KIC consists of an identify- ing integer and a character string extension. These proper- ties can be useful for marking and identifying geometries or nodes in the layout. While in the basic command menu, begin editing the cell PadIn and point to the prpty command, and you will see the property command menu displayed. Note that the selection commands are present; property assignment in KIC is performed on objects which are selected. Now select a few geometries with the selection commands, and then point to the adprp command to add a property to the property lists of the selected objects. KIC will first prompt you for the property number; type, for example, the number 123. KIC will next ask you for the property string; type, for example, the sentence This is a test. Now point to the show command to display the property lists of all selected ob- jects. KIC will display the properties of each object in the magnifying glass. The object whose list is currently displayed is identified by KIC drawing an X through the ob- ject in the layout viewport. You will see that each of the items which you selected has a property 123 with a property string This is a test. Finally, point to the rmprp command to remove a property type from the property lists of the selected objects. KIC will prompt you for the number of the property to be deleted. Type the number 123 again and point to the show command. You will see that the properties which you added previously have now been removed. 15. Routing The KIC magnifying glass is especially useful for routing. In fact, without the magnifying glass, it is almost opera- tionally impossible to route. We will assume you are running KIC on a test cell and have created a box that is to represent a chip around its origin. Now place an instance of the bonding pad PadIn somewhere on the perimeter of your chip. Create a box near the origin to be the dummy terminal that you will route out to the pad. Here is one way that you can do the routing. We assume you have KIC in 45s mode. - Get a detail of our dummy terminal with the magnifying glass. - Select the wire command and point in the magnifying glass to the first reference point: it should touch the terminal. - Make the wire out of three segments: a vertical, a hor- izontal, and a vertical. It should terminate on the pad's terminal. If the wire does not properly align itself to the pad's terminal, the stretch commands can be used to complete the alignment. - If, further along in the layout procedure, you need to make more space available in the area of this wire for additional routing, you can simply do this (assuming that the space ex- ists) by using the stretch commands to move the horizontal section of the wire. You might also try routing using 45 degree angles. 16. The .KIC File Point to the attri command in the basic menu. Again you see the attributes menu displayed in the command viewport. Now point to the updat command. You have just created a file in your current direc- tory called .KIC which contains the current layer attributes (e.g., name, color, fill pattern, etc.) Return to the basic menu with the basic command and leave KIC by selecting the abort command. You will return to the UNIX environment. Now edit the file .KIC with your favorite text editor. For example, to use vi under UNIX, type vi .KIC The .KIC file has a slightly rigid, but readable format. KIC will not run correctly if your .KIC file doesn't adhere to the format. If your are running under UNIX, notice that the first line looks something like Path? ( . ../=cad.mosis.lib.5/=frame ) When you tell KIC a cell name, if the name isn't a full UNIX path name, KIC will search the list of directories enclosed in parentheses left to right. The first directory name is a dot (.) which means to search your current directory. If the first directory name is a dot (.) KIC will search your current directory as described above for UNIX. If a directo- ry name begins with a tilda (~) KIC will append the directory name to the name of the user's home directory. The following is a good generalization of this line: Path? (. LibraryCellDirectories) where LibraryCellDirectories is a list of directory names with useful cells in them. A directory in this list might be owned by your partner in a team design effort. Your current directory will be searched first, so any cells you create us- ing the save command will always be placed there. Next in the file, you will see the description of the layer menu. Each layer description looks like LayerName? NI Color'sName? yellow RGB? 255 255 0 Filled? y (Invisible) (Blink) MinDimensions? 2 Symbolic? n where the Blink and Invisible lines are shown in parenthesis to indicate that they are optional. There is one description like this for each layer. If you want to add a layer, just add another description. You may also add another layer while running KIC. This will be discussed later. The layer name may only be one to four characters long. The first character usually indicates the technology: N is for nMOS. The rest indicates the mask type: I is for ion im- plant. The color name isn't interpreted by KIC: it just serves to document what the color described by the three numbers after RGB? really is. The first number gives the intensity of red in the color, the second gives the green intensity, and the third gives the blue intensity. So, 0 0 0 indicates black: darkness. 255 255 255 indicates white: full intensity. 140 140 140 would be a gray. No number can be greater than 255 or less than 0. Here are some good colors. gray 140 140 140 cyan 0 255 255 pink 255 0 200 orange 255 170 0 red 255 60 60 green 100 255 100 blue 50 50 250 violet 195 0 235 scarlet 195 0 0 If y follows Filled? for a particular layer description, geometries on the layer will be filled in. If n follows Filled? geometries on the layer will be outlined only. If a sequence of eight hexadecimal numbers follows Filled? geometries on the layer will be filled in with a pattern defined by the sequence. The pattern is a bit matrix with eight rows and eight columns. The first hex number defines the first row, the second hex number defines the second row, etc. The corresponding bit matrix for the sequence 08 04 02 01 80 40 20 10 is * * * * * * * * where * indicates 1 and a blank indicates 0 or 00001000 00000100 00000010 00000001 10000000 01000000 00100000 00010000 The pattern is one with diagonal stripes. The Blink line is optional and will set the layer to the blinking mode when KIC is invoked. This only applies to graphics terminals that allow blinking layers. The number following MinDimensions? sets the minimum dimen- sions of geometries on the layer. If a y follows Symbolic? the layer will be a symbolic layer. If a n follows, the layer will be a fabrication layer. The differences will be discussed shortly. Finally, how is the priority attribute of a layer defined? The first layer description in the .KIC file is for the bot- tom layer or the layer with least priority, the second description is for the second to the bottom layer, ..., and the last is for the top layer or the layer with most priori- ty. Now invoke KIC again and begin editing a new cell. To add another layer to the layer menu while running KIC, enter the attributes menu and point to the adlyr command. KIC will ask you the number of the new layer. Type one (1) if the new layer is to become the left-most, least priority layer, and so on. Next KIC will ask you for the name of the new layer. KIC will then ask you for the RGB color combination of the new layer. Enter these values by typing three integers between 0 and 255 inclusive. Finally KIC will ask you whether the new layer is symbolic. You will see the old layer menu replaced by a new one that contains the new layer. Some of the colors of the command menu or magnifying glass grid may change when you use this command. KIC uses certain colors from the layer menu to display these items, and they may therefore change when you change the layer menu. This is discussed below. You may be wondering what will happen if you fill the exist- ing layer menu with new layers. Try it. You will see KIC erase the screen and then do a complete redisplay. KIC will have dedicated another row to the layer menu. To remove a layer from the layer menu, point to the rmove command. KIC will ask you to point to the layer in the layer menu that you want removed. Try it on some of the layers that you just created. You will see KIC erase the layer menu and replace it with a new one. Again, you may notice that the colors of the command menu and magnifying glass grid have changed. To define the colors that KIC will use for displaying the command menu, point to the menu command. KIC will first ask you to point to the color of menu text. Point to one of the layers in the layer menu to identify the color. Next KIC will ask you to point to the color of selected menu text (the color of the text of a menu command after you point to that command). Again, point to a layer in the layer menu to identify the color. Finally, KIC will ask you to point to the color for command highlighting (the color that surrounds the text of a menu command after you point to that command). You will then see the command menu redisplayed with these new colors. Now suppose that you want to change the color of the grid in the magnifying glass. Point to the grid command. You will see that this command is slightly more complicated than the grid command in the basic menu. As in the basic menu, KIC will ask you for the number of lambda between grid lines. Type some small positive integer. KIC will then ask you whether the grid should be displayed above mask geometry. Type yes or no. KIC will ask you whether a grid should be displayed in the coarse viewport of a split screen display if the separation of grid lines is sufficient- ly large. Type yes or no. KIC will ask you to point to the color of fine grid lines. Point to one of the layers in the layer menu to identify the color. KIC will finally ask you to point to the color of coarse grid lines. Again, point to one of the layers in the layer menu to identify the color. You will see the magnifying glass redrawn with the grid lines having these new colors. It is possible to change the color of a layer while running KIC. These color commands operate on the currently selected layer. You can decrease the intensity of red by pointing at -r Likewise, you can increase the intensity of red by pointing at +r There are similar commands for green and blue. When you have the color just right, point to rgb The numbers for the color will be shown to you. If you would like to set the background color of KIC, point to the bgrnd command. Now the +r, -r, +g, -g, +b, -b, and rgb commands apply exclusively to the background color. When you have found the color that is most appealing, point again to the bgrnd command to deselect it. Now the +r, -r, +g, -g, +b, -b, and rgb commands again apply exclusively to the current layer in the layer menu. If you would like to set the highlighting color of KIC (the color that is used to display the coordinate axis, the cur- sor, and to highlight selected objects), point to the hlite command. Now the +r, -r, +g, -g, +b, -b, and rgb commands apply exclusively to the highlighting color. When you have found the color that is best with your new background color, point again to the hlite command to deselect it. Now the +r, -r, +g, -g, +b, -b, and rgb commands again apply exclusively to the current layer in the layer menu. 17. Symbolic Layout Again, in the .KIC file, you can define layers as being sym- bolic layers as opposed to plain, old, fabrication layers. The layers NL, NDS, NPS, and NMS in the default nMOS .KIC file are symbolic layers. When you layout a cell, put NDS rectangles over any diffusion terminals or connection areas. Put NL labels next to them giving their signal names. Simi- larly, use NPS for poly terminals and NMS for metal termi- nals. Now, create an instance of your cell with KIC in unexpanded mode. Note that all geometries and labels on symbolic layers are shown along with the outlined box labeled with the cell's name and its dimensions. Most of the information needed in order to use the cell is present, but redisplays are much faster and the the screen is relatively uncluttered, because detailed layout is hidden away. You just have to route to the terminals on the right layers such that routing doesn't break into the outlined box. Sometimes this box is too coarse of a way of showing where it is forbidden to route. You may also want to place symbolic routing channels for routing through the cell or a finer picture than the outlined box of where it is forbidden to route. As an example of symbolic layout, edit the cell Symbolics which is stored in the KIC nmos library. This cell consists of a chain of two nmos inverters. Without expanding the cell, you can easily see the forbidden region, or protection frame, for polysilicon and diffusion. Also, the input and output and power supply terminals are obvious. 18. Keyboard Input By pointing, information is graphically input. At times, typing at the keyboard can be more appropriate. 18.1. Menu Commands You may find it painful to have to move the cursor out of the layout viewport just to select a command or change a layer. So, you can use keyboard input instead of graphical input for this. You may invoke a menu command by typing its shortest unique prefix which is indicated in the command menu by upper case letters. Don't type the return key after typing the prefix. As soon as you type the prefix, KIC will color the right menu selection and any arguments will be asked for. You may tell KIC to forget any previously typed input by typing ESC 18.2. Keyboard-Specific Commands - Abort KIC unconditionally by typing ctrl-a - You may type a coordinate by typing ctrl-e KIC will prompt you for the coordinate. - You can change the position of the magnifying glass by typ- ing ctrl-f KIC will prompt you for the new position of the magnifying glass. - You can change the position and size of the magnifying glass by typing ctrl-g KIC will ask you to point to the diagonals of the area that you want magnified. - You can select a new current layer by typing ctrl-l KIC will prompt you for the layer number (layer number one is the left-most layer displayed in the layer viewport.) - You can create a viewport stack with the ctrl-n command. This command is described below in more detail. - The orientation of the magnifying glass may be toggled between left-right and top-bottom by typing ctrl-t - You can suspend KIC by typing ctrl-z KIC becomes a suspended job, and your terminal returns to the UNIX environment. This is a convenient way to leave KIC without having to rebuild the database when you want to re- turn. - You can run any system command that does not require user input by using KIC's shell command. To do this, you first type an exclamation point. ! Now you type the command to be executed. For example, if you are running undir UNIX, type date You will then see the magnifying glass erased, and the date will be displayed in that viewport. At the bottom left corner, you see the word Done which indicates that the job has completed. Press the space bar and the magnifying glass will be redrawn. 19. Other Commands The commands zoom, pan and windo can alter the coarse viewport width and center. When the command last is selected, KIC displays the layout with the coarse viewport width and center in use before they were last changed. When the last command is selected again, KIC returns to the newer coarse viewport width and center (i.e., last is its own in- verse). It is also possible in KIC to create a stack of up to nine viewports and access them randomly by using the last command. When you type ctrl-n, KIC will prompt you to name the present viewport and will assign that name to the given viewport width and center. When you next select the last menu command, KIC will display a menu of viewport names, us- ing those names that were assigned via the ctrl-n keyboard command. The user simply points at the name of the viewport that he wants to be displayed, and KIC will return to that viewport width and center. Suppose you have edited a cell named a and wish to save the changes in a cell named b. The write command will do it. As you recall, the name of an instance is displayed inside the bounding box of the cell when KIC is not in expand mode. If you do not want these labels displayed in large windows, select the insta command in the attributes menu. KIC will then tell you that instances labels will not be displayed in large windows. By again pointing to the insta command in the attributes menu, KIC will always display instance labels. You can see that this command is similar to the label command in the attri- butes menu. KIC is interfaced to the LYRA manhattan layout rules checker. To use LYRA, you must first inform KIC of the technology that you are using by selecting the tech command. A LYRA process is initiated on a user-defined rec- tangular area by invoking the lyra command in the basic menu. See you instructor or research adviser for more information, or contact Michael Arnold by mailing to Kim:mha. 20. The .KICLogo File KIC provides a simple procedure that allows each user to have a personal KIC logo. When KIC is invoked without a cell name in the argument list, it will first look in the present work- ing directory for a file called .KICLogo and use this file to display a KIC logo. The contents of this file is a restrict- ed form of CIF; only boxes and single-segment wires are al- lowed. Also, the design must be contained within the first cartesian quadrant in window space. Because the format is CIF, a personal KIC logo may be created by using the KIC edi- tor. 21. Trouble You can always press the ctrl-a key to abort KIC if it seems to be in trouble. Also, it is possible to interrupt a redisplay by pressing the RUBOUT or BREAK key. KIC will then redraw the command and layer menus, and remind you to type ctrl-a to abort KIC if there is trouble.. Don't do any of the following. - Create recursive instance hierarchies. - Press function keys. 22. Bugs and Quirks The rdraw command simply performs a redisplay in the area of the large coarse window. If the magnifying glass window is not entirely contained within the large coarse window, the magnifying glass will not be completely redisplayed. This includes the grid inside the magnifying glass. If this oc- curs, you might simply force KIC to redraw the magnifying glass with the fine-positioning command. The minimum window that contains all selected geometries will sometimes be redrawn regardless of whether it is contained within the large coarse window (i.e., it is not clipped to the large coarse window). In any case, you should never al- low selected objects to exist outside the large coarse win- dow; you might forget that it the object is selected and unintentionally delete it. KIC clips polygons only to rectangular regions. If a polygon and the rectangular area to which the polygon is to be clipped (such as the magnifying glass) intersect into several polygons, bogus lines may be displayed. This occurs because KIC clips a polygon to one and only one polygon rather than the several polygons which intersect the rectangular area of interest. KIC will not allow you to use the stbox command to stretch one edge of a box over its opposite edge. Sometimes when the parser is invoked and fails on a binary, executable, or directory file, the database is corrupted. Contents Acknowledgements Thanks to the following people for making this possible. - Professors Newton, Pederson, Sproull, and Ousterhout. - The Hertz Foundation, National Semiconductor, and Tektronix for financial support. References Mead, C. and L. Conway. Introduction to VLSI Systems. Addison-Wesley, 1980. Fitzpatrick, Dan. MS report discussing cifplot and MEXTRA. EECS Dept., University of California at Berkeley, 1981. Hon, R. and C. Sequin. A Guide to LSI Implementation. Xerox PARC technical report SSL-79-7, 1980.