I am trying to make a CMOS inverter using glayout....
# ieee-sscs-dc-24
k
I am trying to make a CMOS inverter using glayout....I have placed and moved the transistors successfully both in the X and Y directions. But for some reason when I try to connect gate of both the devices, it doesn't connect either with a c-route or a straight-route. But when I try to connect the sources they do connect. Here are the scripts I tried :
def cmosInverter(pdk: MappedPDK) :
cmosInverter = Component()
pfet= pmos(pdk,2.5,with_dummy=(True, True),with_substrate_tap=False)
nfet= nmos(pdk,1,with_dummy=(True, True),with_substrate_tap=False)
pfet_ref = cmosInverter << pfet
nfet_ref = cmosInverter << nfet
nfet_ref.movex(evaluate_bbox(pfet)[0] + 3*pdk.util_max_metal_seperation())
cmosInverter << c_route(pdk, pfet_ref.ports["multiplier_0_gate_E"], pfet_ref.ports["multiplier_0_gate_E"])
cmosInverter << c_route(pdk, pfet_ref.ports["multiplier_0_source_E"], nfet_ref.ports["multiplier_0_source_E"])
return cmosInverter
and when I try positioning them vertically :
def cmosInverter(pdk: MappedPDK) :
cmosInverter = Component()
pfet= pmos(pdk,2.5,with_dummy=(True, True),with_substrate_tap=False)
nfet= nmos(pdk,1,with_dummy=(True, True),with_substrate_tap=False)
pfet_ref = cmosInverter << pfet
nfet_ref = cmosInverter << nfet
nfet_ref.movey(evaluate_bbox(pfet)[1] + 3*pdk.util_max_metal_seperation())
cmosInverter << straight_route(pdk, pfet_ref.ports["multiplier_0_gate_N"], pfet_ref.ports["multiplier_0_gate_S"])
cmosInverter << straight_route(pdk, pfet_ref.ports["multiplier_0_source_N"], nfet_ref.ports["multiplier_0_source_S"])
return cmosInverter
These are the outputs I am getting with the scripts :
s
@Koustubh you are connecting the gate of pfet to itself this code should work check it once !!
Copy code
def cmosInverter(pdk: MappedPDK) :
    cmosInverter = Component()
    pfet= pmos(pdk,2.5,with_dummy=(True, True),with_substrate_tap=False)
    nfet= nmos(pdk,1,with_dummy=(True, True),with_substrate_tap=False)
Copy code
pfet_ref = cmosInverter << pfet
    nfet_ref = cmosInverter << nfet
nfet_ref.movex(evaluate_bbox(pfet)[0] + 3*pdk.util_max_metal_seperation())
Copy code
cmosInverter << c_route(pdk, pfet_ref.ports["multiplier_0_gate_E"], nfet_ref.ports["multiplier_0_gate_E"])
    cmosInverter << c_route(pdk, pfet_ref.ports["multiplier_0_source_E"], nfet_ref.ports["multiplier_0_source_E"])
return cmosInverter
👍 1