Allowing RBA::Net objects for DRCLayer#nets as well

This commit is contained in:
Matthias Koefferlein 2024-08-06 00:14:02 +02:00
parent 35bd336d3a
commit 3068dd2798
2 changed files with 15 additions and 5 deletions

View File

@ -5186,6 +5186,7 @@ CODE
# @brief Pulls net shapes from selected or all nets, optionally annotating nets with properties
# @synopsis layer.nets
# @synopsis layer.nets(net_filter)
# @synopsis layer.nets(net_object)
# @synopsis layer.nets(circuit_filter, net_filter)
# @synopsis layer.nets(netter, ...)
# @synopsis layer.nets(prop(key), ...)
@ -5202,7 +5203,7 @@ CODE
# complete - subnets from subcircuits are not selected. The net name is taken from
# the net's home circuit (to topmost location where all net connections are formed).
# You can specify a circuit filter to select nets from certain circuits only or
# give a RBA::Circuit object explicitly.
# give a RBA::Circuit object explicitly. You can also specify RBA::Net objects directly.
#
# @code
# connect(metal1, via1)
@ -5230,6 +5231,8 @@ CODE
@engine._context("nets") do
nets = nil
# parse arguments
filters = nil
circuits = nil
@ -5241,6 +5244,9 @@ CODE
filters << a
elsif a.is_a?(1.class)
prop_id = a
elsif a.is_a?(RBA::Net)
nets ||= []
nets << a
elsif a.is_a?(RBA::Circuit)
circuits ||= []
circuits << a
@ -5272,13 +5278,14 @@ CODE
circuits ||= []
circuits += netlist.circuits_by_name(circuit_filter)
end
nets = nil
if !circuits
if filters
nets = filters.collect { |f| netlist.nets_by_name(f) }.flatten
nets ||= []
nets += filters.collect { |f| netlist.nets_by_name(f) }.flatten
end
else
nets = circuits.collect do |circuit|
nets ||= []
nets += circuits.collect do |circuit|
(filters || ["*"]).collect { |f| circuit.nets_by_name(f) }.flatten
end.flatten
end

View File

@ -68,11 +68,14 @@ l1.nets(self._netter).output(101, 0)
l1.nets(prop(1)).output(102, 0)
l1.nets(prop(nil)).output(103, 0)
l1.nets("X").output(110, 0)
x1 = l1.nets("X")
x1.output(110, 0)
l1.nets("TOP", "X").output(111, 0)
l1.nets("TOP", "NOTEXIST").output(112, 0)
l1.nets("NOTEXIST", "NOTEXIST").output(113, 0)
x2 = l1.nets(*netlist.nets_by_name("X"))
(x1 ^ x2).output(114, 0)
# checks with property constraints