on cells with multiple ports per pin. As written, the code was
erasing all labels before creating a new port label, which would
erase all previous port labels. This should have been done only on
the first port.
read". While "lef read" normally annotates existing layout, this
option ensures that no additional cells are created from macros in
the input LEF file. (2) Added a check on the "Input off lambda grid"
warning during CIF/GDS input such that it is not repeated once issued,
as it tends to be output many times when it occurs.
command when annotating an existing layout from a LEF database, if
there is a port in the layout that is shadowed by a label with the
same name that is not a port.
caused by the new bloat-all with templayers, which used the distance
record in the bloat structure differently than the other bloat
functions, and therefore was messing up the enumeration of layers
needing to be handled by the hierarchical output. This was probably
also wrong for the existing bloat-all function, which might explain
some problems recently with the GDS output.
probably needs revisiting, because "lef write" and "lef writeall"
need handling to generate the PROPERTYDEFINITIONS block for the
PROPERTY entries to be correct.
a LEF macro that has parentheses around the coordinates. Weirdly,
this is requires by the LEF/DEF spec, but is rarely if ever seen
in actual LEF files. Go figure.
from the cifoutput section, NOT the cifinput section. This change
underscores the point that LEF and DEF formats define mask data,
and therefore all LEF and DEF routines should be using the CIF
input/output methods and layers. That is a major code change;
meanwhile, getting via layer values from the cifoutput parameters
is slightly more reliable than using cifinput, since there is good
reason to use templayers to read vias, and that sort of indirection
makes it difficult to determine a simple relationship between a
LEF cut layer and a magic contact.
an existing cell. If the existing cell has labels but the labels
are defined as point labels (no rectangle defined using specific
layer-purpose pairs), then the LEF macro's port geometry will be
used for the labels. Because the GDS file can define label sizes
and fonts, which the LEF file cannot, but because the LEF file may
define multiple rectangles per port, the original point label is
given the first port rectangle from the LEF file, while the
remainder of the labels in the LEF file generate new non-rendered
labels in the cell.
forms of syntax found in the LEF/DEF spec up to version 5.8. Handles
vias formed by parameter and a number of syntax variations that mess
up the usual parsing. Corrected an error in the calculation of wire
extensions when wires are given with three coordinates.
discovered that not all LEF/DEF rectangle coordinates are in
canonical order. Took the opportunity to update the LefError()
routine with an additional argument so that it can separate
errors, warnings, and informational messages, and will correctly
state whether the output is for a LEF or DEF read operation.
(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.
label in a DEF file is on a layer that has not been properly
mapped to a magic layer. This would apply a negative index to
a TileType bitmask and crash the program. Also: Changed the
style and colormap slightly to make the via2 and via4 styles
more visible.
magic conversion for making magic contact types from contact cuts
from the CIF/GDS input rules rather than the output rules. This
generally makes more sense, plus avoids conflicts where the output
rules may be set for CIF-DRC checks and may not be appropriate for
LEF input without changing the style.
development had been halted since it was first created back in April.
Version 8.2 is now the official development version, with the first
development push to create a Cairo graphics interface.