diff --git a/compiler/characterizer/lib.py b/compiler/characterizer/lib.py index 679010fe..3b6c1364 100644 --- a/compiler/characterizer/lib.py +++ b/compiler/characterizer/lib.py @@ -77,18 +77,27 @@ class lib: # Nominal corner corner_set = set() - nom_corner = (nom_process, nom_supply, nom_temperature) - 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)) + if OPTS.only_use_config_corners: + if OPTS.nominal_corner_only: + debug.warning("Nominal corner only option ignored if use only config corners is set.") + # Generate a powerset of input PVT lists + for p in self.process_corners: + for v in self.supply_voltages: + for t in self.temperatures: + corner_set.add((p, v, t)) + else: + nom_corner = (nom_process, nom_supply, nom_temperature) + 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 self.add_corner(*nom_corner) diff --git a/compiler/options.py b/compiler/options.py index df547991..e740f88b 100644 --- a/compiler/options.py +++ b/compiler/options.py @@ -82,6 +82,8 @@ class options(optparse.Values): verbose_level = 0 # Drop to pdb on failure? debug = False + # Only use corners in config file. Disables generated corners + only_use_config_corners = False ###################