Skip to content

Grouping

SJulianS edited this page Oct 26, 2020 · 16 revisions

A grouping is a loose collection of gates, nets, and modules. The elements within a grouping do not need to stand in any kind of relationship to each other and do not have to be connected. In contrast to modules, groupings do not allow for any kind of hierarchization. Each element of the netlist can be in at most one grouping at the same time. Each grouping comes with a unique ID and a name.

Grouping Information and Management

A grouping can be created by calling create_grouping on the current netlist. The ID cannot be changed by the user and may only be read by calling the get_id function from Python. Read and write access to the name is provided by the get_name and set_name functions respectively. Some example Python code is given below:

g = netlist.create_grouping("example_grouping")   # create a new grouping
print(g.get_name())                               # print the name of the grouping
print(g.get_id())                                 # print the ID of the grouping

To retrieve a grouping from the netlist that corresponds to a known ID, the get_grouping_by_id command can be executed on the netlist. Furthermore, a grouping may be deleted using delete_grouping as shown below:

g = netlist.get_grouping_by_id(3)                 # get the grouping with ID 3 from the netlist
netlist.delete_grouping(g)                        # delete the grouping

Managing Gates, Nets, and Modules

Elements can be added to a grouping by calling assign_gate, assign_net, or assign_module and removed by using remove_gate, remove_net, or remove_module. Furthermore, the user can check whether an element is part of a grouping by resorting to contains_gate, contains_net, and contains_module. Finally, a list of contained elements is returned by the functions get_gates, get_nets, and get_modules. All these functions also exist in a variant that takes or returns the ID of the respective element(s) instead of the object itself. A short example is given below:

g = netlist.create_grouping("example_grouping")   # create a new grouping
g.assign_gate(netlist.get_gate_by_id(1))          # assign gate with ID 1 to grouping
g.assign_module(netlist.get_module_by_id(2))      # assign module with ID 2 to grouping
g.contains_gate(netlist.get_gate_by_id(4))        # return 'false'
gates = g.get_gates()                             # return a list containing only the gate with ID 1
g.remove_gate(gates[0])                           # remove gate with ID 1 from grouping

Each gate, net, and module always known what grouping it resides in. Hence, by calling get_grouping on one of these elements, one retrieves the containing grouping. If an element is not part of a grouping, this will simply return None.

gate = netlist.get_gate_by_id(1)                  # get the gate with ID 1
g = gate.get_grouping()                           # get the grouping of that gate
Clone this wiki locally