mirror of https://github.com/VLSIDA/OpenRAM.git
Merge branch 'dev' of github.com:VLSIDA/PrivateRAM into dev
This commit is contained in:
commit
fb7264bae2
Binary file not shown.
|
After Width: | Height: | Size: 17 KiB |
|
|
@ -19,8 +19,8 @@
|
||||||
padding-top: 11px;
|
padding-top: 11px;
|
||||||
padding-bottom: 11px;
|
padding-bottom: 11px;
|
||||||
text-align: left;
|
text-align: left;
|
||||||
background-color: #004184;
|
background-color: #003C6C;
|
||||||
color: #F1B521;
|
color: #FDC700;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
Binary file not shown.
|
Before Width: | Height: | Size: 44 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 26 KiB After Width: | Height: | Size: 42 KiB |
|
|
@ -35,11 +35,10 @@ class datasheet():
|
||||||
|
|
||||||
# Add openram logo
|
# Add openram logo
|
||||||
openram_logo = 0
|
openram_logo = 0
|
||||||
with open(os.path.abspath(os.environ.get("OPENRAM_HOME")) + '/datasheet/assets/openram_logo_placeholder.png', "rb") as image_file:
|
with open(os.path.abspath(os.environ.get("OPENRAM_HOME")) + '/datasheet/assets/OpenRAM_logo.png', "rb") as image_file:
|
||||||
openram_logo = base64.b64encode(image_file.read())
|
openram_logo = base64.b64encode(image_file.read())
|
||||||
|
|
||||||
self.html += '<a href="https://vlsida.soe.ucsc.edu/"><img src="data:image/png;base64,{0}" alt="VLSIDA"></a>'.format(str(vlsi_logo)[
|
self.html += '<a href="https://vlsida.soe.ucsc.edu/"><img src="data:image/png;base64,{0}" alt="VLSIDA"></a><a href ="https://github.com/VLSIDA/OpenRAM"><img src ="data:image/png;base64,{1}" alt = "OpenRAM"></a>'.format(str(vlsi_logo)[2:-1], str(openram_logo)[2:-1])
|
||||||
2:-1])
|
|
||||||
|
|
||||||
self.html += '<p style="font-size: 18px;font-family: Trebuchet MS, Arial, Helvetica, sans-serif;">' + \
|
self.html += '<p style="font-size: 18px;font-family: Trebuchet MS, Arial, Helvetica, sans-serif;">' + \
|
||||||
self.name + '.html' + '</p>'
|
self.name + '.html' + '</p>'
|
||||||
|
|
@ -61,8 +60,8 @@ class datasheet():
|
||||||
# check if analytical model is being used
|
# check if analytical model is being used
|
||||||
self.html += '<p style="font-size: 26px;font-family: Trebuchet MS, Arial, Helvetica, sans-serif;">Timing Data</p>'
|
self.html += '<p style="font-size: 26px;font-family: Trebuchet MS, Arial, Helvetica, sans-serif;">Timing Data</p>'
|
||||||
model = ''
|
model = ''
|
||||||
if self.ANALYTICAL_MODEL:
|
if self.ANALYTICAL_MODEL == 'True':
|
||||||
model = "analytical model: results may not be percise"
|
model = "analytical model: results may not be precise"
|
||||||
else:
|
else:
|
||||||
model = "spice characterizer"
|
model = "spice characterizer"
|
||||||
# display timing data
|
# display timing data
|
||||||
|
|
|
||||||
|
|
@ -106,15 +106,15 @@ def parse_characterizer_csv(f, pages):
|
||||||
DATETIME = row[col]
|
DATETIME = row[col]
|
||||||
col += 1
|
col += 1
|
||||||
|
|
||||||
|
ANALYTICAL_MODEL = row[col]
|
||||||
|
col += 1
|
||||||
|
|
||||||
DRC = row[col]
|
DRC = row[col]
|
||||||
col += 1
|
col += 1
|
||||||
|
|
||||||
LVS = row[col]
|
LVS = row[col]
|
||||||
col += 1
|
col += 1
|
||||||
|
|
||||||
ANALYTICAL_MODEL = row[col]
|
|
||||||
col += 1
|
|
||||||
|
|
||||||
AREA = row[col]
|
AREA = row[col]
|
||||||
col += 1
|
col += 1
|
||||||
|
|
||||||
|
|
@ -615,7 +615,7 @@ def parse_characterizer_csv(f, pages):
|
||||||
new_sheet.io_table.add_row(['NUM_R_PORTS', NUM_R_PORTS])
|
new_sheet.io_table.add_row(['NUM_R_PORTS', NUM_R_PORTS])
|
||||||
new_sheet.io_table.add_row(['NUM_W_PORTS', NUM_W_PORTS])
|
new_sheet.io_table.add_row(['NUM_W_PORTS', NUM_W_PORTS])
|
||||||
new_sheet.io_table.add_row(
|
new_sheet.io_table.add_row(
|
||||||
['Area (µm<sup>2</sup>)', AREA])
|
['Area (µm<sup>2</sup>)', str(round(float(AREA)))])
|
||||||
|
|
||||||
|
|
||||||
class datasheet_gen():
|
class datasheet_gen():
|
||||||
|
|
|
||||||
|
|
@ -1,8 +1,6 @@
|
||||||
word_size = 2
|
word_size = 2
|
||||||
num_words = 16
|
num_words = 16
|
||||||
|
|
||||||
bitcell = "bitcell_1rw_1r"
|
|
||||||
replica_bitcell = "replica_bitcell_1rw_1r"
|
|
||||||
num_rw_ports = 1
|
num_rw_ports = 1
|
||||||
num_r_ports = 1
|
num_r_ports = 1
|
||||||
num_w_ports = 0
|
num_w_ports = 0
|
||||||
|
|
|
||||||
|
|
@ -1,8 +1,6 @@
|
||||||
word_size = 2
|
word_size = 2
|
||||||
num_words = 16
|
num_words = 16
|
||||||
|
|
||||||
bitcell = "bitcell_1w_1r"
|
|
||||||
replica_bitcell = "replica_bitcell_1w_1r"
|
|
||||||
num_rw_ports = 1
|
num_rw_ports = 1
|
||||||
num_r_ports = 1
|
num_r_ports = 1
|
||||||
num_w_ports = 0
|
num_w_ports = 0
|
||||||
|
|
|
||||||
|
|
@ -1 +0,0 @@
|
||||||
468eb9a4a038201c2b0004fe6e4ae9b2d37fdd57
|
|
||||||
|
|
@ -133,6 +133,8 @@ def init_openram(config_file, is_unit_test=True):
|
||||||
from sram_factory import factory
|
from sram_factory import factory
|
||||||
factory.reset()
|
factory.reset()
|
||||||
|
|
||||||
|
setup_bitcell()
|
||||||
|
|
||||||
# Reset the static duplicate name checker for unit tests.
|
# Reset the static duplicate name checker for unit tests.
|
||||||
import hierarchy_design
|
import hierarchy_design
|
||||||
hierarchy_design.hierarchy_design.name_map=[]
|
hierarchy_design.hierarchy_design.name_map=[]
|
||||||
|
|
@ -157,6 +159,42 @@ def init_openram(config_file, is_unit_test=True):
|
||||||
if not CHECKPOINT_OPTS:
|
if not CHECKPOINT_OPTS:
|
||||||
CHECKPOINT_OPTS = copy.copy(OPTS)
|
CHECKPOINT_OPTS = copy.copy(OPTS)
|
||||||
|
|
||||||
|
def setup_bitcell():
|
||||||
|
"""
|
||||||
|
Determine the correct custom or parameterized bitcell for the design.
|
||||||
|
"""
|
||||||
|
global OPTS
|
||||||
|
|
||||||
|
if (OPTS.num_rw_ports==1 and OPTS.num_w_ports==0 and OPTS.num_r_ports==0):
|
||||||
|
OPTS.bitcell = "bitcell"
|
||||||
|
OPTS.replica_bitcell = "replica_bitcell"
|
||||||
|
# If we have non-1rw ports, figure out the right bitcell to use
|
||||||
|
else:
|
||||||
|
ports = ""
|
||||||
|
if OPTS.num_rw_ports>0:
|
||||||
|
ports += "{}rw_".format(OPTS.num_rw_ports)
|
||||||
|
if OPTS.num_w_ports>0:
|
||||||
|
ports += "{}w_".format(OPTS.num_w_ports)
|
||||||
|
if OPTS.num_r_ports>0:
|
||||||
|
ports += "{}r".format(OPTS.num_r_ports)
|
||||||
|
|
||||||
|
OPTS.bitcell = "bitcell_"+ports
|
||||||
|
OPTS.replica_bitcell = "replica_bitcell_"+ports
|
||||||
|
|
||||||
|
# See if a custom bitcell exists
|
||||||
|
from importlib import find_loader
|
||||||
|
bitcell_loader = find_loader(OPTS.bitcell)
|
||||||
|
replica_bitcell_loader = find_loader(OPTS.replica_bitcell)
|
||||||
|
# Use the pbitcell if we couldn't find a custom bitcell
|
||||||
|
# or its custom replica bitcell
|
||||||
|
if bitcell_loader==None or replica_bitcell_loader==None:
|
||||||
|
# Use the pbitcell (and give a warning if not in unit test mode)
|
||||||
|
OPTS.bitcell = "pbitcell"
|
||||||
|
OPTS.replica_bitcell = "replica_pbitcell"
|
||||||
|
if not OPTS.is_unit_test:
|
||||||
|
debug.warning("Using the parameterized bitcell which may have suboptimal density.")
|
||||||
|
else:
|
||||||
|
debug.info(1,"Using custom bitcell: {}".format(OPTS.bitcell))
|
||||||
|
|
||||||
|
|
||||||
def get_tool(tool_type, preferences, default_name=None):
|
def get_tool(tool_type, preferences, default_name=None):
|
||||||
|
|
@ -253,6 +291,7 @@ def read_config(config_file, is_unit_test=True):
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
def end_openram():
|
def end_openram():
|
||||||
""" Clean up openram for a proper exit """
|
""" Clean up openram for a proper exit """
|
||||||
cleanup_paths()
|
cleanup_paths()
|
||||||
|
|
@ -417,7 +456,11 @@ def report_status():
|
||||||
debug.error("Tech name must be specified in config file.")
|
debug.error("Tech name must be specified in config file.")
|
||||||
|
|
||||||
debug.print_raw("Technology: {0}".format(OPTS.tech_name))
|
debug.print_raw("Technology: {0}".format(OPTS.tech_name))
|
||||||
debug.print_raw("Total size: {} bits".format(OPTS.word_size*OPTS.num_words*OPTS.num_banks))
|
total_size = OPTS.word_size*OPTS.num_words*OPTS.num_banks
|
||||||
|
debug.print_raw("Total size: {} bits".format(total_size))
|
||||||
|
if total_size>=2**14:
|
||||||
|
debug.warning("Requesting such a large memory size ({0}) will have a large run-time. ".format(total_size) +
|
||||||
|
"Consider using multiple smaller banks.")
|
||||||
debug.print_raw("Word size: {0}\nWords: {1}\nBanks: {2}".format(OPTS.word_size,
|
debug.print_raw("Word size: {0}\nWords: {1}\nBanks: {2}".format(OPTS.word_size,
|
||||||
OPTS.num_words,
|
OPTS.num_words,
|
||||||
OPTS.num_banks))
|
OPTS.num_banks))
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue