# Netlist¶

## What is a Netlist view¶

In IPKISS almost all circuits are hierarchical. This implies that circuits (that are PCells) are themselves composed off instances of other Child PCells. It is the goal of the Netlist view to define the interconnectivity between those child cells. Here interconnectivity is to be interpreted broadly, as the interconnected PCells exchange information through optical or electrical signals. Usually, but not necessarily, this implies that the child cells will be connected with waveguides or electrical wires. The main advantage of defining the interconnectivity between hierarchical cells in a separate view, is that this information can be used in other views, such a the Layout view when connecting ports or in the CapheModelView when doing circuit simulations. We thereby avoid having to redefine the interconnectivity between the childcells (views) in every view of the parent cell.

A Netlist is composed of 3 things:

• instances: These are instances of the Netlist views of Child Cells
• terms: These are the connections through which the a netlist connects to the outside world

Fig. 95 Netlist of a hierarchical cells.

## Netlist terms¶

Defining terms

Netlist terms connect are the terminals through which a PCell connects with another PCell. They are added to the Netlist view using the predefined method _generate_terms. _generate_terms will add terms to the termlist terms that is initialized as an empty term list by the Netlist View. A term can be created using OpticalTerm

class Child(i3.PCell):

class Netlist(i3.NetlistView):

def _generate_terms(self, terms):
terms += i3.OpticalTerm(name="In")
terms += i3.OpticalTerm(name="Out")
return terms


A term has two important properties:

• name: This is the name that can be used to get the term from a term list. my_term_list["In"] will return the term named In if it exist in the list.
• domain: This is the domain in which the connectivity with other components will happen. Right now, only the optical domain is nativaly supported in IPKISS, but we will add more domains such as “Electrical” or “Thermal” in the future.

## Netlist instances¶

The netlists of Child cells are added as netlist instances to the netlist of the parent cell. This is done through the predefined method _generate_instances(self,insts) that adds all the instances to insts, a lists of netlist instances that is initialized as an empty list by i3.NetlistView. The instances are added using the Instance function.

class Parent(i3.PCell):

child1 = i3.ChildCellProperty()
child2 = i3.ChildCellProperty()

class Netlist(i3.NetlistView):

def _generate_terms(self, terms):
#...

def _generate_instances(self, insts):

# Add the waveguide as an instance.
insts += i3.Instance(reference=self.child1, name='child1')
insts += i3.Instance(reference=self.child2, name='child2')
return insts


Instance takes two parameters:

• reference: This is the reference to the netlist that is placed. Here we use self.child1 referring to the netlist view of child1 because of the use of ChilCellProperty The same is true for self.child2.
• name: This is the name given to the netlist instance.