mirror of https://github.com/VLSIDA/OpenRAM.git
Cleanup options for front-end. Improve info output.
This commit is contained in:
parent
c3e074c069
commit
74f904a509
2
LICENSE
2
LICENSE
|
|
@ -1,6 +1,6 @@
|
||||||
BSD 3-Clause License
|
BSD 3-Clause License
|
||||||
|
|
||||||
Copyright (c) 2019 Regents of the University of California and The Board
|
Copyright (c) 2018-2019 Regents of the University of California and The Board
|
||||||
of Regents for the Oklahoma Agricultural and Mechanical College
|
of Regents for the Oklahoma Agricultural and Mechanical College
|
||||||
(acting for and on behalf of Oklahoma State University)
|
(acting for and on behalf of Oklahoma State University)
|
||||||
All rights reserved.
|
All rights reserved.
|
||||||
|
|
|
||||||
|
|
@ -37,12 +37,17 @@ class hierarchy_design(hierarchy_spice.spice, hierarchy_layout.layout):
|
||||||
return inst_map
|
return inst_map
|
||||||
|
|
||||||
|
|
||||||
def DRC_LVS(self, final_verification=False):
|
def DRC_LVS(self, final_verification=False, top_level=False):
|
||||||
"""Checks both DRC and LVS for a module"""
|
"""Checks both DRC and LVS for a module"""
|
||||||
|
|
||||||
|
# Final verification option does not allow nets to be connected by label.
|
||||||
# Unit tests will check themselves.
|
# Unit tests will check themselves.
|
||||||
|
if OPTS.is_unit_test:
|
||||||
|
return
|
||||||
|
if not OPTS.check_lvsdrc:
|
||||||
|
return
|
||||||
# Do not run if disabled in options.
|
# Do not run if disabled in options.
|
||||||
|
if (OPTS.inline_lvsdrc or top_level):
|
||||||
if (not OPTS.is_unit_test and OPTS.check_lvsdrc and (OPTS.inline_lvsdrc or final_verification)):
|
|
||||||
|
|
||||||
global total_drc_errors
|
global total_drc_errors
|
||||||
global total_lvs_errors
|
global total_lvs_errors
|
||||||
|
|
|
||||||
|
|
@ -6,8 +6,6 @@ process_corners = ["TT"]
|
||||||
supply_voltages = [ 5.0 ]
|
supply_voltages = [ 5.0 ]
|
||||||
temperatures = [ 25 ]
|
temperatures = [ 25 ]
|
||||||
|
|
||||||
route_supplies = False
|
|
||||||
|
|
||||||
output_path = "temp"
|
output_path = "temp"
|
||||||
output_name = "sram_{0}_{1}_{2}".format(word_size,num_words,tech_name)
|
output_name = "sram_{0}_{1}_{2}".format(word_size,num_words,tech_name)
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -11,6 +11,7 @@ supply_voltages = [5.0]
|
||||||
temperatures = [25]
|
temperatures = [25]
|
||||||
|
|
||||||
route_supplies = True
|
route_supplies = True
|
||||||
|
check_lvsdrc = True
|
||||||
|
|
||||||
output_path = "temp"
|
output_path = "temp"
|
||||||
output_name = "sram_1rw_1r_{0}_{1}_{2}".format(word_size,num_words,tech_name)
|
output_name = "sram_1rw_1r_{0}_{1}_{2}".format(word_size,num_words,tech_name)
|
||||||
|
|
|
||||||
|
|
@ -10,6 +10,9 @@ process_corners = ["TT"]
|
||||||
supply_voltages = [5.0]
|
supply_voltages = [5.0]
|
||||||
temperatures = [25]
|
temperatures = [25]
|
||||||
|
|
||||||
|
route_supplies = True
|
||||||
|
check_lvsdrc = True
|
||||||
|
|
||||||
output_path = "temp"
|
output_path = "temp"
|
||||||
output_name = "sram_1w_1r_{0}_{1}_{2}".format(word_size,num_words,tech_name)
|
output_name = "sram_1w_1r_{0}_{1}_{2}".format(word_size,num_words,tech_name)
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -6,6 +6,9 @@ process_corners = ["TT"]
|
||||||
supply_voltages = [1.0]
|
supply_voltages = [1.0]
|
||||||
temperatures = [25]
|
temperatures = [25]
|
||||||
|
|
||||||
|
route_supplies = True
|
||||||
|
check_lvsdrc = True
|
||||||
|
|
||||||
output_path = "temp"
|
output_path = "temp"
|
||||||
output_name = "sram_{0}_{1}_{2}".format(word_size,num_words,tech_name)
|
output_name = "sram_{0}_{1}_{2}".format(word_size,num_words,tech_name)
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -6,6 +6,9 @@ process_corners = ["TT"]
|
||||||
supply_voltages = [5.0]
|
supply_voltages = [5.0]
|
||||||
temperatures = [25]
|
temperatures = [25]
|
||||||
|
|
||||||
|
route_supplies = True
|
||||||
|
check_lvsdrc = True
|
||||||
|
|
||||||
output_path = "temp"
|
output_path = "temp"
|
||||||
output_name = "sram_{0}_{1}_{2}".format(word_size,num_words,tech_name)
|
output_name = "sram_{0}_{1}_{2}".format(word_size,num_words,tech_name)
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -6,8 +6,6 @@ process_corners = ["TT"]
|
||||||
supply_voltages = [ 3.3 ]
|
supply_voltages = [ 3.3 ]
|
||||||
temperatures = [ 25 ]
|
temperatures = [ 25 ]
|
||||||
|
|
||||||
route_supplies = False
|
|
||||||
|
|
||||||
output_path = "temp"
|
output_path = "temp"
|
||||||
output_name = "sram_{0}_{1}_{2}".format(word_size,num_words,tech_name)
|
output_name = "sram_{0}_{1}_{2}".format(word_size,num_words,tech_name)
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -79,10 +79,6 @@ def print_banner():
|
||||||
debug.print_raw("|=========" + "Computer Science and Engineering Department".center(60) + "=========|")
|
debug.print_raw("|=========" + "Computer Science and Engineering Department".center(60) + "=========|")
|
||||||
debug.print_raw("|=========" + "University of California Santa Cruz".center(60) + "=========|")
|
debug.print_raw("|=========" + "University of California Santa Cruz".center(60) + "=========|")
|
||||||
debug.print_raw("|=========" + " ".center(60) + "=========|")
|
debug.print_raw("|=========" + " ".center(60) + "=========|")
|
||||||
debug.print_raw("|=========" + "VLSI Computer Architecture Research Group".center(60) + "=========|")
|
|
||||||
debug.print_raw("|=========" + "Electrical and Computer Engineering Department".center(60) + "=========|")
|
|
||||||
debug.print_raw("|=========" + "Oklahoma State University".center(60) + "=========|")
|
|
||||||
debug.print_raw("|=========" + " ".center(60) + "=========|")
|
|
||||||
user_info = "Usage help: openram-user-group@ucsc.edu"
|
user_info = "Usage help: openram-user-group@ucsc.edu"
|
||||||
debug.print_raw("|=========" + user_info.center(60) + "=========|")
|
debug.print_raw("|=========" + user_info.center(60) + "=========|")
|
||||||
dev_info = "Development help: openram-dev-group@ucsc.edu"
|
dev_info = "Development help: openram-dev-group@ucsc.edu"
|
||||||
|
|
@ -478,11 +474,14 @@ def report_status():
|
||||||
OPTS.num_r_ports,
|
OPTS.num_r_ports,
|
||||||
OPTS.num_w_ports))
|
OPTS.num_w_ports))
|
||||||
if OPTS.netlist_only:
|
if OPTS.netlist_only:
|
||||||
debug.print_raw("Netlist only mode (no physical design is being done).")
|
debug.print_raw("Netlist only mode (no physical design is being done, netlist_only=False to disable).")
|
||||||
|
|
||||||
|
if not OPTS.route_supplies:
|
||||||
|
debug.print_raw("Design supply routing skipped for run-time (incomplete GDS will not be saved, route_supplies=True to enable).")
|
||||||
|
|
||||||
if not OPTS.inline_lvsdrc:
|
if not OPTS.inline_lvsdrc:
|
||||||
debug.print_raw("DRC/LVS/PEX is only run on the top-level design.")
|
debug.print_raw("DRC/LVS/PEX is only run on the top-level design to save run-time (inline_lvsdrc=True to enable).")
|
||||||
|
|
||||||
if not OPTS.check_lvsdrc:
|
if not OPTS.check_lvsdrc:
|
||||||
debug.print_raw("DRC/LVS/PEX is completely disabled.")
|
debug.print_raw("DRC/LVS/PEX is disabled (check_lvsdrc=True to enable).")
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -56,13 +56,15 @@ class options(optparse.Values):
|
||||||
|
|
||||||
###################
|
###################
|
||||||
# Run-time vs accuracy options.
|
# Run-time vs accuracy options.
|
||||||
|
# Default, sacrifice accuracy/completeness for speed.
|
||||||
|
# Must turn on options for verification, final routing, etc.
|
||||||
###################
|
###################
|
||||||
# When enabled, layout is not generated (and no DRC or LVS are performed)
|
# When enabled, layout is not generated (and no DRC or LVS are performed)
|
||||||
netlist_only = False
|
netlist_only = False
|
||||||
# Whether we should do the final power routing
|
# Whether we should do the final power routing
|
||||||
route_supplies = False
|
route_supplies = False
|
||||||
# This determines whether LVS and DRC is checked at all.
|
# This determines whether LVS and DRC is checked at all.
|
||||||
check_lvsdrc = True
|
check_lvsdrc = False
|
||||||
# This determines whether LVS and DRC is checked for every submodule.
|
# This determines whether LVS and DRC is checked for every submodule.
|
||||||
inline_lvsdrc = False
|
inline_lvsdrc = False
|
||||||
# Remove noncritical memory cells for characterization speed-up
|
# Remove noncritical memory cells for characterization speed-up
|
||||||
|
|
|
||||||
|
|
@ -111,7 +111,7 @@ class sram_base(design, verilog, lef):
|
||||||
|
|
||||||
start_time = datetime.now()
|
start_time = datetime.now()
|
||||||
# We only enable final verification if we have routed the design
|
# We only enable final verification if we have routed the design
|
||||||
self.DRC_LVS(final_verification=OPTS.route_supplies)
|
self.DRC_LVS(final_verification=OPTS.route_supplies, top_level=True)
|
||||||
if not OPTS.is_unit_test:
|
if not OPTS.is_unit_test:
|
||||||
print_time("Verification",datetime.now(), start_time)
|
print_time("Verification",datetime.now(), start_time)
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -22,7 +22,6 @@ class worst_case_timing_sram_test(openram_test):
|
||||||
OPTS.analytical_delay = False
|
OPTS.analytical_delay = False
|
||||||
OPTS.netlist_only = True
|
OPTS.netlist_only = True
|
||||||
OPTS.trim_netlist = False
|
OPTS.trim_netlist = False
|
||||||
OPTS.check_lvsdrc = True
|
|
||||||
|
|
||||||
|
|
||||||
# This is a hack to reload the characterizer __init__ with the spice version
|
# This is a hack to reload the characterizer __init__ with the spice version
|
||||||
|
|
|
||||||
|
|
@ -5,6 +5,7 @@ tech_name = "freepdk45"
|
||||||
process_corners = ["TT"]
|
process_corners = ["TT"]
|
||||||
supply_voltages = [1.0]
|
supply_voltages = [1.0]
|
||||||
temperatures = [25]
|
temperatures = [25]
|
||||||
|
|
||||||
route_supplies = True
|
route_supplies = True
|
||||||
|
check_lvsdrc = True
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -8,3 +8,4 @@ temperatures = [25]
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -5,7 +5,9 @@ tech_name = "scn4m_subm"
|
||||||
process_corners = ["TT"]
|
process_corners = ["TT"]
|
||||||
supply_voltages = [5.0]
|
supply_voltages = [5.0]
|
||||||
temperatures = [25]
|
temperatures = [25]
|
||||||
|
|
||||||
route_supplies = True
|
route_supplies = True
|
||||||
|
check_lvsdrc = True
|
||||||
|
|
||||||
drc_name = "magic"
|
drc_name = "magic"
|
||||||
lvs_name = "netgen"
|
lvs_name = "netgen"
|
||||||
|
|
|
||||||
|
|
@ -347,8 +347,7 @@ def run_pex(name, gds_name, sp_name, output=None, final_verification=False):
|
||||||
|
|
||||||
out_errors = len(stdouterrors)
|
out_errors = len(stdouterrors)
|
||||||
|
|
||||||
assert(os.path.isfile(output))
|
debug.check(os.path.isfile(output),"Couldn't find PEX extracted output.")
|
||||||
#correct_port(name, output, sp_name)
|
|
||||||
|
|
||||||
return out_errors
|
return out_errors
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue