cd25.tioga
Copyright © 1987 by Xerox Corporation. All rights reserved.
Christian Jacobi, April 3, 1987 12:26:15 pm PST
ChipNDale 2.5 [NOT released]
==========================================================================
==Release message; not yet valid
==========================================================================
ChipNDale 2.5 released
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]
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