def defineParamSpecs(cls, specs): """Define the PyCell parameters. The order of invocation of specs() becomes the order on the form. Arguments: specs - (ParamSpecArray) PyCell parameters """ tranType = "pmos_vtg" oxide = "thin" length = specs.tech.getMosfetParams( tranType, oxide, "minLength") # No dogbone allowed. This PyCell is used for the # diffPair PyCell. For differential pair design, # the assumption is that too much variability exists # for minimum width transistors; hence dogbone isn't # a useful configuration. width = specs.tech.getPhysicalRule( "minWidth", Layer("contact")) + \ 2.0 * specs.tech.getPhysicalRule( "minEnclosure", Layer("active"), Layer("contact")) width = max( width, specs.tech.getMosfetParams( tranType, oxide, "minWidth")) specs( "tranType", tranType, "MOSFET type (pmos_vtg or nmos_vtg)", ChoiceConstraint(["pmos_vtg", "nmos_vtg"])) specs( "width", width, constraint = RangeConstraint( width, 1000*width, FailAction.USE_DEFAULT)) specs( "length", length, constraint = RangeConstraint( length, 1000*length, FailAction.USE_DEFAULT)) specs( "oxide", oxide, "oxide (thin or thick)", ChoiceConstraint(["thin", "thick"])) specs( "xtorFillLayer", Layer( "metal1")) specs( "sourceDiffOverlap", 0.0) specs( "drainDiffOverlap", 0.0)
def defineParamSpecs(cls, specs): """Define the PyCell parameters. The order of invocation of specs() becomes the order on the form. Arguments: specs - (ParamSpecArray) PyCell parameters """ oxide = "thick" tranType = { "pimplant": "pmos_thkox", "nimplant": "nmos_thkox" }[cls.implant] l = specs.tech.getMosfetParams(tranType, oxide, "minLength") # No dogbone allowed. w = specs.tech.getPhysicalRule( "minWidth", specs.tech.getLayer(cls.contact)) + \ 2.0 * specs.tech.getPhysicalRule( "minEnclosure", specs.tech.getLayer(cls.diffusion), specs.tech.getLayer(cls.contact)) w = max(w, specs.tech.getMosfetParams(tranType, oxide, "minWidth")) specs("w", w, constraint=RangeConstraint(w, 1000 * w, FailAction.USE_DEFAULT)) specs("l", l, constraint=RangeConstraint(l, 1000 * l, FailAction.USE_DEFAULT)) specs("fingers", 1), parameters = ( ("diffContactLeft", True), ("diffContactLeftCov", 1.0), ("gateContactLeft", False), ("gateContactLeftCov", 1.0), ("diffContactCenter", False), ("diffContactCenterCov", 1.0), ("gateContactCenter", False), ("gateContactCenterCov", 1.0), ("diffContactRight", True), ("diffContactRightCov", 1.0), ("gateContactRight", False), ("gateContactRightCov", 1.0), ) rangeConstraint = RangeConstraint(0.0, 1.0, FailAction.USE_DEFAULT) for parameter in parameters: if isinstance(parameter[1], float): specs(parameter[0], parameter[1], constraint=rangeConstraint) else: specs(parameter[0], parameter[1])
def defineParamSpecs( cls, specs): """Define the PyCell parameters. The order of invocation of specs() becomes the order on the form. Arguments: specs - (ParamSpecArray) PyCell parameters """ c = RangeConstraint( 1, 100000, FailAction.USE_DEFAULT) specs( "xCnt", 1, constraint=c) specs( "yCnt", 1, constraint=c) c = ChoiceConstraint( [ "centerCenter", "lowerCenter", "lowerLeft", "centerLeft"], FailAction.USE_DEFAULT) specs( "origin", "centerCenter", constraint=c)