* First implementation.
* PORT BACK: fixed a few flaws (fixed-width side panel ..)
1. On "save as" the filename displayed in the cell view selection box
was not updated
2. The width of the library and cellview panel could not be reduced
below the width of the combo boxes in the headers. So the
panels might have become pretty wide without being able to reduce
them.
* Implemented #560 (multiple techs on libraries)
* WIP: added basic feature and tests.
* WIP: provide tests are GSI binding of new antenna check
* Fixed issue #579 (perimeter_only mode for antenna check)
* Updated DRC doc for 'perimeter_only'
* First implementation of the perimeter factor for antenna check, unit tests.
* Bugfix and unit tests for GSI binding of new antenna check version.
* DRC integration of perimeter-enabled antenna check.
* Enhanced DRC doc for antenna rule
* Menu item to hide or show all images
* Images: asymmetric color nodes.
* Added RBA::image::from_s for reading image back from string. Added tests.
* Added image file reader test (RBA)
* Added lyimg format for image file persistence.
* Small fix of unit tests.
* Added GSI binding for new image features and tests.
* Save and load for .lyimg formats in image properties dialog.
Two new reader options:
1.) via cell name prefix (default is "VIA_"). This name is put in front of the via name to form the cell cell name
2.) group separation disabled by default. Groups are not put into individual parent cells by default.
* Fixed issue #473 (fast accessors to image pixel and mask data through arrays)
* Updated Jenkinsfile to not publish a PR build
* Updated Jenkinsfile to not publish a PR build
* Fixed#501 (more Qt ownership management) - this commit contains some more changes because I had to regenerate the Qt binding sources.
* Fixed#501 (Qt object ownership transfer) - repairs, added tests
* Updated Jenkinsfile to not publish a PR build
* Update Jenkinsfile - exclude PR's from build
The reason was a synchronization issue.
Actually "LayerPropertiesNodeRef" is not a reference, but
a mirror copy of the LayerPropertiesNode the reference points
to. Changes to the original must be synchronized into the
reference and back.
This concept is a tribute to the original implementation and
the node reference was a convenience add-on to the iterator-
based API.
Better solution in general is to replace the LayerPropertiesNodeRef
concept with a real reference.
New binding: Edge#d (distance vector), Edge#clipped and Edge#clipped_line.
"intersection_point" returns nil in case of no intersection.
Documentation error fixed (Edge#distance).
New convenience functions are provided which simplify
manipulation of key bindings and menu item visibility
configuration strings. AbstractMenu#pack_key_binding
and AbstractMenu#unpack_key_binding turn a path/key
map into a single string and back. The string format
is the same than for the key-binding configuration key.
The same is provided for the menu item visibilily
with AbstractMenu#pack_menu_item_visible and
Abstract#unpack_menu_item_visible.
1.) The ExpressionContext class is a mapping of tl::Eval
and allows providing a variable context for the LQ.
Expression class is derived from ExpressionContext now.
2.) The variable lookup has been changed so that variables
can be modified even if they come from a parent context.
3.) LayoutQuery and iterator has been given an argument to
supply the context
Because long is 32bit on Windows (like int), the
conversion from long to unsigned int was subject
to sign overflow. This was fixed by going to
unsigned int via unsigned long.
- global pins have been generated for device cells too and lead
to implicit pins which may not be desired. The original problem
was how to make abstract circuits comparable. This has to be
solved differently.
- Circuit boundaries are good for displaying the boxes for
abstract circuits
In addition, this fix includes Python-related fixes: because
of the short lifetime of Python references, the functionality
was not as expected sometimes. Keeping copies of LayerPropertiesIterators
helped. Some tweaks were required to maintain the delete() semantics.
* Spice writer can now be configure to skip the debug
comments
* < and > are allowed chars in spice names now
* global net names have second prio over labels now
Spice writer: don't prefix model name with "M"
Added "device_class_mismatch" message to netlist compare
Assertion if device classes or circuits are nil on
"same_..."
- edge pairs are normalized before turning them into polygons.
This makes flat and deep implementation more consistent.
- deep region and flat regions were not cooperating in geo
checks
- unnamed layers are not registered in make_layer - this
does not make sense and will just hold a fake ref
- tests now use GDS to represent texts after transformation
(with orientation, OASIS can't do this)
- texts are more consistently handled in the tests
- test debug output is not written in the same format
than golden data unless special normalization is
requested.
- a non-orientable polygon was converted to orientable in
a text because this can be represented in GDS consistently
- DRC testsuite uses "polygons" instead of "input" to achieve
identical behavior for deep and flat mode with respect to
texts
- dbRegionTests are updated because texts are not allowed
for non-original layers too
Reimplementing virtual functions with
"const &" arguments wasn't behaving as
expected because these arguments were
copied.
Now, "const &" for arguments (in virtual
function reimplementation) is not implemented
as a copy.
In addition, now it's possible to declare
results as references always (also if const &).
See gsiTest.cc:1078 for example:
// gsi::arg_make_reference makes the function's return value
// always being taken as a reference
gsi::method<C_P, const CopyDetector &, const CopyDetector &, gsi::arg_make_reference> ("pass_cd_cref_as_ref", &C_P::pass_cd_cref)
Reimplementing virtual functions with
"const &" arguments wasn't behaving as
expected because these arguments were
copied.
Now, "const &" for arguments (in virtual
function reimplementation) is not implemented
as a copy.
In addition, now it's possible to declare
results as references always (also if const &).
See gsiTest.cc:1078 for example:
// gsi::arg_make_reference makes the function's return value
// always being taken as a reference
gsi::method<C_P, const CopyDetector &, const CopyDetector &, gsi::arg_make_reference> ("pass_cd_cref_as_ref", &C_P::pass_cd_cref)
The cause for the problem was that the layout got updated
while iterating causing the mess within the iterator.
This solution is to lock the layout while an iterator
is present. This happens for various Cell and Shapes
iterator, so it's a major enhancement.
The main entry point is RBA::LayoutToNetlist which is the
GSI binding for the layout to netlist extractor. For a first
impression about the abilities of this extractor see the
Ruby tests in testdata/ruby/dbLayoutToNetlist.rb.
The framework itself consists of many classes, specifically
- RBA::Netlist for the netlist representation
- RBA::DeviceClass and superclasses (e.g. RBA::DeviceClassResistor and
RBA::DeviceClassMOS3Transistor) for the description of devices.
- RBA::DeviceExtractor and superclasses (i.e. RBA::DeviceExtractorMOS3Transistor or
the generic RBA::GenericDeviceExtractor) for the implementation of the
device extraction.
- RBA::Connectivity for the description of inter- and intra-layer connections.
- NetlistProperty is the base class for objects that can
be attached to shapes for annotation
- First property type implemented: net name is a way
to annotate net names
This commit adds "permissive" mode to OASIS writer to allow
odd-width paths (which are rounded).
This commit contains in addition:
* The check for odd-width paths is done post-scaling, so
reducing the DBU is a workaround
* Unit tests for the RBA binding of SaveLayoutOptions
* Documentation updates on some SaveLayoutOptions attributes
* Using Ruby predicate notation for cif_blank_separator?
(note question mark) for consistency. The old notation is
still there but deprecated
* --permissive option on buddies command lines where applicable
In the setup dialog (Customize Menu page), there are check boxes
now by which menu entries and menus can be enabled or disabled.
CAUTION: don't disable the setup function :-)
* Modification of the mapping is possible now
(#map used to ignore mappings if there was one
already)
* Added DropCell mapping (also for RBA)
* Added unit tests for cell mapping, layer mapping
db::merge_layouts, db::copy_shapes and db::move_shapes
- Include a copy of the unit test framework so we're no longer
depending on incompatible versions for Ruby 1 and 2.
- Avoid duplication of path entries in unit tests
Region: insert of other regions, shape collections (with transformation)
Edges: insert of other edge collections, regions, shape collections (with transformation)
EdgePairs: insert of other edge pair collections
RBA now provides a hash method for Box, Edge, EdgePair, Trans,
Polygon, SimplePolygon, CellInstArray, LayerInfo, Path, Text,
Point and Vector.
eql? is mapped to ==.
==, != and < act "fuzzy" for the double-typed variants.
Hence, these objects can be used as hash keys now.
- A new constructor for RBA::Region has been provided to
create text markers from a shape iterator
- The DRC framework has been enhanced with a "text" function
The respective new classes are RBA::Technology and
RBA::TechnologyComponent. This interface will replace
the current way of doing tech management from scripts
by using the "technology-data" configuration parameter.
With this change it is possible to bind signals to functions
accepting less arguments. For example:
def triggered():
...
b = pya.QPushButton()
b.clicked(triggered)
b.emit_clicked(True)
wasn't working before since triggered() gets one parameter
(checked) and the call fails. Now, additional parameters are
ignored.
* The solution consists of attaching a bridge object
to QObjects. If the host object is destroyed, the
bridge object will notify the script client
* The bridge object attachment is optimized so it
only happens if required (but still too often ...)
* The child object of QChildEvent gets a special
handling since this object is almost dead in case
of remove. This special handling consists of
a special, stripped class which is used to
only represent QObject in that particular case.