From fe196c23a991602cdcf8685e3effb8fe38dd8e0f Mon Sep 17 00:00:00 2001 From: Jesse Cirimelli-Low Date: Tue, 30 Oct 2018 22:32:19 -0700 Subject: [PATCH] added FF timing information --- compiler/characterizer/lib.py | 15 ++++++++-- compiler/datasheet/datasheet_gen.py | 46 +++++++++++++++++++++++++++-- 2 files changed, 57 insertions(+), 4 deletions(-) diff --git a/compiler/characterizer/lib.py b/compiler/characterizer/lib.py index 72cadc45..ac15a23f 100644 --- a/compiler/characterizer/lib.py +++ b/compiler/characterizer/lib.py @@ -506,7 +506,7 @@ class lib: return datasheet = open(OPTS.openram_temp +'/datasheet.info', 'a+') - datasheet.write("{0},{1},{2},{3},{4},{5},{6},{7},{8},{9},{10},{11},{12},{13}\n".format("sram_{0}_{1}_{2}".format(OPTS.word_size, OPTS.num_words, OPTS.tech_name), + datasheet.write("{0},{1},{2},{3},{4},{5},{6},{7},{8},{9},{10},{11},{12},{13},{14},{15},{16},{17},{18},{19},{20},{21}\n".format("sram_{0}_{1}_{2}".format(OPTS.word_size, OPTS.num_words, OPTS.tech_name), OPTS.num_words, OPTS.num_banks, OPTS.num_rw_ports, @@ -519,7 +519,18 @@ class lib: round_time(self.char_sram_results["min_period"]), self.out_dir, lib_name, - OPTS.word_size)) + OPTS.word_size, + min(list(map(round_time,self.times["setup_times_LH"]))), + max(list(map(round_time,self.times["setup_times_LH"]))), + + min(list(map(round_time,self.times["setup_times_HL"]))), + max(list(map(round_time,self.times["setup_times_HL"]))), + + min(list(map(round_time,self.times["hold_times_LH"]))), + max(list(map(round_time,self.times["hold_times_LH"]))), + + min(list(map(round_time,self.times["hold_times_HL"]))), + max(list(map(round_time,self.times["hold_times_HL"]))))) datasheet.close() diff --git a/compiler/datasheet/datasheet_gen.py b/compiler/datasheet/datasheet_gen.py index a0826cf8..767990fa 100644 --- a/compiler/datasheet/datasheet_gen.py +++ b/compiler/datasheet/datasheet_gen.py @@ -69,10 +69,25 @@ def parse_characterizer_csv(f,pages): OUT_DIR = row[11] LIB_NAME = row[12] WORD_SIZE = row[13] + + FF_SETUP_LH_MIN = row[14] + FF_SETUP_LH_MAX = row[15] + + FF_SETUP_HL_MIN = row[16] + FF_SETUP_HL_MAX = row[17] + + FF_HOLD_LH_MIN = row[18] + FF_HOLD_LH_MAX = row[19] + + FF_HOLD_HL_MIN = row[20] + FF_HOLD_HL_MAX = row[21] + + for sheet in pages: if sheet.name == row[0]: + found = 1 #if the .lib information is for an existing datasheet compare timing data @@ -103,6 +118,31 @@ def parse_characterizer_csv(f,pages): #pass if MIN_PERIOD is zero (not supported by analyitcal model) pass + for item in sheet.timing: + if item.paramter == "CSb setup rising": + if float(FF_SETUP_LH_MIN) < float(item.min): + item.min = FF_SETUP_LH + elif float(FF_SETUP_LH_MAX) > float(item.max): + item.max = FF_SETUP_LH + + if item.paramter == "CSb setup falling": + if float(FF_SETUP_HL_MIN) > float(item.min): + item.max = FF_SETUP_HL_MIN + elif float(FF_SETUP_HL_MAX) > float(item.nax): + item.max = FF_SETUP_HL_MAX + + if item.paramter == "CSb hold rising": + if float(FF_HOLD_HL_MIN) > float(item.min): + item.max = FF_SETUP_HL_MIN + elif float(FF_HOLD_HL_MAX) > float(item.nax): + item.max = FF_SETUP_HL_MAX + + if item.paramter == "CSb hold rising": + if float(FF_HOLD_HL_MIN) > float(item.min): + item.max = FF_SETUP_HL_MIN + elif float(FF_HOLD_HL_MAX) > float(item.nax): + item.max = FF_SETUP_HL_MAX + #regardless of if there is already a corner for the current sram, append the new corner to the datasheet new_sheet.corners.append(characterization_corners_item(PROC,process_name(PROC),VOLT,TEMP,LIB_NAME.replace(OUT_DIR,'').replace(NAME,''))) @@ -128,8 +168,10 @@ def parse_characterizer_csv(f,pages): new_sheet.timing.append(timing_and_current_data_item('Access time','2','3','4')) new_sheet.timing.append(timing_and_current_data_item('Positive clk setup','2','3','4')) new_sheet.timing.append(timing_and_current_data_item('Positive clk hold','2','3','4')) - new_sheet.timing.append(timing_and_current_data_item('RW setup','2','3','4')) - new_sheet.timing.append(timing_and_current_data_item('RW hold','2','3','4')) + new_sheet.timing.append(timing_and_current_data_item('CSb setup rising',FF_SETUP_LH_MIN,FF_SETUP_LH_MAX,'ns')) + new_sheet.timing.append(timing_and_current_data_item('CSb setup falling',FF_SETUP_HL_MIN,FF_SETUP_HL_MAX,'ns')) + new_sheet.timing.append(timing_and_current_data_item('CSb hold rising',FF_SETUP_LH_MIN,FF_SETUP_LH_MAX,'ns')) + new_sheet.timing.append(timing_and_current_data_item('CSb hold falling',FF_SETUP_HL_MIN,FF_SETUP_HL_MAX,'ns')) new_sheet.timing.append(timing_and_current_data_item('AC current','2','3','4')) new_sheet.timing.append(timing_and_current_data_item('Standby current','2','3','4')) new_sheet.timing.append(timing_and_current_data_item('Area','2','3','4'))