changed to ignore labels below the top level of hierarchy. This
turned out to be a bad idea. However, the original behavior was
problematic due to confusion over what part of the hierarchy the
labels were in. The new behavior prefixes each label with the
cell hierarchy, eliminating both problems. (2) Corrected the
problem where the attachment box for rendered labels is not
displayed if the label name is not in the viewing area. (3)
Corrected the problem where redirection of input from the layout
window to the console window with the ":" command gets inadvertently
canceled; this turned out to be due to a missing "*bypass" in
front of the command that finds the output scale to display the
pointer coordinates, and this was happening whenever the mouse was
moved while typing in a command.
down in the hierarchy when selecting a region or net, but with a
(hopefully very useful) twist: To avoid the problem of ambiguous
labels in subcells, the subcell name hierarchy is generated in
the same way as is done when flattening a cell, with the instance
name prepended. For example, when selecting a net in a standard
cell design, a terminal would highlight the name "OR2X1_1/B"
instead of just "B".
to copy and search on a label that already exists in the flattened,
copied database. Otherwise multiple labels on a single net can cause
the search to go into an infinite loop, repeatedly copying and erasing
the same label over and over again.
flag definition had been put in database.h instead of database.h.in,
and so was deleted on "make clean". Also, corrected a problem that
causes the cif output style to be lost when running DRC-CIF checks
if the first output style is the DRC style.
only at the time of running the command "load". But cells are generally
loaded only on an as-needed basis, so the dereferencing option must be
saved as a flag in the cell and honored whenever its subcells are expanded
or otherwise read at a later time.
rid of redundant port entries in subcircuits. There is still an outstanding
issue as to whether nodes and connections need to be recursively iterated
to the hierarchy bottom. The current fix corrected the test case. Also,
added a "-dereference" option to the "load" command to revert to the
original behavior of using only search paths from "addpath" when searching
for files to load.
simple FET device in extresist. Also: Extended the bloat-all CIF operator
again, allowing the trigger layer for the bloat operation to include both
CIF layers and magic layers (previously only magic layers were supported).
This extension is possible due to the previous extension allowing the
trigger layer and bloating layers to be on separate planes. This operator
extension is useful for tagging geometry that is in the proximity of, but
not overlapping, geometry on another plane.
to be scaled down by "reducer" like all other values in the cell.
Suggests a need to have property types other than string, so that
a property type "rect" or "box" can be declared that is saved as a
Rect and always scales without special hack handling of the specific
string FIXED_BBOX. . .
principle layer name, which should not happen (especially in the
case of space, where layers may be aliased to "space" to make them
ignored on input). Also: Implemented a "-<types>" option to the
"substrate" record in the techfile to declare types which shield
layers from the substrate. This allows types like pwell to be used
in different contexts, e.g., as part of the substrate, or as a P-well
in deep N-well, without requiring a different type. This works in
conjunction with the recently-implemented "+<types>" ID types for
devices. All of this may seem unnecessary but helps to reduce the
number of layers needing to be defined, and the subsequent complexity
of the DRC rulesets.
a cell instance name not related to an array moved a variable that
was used later in the routine to the inside of an if block,
effectively making that variable undefined in most cases.
commit, found that DBTreeFindUse fails to find such uses because
it strips the array delimiters off the name. Fixed the routine
although the routine really should be checking if the use is a
1- or 2- dimensional array and stripping off only the components
expected. The current code will probably fail for cell uses
that have brackets in the name AND are arrayed. Fortunately
this search routine does not appear to be used frequently or in
any critical database functions like netlisting.
all types specified in the "substrate" statement, split such types
into those on the declared well plane, and everything else. Any
types on the well plane are searched as before. Types not on the
well plane (e.g., psd on active) are searched and added to the
substrate node *only* if overlapping nothing on the well plane.
This allows a type such as "psd" to be used on, e.g., both space
(substrate) and deep pwell, but only be extracted as part of the
substrate when found over space. Note that if there is NO
implicit substrate, the substrate connections will always be
found through the usual connection rules.
addition to subcells, paint, and labels. Otherwise problems arise
if a cell is read from LEF followed by GDS; the GDS view overwrites
the LEF but the property "LEFview" remains and causes problems when
writing GDS output subsequently.
option "labels ... cellid" to handle some vendor files where
apparently to get around the 30-character cell name limit, the
actual cellname is encoded on a text layer. Added new cifop
"boundary" (no arguments) for cases where a cell abutment box
is encoded on a GDS layer; this now translates the bounding
box to the FIXED_BBOX property, as is done with the LEF bounding
box. Also corrected the property set function to free existing
property value allocated memory when overwriting a property with
a new value.
through labels with the same text (particularly necessary for
abstract views, since the real connectivity may not be represented).
The original implementation could generate very deep subroutine call
stacks and lead to stack overflow. The new implementation performs
the same check but without the deep nesting.
(once corrected in an experimental branch but never merged). This
avoids changing the actual bounding box of the cell to match the
LEF bounding box, but defines a property instead and uses that
property for certain functions such as displaying the bounding box
outline or selecting the cell. This avoids certain related errors
such as the failure to extract connections to areas outside of the
fixed bounding box.
labels if they are in the top-level cell of the connection search.
Otherwise, this slows the connection search way down for nets with
lots of internal labels, and can also have potentially bad consequences
if, for example, the connected network is copied to another position,
and carries all the flattened and non-hierarchically-named labels with
it.
label specified as having type "space" automatically overrides
the "no-reconnect-labels" flag. Modified the behavior of the
label reconnect algorithm so that it searches by plane order so
that material on the highest plane that matches the reconnection
criteria is chosen over similar materials on lower planes.
extraction. The plane mask array that denotes for each type which
planes should be searched for connecting types is supposed to be
a rare case that covers situations where planes connect by types
that are not contacts. Instead, many planes were in this array,
causing the worst-case extraction methods to be run constantly.
since the edit box was undefined in the code, potentially this
fixes any number of random problems that might be seen with the
"port" command. Also: Modified the cell bounding box recalculation
so that it does not continually update a parent cell on every
addition of a child cell but only once for each child cell found.
This greatly reduces the time for GDS file input in the case of
large arrays of cells.
function that was available in versions 7.1 and earlier that
allows the use of the command "erase errors" to remove DRC error
paint (only when the DRC checker is off, of course).
an error message when reading uses from a .mag file. Also modified
the GDS write routine to provide an error message when an abstract
view points to a GDS file but the GDS file cannot be found.
less confusing. Removed leading spaces in instance path which
could cause a failure to recognize that a path was not specified
for a use in an input file.
from the rigorous method of versioning in case files are relocated
and the use paths are no longer valid. Cells are then searched
for in the search paths in the traditional manner, albeit with a
stern warning. This should avoid most backwards-compatbility
issues.
written interprets the path of every use as either a full
absolute path or a path relative to the parent cell, given the
different ways that a parent cell's path could be specified
(absolute or relative).
the path component of the use def was interpreted as being relative
to the parent when reading the cell def but not when writing,
resulting in paths being interpreted incorrectly.
However, various updates are needed to match changes in magic
over the years, including handling of non-manhattan geometry,
and handling of added DRC rules such as surround and extend.
enabling the "plow" command. At this time, however, not all
rules are being implemented correctly given the numerous changes
to the DRC handling since the last time "plow" was working. Fixes
are ongoing.
file writes by adding the path for each cell use, but being ignored
for file reads. The cell path saved in the .mag file is now honored
on read-back. If the cell needs updating, then the cell version
can be manipulated using "cellname filepath". No UI methods are
currently implemented for managing cell versions.
that are longer than the formerly-fixed array size 256. This
conflicted with the recent addition of holding path data in
properties, where the path coordinates can be significantly
longer than the fixed array size. Same change as made to magic
version 8.1.
rescaling the internal units. The former in particular can
cause problems when moving the root box and importing cells from
a script (same change as made to magic-8.1).
and incorrect call to cairo_set_source_rgba which is in an unused
function and has no effect except with versions of Tcl less than 8.6
where "load -lazy" is not available and unknown functions cause
immediate exit. Cleaned up remaining references to OpenGL in the
Cairo code, and updated the copyright and acknowledged Chuan Chen, who
coded the Cairo interface. No attempt yet to deal with memory leaks
caused by calling Cairo "create" functions without the accompanying
"destroy" functions.
the python preprocessor version, the techfiles and .magicrc file
will get the correct arguments, without affecting the use of CPP
in the configure script.