mirror of https://github.com/VLSIDA/OpenRAM.git
Refactor to share get_measurement_variant
This commit is contained in:
parent
9cb96bda7d
commit
fe0db68965
|
|
@ -82,6 +82,7 @@ class delay(simulation):
|
||||||
def create_read_port_measurement_objects(self):
|
def create_read_port_measurement_objects(self):
|
||||||
"""Create the measurements used for read ports: delays, slews, powers"""
|
"""Create the measurements used for read ports: delays, slews, powers"""
|
||||||
|
|
||||||
|
import pdb; pdb.set_trace()
|
||||||
self.read_lib_meas = []
|
self.read_lib_meas = []
|
||||||
self.clk_frmt = "clk{0}" # Unformatted clock name
|
self.clk_frmt = "clk{0}" # Unformatted clock name
|
||||||
targ_name = "{0}{1}_{2}".format(self.dout_name,"{}",self.probe_data) # Empty values are the port and probe data bit
|
targ_name = "{0}{1}_{2}".format(self.dout_name,"{}",self.probe_data) # Empty values are the port and probe data bit
|
||||||
|
|
@ -496,7 +497,7 @@ class delay(simulation):
|
||||||
|
|
||||||
self.sf.close()
|
self.sf.close()
|
||||||
|
|
||||||
def get_read_measure_variants(self, port, measure_obj):
|
def get_measure_variants(self, port, measure_obj, measure_type=None):
|
||||||
"""
|
"""
|
||||||
Checks the measurement object and calls respective function for
|
Checks the measurement object and calls respective function for
|
||||||
related measurement inputs.
|
related measurement inputs.
|
||||||
|
|
@ -506,7 +507,7 @@ class delay(simulation):
|
||||||
if meas_type is delay_measure or meas_type is slew_measure:
|
if meas_type is delay_measure or meas_type is slew_measure:
|
||||||
variant_tuple = self.get_delay_measure_variants(port, measure_obj)
|
variant_tuple = self.get_delay_measure_variants(port, measure_obj)
|
||||||
elif meas_type is power_measure:
|
elif meas_type is power_measure:
|
||||||
variant_tuple = self.get_power_measure_variants(port, measure_obj, "read")
|
variant_tuple = self.get_power_measure_variants(port, measure_obj, measure_type)
|
||||||
elif meas_type is voltage_when_measure:
|
elif meas_type is voltage_when_measure:
|
||||||
variant_tuple = self.get_volt_when_measure_variants(port, measure_obj)
|
variant_tuple = self.get_volt_when_measure_variants(port, measure_obj)
|
||||||
elif meas_type is voltage_at_measure:
|
elif meas_type is voltage_at_measure:
|
||||||
|
|
@ -580,29 +581,9 @@ class delay(simulation):
|
||||||
# add measure statements for delays/slews
|
# add measure statements for delays/slews
|
||||||
for meas_list in self.read_meas_lists:
|
for meas_list in self.read_meas_lists:
|
||||||
for measure in meas_list:
|
for measure in meas_list:
|
||||||
measure_variant_inp_tuple = self.get_read_measure_variants(port, measure)
|
measure_variant_inp_tuple = self.get_measure_variants(port, measure, "read")
|
||||||
measure.write_measure(self.stim, measure_variant_inp_tuple)
|
measure.write_measure(self.stim, measure_variant_inp_tuple)
|
||||||
|
|
||||||
def get_write_measure_variants(self, port, measure_obj):
|
|
||||||
"""
|
|
||||||
Checks the measurement object and calls respective function for related measurement inputs.
|
|
||||||
"""
|
|
||||||
|
|
||||||
meas_type = type(measure_obj)
|
|
||||||
if meas_type is power_measure:
|
|
||||||
return self.get_power_measure_variants(port, measure_obj, "write")
|
|
||||||
elif meas_type is voltage_at_measure:
|
|
||||||
variant_tuple = self.get_volt_at_measure_variants(port, measure_obj)
|
|
||||||
else:
|
|
||||||
debug.error("Input function not defined for measurement type={}".format(meas_type))
|
|
||||||
|
|
||||||
# Removes port input from any object which does not use it. This shorthand only works if
|
|
||||||
# the measurement has port as the last input. Could be implemented by measurement type or
|
|
||||||
# remove entirely from measurement classes.
|
|
||||||
if not measure_obj.has_port:
|
|
||||||
variant_tuple = variant_tuple[:-1]
|
|
||||||
return variant_tuple
|
|
||||||
|
|
||||||
|
|
||||||
def write_delay_measures_write_port(self, port):
|
def write_delay_measures_write_port(self, port):
|
||||||
"""
|
"""
|
||||||
|
|
@ -612,7 +593,7 @@ class delay(simulation):
|
||||||
# add measure statements for power
|
# add measure statements for power
|
||||||
for meas_list in self.write_meas_lists:
|
for meas_list in self.write_meas_lists:
|
||||||
for measure in meas_list:
|
for measure in meas_list:
|
||||||
measure_variant_inp_tuple = self.get_write_measure_variants(port, measure)
|
measure_variant_inp_tuple = self.get_measure_variants(port, measure, "write")
|
||||||
measure.write_measure(self.stim, measure_variant_inp_tuple)
|
measure.write_measure(self.stim, measure_variant_inp_tuple)
|
||||||
|
|
||||||
def write_delay_measures(self):
|
def write_delay_measures(self):
|
||||||
|
|
@ -758,14 +739,13 @@ class delay(simulation):
|
||||||
write_port_dict[measure.name] = measure.retrieve_measure(port=port)
|
write_port_dict[measure.name] = measure.retrieve_measure(port=port)
|
||||||
|
|
||||||
if not check_dict_values_is_float(write_port_dict):
|
if not check_dict_values_is_float(write_port_dict):
|
||||||
debug.error("Failed to Measure Write Port Values:\n\t\t{0}".format(write_port_dict),1) # Printing the entire dict looks bad.
|
debug.error("Failed to Measure Write Port Values:\n\t\t{0}".format(write_port_dict),1)
|
||||||
result[port].update(write_port_dict)
|
result[port].update(write_port_dict)
|
||||||
|
|
||||||
|
|
||||||
for port in self.targ_read_ports:
|
for port in self.targ_read_ports:
|
||||||
debug.info(2, "Checking read delay values for port {}".format(port))
|
debug.info(2, "Checking read delay values for port {}".format(port))
|
||||||
read_port_dict = {}
|
read_port_dict = {}
|
||||||
# Get measurements from output file
|
|
||||||
for measure in self.read_lib_meas:
|
for measure in self.read_lib_meas:
|
||||||
read_port_dict[measure.name] = measure.retrieve_measure(port=port)
|
read_port_dict[measure.name] = measure.retrieve_measure(port=port)
|
||||||
|
|
||||||
|
|
@ -779,7 +759,7 @@ class delay(simulation):
|
||||||
if not self.check_valid_delays(read_port_dict) or not success:
|
if not self.check_valid_delays(read_port_dict) or not success:
|
||||||
return (False,{})
|
return (False,{})
|
||||||
if not check_dict_values_is_float(read_port_dict):
|
if not check_dict_values_is_float(read_port_dict):
|
||||||
debug.error("Failed to Measure Read Port Values:\n\t\t{0}".format(read_port_dict),1) # Printing the entire dict looks bad.
|
debug.error("Failed to Measure Read Port Values:\n\t\t{0}".format(read_port_dict),1)
|
||||||
|
|
||||||
result[port].update(read_port_dict)
|
result[port].update(read_port_dict)
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue