Update delay tests to output useful information for debug.

This commit is contained in:
Matt Guthaus 2018-07-26 15:45:17 -07:00
parent a00e160274
commit 5088487cf7
3 changed files with 30 additions and 16 deletions

View File

@ -49,7 +49,7 @@ class timing_sram_test(openram_test):
loads = [tech.spice["msflop_in_cap"]*4]
slews = [tech.spice["rise_time"]*2]
data = d.analyze(probe_address, probe_data, slews, loads)
#print data
if OPTS.tech_name == "freepdk45":
golden_data = {'leakage_power': 0.0006964536000000001,
'delay_lh': [0.0573055],
@ -76,14 +76,20 @@ class timing_sram_test(openram_test):
self.assertTrue(False) # other techs fail
# Check if no too many or too few results
self.assertTrue(len(data.keys())==len(golden_data.keys()))
# Check each result
data_matches = True
for k in data.keys():
if type(data[k])==list:
for i in range(len(data[k])):
self.isclose(data[k][i],golden_data[k][i],0.15)
if not self.isclose(k,data[k][i],golden_data[k][i],0.15):
data_matches = False
else:
self.isclose(data[k],golden_data[k],0.15)
self.isclose(k,data[k],golden_data[k],0.15)
if not data_matches:
debug.info(0,str(data))
self.assertTrue(data_matches)
globals.end_openram()
# instantiate a copdsay of the class to actually run the test

View File

@ -47,7 +47,7 @@ class timing_sram_test(openram_test):
loads = [tech.spice["msflop_in_cap"]*4]
slews = [tech.spice["rise_time"]*2]
data = d.analyze(probe_address, probe_data, slews, loads)
#print data
if OPTS.tech_name == "freepdk45":
golden_data = {'leakage_power': 0.0007348262,
'delay_lh': [0.05799613],
@ -75,13 +75,19 @@ class timing_sram_test(openram_test):
# Check if no too many or too few results
self.assertTrue(len(data.keys())==len(golden_data.keys()))
# Check each result
data_matches = True
for k in data.keys():
if type(data[k])==list:
for i in range(len(data[k])):
self.isclose(data[k][i],golden_data[k][i],0.15)
if not self.isclose(k,data[k][i],golden_data[k][i],0.15):
data_matches = False
else:
self.isclose(data[k],golden_data[k],0.15)
self.isclose(k,data[k],golden_data[k],0.15)
if not data_matches:
debug.info(0,str(data))
self.assertTrue(data_matches)
globals.end_openram()

View File

@ -62,21 +62,23 @@ class openram_test(unittest.TestCase):
def isclose(self, value1,value2,error_tolerance=1e-2):
def isclose(self,key,value,actual_value,error_tolerance=1e-2):
""" This is used to compare relative values. """
import debug
relative_diff = abs(value1 - value2) / max(value1,value2)
relative_diff = abs(value - actual_value) / max(value,actual_value)
check = relative_diff <= error_tolerance
if not check:
self.fail("NOT CLOSE {0} {1} relative diff={2}".format(value1,value2,relative_diff))
debug.warning("NOT CLOSE\t{0: <10}\t{1:.3f}\t{2:.3f}\tdiff={3:.1f}%".format(key,value,actual_value,relative_diff*100))
return False
else:
debug.info(2,"CLOSE {0} {1} relative diff={2}".format(value1,value2,relative_diff))
def relative_compare(self, value1,value2,error_tolerance):
""" This is used to compare relative values. """
if (value1==value2): # if we don't need a relative comparison!
debug.info(2,"CLOSE\t{0: <10}\t{1:.3f}\t{2:.3f}\tdiff={3:.1f}%".format(key,value,actual_value,relative_diff*100))
return True
return (abs(value1 - value2) / max(value1,value2) <= error_tolerance)
def relative_compare(self, value,actual_value,error_tolerance):
""" This is used to compare relative values. """
if (value==actual_value): # if we don't need a relative comparison!
return True
return (abs(value - actual_value) / max(value,actual_value) <= error_tolerance)
def isapproxdiff(self, f1, f2, error_tolerance=0.001):
"""Compare two files.