diff --git a/compiler/base/hierarchy_design.py b/compiler/base/hierarchy_design.py index 320276cc..9eefc564 100644 --- a/compiler/base/hierarchy_design.py +++ b/compiler/base/hierarchy_design.py @@ -6,6 +6,8 @@ import debug import os from globals import OPTS +total_drc_errors = 0 +total_lvs_errors = 0 class hierarchy_design(hierarchy_spice.spice, hierarchy_layout.layout): """ @@ -13,7 +15,6 @@ class hierarchy_design(hierarchy_spice.spice, hierarchy_layout.layout): Class consisting of a set of modules and instances of these modules """ name_map = [] - def __init__(self, name): try: @@ -28,8 +29,8 @@ class hierarchy_design(hierarchy_spice.spice, hierarchy_layout.layout): self.name = name hierarchy_layout.layout.__init__(self, name) hierarchy_spice.spice.__init__(self, name) - + # Check if the name already exists, if so, give an error # because each reference must be a unique name. # These modules ensure unique names or have no changes if they @@ -70,12 +71,18 @@ class hierarchy_design(hierarchy_spice.spice, hierarchy_layout.layout): # Unit tests will check themselves. # Do not run if disabled in options. if not OPTS.is_unit_test and OPTS.check_lvsdrc: + global total_drc_errors + global total_lvs_errors tempspice = OPTS.openram_temp + "/temp.sp" tempgds = OPTS.openram_temp + "/temp.gds" self.sp_write(tempspice) self.gds_write(tempgds) - debug.check(verify.run_drc(self.name, tempgds) == 0,"DRC failed for {0}".format(self.name)) - debug.check(verify.run_lvs(self.name, tempgds, tempspice, final_verification) == 0,"LVS failed for {0}".format(self.name)) + num_drc_errors = verify.run_drc(self.name, tempgds) + num_lvs_errors = verify.run_lvs(self.name, tempgds, tempspice, final_verification) + debug.check(num_drc_errors == 0,"DRC failed for {0} with {1} error(s)".format(self.name,num_drc_errors)) + debug.check(num_lvs_errors == 0,"LVS failed for {0} with {1} errors(s)".format(self.name,num_lvs_errors)) + total_drc_errors += num_drc_errors + total_lvs_errors += num_lvs_errors os.remove(tempspice) os.remove(tempgds) @@ -84,9 +91,12 @@ class hierarchy_design(hierarchy_spice.spice, hierarchy_layout.layout): # Unit tests will check themselves. # Do not run if disabled in options. if not OPTS.is_unit_test and OPTS.check_lvsdrc: + global total_drc_errors tempgds = OPTS.openram_temp + "/temp.gds" self.gds_write(tempgds) - debug.check(verify.run_drc(self.name, tempgds) == 0,"DRC failed for {0}".format(self.name)) + num_errors = verify.run_drc(self.name, tempgds) + total_drc_errors += num_errors + debug.check(num_errors == 0,"DRC failed for {0} with {1} error(s)".format(self.name,num_error)) os.remove(tempgds) def LVS(self, final_verification=False): @@ -94,11 +104,14 @@ class hierarchy_design(hierarchy_spice.spice, hierarchy_layout.layout): # Unit tests will check themselves. # Do not run if disabled in options. if not OPTS.is_unit_test and OPTS.check_lvsdrc: + global total_lvs_errors tempspice = OPTS.openram_temp + "/temp.sp" tempgds = OPTS.openram_temp + "/temp.gds" self.sp_write(tempspice) self.gds_write(tempgds) - debug.check(verify.run_lvs(self.name, tempgds, tempspice, final_verification) == 0,"LVS failed for {0}".format(self.name)) + num_errors = verify.run_lvs(self.name, tempgds, tempspice, final_verification) + total_lvs_errors += num_errors + debug.check(num_errors == 0,"LVS failed for {0} with {1} error(s)".format(self.name,num_errors)) os.remove(tempspice) os.remove(tempgds) diff --git a/compiler/datasheet/datasheet.py b/compiler/datasheet/datasheet.py index 700babbb..beded426 100644 --- a/compiler/datasheet/datasheet.py +++ b/compiler/datasheet/datasheet.py @@ -4,6 +4,8 @@ from characterization_corners import * from deliverables import * from timing_and_current_data import * from in_out import * +from hierarchy_design import total_drc_errors +from hierarchy_design import total_lvs_errors import os from globals import OPTS @@ -29,19 +31,20 @@ class datasheet(): #css styling is kept in a seperate file self.html += datasheet_css.read() -# if OPTS.check_lvsdrc: -# DVS = 'checked' -# LVS = 'checked' -# PEX = 'checked' -# else: -# DVS = 'skipped' -# LVS = 'skipped' -# PEX = 'skipped' - + if OPTS.check_lvsdrc: + + DRC = total_drc_errors + LVS = total_lvs_errors + PEX = 'n/a' + else: + DRC = 'skipped' + LVS = 'skipped' + PEX = 'skipped' + self.html +='
'+ self.name + '.html' + '
' -# self.html +=''+ 'DVS: ' + DVS + '
' -# self.html +=''+ 'LVS: ' + LVS + '
' + self.html +=''+ 'DRC: ' + str(DRC) + ' errors'+'
' + self.html +=''+ 'LVS: ' + str(LVS) + ' errors'+'
' self.html +='Ports and Configuration (DEBUG)
' self.html += in_out(self.io,table_id='data').__html__().replace('<','<').replace('"','"').replace('>',">")