Esempio n. 1
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
            """
        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)
Esempio n. 2
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])
Esempio n. 3
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
            """
        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)