1. Select the Color Display button which is left-most button in the static column of your screen (top right corner). A pull-down menu will appear. Choose the 8 bit CMos-B entry.
2. In your DATools subdirectory, execute the command,
% cdread logic.dale
The Logic Library should appear on your color terminal. The Logic Library (or any .dale file) is like a large sheet of paper. The user can view the entire sheet of paper at once, move the piece of paper around on the screen by scrolling, or select individual objects on the paper and view them in more detail. The default behavior of the cdread command is to present the "sheet of paper" so that all its objects are visible.
In addition to the Logic Library on your color terminal, a Control Panel for the Logic Library with the banner, Logic CMosB top level, will appear in the right column of your black-and-white terminal. Here are five keyboard-mouse combinations that will allow you to see things and get around:
First, a word of warning to left-handed-mouse users: ChipNDale, the graphical editor for VLSI layout and schematics, is very finely tuned for right-handed-mousers. Consequently, these instructions specify the left hand for the keyboard and the right hand for the mouse. Try it that way, some of the chording combinations are really difficult to reverse.
1. Centering selected objects (CtrlSpace)
LeftClick on one of the white rectangular boxes. Note that the terminal viewer on the right-hand column of your screen has told you what you have selected. Now center that selection on your screen by pressing the CTRL key and the space bar at the same time (CtrlSpace).
2. Zooming out (TabSpace)
Zoom out to the original magnification by pressing the tab and space keys at the same time (TabSpace).
3. Finding things in a large space: Search Object (DSpace, a case-sensitive search)
To list the contents of Logic, call up the Directory Menu by pressing the D key and the space bar at the same time (DSpace). Choose the second option, list directory. The Directory of Logic will appear on your screen. Now select the Search Object entry. Look over to the terminal viewer. You are being prompted for a cell name. Find the nand3.icon in the Directory of Logic; shift-select it, then hit the carriage return (Return). The nand3.icon is selected and fills the screen.
Note the use of mnemonics in selecting the letters for menus: D stands for Directory. Menus are generally invoked by pressing a letter and either the spacebar (Space) or the middleMouseButton (Middle).
Most of the time, it is possible to get additional documentation explaining either:
1) what the entries in a menu mean, or
2) a keyboard equivalent for the menu item
by moving the mouse above the above the titleBar of the pop-up menu and then moving it back into the menu item area. Try it on the Cell Menu (CSpace).
4. Changing Magnification
<>
To get a view of something besides the nand3.icon, find the < and > keys. The looks of these keys express their functions. The < key makes objects bigger. The > makes objects smaller. Hit the > key 5 times. You should now see most of the released section of Logic .
Icons in the released box are public. The name, size and shape of the icon, the position of the pins, and their general semantics are fairly stable. Any changes to these icons will be done with profuse apologies and a lot of advance notice. These are the icons to use for standard cell layouts.
5. Scrolling (SpaceMiddle)
Center the word
Released at the top of your screen by executing SpaceMiddle. SpaceMiddle must be executed in exactly the following order:
1. Left hand on spacebar
2. Right hand on middleMouseButton
3. Move the mouse to draw a vector from your current position to the new position desired. In this example, this means you should draw vector from the word Released to just below the word CMosB in the terminal banner.
4. Take your right hand off the middleMouseButton.
5. Take your left hand off the spacebar.
The released section of the Logic Library should now be centered on your screen. To make the entire released section visible hit > one more time.
Note: Many users may find scrolling hard because the wrong timing of the left and right hands produces either stray wires or no action.
1. If Middle proceeds Space, Middle draws a wire and Space flips its orientation.
2. If Space proceeds Middle, but the left hand is taken off Space before the right hand comes off Middle, nothing happens.
The 5 keyboard combinations listed above should be enough to navigate in Logic . At this point it is probably a good idea to practice a little. Move around. Push into and Pop out of a few of the other icons listed in the Directory.
Additional information about using ChipNDale can be found in the following documentation:
1. [DATools]<DATools7.0>CDDoc25>ChipNDaleDoc.tioga
This is the comprehensive reference guide for ChipNDale, the graphical editor for VLSI layout and schematics that you have been exercising.
2. [DATools]<DATools7.0>CDDoc25>ChipNDaleIntroduction.tioga
This is an introduction to ChipNDale to be used in the first hour of interactive usage.
3. [DATools]<DATools7.0>CDDoc25>CDCrib.tioga
This is a 4-page crib sheet that experienced users of ChipNDale find very handy.
All of this documentation is listed in [DATools]<DATools7.0>Top>CDDoc25.df. Get in the habit of opening the df file pertaining to the package of interest. It's the most convenient way to find all the files on a particular subject.
3.2 Creating a New Design Using Standard Cells
Our first project will be to recreate the schematic for the oneBitAdder that is included in Logic using standard cells. Find the oneBitAdder.sch included in Logic using the search object entry from the DSpace menu.
Create a new viewer for a design by executing the command, cdNewCmosB in your DATools Subdirectory. This should create a new, ChipNDale Viewer and a Control Panel for that ChipNDale Viewer. The Control Panel appears in the right-hand column of your black-and-white terminal. If the ChipNDale Viewer appears on your black-and-white terminal, move it to the color display by selecting the color button in its banner (and add a userProfile option which says: ChipNDale.FirstViewerOnColor: TRUE.)
There are two mechanisms for using objects from the Standard Cell Libraries to create new designs. Include actually copies the designated object from the Standard Cell Library into the new design. Import establishes a reference between an object in the new design and its referent in the cell library. In general, the second method is preferable because changes made to the referent are propagated to objects in the referencing design. In this example, we will import objects from Logic.
Before we can do the import, you need to know one more thing: ChipNDale distinguishes between design names and file names. A Design is the object created by the user. It may represent one or many circuits. A design is in a particular technology for example, CMos-B or NMos and consists of some geometry and a Directory. A File is the storage unit for a design.
Now, back to our first project. To make things easier, first import the oneBitAdder to be copied by executing the following sequence of commands:
1. Left-click the mouse in the new, ChipNDale Viewer. In ChipNDale terminology, this is called placing the input focus.
2. Now hold down the X, Z, and middleMouseButton at the same time (X-Z-Middle). Look over to the Terminal Viewer it has printed out the command you have executed: "draw object of imported design." It is prompting for a "DESIGN name." Enter the name of the name design, Logic (the capital L is mandatory).
Now look back to your ChipNDale Viewer. A pop-up menu is prompting for the name of the file that contains the Logic design. In this case the filename and design name are the same. Select the Logic entry that ChipNDale has provided.
Look back to the Terminal Viewer it is now asking for the name of the object from Logic that you want to import. Type in its name, oneBitAdder.sch.
Note: These interactions are case-sensitive so, when it is possible, it is safest to copy names out of the Directory of Logic.
To recreate the oneBitAdder, five gates must be imported: nand2.icon, nand3.icon, nor2.icon, nor3.icon, and nor4.icon. Since Logic has been established as the file from which cells are being imported, it is only necessary to do the following:
1. Position the mouse so that input focus is about where you want the import to land.
2. X-Z-Middle at that position.
3. Select Logic as the Design for imports.
4. In response to the Terminal Viewer prompt, type the name of the object to be imported, or better yet, shift-select the name from the Directory of Logic.
Note: Gates are imported to the position of the mouse when the X-Z-Middle command is executed. After importing the five gates, your no name viewer should look like this:
It's time to save your work. The IO menu is used for saving designs to a file. Invoke it with ISpace. Select the output option. This first time you will be prompted for a file name. Type in adderExample.dale then hit the return key (Return). From now on, unless you want to change filenames, use the save entry to write your work to a file. Close the Logic Library to give your adderExample the whole screen.
Here are some additional commands to complete the oneBitAdder:
1. Get comfortable by selecting everything, centering and increasing the magnification
To select everything hold down the space bar and the rightMouseButton at the same time (SpaceRight). Center your selection (CTRLSpace). Increase the magnification (<). Scroll your design to the right so that all the gates for the new oneBitAdder are visible (SpaceMiddle).
2. Moving individual objects
By a Vector:
Left hand on control. Holding the right hand down on the leftMouseButton select the object you want to move, then move the mouse in the desired direction. A vector will indicate the extent of the move. Take your right hand off the mouse when the vector looks right.
By an Incremental step:
The control key and the A, W, S, and Z keys are used together to move objects in incremental steps as follows:
ControlA = left
ControlW = up
ControlS = right
ControlZ = down
Look at the keyboard; this makes visual sense.
3. Copying
Make two more copies of the nand2.icon by doing the following:
Left hand on shift. Holding the right hand down on the leftMouseButton select the object you want to copy, then move the mouse to the point where the copy should appear. Take your right hand off the mouse. You should have another copy of nand2.icon. If it's not positioned quite right, use the incremental move command to scoot it around.
Now make another copy of nand2.icon and two copies of nor2.icon. Your screen should look like this:
[Artwork node; type 'ArtworkInterpress on' to command tool]
Figure 2: The color screen
Save again (ISpace). This is the last reminder about saving often.
4. Deleting (CTRL-D)
To delete an object, first select it then (leftClick) and then hit the control key followed by the d key (CTRL-D).
As objects are created they are added to the Directory of the design; however, when an object is deleted it is not removed from the design's Directory. To get unwanted objects out of the Directory, they must be deleted explicitly using the prune complete dir entry on the Directory (DSpace) menu. This process is not commutative. Objects must be deleted from the screen before they can be deleted from the Directory.
5. Un-Deleting (ESC-D)
To restore an object that was deleted by mistake, hit the escape key followed by the d key (ESC-D).
6. Stopping a command while it is in progress (DEL)
Here's the scenario: while your left hand is on the spacebar you press the middleMouseButton instead of the leftMouseButton, thus drawing a wire instead of scrolling the screen. You can negate the action in progress by keeping your left hand on the space bar and hitting the DEL key. Try it.
7. Searching the Directory of a file using the PATTERN feature (a case-insensitive search)
The default behavior of the list directory entry is to list all items in the Directory that match the wildcard designator, * (an asterisk). The search can be refined by filling in the pattern field of the Control Panel for that file. The pattern entered can contain multiple wildcards. After filling in the pattern field, select the list directory entry from the DSpace Menu. The items that match the pattern specified will be printed in the Terminal Viewer. This pattern-matching facility is case-insensitive.
8. Ticks (periodSpace)
Call up the ticks menu by pressing the period key and the spacebar (periodSpace). (Note that periods look like ticks.) Select the four entry from the menu. If you think it will be easier to draw wires with ticks on, leave the ticks on. Otherwise turn them off.
3.2.1 Drawing wires
For schematics, wires are drawn in black using a width of 4/8, that is 1/2 l. (The reason that the Control Panel says 4/8, not 1/2 l, is to make it explicit the fact that l can be subdivided into 8ths.) Look at the Control Panel for the adderExample. The top-left entry gives the current layer. If the current layer is not black, find the black button in the next row and middleClick on it. The current layer should now be black.
To draw a wire, hold down the middleMouseButton as you move the mouse. To draw a continuous wire that incorporates 90° angles, hit the spacebar as you move the mouse in a new direction. Try drawing some wires that bend. Try a square.
3.2.2 Connected vs crossing wires
When selected wires are shown at a very high level of magnification, they appear outlined in white, as Figure 3 illustrates. By selecting a wire segment and extending that selection to other wire segments, it is possible to determine exactly how a wire is composed.
Try the following introductory exercise:
Push into the oneBitAdder (push in picture, CSpace). Center the top left nand gate on your screen. Increase the magnification until the A, B, C inputs and top four gates of the oneBitAdder fill the screen. Select (leftClick) the vertical portion of the A wire. The vertical portion of A should now be outlined in white. Extend the selection to the horizontal portion of the A wire by clicking the rightMouseButton (rightClick). Both sections of the A wire are now outlined in white. Note that the outlined horizontal portion of the wire includes the vertical portion as Figure 3 illustrates. Using the shift to create 90° angles in wires results in this configuration.
3.2.3 Connected vs crossing wires: The Rules
1. Two wires that are colinear and whose endpoints abut or overlap are connected. Figure 4a illustrates two wires whose endpoints abut. Figure 4b illustrates colinear wire segments that overlap. In both cases a connection exists.
2. Two wires that almost touch are not connected (Figure 4c).
3. Wires that cross without an explicit contact at their point of intersection are not connected (Figure 4d).
4. Crossing wires with a contact at their point of intersection are connected (Figure 4e). There is a contact in the released portion Logic. Its name is ct.icon.
3.2.4 Attaching names: Satellites and Expressions
Satellites provide a way to associate arbitrary textual information including names and expressions with ChipNDale entities. There are two kinds of satellites:
A. Instance Satellites: An instance satellite is a Chipndale text instance that has been associated explicitly with another graphical Chipndale instance called the satellite's master; a master along with its satellites is called an instance group.
B. Object Satellites: An object satellite is a text instance that has been associated with the containing cell or design.
Both instance and object satellites can be made comments in the programming sense of that word. Comment satellites are used when a piece information should be included in a design, but this information should not be interpreted by programs that analyze the design. Comments remember their masters.
Expressions also come in the instance and object varieties. The only difference between Satellites and Expressions is that Satellites are visible and Expressions are not. Expressions are provided for those occasions where placing satellites would clutter up the entity upon which they are being placed. Expressions are generally used on icons. To illustrate this point, push into one of the NOR or NAND icons and select its top input wire. Call up the Satellites Menu (LSpace). Select the Show Instance Expressions entry. The Terminal Viewer should say, "name ← "I-A"."
3.2.4.1 Attaching names: Satellites and Expressions: The Tricky Part
Satellites and Expressions are not added to ChipNDale instances in a uniform way. Here are the rules:
1. Object satellites are added/accessed pushed into the cell.
2. Instance satellites are added/accessed with the cell selected.
3. Object expressions are added/accessed with the cell selected.
4. Instance expressions are added/accessed with the cell selected.
The easy way to remember this is to remember that object satellites are the exception, you must be pushed into the cell to add them. The others are added with the cell selected.
3.2.4.2 Adding names to the oneBitAdder
Because the names associated with the input and output wires in the oneBitAdder should be visible, they will be stored as satellites. Select the wire that is called A in the oneBitAdder. Call up the Satellites Menu (LSpace). Select the draw instance satellite entry. The Terminal Viewer will prompt for a text string. Type in the appropriate text string (CR). The text string should appear about where you want it. Select it, then scoot it around using the Incremental Move command. Name the three input and two output wires for the oneBitAdder.
In the terminology of Core, the five wires that have just been named are public wires. These are the wires that connect to other cells. They are at the interface of the oneBitAdder. Wires that are not at the interface of a cell are called private.
3.2.5 Editing: Satellites and Expressions
To edit instance and object satellites do the following:
1. Select the instance/object.
2. Call up the text operations menu (YSpace) and select the first entry, replace selected texts. Answer the Terminal Viewer prompt with the new text string.
To edit instance and object expressions do the following:
1. Call up the Satellites Menu (LSpace) and select the Edit Instance/Object Expressions entry.
2. The Terminal Viewer will display all of the expressions in order and prompt for a new expression.
3. To edit a particular expression, simply type the new version in response to the system prompt.
4. If you do not want to edit a particular expression, hit the DEL key.
5. If you want to delete a particular expression hit the - (minus) key.
3.2.6 Creating Cells
Cells associate entities and give that association a name. A cell is created by drawing its bounding box and using the Cell-Menu to create and label the association. To make the oneBitAdder a cell, it must be selected. This selection is done with an Area Select.
1. Area Select
Area Select is accomplished by holding down the leftMouseButton and moving the mouse to sweep out the rectangular area to be included in the cell. The rectangular area selected can be larger than the area to be included in the cell because ChipNDale computes the precise bounding box of the cell from the selected objects. However, the wires on each side of the bounding box must be exactly the same length. If they are not, only the longest wire on each side will become a public wire. Similarly, any wire that exceeds the limits of the bounding box drawn will not be included in the cell. These facts force the designer to be meticulous about the length of public wires. There are many ways to deal with this hassle. The simplest approach is to:
1. Draw all wires on a side longer than they need to be.
2. Select all the wires using extend select command.
3. Cut the wires to the same length using the cut command: With the | key down, hold the rightMouseButton down and move across the wires to be cut in exactly a horizontal or vertical motion. This action will produce a cut mark in each of the wires. Now select and delete the unwanted portion of each wire. Figure 5a demonstrates this technique. Figure 6 shows bounding box computed by ChipNDale for the oneBitAdder.
To make the oneBitAdder into a cell, call up the Cell Menu (CSpace). Select the create cell entry. The Terminal Viewer is prompting for a name. Enter the name, "oneBitAdder" (CR).
The cell just defined is a ChipNDale object. Because an object has been defined, it is possible to attach satellites to it. While pushed into the oneBitAdder, call up the LSpace menu and select the draw object satellite entry. Give the cell a name by typing in the name, oneBitAdder, in response to the Terminal Viewer's prompt. The cell name, oneBitAdder, will now appear inside your cell. Make that name a comment by selecting it and executing CTRL-\. Pop out. ChipNDale provides several options when popping out of a cell: To store the changes made, select the replace entry in the pop-up menu that appears. The flush entry throws out changes. The new cell entry is used when the current cell is a modification of an earlier cell that should remain unchanged; if the replace option had been selected, changes made to the new cell would be propagated to all other copies of that cell.
3.3 The World Through ChipNDale's Eyes
By this time many of you are wondering what the underlying model for ChipNDale is. Here is a brief description.
ChipNDale has two basic types: Instances and Objects. An Instance is an Object with coordinates and rotation. Objects include: rectangles, imports, text, repetitions, transistors, and most importantly, the cell, which is a collection of instances. Objects may be atomic or composite. Atomic Objects, of themselves, cannot be transformed into cells. Composite Objects may be transformed into cells. For example, an Instance that is a repetition can be transformed into an Instance that is a cell by invoking the Create Cell command.
A third ChipNDale type is the Design. Like a cell, a Design is a collection of instances. Unlike a cell the Design has a Directory. The Directory is an association between Names and Objects. An Object is an abstract model; only Instances of an Object are created and manipulated on the screen. When all Instances of a named Object are deleted from a Design, the Object's name is still in the Directory. (The Directory's pointer to the name of the Object prevents it from being garbage collected.) To rid the Directory of obsolete Objects, use the Prune Directory command on the DSpace Menu.