Corners-based design (PyOPUS subsystem name: CBD)
Finds the circuit parameters for which the performances satisfy the requirements across all specified corners.
Generates corners reflecting all combinations of parameter ranges given by paramSpec and device models given by modelSpec.
cornerSpec is a dictionary with parameter name for key. Every entry holds a list of possible parameter values.
modelSpec is a dictionary with model name for key. Every entry holds a list of possible modules describing that device.
The corner name is constructed as c<number> with first corner named c0.
Example:
corners=generateCorners(
paramSpec={
'vdd': [1.6, 1.8, 2.0],
'temperature': [0.0, 25, 100.0]
},
modelSpec={
'mos': ['tm', 'wp', 'ws', 'wo', 'wz'],
'bipolar': ['weak', 'strong']
}
)
# Corners is a dictionary with c<number> as key and
# corner description as value. The above statement
# results in 3*3*5*2=90 corners named c0-c89 representing
# the cartesian product of possible parameter values for
# vdd and temperature, and possible modules describing the
# model of mos and bipolar.
# These corners can be passed directly to a PerformanceEvaluator
# object.
paramSpec is the design parameter specification dictionary with lo and hi members specifying the lower and the upper bounds.
See PerformanceEvaluator for details on heads, analyses, measures, corners, and variables.
Fixed parameters are given by fixedParams - a dictionary with parameter name for key and parameter value for value. Alternatively the value can be a dictionary in which case the init member specifies the parameter value.
If fixedParams is a list the members of this list must be dictionaries describing parameters. The set of fixed parameters is obtained by merging the information from these dictionaries.
The performance constraints are specified as the lower and the upper member of the measurement description disctionary.
norms is a dictionary specifying the norms for the performance measures. Every norm is by default equal to the specification (lower, upper). If the specification is zero, the norm is 1.0. norms overrides this default. Norms are used in the construction of the Aggregator object.
failurePenalty is the penalty assigned to a failed performance measure. It is used in the construction of the Aggregator object used by the optimization algorithm.
tradeoffs can be a number or a dictionary. It defines the values of the tradeoff weights for the Aggregator object used by the optimization algorithm. By default all tradeoff weights are 0.0. A number specifies the same tradeoff weight for all performance measures. To specify tradeoff weights for individual performance measures, use a dictionay. If a performance measure is not specified in the dictionary 0.0 is used.
Setting stopWhenAllSatisfied to True makes the optimizer stop as soon as all design requirements (i.e. performance constraints) are satisfied. Setting it to False makes the algorithm stop when its stopping condition is satisfied. When set to None the behavior depends on the value of the tradeoffs parameter. If it is set to 0, the optimizer stops when all design requirements are satisfied. Otherwise the behavior is the same as for False.
initial is the dictionary specifying the initial point for the optimizer. If not given, the initial point is equal to the mean of the lower and the upper bound.
method can be local or global and specifies the type of optimization algorithm to use. Currently the local method is QPMADS and the global method is PSADE.
If forwardSolution is True the solution of previous pass is used as the initial point for the next pass.
stepTol is the step size at which the local optimizer is stopped.
The difference between the upper and the lower bound an a parameter is divided by stepScaling to produce the initial step length for the local optimizer.
evaluatorOptions specifies the option overrides for the PerformanceEvaluator object.
aggregatorOptions specifies the option overrides for the Aggregator object.
optimizerOptions specifies the option overrides for the optimizer.
Setting spawnerLevel to a value not greater than 1 distributes the full corner evaluation across available computing nodes. It is also passed to the optimization algorithm, if the algorithm supports this parameter.
This is a callable object with no arguments. The return value is a tuple comprising a dictionary with the final values of the design parameters, the Aggregator object used for evaluating the final result across all corners, and the analysisCount dictionary.
Objects of this type store the number of analyses performed during the last call to the object in the analysisCount member.