1. Introduction (1)
PARC sign, Pinto drives by
(Narrator) What you are about to see is a description of the architecture of a custom integrated circuit design environment.
pan to driveway, VLSI car drives towards camera, zoom on license plate
(Narrator) This tape reflects the implementation constructed at the Xerox Palo Alto Research Center as available at the beginning of 1988.
Cut to designer's face sitting in front of workstation, want to establish an association of the designer in front of the workstation as meaning examples of the use of the system
(Louis) Hi, I'm Louis Monier. My job in this tape is to demonstrate the features of our system and show you how they help me take a chip from specification to layout.
Turns to programmer sitting at his side in front of whiteboard. Zoom out to include them both
(Rick) This is Rick Barth. Throughout this tape he will explain the conceptual models we use and the underlying structure of the system.
Zoom on programmer at whiteboard, want to establish programmer at white board as meaning explanation of underlying system. Drawing on whiteboard shows program captured as text and pictures, executed to produce annotated net list with tools working off of that.
(Rick) This circle whole picture is a model of our design aid system. In it we capture the point source description of a design as a mixture of text and pictures. This source is then point evaluated to create an point annotated net list which is the common data structure used point by all of our tools as their design description. point Some of the tools use a flattened representation of the circuit to do their job, but most of them work off the hierarchical representation.
He relaxes and looks at the camera
(Rick) Since we use general purpose text and graphic editors to capture the source there is no need to write a special purpose editor for each type of design information nor must designers learn a new set of manipulation commands for each type.
Cut to designer in front of workstation.
(Louis) Let me outline the contents of the rest of this tape.
Voice off; fixed slide1 superimposed on a view of a param. sch., rosemary viewer, and a scope underneath on BW screen.
(Louis) First we'll describe how we capture, simulate, and layout simple designs.
Same with on color screen of an annotation Layout: Mumble, followed by some layout
(Louis) This will introduce you to the basic concepts of our system.
Same with a brief clip of an FSM
(Louis) Then we'll cover several higher level descriptions such as finite state machines. This will demonstrate the extensibility of the system and the legibility of designs captured using it.
Same with the memory controller wafer
(Louis) Finally we'll wrap up with examples of large circuits built with the system.
2. Design Capture (2.5)
Louis
Close slide viewer and open viewer with /Dragon/Dragon7.0/Top/MemoryController.df MemoryController.dale IOAddressMatch-A.sch specification and an almost completed implementation in it. Circle specification. Here is the specification for the block of logic we'll use to demonstrate low level design capture using graphics: a register address decoder. The address consists of four fields; point the high order bits are unused; point the next field encodes the static device type; point the next the dynamic device number; point and the last the specific register within the chip. I've begun the design already, let's continue. Copy 3 input AND gate from Logic, draw the output wire and name it Match. This simple sequence of actions demonstrates many of the basic concepts of the system. Let's have Rick explain them.
Rick
Cut to programmer at white board with and3 icon, properties, and schematic. Have icon wires and picture in different colors. Louis drew the AND gate by selecting it from a library. This library has no special status in the system, it is just a particularly handy collection sharedby many designers. Louis can create his own logic symbols quite simply. Each logic symbol consists of a visible portion, which indicates its functionality and connection points, and some invisible properties, which tells the interpreter how to convert the graphical item into a net list. The AND gate has the IconFor property, which indicates a procedure that converts schematics into net lists. This procedure looks for another property on the icon which names the schematic that describes the implementation of the AND gate. This schematic contains a number of symbols which we'll return to in a second.
Pan to next section of whiteboard which has wire with name. First lets look at the wire Louis drew and named. This introduces the concept of a text satellite. Our editor has a general notion of attaching text to specific graphical items but it knows nothing about the interpretation of that text. That job is left to the interpreter which converts pictures into net lists. By convention the interpreter converts a simple sequence of characters into a name since that is the most frequent use of text.
Pan back to AND schematic. In this schematic we see five pieces of text. Four of them are names but the fifth has the back arrow or assignment character in it. The interpreter recognizes this special character and passes the whole piece of text to a general purpose expression evaluator which assigns the value three to the variable n.
Pan to another section of whiteboard which has n input and gate with its hidden properties. If we look at the properties which control the conversion of the n input and gate into a net list we see that instead of the IconFor property this graphical item has a CodeFor property with the value Logic dot And of n. This is the manner in which graphical pieces of the program describing our circuit can invoke textual pieces of the program written in an ordinary programming language. In this case we are invoking the And procedure in the Logic package and passing the value of n to it. The procedure will compute the net list for our 3 input nand gate. Its possible for the And procedure to invoke the graphical interpreter again so that the program bounces back and forth between text and pictures, using the most natural mode of expression at each level in the hierarchy. Since it is possible to call an arbitrary procedure to convert a graphical item into a net list this mechanism also provides for extending the system in arbitrary ways.
Pan back to AND schematic. The last graphical item in this schematic is this large black box which we call a composer. Its function is to compose simpler wires into more complex collections. In this case it is composing three atomic wires, or wires which consist of single electrical nodes, into a composite wire which matches the structure of the input wire of the 3 input and gate. The procedure which translates schematics into net lists makes a single pass over the source, calling the procedures for each graphical item which convert them into wires or cells and on the fly the rectangles of each wire are intersected to establish the connectivity of the cell. The final result is the production of a single cell in a hierarchy of net lists.
Zoom out to include programmer's face. We've seen how the 3 input AND gate is converted into a net list representation. The recursive evaluation of program fragments made out of pictures or text is the fundamental paradigm of this system. Everything else is embelishments of this idea. Lets return to the register decoder example.
Louis
Cut to finished schematic on screen. While you've been gone I've finished drawing this schematic. Let me point out a few more examples of handling wires and then we can try executing the program represented by this block to produce a net list. point Over here are examples of wire extractors. These are graphical items that pick a single wire out of a composition. point This wire extractor is a range extractor. Rather than a single wire it selects a set of wires from a composition. point This little black dot tells our static checker that its ok for the low order 10 bits of this bus not to be connected to anything.
Invoke space-O Sisyph extract. Let's convert this block into a net list. Extract and wait cue. Cut to terminal viewer with IOAddressMatch-A: Record Cell Type at top. This is a textual representation of the net list. We rarely look at this so it is a bit hard to read but it is important that you have a clear idea of the result. Pending delete select IOAddressMatch-A: Record Cell Type. At the top we see the name of the cell and its type. A record cell is somewhat similiar to a Pascal record type in that it collects together cells of arbitrary types. Pending delete select the public wire. Every cell has a public wire which indicates the wires which must be bound when the cell is instantiated. We can see the two input wires, DevNum and Address, and the output wire, Match. Pending delete select the internal wire. Record cells also have internal wires which are those that are used to wire together the instances inside of it. Scroll and pending delete select the instances. Finally we see the instances of subcells such as pending delete select the and3 instance and3 and the binding of its public wires to the internal of the current cell, for example the binding of X which is the output of the and3 cell, to Match, which is the output of the parent cell.
Zoom out to see designer with screen in background. Lets shift our attention to a block which is more naturally expressed by code. Zoom into screen. Louis changes it to focus on the map cache fifo controller and selects the Logic.Driver icon. This icon represents a buffer which takes a parameter that specifies the number of unit loads which must be driven. Cut to following cleaned-up code from LogicSimpleImpl.Driver.
Driver:
PROC [d:
NAT]
RETURNS [ct: CellType] = {
SELECT d
FROM
<=0 => Error["Please specify strength of driver"];
<=4 => ct ← Extract["driver4.sch"];
<=8 => ct ← Extract["driver8.sch"];
ENDCASE => {
-- use constant amplification in 2 stages, correct up to 64
n2: NAT = (d+3)/4; -- second stage: 1 inverter may drive 4, round up
n1: NAT = Real.Round[Real.SqRt[n2]]; -- first stage, sqrt of second stage
ct ← Extract["driver.sch", LIST[["n1", n1], ["n2", n2]]];
};
};
The implementor of the parameterized buffer decided that its implementation need only consider four cases. point The first is when the number of loads was not specified. In this case the designer is simply given an error message. point The second and third cases handle 1 to 4 or 5 to 8 loads respectively and they are implemented by simply calling the extractor recursively on schematics which are not parameterized. The last case uses another parameterized schematic whose parameters are the number of parallel unit inverters for each of the first and second stages. The first stage uses the square root of the number of inverters in a single second stage. This sort of case analysis followed by the computation of parameters clearly requires standard programming language control constructs. Rather than try to invent a graphical language which reimplements these ideas we chose to use an existing language.
Zoom out to designer face. This completes our description of low level design capture. It has demonstrated the need for both graphic and textual descriptions and shown how viewing these descriptions as executable programs rather than static net list descriptions allows parameterized designs and allows the system to be easily extended.
4. Layout (2)
Cut to top-level icon of BIC on the color monitor.
(Louis) Ideally, the layout generation of a circuit for which one has a logical description should proceed as follows...
Add satellite "Layout: Grok it!", click Generate Layout in menu.
(Louis) ... simply ask the DA system ...
Cut to blinking eye icon through the magnifier.
(Louis) ... and in the blink of an eye ...
Cut to finished layout on screen with simplification set to show all.
(Louis) ... one should get layout.
Cut to designer in front of large plots of memory controller and map cache on the wall.
(Louis) Many systems offer this capability by restricting to a very specific design style, such as gate arrays or standard cells. If a circuit does not completely fit in this style, it must be designed with an entirely different set of tools. Even with systems which allow some extensibility, the design suffers from lack of uniformity. For example, a system might allow standard cells with a few imported macro blocks; if these blocks are designed using a different set of tools, then they are most likely imported as low level pieces of layout; and so it is unlikely that the same set of analysis tools, such as behavioural simulators, can be applied to them.
Louis points to the various components on the plots
What we have here is an architecture to express all styles of layout; hand packed tilings for RAMs, more automatically and slightly less packed tilings for data paths, standard cells for random logic, and pad frame construction.
Cut to color monitor.
(Louis) For circuits with very simple structures, our system is pretty close to the ideal.
Louis shows "Layout: SCRemote" in DEX design
If one only needs to place and route a block of standard cells ...
Louis shows "Layout: PadFrame" in same design
... and surround it with a set of pads, then the layout can be generated with minimum effort, simply by adding these annotations to the existing description.
Cut to small plot from Mt Fuji.
(Louis) The resulting layout is similar to that produced by any decent standard cell system. However, the general layout mechanism we use is similar, and only requires adding annotations to the circuit description.
Cut to white board which has DAG with Get tags at the bottom, a SC tag collecting some of them with some intervening levels of hierarchy, an Abut tag collecting others, and a Route tag at the top.
(Rick) Layout generation proceeds by a recursive process of bottom-up construction using the net-list DAG. Certain levels in the description carry an annotation which specifies the layout operator to be applied there. Each layout operator gathers its parameters from the schematic, recursively ensures that each child has a layout, and then composes its own layout. Let's examine a few of the layout operators currently accessible through our system.
Cut to color monitor: BIC, delay.sch, part of the extract cache is loaded.
(Louis) Leaf cells offer the simplest situation. We see here point the schematic for a simple cell, and point the corresponding hand-drawn layout. The schematic carries point an annotation which invokes the Get operator. When I apply the layout generator to this cell click and SPACE-F, the schematic is converted into an annotated netlist extract cue, and then the recursive layout process begins. This layout operator fetches the layout cell point, extracts it, checks both interfaces for conformance, and move result layout to color screen returns the hand-drawn cell as the result.
Color monitor: BIC, tap4.sch.
(Louis) It is very common for full-custom parts to be assembled from cells which are carefully pitch-matched in order to abut. This example point shows four identical cells abutted with a different cell on the right. Notice that the order of the cells is implied by the schematics; the layout generator has access to the schematic representation as a picture, and can parse it to infer a lot of information; the schematic is thus used as a graphical language.
The "Abut" layout generator first asks for the layout point of these two cell types; then assembles the five instances to form the resulting layout. Generate Layout.
Color monitor: layout of tap4.
An interface check is performed to guarantee that the connections made by abutment are the same as the connections specified by the schematic. This check is performed by every layout operator. A complete check that the schematic and the layout are identical is performed after layout generation is completed.
Other layout operators in this class perform geometrical transformations and assemble tilings and sequences. They are generally used to construct dense full-custom blocks.
Color monitor: MapCache, pushed into Inner.sch.
(Louis) Higher-level operators offer more freedom of assembly. magnifier on Layout: Channel Here a channel router is used to assemble two blocks: a block of standard cells on the right and a stack of three rams on the left.
The set of hints found in the schematic includes point the orientation of the channel, the order of cells and the wires appearing at the exits. Options specified by text embedded in the schematic include point the minimum width for a net, and the materials used for routing. These schematic annotations drive the layout generation. Generate layout.
Color monitor: MapCachelayout, entire view, then zoom on the crowded part of the channel.
(Louis) Notice how the use of structured wires in the schematics simplifies the description compared to the layout.
Color monitor: BIC, DBusControl.sch; use magnifier to show Layout annotation.
(Louis) Another operator constructs a block of standard cells. The schematics must be expressed in terms of elements corresponding to a library of standard cells. Only the top-level schematic carries the layout annotation point to Layout: StandardCells. The side and position of wires exiting the layout can be controlled from the schematics. Textually specified options include the number of rows and which algorithm to use for placement, in this case a placer on a remote machine. Generate layout.
Color monitor: BICLayout, SC block.
(Louis) This is the layout for this small block. During layout, the structure is simply flattened until leaves carrying a layout annotation are reached: the general layout procedure is called to return the layout of each leaf.
Color monitor: SCLibCMOSB, area around or3.
(Louis) These leaf-cells are usually part of a library, like this one. The library can be shared among designers, or private. Leaf-cells can also be obtained by abutting other cells or generated by program: since standard cells are nothing special to the system, adding a new cell is a benign operation. This illustrates the extensibility of the system and the uniformity of the layout generation.
Color monitor: BIC, BIC.sch; use magnifier to show Layout annotation.
(Louis) The last step in the physical design of a circuit is the pad routing. This schematics features the core of the circuit, and the four sides of its padframe. As everywhere else in our system, zoom to text the layout is specified by adding annotations to the top-level schematic. The direction of materials, the width of the power buses and the position of the core of the circuit within the pad frame are all textual options.
Color monitor: BICLayout, zoom to a dense routing area showing powr busses.
(Louis) The assembly generates the layout of the four sides and the inner part of the circuit, then calls a router which uses no less than 20 different routing areas in order to guarantee a good power routing.
Cut to Face shot.
(Louis) As we just saw, generating the layout of a circuit is a batch operation, in the sense that the final layout is produced by running a program on the source. This layout is never edited by hand. If the result is unsatisfactory, the source, either schematics, code, or layout of small cells, is updated, and the generation started all over. Great confidence in the final mask results from
Cut to Slide5.
the very compact and legible source
the use of well-debugged generators
interface checks during the layout generation
the read-only nature of the final mask.