ChipNDaleMessages1987.tioga
Copyright © 1987 by Xerox Corporation. All rights reserved.
Created by Christian Jacobi
Last edited by Christian Jacobi, April 22, 1987 5:04:39 pm PDT
1987
####################################################
Date: Tue, 21 Apr 87 14:17:21 PDT
From: jacobi.pa
Subject: ChipNDale 2.5 released
To: DAToolsUsers^.pa, ChipNDaleUsers^.pa
Cc: Jacobi
Reply-to: jacobi.pa
ChipNDale 2.5 released
Lets give it a try! Most other DA tools are ready and will follow soon.
[BUT: next weeks run might still be done with cd24]
In spite of the original intend to have 2.5 simply be a small release to upgrade to Cedar 7.0, the changed directory invariants make this a major release. But I believe, the bulk of changes are only internal. Clients did usually not depend on ChipNDale's invariants and therefore, need only small adaptations for changed interfaces [Unless the clients want to take explicite advantage of some change]. A little bit of morale: its ok to not depend on ChipNDale's invariants, but its not ok nor is it the same thing to violate those invariants.
General changes
New release strategy [Needs refinement]
I'm no more willing to have to wait for several months until the last tool builder allows me to go ahead with the next release [like it was for cd2.4]. This release might be disabled for tool makers, whenever the next release is ready and the tool makers had 3 (calender) days to keep track. Should that not expedite a future release, the old version will be disabled for all users.
Read only designs
Read only for designs means: objects will not change their picture on mask; the directory does not change.
It does not mean no other state changes like push, pop, or certain commands on top level are made. [Read only doesn't protect the complete data structures; only an abstract concept]
Immutable objects
Absoluteely required:
Immutable composit objects must not have children which are mutable [because editing the children could not propagate up]
Immutable objects must never be changed.
This feature is orthogonal to the class.
Immutable objects and read only designs are different concepts and not linked together at all.
The interactive user interface for this feature is not ready.
New directory invariants
New: Objects do not need be included in directory.
As allways: Mutable objects must not be included in more than 1 design.
Directory is read back from file as written! NOT cleaned up!
These new invariants simplify [correct] implementation of classes like CDRepetitions, CDDynamicObjects, Abuts and RouteChannelObjects. I still do believe clients should not define their own classes [but I don't prevent it either].
In case ChipNDale finds out about an invariant to be broken, ChipNDale might simply call an error instead of trying to fix it.
Imports
Due to the changed directory invariants, imports can not rely on caching; caching is now a hint only. To really find all imports all instances have to be enumerated. Baah.
There is new real code behind the implementation of imports, but the user interface code is not yet completely polished for the new internals.
Cached designs are re-used when they have no indirect unbound objects and the same file would be accessed.
Indirect imports do not give the user control of the binding [Why should they?].
IO
There are two modes of output: Truth / Cache; This allows object class and property implementors to write [cache mode] output procedures without the burden of having to support the files for ever [as in truth mode].
Warning: don't store cache mode files without also storing the truth. If cache mode files can not be read back, there will be no help from me. For truth mode files, the known service on IO problems will remain as ever [Unless non standard features have been used which interfere with the file format].
GFI war
Theoretically saved 26 gfi's !!
User interface
A little more polish
As always:
This ChipNDale version 2.5 can read in files of all previous ChipNDale versions [0.0 and up], but I can't guarantee that for the next version.
The documentation is already updated.
Interactive user interface
Drawing schematics
New chapter in documentation on creation of icons.
[Chapter 6. Usage Hints in ChipNDaleDoc.tioga]
Font size can be changed
In panel: use mouse together with CTRL to scale size.
On selection: use <Y-T-{left|right|CTRL}>, <Y-U-{left|right|CTRL}>.
Control panel has line for texts; used for the text editing commands.
"R" is used as a modifier key, to read data into the control panel:
<R-T-{left|right|CTRL}> read selected text into text field of control panel
<R-F-{left|right|CTRL}> read font of selection into font field of control panel
<R-E-{left|right|CTRL}> use layer of selection as current layer
<R-W-{left|right|CTRL}> read width of selection into width field of current layer
<R-E-W-{left|right|CTRL}> use layer and width of selection to set current layer and width
Wires [only CD.commentLayer] don't disapear if scaled to small [different rounding]
Step move dist "0" will do step moves with the current viewer grid.
<space /> command has a "move selected to grid" option.
</ then "<"> double grid.
</ then ">"> half grid.
Mode switch between layout mode and schematics mode [CMos-B only]
<A-S> => Schematcs mode
<Q-W> => Layout mode
Small general command cleanup
Better error behaviour in case separately loaded commands fail. Additional loaded commands allow denial to execute [saves gfi's on browse trips]
Satellites commands changed to be easier to understand, at cost of sometimes more usage of menu.
About 4 menus and 10 commands withdrawn [I believe nobody used those].
Step moves do not feedback in Terminal viewer.
Control panel has multiple layer lines; switch by hitting the "current layer" field.
Directory commands
Rename object (without using mouse): <CTRL-N>.
New command: Search object by name.
Push in by name, draw, replace, and search commands do also work with an adress instead of the name of the object; this implicitely allows to replace texts.
List, or, prune directory commands can have patterns. Pattern field in panel.
Related packages
PD-plot and interpress-plot can plot just the selection
Tip tables are no more reinstalled on user profile changes but only with the command tool command "CDReInstallTipTables".
Font substitution compensates different rope bounding box sizes on flip texts.
The debug command can be issued even while the design is locked.
Colors
New colormaps module offering all Cedar choices, and, swapping cursor representation mode.
Colors for splines, polygons and text overlap correctly on 8 bit per pixel displays, at least for the layers not using stipples.
Use the command tool commands to put the right colors into a checkpoint.
User profile options
ChipNDale.OpenEventViewers: FALSE
false in case of an error ChipnDale interactively asks whether it should open an event viewer;
true in case of an error always opens an event viewer.
This property deals only with errors which would NOT wedge the machine
ChipNDale.RunPrograms: List of Token ← NIL
A possibility to run your favorite package which you always use;
e.g. "Install CDStretchCommands" or useful for loading Nectarine...
Working directory and searchpaths [clarification]
CommandTool commands: use wDir and searchpaths from command tool and process
ChipNDale commands: use
working directory = working directory of design,
searchpath = LIST[wDir of design, wDir of technology, wDir of ChipNDale, "///7.0/Commands/", "///7.0/System/"]
wDir and searchpath must be specified explicitely by client when accessing files; they are not inherited from process [processes are light weight !]. (Clients: use CDEnvironment.FindFile or FileNames.FileWithSearchRules)
Interface changes
CD
New procedures Describe, DesignName, DrawOb
DrawProc: use ob, instProperties instead of inst
Types do explicitely use notation CD.foo; to make it easier to make copies
inDirectory -> composed
ObjectClass has xDesign flag
CDBottomUp
better handling for objects crossing design boundaries
support for multiple hierarchies [physical versus icon-schematic]
CDCacheBase
new interface
CDCleanUp
withdrawn, functionality moved into CDDirectoryOps
CDCommandOps
re - exports also CommandProc, Command
CDDefaultProcs
New mechanism to scan convert in device coordinates
CDDesignCache
New package to share the design caching code for imports and remote
CDDirectory
New invariants
New enumerate design procedure
ExpandByDraw more powerfull mechanism, with call back procedure
DirectoryOp type changed: Class's DirectoryOp's procedures must not fail
Object enumeration procedure has quit return value
Use SymTab instead of HashTable
ExpandProc and AnotherProc have slightly simpler type
Improved comments
Renamed EnumerateObjectsProc -> EachObjectProc
Renaming Another -> Another1; AnotherComplete -> AnotherRecursed, Expand...
Renamed Complete-> Recursed because parameter changed!
Renamed foo->foo1 to put emphasis on going only 1 level deep
AnotherRecursed, Expand.. has optional client caching parameters
CDDirectoryOps
more procedures, merged from CDCleanUp
RenameNRemove discarded
PruneDirectory has pattern
New procedure IncludeDescribedObjects
CDEnvironment
New procedures RegisterCommander, FindFile, GetTechnology
CDGenerateRemote
Replaces CDRemote
No caching; changed names to be able to merge impl with CDGenerateImportsImpl to CDGenerateSomeImpl.
CDErrors
Problem with read-only objects not yet solved right.
Error message now may be outside interest rect area.
CDLayers
Additional data to store well and interest rect informations
CDMarks
Withdrawn [this was taff !!]
CDImports
Almost everything changed.
CDIO
Truth flag.
Writes a 40% less dots to compensate for larger designs.
CDOps
proc ObjectRope gone ! use CD.Describe
some procedures from CDSimpleOps
New procedure MakeImmutable
New procedure and convention: When a design is created and build, its mutability should be set using SetMutability.
CDPanel
Detailed with control for fields; since this means lots of new parameters, parameters are grouped in fields. All procedure identifier changed
CDProperties
Procedure to make sure property is NOT written to file (in any mode).
Property registration can specify whether property is not output for cache files.
CDRects
Can handle wells; new class $WellRect
New procedures to querry class
CDRemote
Replaced by CDGenerateRemote and CDDesignCache
CDRoutingObjects
New; loaded on demand only. [like previous class in PWObjects, but full implementaion]
CDSimpleRules
Additional rules parameter for multiple sets of design rules revisions per technology
Implementors use new package CDSimpleRulesBackdoor
MinSpace <= MinDist
CDSimpleOps
withdrawn; some procedures moved into CDOps
CDSequencer
registrationData field for command registration
change OpenDialogue -> SetEditable
FetchCommand has load optional
CDTexts
Font has field for pressfont.
FlipTexts will be adjusted to the side of their origin, if fontsubstitution changes size of text.
CDVArrow
needs CDVArrow.install to run
CDViewerBackdoor
new from CDViewerBase and CDVFurtherPainters
CDViewerBase
--> CDViewerBackdoor
CDVFurtherPainters
--> CDViewerBackdoor
ColorMaps
Small definition and large implementation change. Thanks to Michael Plass for simplifying the Imager and Viewer [BackdoorPrivateExtras...] interfaces needed. Still slow.
Moved to CedarChest.
CStitching
New procedure: TrustedDisposeTesselation; [Giordano figured out that for 30% of the time in some drc was used in allocating border tiles for small tesselations]
GraphicsSubset
No more used by ChipNDale.
I will through this package away unless somebody tells me about a need for it
PopUpMenus
ReLabel allows changing labels of existing menus
Properties
Renamed from PropertLists; better module name to avoid confusion which property package is used. New little confusion by using the other packages name is intentionally.
New procedure CopyList
TerminalIO
Use old, loved TOS again instead of silly long name CreateStream [in analogy to IO]
TokenIO
handle has truth field
Further implementation changes
GFI war: theoretically saved 26 gfi's !!
CDSimpleOps, CDMarks, CDCleanUp, CDOldInterestRects: are withdrawn
Ticks, CDVArrow: loaded on demand only
CDLayersImpl and CDRectsImpl are replaced by CDRectsAndLayersImpl
CDEmergencyHandling: functionality put int CDIOCommands
CDVFurtherPainters, CDViewerBase, CDVCursorImpl, CDColorsImpl and CDVScaleImpl are replaced by CDViewerBackdoor
CDVSpecialPainters merged into CDVCommands
CDVMarksAndModes merged into CDVSomeCursors
CDMenuSpecialsImpl: merged into CDPopUpMenusImpl
CDMoveCopyCommands merged into CDBasicCommands
HashTable: no more used
CMos-B: CMosBObsImpl and CMosBObjectsImpl merged; CMosBWellDifImpl removed
CDPanelImpl, CDSequencerImpl, CDImportCommands: carefully crafted to each use one slot less (proc's inline) [but I fear that the next small improvement might cause again to have one procedure too much]
CDSymbolicObjectsCommands split up and merged into CDExtraCommands and CDCellCommands
CDGenerate, CDGenerateBackdoor, CDGenerateRemote, CDGenerateImports and CDGenerateCommands loaded on demand only [3 gfi]
Enumerating designs
The previously existing 6 different ways of enumerating designs by ChipNDale have been reduced to 4.
4 remaining enumeration techniques:
Flat: e.g. mask generation, pd plot
Pruning with CDBottomUp: Good for analysis which keeps result over different commands but invalidates result on edits [e.g. Spinifex].
Pruning with RefTab: Good for any simple one shot analysis [now standard technique]
Pruning with properties: Used as basis for CDBottomUp and in IO; more usefull for other purposes than for pruning enumerations for clients.
2 withdrawn enumeration techniques:
Use directory + 1 level down: [previously the standard enumeration technique]
CDMarks: [very fast, but too sensitive in case of broken directory invariants]
Viewers
Double painting when viewers are created is circumvented [oops].
In spite of what I thought before, this is not a bug in viewers, but a bad dependency in ChipNDale: Some field in the viewer-class is only initialized after [while?] repaint of the viewer, but ChipNDale needs that field to be able to set up the scaling for the first painting... Thats why painting has to be done twice; the second painting can interupt the first painting, but the viewer package did synchronize [not fork ? but then the solution couldn't work!] the paintings, so the flush in the second one had no chance. The solution is: ChipNDale directly flushes the first painting before it calls the viewer package for the second painting. Once we should have a viewer package with complete documentation which field is available at what time! Even if that viewer package might be correct, I don't know how to correctly use it. But it still doesnt work right.
Selection is painted first; this requires to go twice through the whole list, but it gives the illusion of painting faster.
CDDirectory
Improved algorithm to fiddle names; In case of conflict through wrap around, use random number to prevent making longer names.
CDDynamicObs
Use of cache mode IO
CDMakeProc
Deals with nested un-named cells
Use working directory of design
CDSimpleRules
An implementation of stitched vias [in CDExtrasA%.df] registers itself with CDSimpleRules
CDTexts
Font cache is forget-full; [servers will not fill VM with fonts]
Fonts caching is faster: Reading Logic should be 8% faster just from this improvement alone.
Cif generation
Performance-bug fix: Will generate far less empty cells.
Generates signal names from CDSatellites. (Works only for satellites of simple enough instances [not p-diffusion]).
Setup command files have names starting with CDCifGen...; this is to distinguish them from the Read-Cif command files [until an identical format is defined]
Generates CIF from the selected cell only.
CMosB
The object classes $C2PDifRect and $C2NDifRect are replaced by $WellRect
Small victory: CMosB does not implement ANY object class anymore without using inheritance for all CD.Objectclass procedures. [CDAtomicObjects inherit all class procedures; the classes differ in creation procedures which are NOT CD.Objectclass procedures, but exported by CDAtomicObjects]
New abstract well contact layers with well surround.
DRC's
CDIO: io tells when it encounters error messages.
CDCifGen: Cif generation tells when it encounters error messages.
CDMEBES: mask generation tells when it encounters error messages.
Interest rects
Well's and error messages do not contribute to the interest rect of cells
InterpressPlot
Optional plot of selection only.
Better dialogue [still not nectarine].
PDPlot
Uses new mechanism for scan conversion in device coordinate system.
Optional plot of selection only.
Better dialogue [still not Nectarine].
CDLabel
Gets font and prescale from control panel.
Plain simple bug corrections
Pop and create new cell inherits border and simplification treshold.
Viewer wedge if color device is in wrong bits per pixel mode fixed.
Missing UNWIND catch phrase in viewer paint code added.
Lost line in background saving code added.
Compiler missing UNWIND catch phrase outwit by adding procedure.
Pop up menu wedge removed by fixing InputFocusImpl.
Writes spaces between dots on IO to speed up typescript.
DF files and structure changes
CDExtras%.df
Split up into CDMore%.df andCDExtrasA%.df
CDExtrasA%.df
Robust extras used by clients
[Bottom up extraction; stitched vias, RoutingObjects]
CDExtrasB%.df
Extras used by clients and interactively
[ticks, arrows on viewers]
CDMore%.df
For command level utilities and not yet debugged extras
CDCounting%.df
Discarded; commands moved to CDMore%.df
Have fun
Christian
####################################################
Date: 31 Mar 87 01:23:57 PST
From: serlet.pa
Subject: AAARGH!!!
To: Jacobi
cc: serlet
Reply-To: serlet
Like at every CD release, I get screwed because you dont tell me the technology atoms you change!
Apparently there is in CMosB a $C2DiffShortCon instead of a $C2DifShortCon, and a new $WellRect class.
What is a $WellRect object exactly?
Are those the only changes?
What about the other technologies?
How can I avoid errors when the atoms change!?!?!?

  -- Bertrand --
####################################################
Date: Thu, 26 Mar 87 12:15:45 PST
From: Jacobi.pa
Subject: User interface improvements for ChipNDale2.5
To: DAToolsUsers^.pa
Cc: Jacobi
Reply-to: Jacobi.pa
User interface improvements for ChipNDale2.5
[ChipNDale2.5 NOT YET RELEASED; please no designers yet]
"R" is used as a modifier key, to read data into the control panel:
<R-T-{left|right|CTRL}> read selected text into text field of control panel
<R-F-{left|right|CTRL}> read font of selection into font field of control panel
<R-E-{left|right|CTRL}> use layer of selection as current layer
<R-W-{left|right|CTRL}> read width of selection into width field of current layer
<R-E-W-{left|right|CTRL}> use layer and width of selection to set current layer and width
The value of these commands is, that they have a common modifier key for a common purpose; I believe this makes these commands easy to remember. [E.G. I'm quite sure nobody remembers what the (otherwise quite usefull) command <ESC-middle> does... <R-E-{left|right|CTRL}> will be far easier to remember]
Comments?
Christian
####################################################
Date: Sat, 14 Mar 87 12:58:46 PST
From: Jacobi.pa
Subject: ChipNDale and Cedar 7.0
To: DAToolsImplementors^.pa, ChipNDaleUsers^.pa
Cc: Jacobi
Reply-to: Jacobi.pa
ChipNDale 2.5 for tool implementors [NOT released]
Do NOT make design work with ChipNDale 2.5 yet.
This is not a release; there are recompilations to expect; mainly the interactive user interface is not yet finished, whereas real data structure interfaces seem to be close to stable. I think I have polished the rough edges I found, but I do need feedback from tool implementors before I feel good about releasing it to users.
In spite of the original intend to have 2.5 simply be a small release to upgrade to Cedar 7.0, the changed directory invariants make this a major release. But I believe, the bulk of changes are only internal. Clients did usually not depend on ChipNDale's invariants and therefore, need only small adaptations for changed interfaces [Unless the clients want to take explicite advantage of some change]. A little bit of morale: its ok to not depend on ChipNDale's invariants, but its not ok nor is it the same thing to violate those invariants.
A preliminary version of the release message is stored as /DATools/DATools7.0/CDCommon25/CD25.tioga
According to Bertrands dealer it should be possible for our DATool implementors to update to the new ChipNDale release just in the morning while they get a cup of a coffee.
Christian
####################################################
Date: Fri, 13 Mar 87 17:42:29 PST
From: Jacobi.pa
Subject: ColorMaps for (pre) CedarChest 7.0
To: CedarImplementors^.pa
Cc: CedarChest Coordinator <Wyatt.pa>
Reply-to: Jacobi.pa
DF: [Cedar]<CedarChest7.0>Top>ColorMaps.df
Documentation: [Cedar]<CedarChest7.0>Documentation>ColorMapsDoc.tioga
Maintainer: Jacobi.pa
Creates a button which allows to set up the color display.
Read/Write color-maps from files.
This tools is moved from DATools to CedarChest.
####################################################
Date: Mon, 9 Mar 87 11:36:01 PST
From: Jacobi.pa
Subject: Make cell libraries fast
To: DAToolsImplementors^.pa
Cc: Jacobi
Reply-to: Jacobi.pa
How to make cell libraries fast and easy to access.
Maybe new
1) Put menu like arrangements of icons for inter design copy to the left.
When ChipNDale automaticly places some junk down this will be to the right...
2) Put mainly the public icons on top level.
Put internals and schematics nested inside some large organizational cells, and set the display treshold for those organizational cells to simplify display.
This will make displaying for normal usage faster. The push into icon command <left-X> will find schematics even if they are nested.
Alternative: do not even make instances of the organizational cells; The push into icon command places an instance down if it does not find one.
Reminder
3) Put an icon to the side of the schematics
So users know that they are looking at the right schematics when they did not use the push into icon command.
4) Make instances of all the schematics in some organizational cell.
So the library can be pruned easy.
5) Use a large grid, maybe 2 lambda. Try to use the same grid for most icons.
N.B. User interface for gridding is improved in cd25.
6) To make icons easy to rotatable, make its interset size to be
size = (n * g + w)
where
n is an integer
g is size of grid [a large grid]
w is width of a wire
7) Do not make to much structure within icons.
Think at the redisplay time for icons.
8) Set the display treshold right for icons in the library.
So the users don't have to.
9) To make the "menu" look nice, place those icons on an extra large grid.
Use <space-/" to set grid. <right-/> to move to grid.
Christian
####################################################
Date: Thu, 26 Feb 87 20:35:11 PST
From: Jacobi.pa
Subject: ChipNDale user profile entries
To: DAToolsUsers^.pa, ChipNDaleUsers^.pa
Cc: Jacobi
Reply-to: Jacobi.pa
I found some confusion about ChipNDale user profile entries in many peoples profile:
You can remove the following ChipNDale entries
ChipNDale24.ColorStartBits
Unknown to ChipNDale
ChipNDale24.ColorStartLetft
Unknown to ChipNDale
ChipNDale24.ColorBackWhite
Unknown to ChipNDale
ChipNDale24.MenuTable
Use the standard menu table; decentralizing menu tables will make it hard to be consistent. Loading commands is still centralized anyway.
ChipNDale24.CMosB.TIP
CDSatellites and Sisyph entries are in the standard tip tables; CDSatellites doesn't even export a tip table.
I have also checked peoples font user profile entries. These entries differ quite in selection and in order, so making a new default for everybody is not worth while. Consider removing the italic versions of fonts from the profile and make italic texts with <ctrl-\> instead. Also consider to get rid of unused sizes. The size 4 will make texts with the same thickness as comment lines. The size 2 looks good with layout, but who makes text with layout?
Hint to tool implementors
The two files "ChipNDale-CD-Cmds.CDLoadList" and "ChipNDale.Extras.MenuTable" both housed in CDTables24.df are open for extensions by DATool implementors. Keep a copy of tool specific entries together with the tool for back up reasons.
Christian
####################################################
Date: Thu, 15 Jan 87 12:57:50 PST
From: jacobi.pa
Subject: Proposed change for our DA System
To: DAToolsImplementors^.pa, Monier.pa, Serlet.pa
Cc: Jacobi
Reply-to: jacobi.pa
I propose the following deal; it will have a major impact on our DA system as a whole.
Concern
PWCore.Layout get a context parameter from which it is possible to find out a design into which the layout shall be put. (Similar to Sisyph)
In return, ChipNDale would allow composite objects to exist without being included in the directory of the design. (But still, composite objects must not be accessible from more then one design)
Rationale from a ChipNDale view point
This deal would not mean ChipNDale would not pose any invariants about designs directory; just the invariants would be weaker. To ChipNDale there would be two main differences between the proposed and the old requirements:
1) For all purposes, when a design is enumerated, or an object is enumerated recursively, a new algorithm must be used. Designs or objects must be enumerated quite often! [pop, other interactive commands, redraw, propagate changes, IO, clean up, error messages, expand, copy].
2) ChipNDale would not need to check and reinstall the invariants, since no malignant clients would be around. Plain bugs do not justify such hard consistency checks.
When the enumeration methods would be changed, ChipNDale itself could relax the directory invariants; the sole reason to then do the checks would be the knowledge that clients did things like put an object into two designs. Now, in that case, the reason to keep the old, hard invariant, is that the cleanup wouldn't work with the weaker invariant. [To make a cleanup work correctly we would have to cleanup both designs]
Living clean, or cleanup, is necessary. Remember the story from before we had cleanup:
Brian generated a design with Patchwork. Then he edited his design, but the edits where made in the library. [A clear case of an object being included in two designs].
Minor points
When a design is given, it will be possible for a PWCore.Layout procedure to generate import objects.
A design can be used as context for caching sub-objects; Right now it is impossible in a PWCore.Layout procedure to cache correctly results or sub objects. Now, any caching must rely on being found by a clean up step, which results in making a copy [from the second time on when the cache is used].
Costs
Conversion costs:
To ChipNDale:
Changes in lots of code for changed internal invariants.
The main work was figuring out where changes will be necessary, it won't be doing those changes. [CDImportsImpl, CDCellsImpl, CDIn, CDOut, CDDirectoryImpl, CDDirectoryOpsImpl, CDCleanupImpl, CDCellsInteractionsImpl, CDErrorsImpl, CDBottomUpImpl, ChipmonkCmosWrite, ChipmonkNmosWrite, CDMarks, CDRepetitionsImpl, CDDynamicObsImpl plus the necessary interfaces].
To PWCore:
Rethink caching invariants; do the change. Changes to DecorateProc, AttributesProc. [AttributesProc needs some re thinking anyway, to make them powerful enough to collect layout hints.]
To PWCore Clients:
Trivial syntactic changes, as long as they won't take advantage of new mechanisms.
To the DA system as a whole:
Some minor re-coding, a ChipNDale release [But you'll get that anyway].
Real costs after conversion:
To ChipNDale:
The new design enumeration methods would be slightly slower. O[1] per object. It won't be noticeable.
To PWCore:
An additional handle is passed around at run time. Please consider, what is the inconvenience of having a handle? Other applications require handle's without first thinking.
Cached objects might be retrieved with two steps instead of one.
To PWCore Clients:
An additional handle is passed around at run time
To the DA system as a whole:
An additional handle is passed around at run time
Benefits
To ChipNDale:
Peace.
The new design enumeration methods could be correct even when the directory is incomplete.
Possibility to get rid of complex clean up code, by being able to trust clients again.
Repetitions could be simplified.
To PWCore:
You may dispute those benefits, however, but they aren't the issue for the change anyway.
The handle might be useful for more applications, e.g. it could contain information whether to make or read design from checkpoints.
Technology independence will be possible, because technology could be figured out.
Maybe speed up, because caching could work without need for indirect objects.
To PWCore Clients:
Caching objects will be possible.
Possibility to be more honest ChipNDale clients. [To be complete we would also need a procedure to extract CoreGeometry pins or whatever PWCore wants, from an object with ChipNDale pins].
Accessing imports will be possible.
Unknown further uses of the handle could be invented, e.g.
Find out Technology, working directories, special design rules.
A place for error messages.
A place to find/put hints for doing layout. [E.g. placement hints; aspect ratio]
Parametrization.
Together with an improved AttributesProc: iterations.
To the DA system as a whole:
Two important implementations could live together friendly.
Speed up because objects will be copied less.
Possibly memory savings, but I'm not sure.
Layout is performed with a more complete state.
A natural place to specify checkpointing would exist.
Abuts and Routing-cells could make it onto ChipNDale files. [Because the weaker directory invariants would allow them to be nice citizens easier; now ChipNDale better does not write objects on files when they don't play the rules]
Alternatives
Keep status quo.
Thats too painful.
Real enforcement of ChipNDale's current invariants.
The current PWCore would cease functioning (See** to understand why I mustn't care.)
Introducing a concept of read only objects.
That concept would still have some holes and problems, however, it would be much better than the status quo. [Imports are NOT read only.]
That might be a good idea in general, independant of this proposal, unless carried to extremes, it would not solve all the problems which caused me to make this proposal.
PWCore generate something else then ChipNDale objects.
Clients could not use all the already existing constructors. Duplication of code.
Other ideas.
Must have one first.
History
Why it came to the current bad state. Different people might put different emphasis on different reasons; this is my story:
In 1984 there were two performance bugs:
1) In ChipNDale: When an object with an already occupied name was included in a designs directory, an alternative name was tried, which was build in a predictable, repeatable way.
2) In Patchwork: Abuts where included always with the same name "abut".
For any abut to be included in the directory it was tried to include it as "abut"; then as "abut@1", "abut@1@2"... until "abut@1@2..@n" was tried. This caused n2/2 tries to include objects in a design, which, because of using small SymTab's, caused O(n3) rope comparisons [ropes with length of another O[n]]. [n=number of objects]
ChipNDale's performance bug was fixed immediately after I was told about the problem... Patchwork switched over to not play the rules with the directory.
**Another, less serious story
ChipNDale never allowed to make objects with interest rects larger than the bounding box. This might have been painful and not the right thing, but it was the rule. Now in the logic library this rule was violated; those objects never displayed correctly [They would even cause incorrect masks]. Then these objects did not pass the automatic conversion from CD23 to CD24. I have been told [Ed] that ChipNDale allowed the construction of those objects; therefore it should also deal with them. See, thats why I must enforce invariants; otherwise I forfeit my rights when problems occur later.
[In CD24 interest rects are treated as "stuff"; they automatically add to the area used to compute the bounding box of cells]
Timing
It would need a release, e.g. CD25 with Cedar7.0; The changes could delay the release of CD25 for two weeks, but it might still be ready before Cedar7.0 if I could start early.
Changing PWCore would also need some time; I believe the thinking about it could be done in advance, before the CD25 release, such that the coding would only create minor additional delays.
If you don't want the changes for their major impact on our DA system, what about simply doing it to be able to live clean with ChipNDale?
Christian
####################################################