missing brace in the file (a common error), then the fact that
there is an unevaluated command when the file has finished being
read will trigger an evaluation of the unfinished code and emit
an error. Previously, the command and anything after the
unterminated brace would just silently get ignored, which was not
helpful for debugging setup syntax errors.
parser was not assigning the correct file number for the first
input file, which resulted in the effect that if the first
file read sets definitions for the netlist, then those definitions
are wiped out on the following file read. There has been a workaround
to read from /dev/null on the first file read so that the file number
is set on all subsequent reads. This fix avoids the need for the
workaround.
additional syntax for wire bundles specified as a pin connection
on an array of instances, and a few other things. These are not
exhaustive but are solving an immediate problem. I will go back
and clean up the code to make it work for more general cases
later.
also a problem with the underlying "flatten prohibit" command
option; in one place, the cell's subcircuits were being prohibited
from being flattened, causing issues including a potential infinite
loop.
Makefile to pass EXTRA_CFLAGS for testing with "-std=c99" and
"-std=gnu99". Made some additional corrections to ensure a
clean compile using -std=gnu99.
The capitalized version of this got removed from the Tcl headers
as some point and is no longer valid. Added an include of
"strings.h" to base/actel.c, which was missing it (uses
strcasecmp() in the code, and needs the function declaration).
this was not doing the correct cross-check, instead looking in the
same netlist for the permutable pin and checking its node number,
which is useless since the node number is the same by definition
for permutable pins. This error would result in occasional false
negative results during pin matching, showing matching where pins
are actually not matched.
ago (and may have been, but only under limited circumstances). Do
to several errors, using "-noflatten" on the command line and using
"flatten prohibit" in a script would not prevent cells from being
flattened; the "-noflatten" list needed to be used to call "flatten
prohibit", and "flatten prohibit" needed to be fixed to flag the
specified cell instead of the top level cell where it exists.
subcircuit devices) do not output information about mismatched
pins. This can end up being treated as a non-error but the
mismatch should be noted in the output regardless.
"*.GLOBAL" as equivalent to ".GLOBAL". Corrected the property
matching to handle property combination when no "critical"
property is given. Critical properties exist when one property
must remain constant and equal for other properties to combine,
such as transistor length. But, for example, capacitors can
combine area without any restriction based on another property.
Also, corrected the property matching code to allow more than
one property to be additive (example: capacitor area and
perimeter). Corrected the equation for adding properties in
parallel combination.
port and an internal node which can be missed when pin permutations
are present. Previously, that could produce a situation where
netgen would report a "port error" but otherwise list all ports
as matching. Because the permutation handling makes this hard to
detect while generating pin correspondence output, the non-matching
pins are listed separately at the end, and only if no mismatch was
detected during output.
prevents a segfault under some condition (not fully investigated)
involving .include files. Appears to resolve the problem without
any unintended consequences.
be reported at the end if there was a port error. This is important
because port errors often resolve themselves, but the cell should not
be reported clean if the port errors resolved but it had property
errors. Also: Added a method to derive area and/or perimeter
properties from length and width, so that capacitors can be combined
in parallel without regard to which dimension is width and which is
length. This feature has only been lightly tested.
a spice netlist falls exactly on the last non-null position of the
input buffer after the buffer has been expanded to accept more
input data, then the next line gets read in automatically, and
the newline gets treated as whitespace and not a newline.
is created without setting the cell name or instance name. That
can cause a crash condition when attempting to locate the instance
from the net record.
to strdtok() can differentiate between reading verilog and reading
SPICE. Otherwise, SPICE containing the (dubious) syntax of using
backslashes in names will get treated as a verilog name with
verilog backslash notation, with generally undesirable results.
When called from the SPICE reading routine, backslashes are
treated as-is and not as verilog notation.
expression in a property that was not necessarily a parameter,
and if it wasn't, then netgen would crash. Surfaced by an
example using complicated parameters that netgen was apparently
unable to handle (an issue for another day; the main goal here
was to avoid a segmentation violation).
tracker #96) in which a subcircuit with only one port (in this
case, a pad) but which has properties (in this case, "M") will
fail to set the pointer position ahead of the property because
the loop starts after the first pin, so it has already missed
the position that needs to be saved. Fixed by initializing
the value to the first pin position before starting the loop.
to be caused by failing to have a systematic way of determining
which pin's hash value would be used for the hash value of all the
pins. Because equivalent cells in the two netlists may have pins in
different order, it was possible that they might end up with
different hashes. This was solved simply by always taking the
larger hash value of the two pins belonging to the permutable pair.
Now permutation works correctly for arbitrary subcircuits.
(Previously it worked for low-level components like MOSFETs because
the pin order is always the same.)