presented on the command line, then all following arguments are
assumed to be arguments of the script and not additional input
to be processed by magic. This allows arguments to be passed to
scripts passed to magic on the command line.
is not necessary that the target cell not exist. That allows a
layout to be flattened into a destination in pieces. Also found
that the "flatten" command never frees memory for the CellUse it
creates for the copy, so fixed that as well.
cell is referenced by a GDS "addendum" file but is not in either
the tree of the root def or any other dumped GDS file, then check
the database for those files and output them if they exist. This
allows one way to get around missing cells in the GDS output if a
cell from a GDS addendum is used but no cells from the library
that the file is an addendum of are used.
introduced: The use of substitutions for PDKPATH and home directory
in path names for GDS files referenced in abstract views, and the
"gds addendum" option. Both were interfering with magic's handling
of writing GDS files from abstract layout views.
behavior of keeping the same first record when merging two nodes.
This does not seem to have any effect on extraction output. But
since the order of nodes can make a difference and there is no
performance impact in the code change, I will keep it as-is.
optimization done in ExtFlat, which is to keep a count of the
number of different node names assigned to the node so that when
merging, the one with fewer nodes can be updated to match the one
with more nodes. Note: This change is made on the assumption
that the names for node1 and node2 are equally preferred.
Supposedly the first name in the node list is canonical, so if
node1 is preferred in any case, it may be necessary to move
the first item of the second list to the beginning (a minor code
change).
from 98 (arbitrarily selected) to 61 (apparently commonly used by
other tools). This should help increase compatibility with GDS
files output from other tools.
were incorrect assumptions made in the code from 35 years back or so,
for the case where the CIF layer halo is larger than the size/separation
of the cells in the array. The new code will prevent the array routine
from copying hierarchical additions to the mask layers outside of the
array area. Whether or not the new code has its own faulty assumptions
remains to be seen through thorough vetting.
the last commit, unfortunately. Thanks to Matt Guthaus for alerting me
to this. Also updated parts of the extresist code that remove the
dependence on ResConDCS; this is a minor update and should not affect
the operation of extresist. It is preparatory to doing more work to
support additional device types like capacitors, bipolars, and diodes.
the layers2->layers1 swapped case from being implemented; the
surround_ok rule type is by definition asymmetric and the two
layer sets cannot just be swapped.
code from extflat from type unsigned long to type TileTypeBitMask.
This increases the number of types of each to 256 and tracks the
number of types, so it should be difficult to exceed this amount.
name conflict and renames a cell, the name was not pointing to
the new name and immediately caused a crash condition. However,
it got to that point by believing that cell "path/x" and "path/x.mag"
were different files. The name was stripped of the extension but
the full file path was not, causing the confusion.
the "getcell" command) so that the "parent" and "child" arguments
will accept the standard syntax for coordinates used by most other
commands (will accept SI units or trailing suffix i/l for internal
or lambda units).
for loading a cell after displaying an unmodified "(UNNAMED)" cell,
because "(UNNAMED)" will be deleted, leaving the undo record
invalid and causing a crash if it is attempted to be invoked.
extresist extractor is less sophisticated than the standard extraction
and will not check through the list of device records belonging to a
single device type. Therefore a device in the .res.ext may have a
different device name. So name hashing and checks are made against
the tile type, not the device name, as the tile type + device
coordinates is sufficient to uniquely identify the device. However,
the extresist extractor does need to be sophisticated enough to find
all the terminal types, so that needs to be fixed.
recursive loop and crash magic. Corrected a number of other issues
along the way, especially one where routines in EFantenna and extresist
make use of array EFDevTypes which was only created by ext2sim and
ext2spice, and freed when done. Having run extresist through valgrind,
there are still issues in the code.
on loading a layout to avoid doing so with in a suspendall ...
resumeall block. That avoids weird errors occurring when the
PDK toolkit scripts are run to generate a new device layout if
the top level layout is still (UNNAMED) and empty.
geometry (which had gone unnoticed due to the lack of use of
"cifspacing" in any rule decks). The rule was not checking for
all synthetic edges, because the tile type was expected to match
the rule type when the function is called, but with a non-Manhattan
tile, that may or may not be true and needs to be checked.
checks on non-Manhattan tiles were made only on the straight edges;
this was sufficient for most checks. However, it can miss the case
of facing non-Manhattan edges. This check does not do triggered
rules because there is no non-Manhattan maxwidth algorithm implemented,
and because the triggering clipping area is a triangle and needs an
extension to support it.
area + halo but then failing to limit overlap checks to that clip
area, resulting in bizarre errors whenever an array is made. Not
sure why the error didn't show up more often.
in which if a cell is read from GDS that has the same name as a cell
in memory, then the cell in memory is renamed to keep all cell names
unique in the database.
for sticky labels making connections through the hierarchy. This
is only needed for some annoying layouts that put point-size labels
with no connecting geometry in cells, and causes magic to spent
excessive amounts of time searching through labels for any layout
that has lots of labels.
and HOME substitution in filenames needs to watch for a NULL
cd_file, and (2) The routine that removes the (UNNAMED) cell when
another cell is loaded needs to NULL the boxRootDef pointer or else
it ends up pointing to deallocated memory.
This can be done now by reading a LEF file, followed by reading
a GDS file with the "noduplicates" option set. In addition,
annotation of either the LEF view or a read-only view follows the
same protocol as cell paths in the .mag file, which is to replace
leading path components matching Tcl variables for PDKPATH or
PDKROOT, and replace the home directory path with a tilde.