mirror of https://github.com/VLSIDA/OpenRAM.git
Update delay tests to output useful information for debug.
This commit is contained in:
parent
a00e160274
commit
5088487cf7
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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()
|
||||
|
||||
|
|
|
|||
|
|
@ -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.
|
||||
|
|
|
|||
Loading…
Reference in New Issue