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 # @brief Pulls net shapes from selected or all nets, optionally annotating nets with properties
# @synopsis layer.nets # @synopsis layer.nets
# @synopsis layer.nets(net_filter) # @synopsis layer.nets(net_filter)
# @synopsis layer.nets(net_object)
# @synopsis layer.nets(circuit_filter, net_filter) # @synopsis layer.nets(circuit_filter, net_filter)
# @synopsis layer.nets(netter, ...) # @synopsis layer.nets(netter, ...)
# @synopsis layer.nets(prop(key), ...) # @synopsis layer.nets(prop(key), ...)
@ -5202,7 +5203,7 @@ CODE
# complete - subnets from subcircuits are not selected. The net name is taken from # 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). # 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 # 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 # @code
# connect(metal1, via1) # connect(metal1, via1)
@ -5230,6 +5231,8 @@ CODE
@engine._context("nets") do @engine._context("nets") do
nets = nil
# parse arguments # parse arguments
filters = nil filters = nil
circuits = nil circuits = nil
@ -5241,6 +5244,9 @@ CODE
filters << a filters << a
elsif a.is_a?(1.class) elsif a.is_a?(1.class)
prop_id = a prop_id = a
elsif a.is_a?(RBA::Net)
nets ||= []
nets << a
elsif a.is_a?(RBA::Circuit) elsif a.is_a?(RBA::Circuit)
circuits ||= [] circuits ||= []
circuits << a circuits << a
@ -5272,13 +5278,14 @@ CODE
circuits ||= [] circuits ||= []
circuits += netlist.circuits_by_name(circuit_filter) circuits += netlist.circuits_by_name(circuit_filter)
end end
nets = nil
if !circuits if !circuits
if filters if filters
nets = filters.collect { |f| netlist.nets_by_name(f) }.flatten nets ||= []
nets += filters.collect { |f| netlist.nets_by_name(f) }.flatten
end end
else else
nets = circuits.collect do |circuit| nets ||= []
nets += circuits.collect do |circuit|
(filters || ["*"]).collect { |f| circuit.nets_by_name(f) }.flatten (filters || ["*"]).collect { |f| circuit.nets_by_name(f) }.flatten
end.flatten end.flatten
end end

View File

@ -68,11 +68,14 @@ l1.nets(self._netter).output(101, 0)
l1.nets(prop(1)).output(102, 0) l1.nets(prop(1)).output(102, 0)
l1.nets(prop(nil)).output(103, 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", "X").output(111, 0)
l1.nets("TOP", "NOTEXIST").output(112, 0) l1.nets("TOP", "NOTEXIST").output(112, 0)
l1.nets("NOTEXIST", "NOTEXIST").output(113, 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 # checks with property constraints