Files
OpenRAM/compiler/options.py
T

208 lines
6.2 KiB
Python
Raw Permalink Normal View History

# See LICENSE for licensing information.
#
2023-01-28 22:56:27 -08:00
# Copyright (c) 2016-2023 Regents of the University of California and The Board
2019-06-14 08:43:41 -07:00
# of Regents for the Oklahoma Agricultural and Mechanical College
# (acting for and on behalf of Oklahoma State University)
# All rights reserved.
#
import os
2022-11-27 13:01:20 -08:00
import optparse
2016-11-08 09:57:35 -08:00
2016-11-08 09:57:35 -08:00
class options(optparse.Values):
"""
2019-10-02 23:26:02 +00:00
Class for holding all of the OpenRAM options. All
of these options can be over-riden in a configuration file
2022-11-06 14:05:08 -08:00
that is the sole required command-line positional argument for sram_compiler.py.
2016-11-08 09:57:35 -08:00
"""
###################
# Configuration options
###################
2016-11-08 09:57:35 -08:00
# This is the technology directory.
openram_tech = ""
2020-05-27 20:03:11 -07:00
2016-11-08 09:57:35 -08:00
# This is the name of the technology.
tech_name = ""
2020-05-27 20:03:11 -07:00
# Port configuration (1-2 ports allowed)
num_rw_ports = 1
num_r_ports = 0
num_w_ports = 0
2020-11-19 10:48:35 -08:00
# By default, don't use hierarchical wordline
local_array_size = 0
2020-11-03 06:29:17 -08:00
# Write mask size, default will be overwritten with word_size if not user specified
write_size = None
2020-05-27 20:03:11 -07:00
# These will get initialized by the user or the tech file
nominal_corner_only = False
supply_voltages = ""
temperatures = ""
process_corners = ""
2020-10-16 13:52:36 -07:00
load_scales = ""
slew_scales = ""
# Size parameters must be specified by user in config file.
2019-10-02 23:26:02 +00:00
# num_words = 0
# word_size = 0
# You can manually specify banks, but it is better to auto-detect it.
num_banks = 1
words_per_row = None
2020-03-22 20:54:49 +00:00
num_spare_rows = 0
num_spare_cols = 0
2023-03-08 00:08:43 -08:00
###################
# ROM configuration options
###################
rom_endian = "little"
rom_data = None
strap_spacing = 8
scramble_bits = True
###################
# Optimization options
###################
2019-10-02 23:26:02 +00:00
# Approximate percentage of delay compared to bitlines
rbl_delay_percentage = 0.5
2020-05-27 20:03:11 -07:00
# Allow manual adjustment of the delay chain over automatic
2021-06-22 16:13:33 -07:00
auto_delay_chain_sizing = False
2019-08-05 13:52:32 -07:00
delay_chain_stages = 9
delay_chain_fanout_per_stage = 4
2020-05-27 20:03:11 -07:00
accuracy_requirement = 0.75
###################
# Debug options.
2020-05-27 20:03:11 -07:00
###################
2016-11-08 09:57:35 -08:00
# This is the temp directory where all intermediate results are stored.
2019-03-08 11:12:30 -08:00
try:
# If user defined the temporary location in their environment, use it
2021-06-22 16:13:33 -07:00
2019-03-08 11:12:30 -08:00
openram_temp = os.path.abspath(os.environ.get("OPENRAM_TMP"))
2021-06-22 16:13:33 -07:00
2019-03-08 11:12:30 -08:00
except:
2021-02-10 15:39:12 -08:00
openram_temp = "/tmp"
2021-06-22 16:13:33 -07:00
2016-11-08 09:57:35 -08:00
# This is the verbosity level to control debug information. 0 is none, 1
# is minimal, etc.
2020-11-05 13:12:26 -08:00
verbose_level = 0
# Drop to pdb on failure?
debug = False
# Only use corners in config file. Disables generated corners
only_use_config_corners = False
# A list of PVT tuples and be given and only these will be characterized
use_specified_corners = None
# Allows specification of model data
sim_data_path = None
# A list of load/slew tuples
use_specified_load_slew = None
###################
# Run-time vs accuracy options.
# Default, sacrifice accuracy/completeness for speed.
# Must turn on options for verification, final routing, etc.
###################
2018-08-27 14:33:02 -07:00
# When enabled, layout is not generated (and no DRC or LVS are performed)
netlist_only = False
# Whether we should do the final power routing
route_supplies = "tree"
supply_pin_type = "ring"
# This determines whether LVS and DRC is checked at all.
check_lvsdrc = False
# This determines whether LVS and DRC is checked for every submodule.
inline_lvsdrc = False
# Remove noncritical memory cells for characterization speed-up
trim_netlist = True
# Run with extracted parasitics
use_pex = False
# Output config with all options
output_extended_config = False
# Output temporary file used to format HTML page
2021-01-06 15:53:22 -08:00
output_datasheet_info = False
2020-12-09 12:54:11 -08:00
# Determines which analytical model to use.
# Available Models: elmore, linear_regression
2020-12-14 14:37:53 -08:00
model_name = "elmore"
2020-05-27 20:03:11 -07:00
###################
# Tool options
###################
2023-01-20 15:34:45 -08:00
# Use conda to install the default tools
# (existing tools will be used if disabled)
use_conda = True
# Variable to select the variant of spice
spice_name = None
# The spice executable being used which is derived from the user PATH.
spice_exe = None
# Variable to select the variant of drc, lvs, pex
drc_name = None
lvs_name = None
pex_name = None
2019-10-02 23:26:02 +00:00
# The DRC/LVS/PEX executable being used
# which is derived from the user PATH.
2018-01-12 14:39:42 -08:00
drc_exe = None
lvs_exe = None
pex_exe = None
2020-06-15 13:58:26 -07:00
# For sky130, we need magic for filtering.
magic_exe = None
2021-06-22 16:13:33 -07:00
2020-11-17 13:30:18 -08:00
# Number of threads to use
2021-03-08 14:40:36 -08:00
num_threads = 1
2021-02-03 14:19:11 -08:00
# Number of threads to use in ngspice/hspice
2021-05-14 11:45:10 -07:00
num_sim_threads = 3
2020-05-27 20:03:11 -07:00
# Some tools (e.g. Xyce) use other separators like ":"
hier_seperator = "."
2021-06-22 16:13:33 -07:00
# Should we print out the banner at startup
print_banner = True
2019-11-29 12:01:33 -08:00
2016-11-08 09:57:35 -08:00
# Define the output file paths
output_path = "."
2016-11-08 09:57:35 -08:00
# Define the output file base name
output_name = ""
2019-10-02 23:26:02 +00:00
# Use analytical delay models by default
# rather than (slow) characterization
analytical_delay = True
2019-10-02 23:26:02 +00:00
# Purge the temp directory after a successful
# run (doesn't purge on errors, anyhow)
2020-06-14 16:44:10 -07:00
# Route the input/output pins to the perimeter
perimeter_pins = True
2020-11-03 06:29:17 -08:00
# Detailed or abstract LEF view
detailed_lef = False
2020-11-05 13:12:26 -08:00
keep_temp = False
# These are the default modules that can be over-riden
2019-01-16 16:15:38 -08:00
bank_select = "bank_select"
bitcell_array = "bitcell_array"
bitcell = "bitcell"
buf_dec = "pbuf"
column_decoder = "column_decoder"
column_mux_array = "column_mux_array"
2019-01-16 16:15:38 -08:00
control_logic = "control_logic"
decoder = "hierarchical_decoder"
2019-01-16 16:15:38 -08:00
delay_chain = "delay_chain"
2018-09-13 11:40:24 -07:00
dff_array = "dff_array"
dff = "dff"
2020-05-14 11:20:37 -07:00
inv_dec = "pinv"
nand2_dec = "pnand2"
nand3_dec = "pnand3"
2020-12-09 12:54:11 -08:00
nand4_dec = "pnand4" # Not available right now
precharge = "precharge"
precharge_array = "precharge_array"
ptx = "ptx"
2019-01-16 16:15:38 -08:00
replica_bitline = "replica_bitline"
sense_amp_array = "sense_amp_array"
sense_amp = "sense_amp"
tri_gate_array = "tri_gate_array"
2019-01-16 16:15:38 -08:00
tri_gate = "tri_gate"
wordline_driver = "wordline_driver"
2019-01-16 16:15:38 -08:00
write_driver_array = "write_driver_array"
write_driver = "write_driver"
write_mask_and_array = "write_mask_and_array"