Added model selection option.

This commit is contained in:
Hunter Nichols 2020-12-09 12:54:11 -08:00
parent 8a75b83889
commit fc55cd194d
2 changed files with 16 additions and 12 deletions

View File

@ -11,9 +11,7 @@ import math
import datetime import datetime
from .setup_hold import * from .setup_hold import *
from .delay import * from .delay import *
from .elmore import *
from .charutils import * from .charutils import *
from .linear_regression import *
import tech import tech
import numpy as np import numpy as np
from globals import OPTS from globals import OPTS
@ -585,16 +583,24 @@ class lib:
def compute_delay(self): def compute_delay(self):
"""Compute SRAM delays for current corner""" """Compute SRAM delays for current corner"""
if self.use_model: if self.use_model:
model_name_lc = OPTS.model_name.lower()
if model_name_lc == "linear_regression":
from .linear_regression import linear_regression as model
elif model_name_lc == "elmore":
from .elmore import elmore as model
else:
debug.error("{} model not recognized. See options.py for available models.".format(OPTS.model_name))
import math import math
#FIXME: ML models only designed for delay. Cannot produce all values for Lib #FIXME: ML models only designed for delay. Cannot produce all values for Lib
d = linear_regression() m = model()
temp_wpr = 2.0 #OPTS not working right now #temp_wpr = 2.0 #OPTS not working right now
log_num_words = math.log(OPTS.num_words, 2) log_num_words = math.log(OPTS.num_words, 2)
debug.info(1, "OPTS.words_per_row={}".format(OPTS.words_per_row))
model_inputs = [log_num_words, model_inputs = [log_num_words,
OPTS.word_size, OPTS.word_size,
temp_wpr, OPTS.words_per_row,
self.sram.width * self.sram.height] self.sram.width * self.sram.height]
char_results = d.get_prediction(model_inputs) char_results = m.get_prediction(model_inputs)
#self.d = elmore(self.sram, self.sp_file, self.corner) #self.d = elmore(self.sram, self.sp_file, self.corner)
# char_results = self.d.analytical_delay(self.slews,self.loads) # char_results = self.d.analytical_delay(self.slews,self.loads)

View File

@ -103,7 +103,9 @@ class options(optparse.Values):
use_pex = False use_pex = False
# Output config with all options # Output config with all options
output_extended_config = True output_extended_config = True
# Determines which analytical model to use.
# Available Models: elmore, linear_regression
model_name = "linear_regression"
################### ###################
# Tool options # Tool options
@ -152,8 +154,6 @@ class options(optparse.Values):
bitcell = "bitcell" bitcell = "bitcell"
buf_dec = "pbuf" buf_dec = "pbuf"
column_mux_array = "column_mux_array" column_mux_array = "column_mux_array"
col_cap = "col_cap"
col_cap_array = "col_cap_array"
control_logic = "control_logic" control_logic = "control_logic"
decoder = "hierarchical_decoder" decoder = "hierarchical_decoder"
delay_chain = "delay_chain" delay_chain = "delay_chain"
@ -162,12 +162,10 @@ class options(optparse.Values):
inv_dec = "pinv" inv_dec = "pinv"
nand2_dec = "pnand2" nand2_dec = "pnand2"
nand3_dec = "pnand3" nand3_dec = "pnand3"
nand4_dec = "pnand4" nand4_dec = "pnand4" # Not available right now
precharge_array = "precharge_array" precharge_array = "precharge_array"
ptx = "ptx" ptx = "ptx"
replica_bitline = "replica_bitline" replica_bitline = "replica_bitline"
row_cap = "row_cap"
row_cap_array = "row_cap_array"
sense_amp_array = "sense_amp_array" sense_amp_array = "sense_amp_array"
sense_amp = "sense_amp" sense_amp = "sense_amp"
tri_gate_array = "tri_gate_array" tri_gate_array = "tri_gate_array"