Source code for kqcircuits.chips.simple

# This code is part of KQCircuits
# Copyright (C) 2021 IQM Finland Oy
#
# This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public
# License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later
# version.
#
# This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied
# warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License along with this program. If not, see
# https://www.gnu.org/licenses/gpl-3.0.html.
#
# The software distribution should follow IQM trademark policy for open-source software
# (meetiqm.com/iqm-open-source-trademark-policy). IQM welcomes contributions to the code.
# Please see our contribution agreements for individuals (meetiqm.com/iqm-individual-contributor-license-agreement)
# and organizations (meetiqm.com/iqm-organization-contributor-license-agreement).


from kqcircuits.pya_resolver import pya
from kqcircuits.chips.chip import Chip
from kqcircuits.util.parameters import Param, pdt
from kqcircuits.qubits.swissmon import Swissmon
from kqcircuits.elements.waveguide_coplanar import WaveguideCoplanar
from kqcircuits.elements.waveguide_coplanar_splitter import WaveguideCoplanarSplitter, t_cross_parameters
from kqcircuits.elements.finger_capacitor_square import FingerCapacitorSquare


[docs] class Simple(Chip): """The PCell declaration for a very simple chip. Contains a small number of elements connected in a simple, direct way. """ name_chip = Param(pdt.TypeString, "Name of the chip", "Simple")
[docs] def build(self): # Launcher launchers = self.produce_launchers("SMA8", enabled=["WN", "EN", "SE"]) # Swissmon _pos = pya.DTrans(3, False, 2500, launchers["WN"][0].y) _, swissmon_refs = self.insert_cell(Swissmon, _pos, cpl_length=[0, 150, 0]) # Two FingerCapacitorSquare instances cap_cell = self.add_element(FingerCapacitorSquare, finger_width=20, finger_length=100, finger_number=7) _, cap1_refs = self.insert_cell(cap_cell, pya.DTrans(5000.0, launchers["WN"][0].y), "C1") self.insert_cell(cap_cell, pya.DTrans(3, False, launchers["SE"][0].x, 5000.0), "C2") # WaveguideCoplanarSplitter _pos = pya.DTrans(launchers["SE"][0].x, launchers["WN"][0].y) _, tcross_refs = self.insert_cell( WaveguideCoplanarSplitter, _pos, **t_cross_parameters(a=self.a, b=self.b, a2=self.a, b2=self.b) ) # Waveguides: WN -> Swissmon -> FingerCapacitorSquare -> WaveguideCoplanarSplitter -> EN self.insert_cell(WaveguideCoplanar, path=pya.DPath([launchers["WN"][0], swissmon_refs["port_flux"]], 1)) self.insert_cell(WaveguideCoplanar, path=pya.DPath([swissmon_refs["port_cplr1"], cap1_refs["port_a"]], 1)) self.insert_cell(WaveguideCoplanar, path=pya.DPath([cap1_refs["port_b"], tcross_refs["port_left"]], 1)) self.insert_cell(WaveguideCoplanar, path=pya.DPath([tcross_refs["port_right"], launchers["EN"][0]], 1)) # Waveguides: TCross' bottom -> second capacitor -> SE refs = self.refpoints self.insert_cell(WaveguideCoplanar, path=pya.DPath([tcross_refs["port_bottom"], refs["C2_port_a"]], 1)) self.insert_cell(WaveguideCoplanar, path=pya.DPath([refs["C2_port_b"], launchers["SE"][0]], 1))