mirror of https://github.com/VLSIDA/OpenRAM.git
Update format of delay test output during an error to directly
copy into unit test. Factor function into testutils.py for comparison.
This commit is contained in:
parent
5088487cf7
commit
85595b0f6f
|
|
@ -62,33 +62,22 @@ class timing_sram_test(openram_test):
|
||||||
'delay_hl': [0.070554],
|
'delay_hl': [0.070554],
|
||||||
'slew_lh': [0.0190073]}
|
'slew_lh': [0.0190073]}
|
||||||
elif OPTS.tech_name == "scn3me_subm":
|
elif OPTS.tech_name == "scn3me_subm":
|
||||||
golden_data = {'leakage_power': 0.0004004581,
|
golden_data = {'delay_hl': [6.473300000000001],
|
||||||
'delay_lh': [0.6538954],
|
'delay_lh': [1.0442000000000002],
|
||||||
'read0_power': [9.7622],
|
'leakage_power': 0.025569099999999997,
|
||||||
'read1_power': [9.589],
|
'min_period': 9.375,
|
||||||
'write1_power': [10.8],
|
'read0_power': [8.0248],
|
||||||
'write0_power': [6.928400000000001],
|
'read1_power': [7.5243],
|
||||||
'slew_hl': [0.8321625],
|
'slew_hl': [6.266000000000001],
|
||||||
'min_period': 2.344,
|
'slew_lh': [0.7857840999999999],
|
||||||
'delay_hl': [0.9019090999999999],
|
'write0_power': [7.7587],
|
||||||
'slew_lh': [0.5896232]}
|
'write1_power': [8.0425]}
|
||||||
else:
|
else:
|
||||||
self.assertTrue(False) # other techs fail
|
self.assertTrue(False) # other techs fail
|
||||||
# Check if no too many or too few results
|
# Check if no too many or too few results
|
||||||
self.assertTrue(len(data.keys())==len(golden_data.keys()))
|
self.assertTrue(len(data.keys())==len(golden_data.keys()))
|
||||||
|
|
||||||
# Check each result
|
self.assertTrue(self.check_golden_data(data,golden_data,0.25))
|
||||||
data_matches = True
|
|
||||||
for k in data.keys():
|
|
||||||
if type(data[k])==list:
|
|
||||||
for i in range(len(data[k])):
|
|
||||||
if not self.isclose(k,data[k][i],golden_data[k][i],0.15):
|
|
||||||
data_matches = False
|
|
||||||
else:
|
|
||||||
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()
|
globals.end_openram()
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -49,13 +49,8 @@ class timing_setup_test(openram_test):
|
||||||
|
|
||||||
# Check if no too many or too few results
|
# Check if no too many or too few results
|
||||||
self.assertTrue(len(data.keys())==len(golden_data.keys()))
|
self.assertTrue(len(data.keys())==len(golden_data.keys()))
|
||||||
# Check each result
|
|
||||||
for k in data.keys():
|
self.assertTrue(self.check_golden_data(data,golden_data,0.25))
|
||||||
if type(data[k])==list:
|
|
||||||
for i in range(len(data[k])):
|
|
||||||
self.isclose(data[k][i],golden_data[k][i],0.15)
|
|
||||||
else:
|
|
||||||
self.isclose(data[k],golden_data[k],0.15)
|
|
||||||
|
|
||||||
globals.end_openram()
|
globals.end_openram()
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -76,18 +76,7 @@ class timing_sram_test(openram_test):
|
||||||
# Check if no too many or too few results
|
# Check if no too many or too few results
|
||||||
self.assertTrue(len(data.keys())==len(golden_data.keys()))
|
self.assertTrue(len(data.keys())==len(golden_data.keys()))
|
||||||
|
|
||||||
# Check each result
|
self.assertTrue(self.check_golden_data(data,golden_data,0.25))
|
||||||
data_matches = True
|
|
||||||
for k in data.keys():
|
|
||||||
if type(data[k])==list:
|
|
||||||
for i in range(len(data[k])):
|
|
||||||
if not self.isclose(k,data[k][i],golden_data[k][i],0.15):
|
|
||||||
data_matches = False
|
|
||||||
else:
|
|
||||||
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()
|
globals.end_openram()
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -49,13 +49,8 @@ class timing_setup_test(openram_test):
|
||||||
|
|
||||||
# Check if no too many or too few results
|
# Check if no too many or too few results
|
||||||
self.assertTrue(len(data.keys())==len(golden_data.keys()))
|
self.assertTrue(len(data.keys())==len(golden_data.keys()))
|
||||||
# Check each result
|
|
||||||
for k in data.keys():
|
self.assertTrue(self.check_golden_data(data,golden_data,0.25))
|
||||||
if type(data[k])==list:
|
|
||||||
for i in range(len(data[k])):
|
|
||||||
self.isclose(data[k][i],golden_data[k][i],0.15)
|
|
||||||
else:
|
|
||||||
self.isclose(data[k],golden_data[k],0.15)
|
|
||||||
|
|
||||||
reload(characterizer)
|
reload(characterizer)
|
||||||
globals.end_openram()
|
globals.end_openram()
|
||||||
|
|
|
||||||
|
|
@ -60,6 +60,28 @@ class openram_test(unittest.TestCase):
|
||||||
import hierarchy_design
|
import hierarchy_design
|
||||||
hierarchy_design.hierarchy_design.name_map=[]
|
hierarchy_design.hierarchy_design.name_map=[]
|
||||||
|
|
||||||
|
def check_golden_data(self, data, golden_data, error_tolerance=1e-2):
|
||||||
|
"""
|
||||||
|
This function goes through two dictionaries, key by key and compares
|
||||||
|
each item. It uses relative comparisons for the items and returns false
|
||||||
|
if there is a mismatch.
|
||||||
|
"""
|
||||||
|
|
||||||
|
# Check each result
|
||||||
|
data_matches = True
|
||||||
|
for k in data.keys():
|
||||||
|
if type(data[k])==list:
|
||||||
|
for i in range(len(data[k])):
|
||||||
|
if not self.isclose(k,data[k][i],golden_data[k][i],error_tolerance):
|
||||||
|
data_matches = False
|
||||||
|
else:
|
||||||
|
self.isclose(k,data[k],golden_data[k],error_tolerance)
|
||||||
|
if not data_matches:
|
||||||
|
import pprint
|
||||||
|
data_string=pprint.pformat(data)
|
||||||
|
debug.info(0,"Consider replacing data in unit test with:\n"+data_string)
|
||||||
|
return data_matches
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
def isclose(self,key,value,actual_value,error_tolerance=1e-2):
|
def isclose(self,key,value,actual_value,error_tolerance=1e-2):
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue