Added option to specify exact corners for characterization in config file

This commit is contained in:
Hunter Nichols 2021-01-22 00:50:28 -08:00
parent 70fe90f0af
commit e26e17c53f
2 changed files with 34 additions and 30 deletions

View File

@ -75,34 +75,37 @@ class lib:
self.corners = [] self.corners = []
self.lib_files = [] self.lib_files = []
# Nominal corner if OPTS.use_specified_corners == None:
corner_set = set() # Nominal corner
if OPTS.only_use_config_corners: corner_tuples = set()
if OPTS.nominal_corner_only: if OPTS.only_use_config_corners:
debug.warning("Nominal corner only option ignored if use only config corners is set.") if OPTS.nominal_corner_only:
# Generate a powerset of input PVT lists debug.warning("Nominal corner only option ignored if use only config corners is set.")
for p in self.process_corners: # Generate a powerset of input PVT lists
for v in self.supply_voltages: for p in self.process_corners:
for t in self.temperatures: for v in self.supply_voltages:
corner_set.add((p, v, t)) for t in self.temperatures:
corner_tuples.add((p, v, t))
else:
nom_corner = (nom_process, nom_supply, nom_temperature)
corner_tuples.add(nom_corner)
if not OPTS.nominal_corner_only:
# Temperature corners
corner_tuples.add((nom_process, nom_supply, min_temperature))
corner_tuples.add((nom_process, nom_supply, max_temperature))
# Supply corners
corner_tuples.add((nom_process, min_supply, nom_temperature))
corner_tuples.add((nom_process, max_supply, nom_temperature))
# Process corners
corner_tuples.add((min_process, nom_supply, nom_temperature))
corner_tuples.add((max_process, nom_supply, nom_temperature))
# Enforce that nominal corner is the first to be characterized
self.add_corner(*nom_corner)
corner_tuples.remove(nom_corner)
else: else:
nom_corner = (nom_process, nom_supply, nom_temperature) corner_tuples = OPTS.use_specified_corners
corner_set.add(nom_corner)
if not OPTS.nominal_corner_only:
# Temperature corners
corner_set.add((nom_process, nom_supply, min_temperature))
corner_set.add((nom_process, nom_supply, max_temperature))
# Supply corners
corner_set.add((nom_process, min_supply, nom_temperature))
corner_set.add((nom_process, max_supply, nom_temperature))
# Process corners
corner_set.add((min_process, nom_supply, nom_temperature))
corner_set.add((max_process, nom_supply, nom_temperature))
# Enforce that nominal corner is the first to be characterized for corner_tuple in corner_tuples:
self.add_corner(*nom_corner)
corner_set.remove(nom_corner)
for corner_tuple in corner_set:
self.add_corner(*corner_tuple) self.add_corner(*corner_tuple)
def add_corner(self, proc, volt, temp): def add_corner(self, proc, volt, temp):

View File

@ -84,7 +84,8 @@ class options(optparse.Values):
debug = False debug = False
# Only use corners in config file. Disables generated corners # Only use corners in config file. Disables generated corners
only_use_config_corners = False only_use_config_corners = False
# A list of PVT tuples and be given and only these will be characterized
use_specified_corners = None
################### ###################
# Run-time vs accuracy options. # Run-time vs accuracy options.