PWCoreDoc.tioga
PWCore, October 14, 1985 5:27:22 pm PDT
Bertrand Serlet July 24, 1986 5:22:24 pm PDT
PWCore
CEDAR 6.1 — FOR INTERNAL XEROX USE ONLY
PWCore
The bridge on the river Core
Bertrand Serlet
© Copyright 1985, 1986 Xerox Corporation. All rights reversed.
Abstract: PWCore is the general framework for connecting CD layout to Core. The Core structure either comes from schematics, or by a piece of code. In both cases, this Core data structure is decorated with some properties, which permit the construction of the corresponding layout. When the layout is constructed, publics of cells having layout are decorated with the interface geometry, to allow for routing. A primitive interface check is made at that time, but no structural isomorphism is made at this point.
Created by: Bertrand Serlet, Louis Monier
Maintained by: Serlet <Serlet.pa>
Keywords: Comparator, Core, ChipNDale, PatchWork, Extraction, Sinix, Decorations, Interface Geometry
XEROX  Xerox Corporation
   Palo Alto Research Center
   3333 Coyote Hill Road
   Palo Alto, California 94304

For Internal Xerox Use Only
Design decisions
Layout generation as we doing in June 85, only based on layout, present some inherent problems. The major one is the obligation for the designer to rename pins, that is to somehow specify that the pin input is rename input[0] in the leftmost cell, input[1] in the second cell, etc... . A related problem is the difficulty to specify connections when routing. The introduction of Core is a first step in solving those problems. But the Core data structure must be linked to the Layout data structure. A simple link from a Core CellType to a CD Object is not enough, because routers have to know the answer to the following question: given a public of a CellType, where is its interface geometry.
These considerations lead us to the following scheme: when layout is associated to some Core CellType, the Core must be decorated, that is every public must be able to enumerate its interface geometry.
Other wanted features were the ability to generate layout in a lazy way, so that layout generation is not required when simulating, for example, and the ability to accept different structures for layout and schematics, knowing that there might be a price to pay for this feature.
There are several ways to implement that scheme. One is to extract and make the isomorphism on the fly. In that case, the user code does not have to decorate publics, but just have to give enough information to the isomorphism. The problem with this approach is double: realizing the isomorphism is a costly operation both in time and in space; the construction of the layout now depends on a non-trivial piece of software. The retained scheme is to avoid all extraction, except at the leaves (Get), and to write for each generator a proc that does the decoration.
The easiest way to decorate is to do an extraction. But that means that an Object must extract as its corresponding CellType. To obtain this effect, the extraction process is faked, and layout attached to a CellType has a fake ExtractProc. This is no conflict with extraction caches, since anyway, an indirection is inserted automaticly when correlating CellType and Object. But most client programs (such as HighLight or Capacitance extractor) do not want to know whether or not the layout has been created with PWCore, and so the extraction should return the real extracted data structure. To find a way out of this apparent contradiction, a new class (PWCore.layoutClass) has been introduced, and the extraction of indirect objects issued from PWCore returns a CellType of such a class. That way clients who want to know about object of that class can (source cellType is stored in the data field of those cellTypes), and the others simply do a recast. The mecanism to do the Recast is a bit tricky, since the correspondence between layout and source Core was sort of trusted until that point. It works by enumerating the interface geometry of the extracted CellType, and trying to match that with the layout decorations of the source CellType. It should be noted that this scheme has the nice property of delaying extraction.
Interface invariants
When decorating publics with geometry, several checks are made:
A single geometrical wire can not correspond to more than one atomic public.
Every atomic public must correspond to al least one geometric wire.
Existing layoutAtoms
Exported by PWCore itself:
$Get, $GetAndFlatten
$AbutX, $AbutY, $ReverseAbutX, $ReverseAbutY
$ArrayX, $ArrayY, $ReverseArrayX, $ReverseArrayY
$Recast
$FlipX, $FlipY, $Rot90, $Rot180, $Rot270
$Value
Exported by other packages:
$Channel exported by PWCoreRoute.mesa (in the package PWCoreRoute.df)
$PadFrame exported by PadFrame.mesa (in the package PWCoreRoute.df)
$Match exported by Lichen (not yet implemented): expects a $PWCoreValue property [of type Object] on the cellType. Lichen is used to find how the extracted publics correspond to the source publics. This layoutAtom is not registered by this package.
Testing the package [for maintainers only]
PWCoreInverter.cm:
Reads a CD file, and registers a PW command called Layout2Inverter that, when executed, should produce a layout made of two inverters in serie.
PWCoreDecoder.cm:
Tests quite a lot of things, including the Checkpoints. Attention should be paid on the commandTool to the log, to check for correct completion of all commands.