failed to add in any layers from other planes that are marked as
connected in the "connect" section of the techfile but otherwise
unrelated to the contact type and its residues.
at a time, and when it runs out of space, it pushes the stack.
This should speed up the connectivity routine somewhat, as it no
longer has to copy memory when expanding the list size, and it no
longer has limit at the integer boundary for memory allocation.
not crash if too many unprocessed areas get queued up. Also modified
it to prune entries that match one of the last five entries created
before searching the current tile. However, it is not clear that
that makes any significant difference to the run time, and it needs
to be analyzed vs. the number of entries to check against.
for saving on a cell which is completely unmodified. One of these
was due to the BPlane implementation, which forces an instance to be
deleted and re-placed on a bounding box recomputation, which should
not, in that case, be considered a modification. Another always runs
DRC on a subcell upon reading rather than relying on any checkplane
entries in the file itself; and the last one marking the timestamp
as modified stemming from an attempt to correct an O(N^2) check to
O(N). All three cases have now been corrected.
The previous behavior was to generate hierarchical names for all
labels when copying contents of subcells. This is "safe" for
copying selections without accidentally shorting things through
labeling, but it can make a mess of the selection. Options are
now "select do labels" for the existing behavior, "select no labels"
to not show any labels, and "select simple labels" to show only the
root name of labels in subcells.
based on the contents of a .mag file being read in, assuming
compatibility with principles of open_pdks. The search paths
are not meddled with unless a file is read for which the technology
cannot be found (and a technology has not already been read, or at
least no database file exists in memory using any technology that
has already been read). If so, then variables PDK_PATH and PDK_ROOT
are searched for in both the shell environment and the local Tcl
environment. Also, if open_pdks has installed PDKs in the path
/usr/share/pdk/, then that path will be searched. If a corresponding
technology file is found, it will be loaded. If the path corresponds
to an open_pdks-style path, then the library paths in libs.ref will
also be added to the search paths for cells.
GDS_FILE property in the same way that it handles changes to the
FIXED_BBOX property, by setting or clearing the associated flag
bit in the cell. Otherwise, it becomes impossible to make a
cell writeable, as it always has some belief that it is still
attached to a specific GDS file. Corrected an error in the
"gds" ("calma") command parsing that switched the callbacks for
the "noduplicates" and "nodatestamp" options.
one is an "off_grid" DRC type, which can be used to check geometry
that is below the manufacturing grid. Normally magic prevents the
grid from being subdivided below the manufacturing grid, but this
limit can be removed and replaced by DRC checks to check for such
errors in a GDS file of unknown origin. The second version looks
for interactions between subcells that end up with intersections
of non-manhattan geometry landing on points that are not on the
database internal grid. Such errors cannot be seen by magic's DRC
engine by definition, and so must be detected while flattening
geometry for the DRC checks.
to stop the search whenever a cell is not found. Used this to implement
a new option for GDS writes, "gds undefined allow|disallow" (default
"disallow") controls whether or not GDS with undefined references will
be allowed to be written. Similarly affects CIF and LEF writes, extraction,
and DRC (when running "drc check" from the top).
values in a mask hints property, and added back the handling of
mask hints in the top level cell, since the hierarchical function
on cells does not apply the function to the top level.
tech file format "version" section. This can be used to specify the
version of magic that must be used to be compatible with the tech file.
This effectively supercedes the technology version number. (2) Changed
the behavior of "make" to set the version and revision numbers on doing
"make" instead of "configure". This allows the version to update
correctly after doing a "git pull" followed by "make" without doing
"configure" in between. (3) Fixed a couple of issues that were flagged
as compile-time warnings.
layers that are normally automatically generated to be supplemented
with additional geometry in the form of properties. The first
commit implements a CIF operator "mask-hints" that tells CIFGenLayer
that additional geometry may be specified with a property named
"MASKHINTS_" plus the name passed to the operator as its only
argument. A more extensive commit to be done will allow this
operator to be used on cifinput to use mask hints to retain the
exact geometry of mask layers used in the input file.
Ghazy) to read pin uses from a DEF file, including the three types
that are not defined by the LEF format (go figure). Expanded the
bitmask of label flags to include the additional use types. Also
shifted the label flag bitmask up to make additional room for more
port number, as there is no point in having unused bits in the
bitmask.
to allow a "gds read" command to ignore cells in the GDS which already
exist in memory. This allows magic to be "pre-seeded" with specific
views of cells in the GDS. Default is false, which is backwards-
compatble behavior. (2) Changed the behavior of the the way the use
path is written to and read from a .mag file, checking the path prefix
against Tcl variables PDK_PATH, PDKPATH, PDK_ROOT, and PDKROOT, and
replacing any such leading path component with the variable name.
On reading a .mag file, any variable name at the start of the path
that matches a Tcl variable will be substituted.
unique" code. It was using DBEraseLabelsByContent() which would
erase all matching labels, and could potentially erase labels that
were still remaining on the list being processed, causing a segfault.
Also corrected minor errors identified by valgrind during debugging
the above-referenced problem.
Instead of a 6-character suffix generated randomly, the 6-character
suffix is generated by a hash algorithm from the device parameters.
If the cell parameters are changed, then the cell itself changes.
If the instance name was default (derived from the cell name) then
the instance name changes accordingly. The result is that there
cannot be two (auto-)generated cells with the same parameters but
with different cell names.
of an alias that defines only one type (which is treated like it
would be if it were declared on the same line as the original type
declaration), such that the alias name does not become the default
name for the layer (which is the one that ends up showing in the
title bar when hovering over the layer toolbar icon). Mainly the
problem showed up as "nwell" for the sky130A process appearing in the
toolbar as "allwellplane".
easier to scan through a cell's ports. Used that capability in the
"readspice" script to handle case sensitivity problems, and to find
labels that are not ports and force them to be ports to match the
reference netlist.
command fails for the tutorial tut3d cell due to a missing
initialization of the cd_cellPlane record in DBCellCopyDefBody().
This was missed in the implementation of "bplane", and was not
checked because the routine is only called from the "plow" command
routines.
could cause serious errors on systems that do not auto-zero allocated
memory. Also: Fixed an error introduced by a recent commit to allocate
character memory for efReadLine() which frees the memory before reading
a .res.ext file, causing a crash when using "ext2spice" with the
"extresist on" option.
optional name field to the "substrate" line in the extract section
of the techfile. This is the default name of the substrate if not
connected to anything labeled. It may use a Tcl variable (preferred).
(2) Added command option "instance orientation [-def]" that returns
the orientation of the named or selected instance. The -def option
returns the orientation using DEF naming convention; otherwise, the
naming used with "getcell" is generated.
argument as a pointer but also set the same variable to the
return value. This is ambiguous, because the behavior depends on
whether the value being set upon return is the original value or
the reallocated value. The result is system-dependent behavior.
of cell name dereferencing on file loads, where the cell load
subroutine call ended up with the wrong number of arguments,
resulting in an invalid pointer and a crash condition.
related to that cell (since elements are usually temporary and so
kept in a separate list, not in the cell). Corrected a major error
in the bplane implementation that failed to remove a cell use from
the child def's parent list when deleting the use. Can cause magic
to go into an infinite loop, especially after selecting and unselecting
cells.
unrecognized layers when the "readonly" read option is set.
Added support to scale elements (from the "element" command,
such as the measurement text and arrows) when the grid scales,
which was missing. Corrected the output of persistent elements
in a .mag file so that they are correctly scaled by the scale
reducer.
called the undo record generation twice when transforming (move,
copy, etc.) cell instances. This would cause the "undo" command
to regenerate the old instance position in the bplane records,
generally causing trouble down the road (did not encounter any
fatal errors, but it can't be good).
not copy labels; not copying labels speeds up the antenna checks
(which don't need labels) greatly. Also fixed several numerical
overflow problems in the antenna checks, which resulted in false
positive errors, as well as nonsensical results.
magic crashed when the conSrArea array exceeded the size of a 32-bit
int during the antenna rule check. Should be good for another four
orders of magnitude.