From 767990ca3bcbfc9b99ad3102fbaf29081f9f68a3 Mon Sep 17 00:00:00 2001 From: mguthaus Date: Tue, 13 Feb 2018 15:54:50 -0800 Subject: [PATCH] Update golden lib tests. Add new generic SCMOS models. Fix tech error with new msflop_in_cap name. --- compiler/modules/control_logic.py | 2 +- compiler/modules/delay_chain.py | 3 +- compiler/tests/21_hspice_delay_test.py | 36 ++-- compiler/tests/21_hspice_setuphold_test.py | 10 +- compiler/tests/21_ngspice_setuphold_test.py | 10 +- compiler/tests/22_sram_func_test.py | 2 +- .../sram_2_16_1_freepdk45_TT_10V_25C.lib | 22 +-- ...2_16_1_freepdk45_TT_10V_25C_analytical.lib | 160 +++++++++--------- ...ram_2_16_1_freepdk45_TT_10V_25C_pruned.lib | 22 +-- .../sram_2_16_1_scn3me_subm_TT_50V_25C.lib | 160 +++++++++--------- ...m_2_16_1_scn3me_subm_TT_50V_25C_pruned.lib | 160 +++++++++--------- technology/scn3me_subm/models/ff/nmos.sp | 4 +- technology/scn3me_subm/models/ff/pmos.sp | 4 +- technology/scn3me_subm/models/nom/nmos.sp | 4 +- technology/scn3me_subm/models/nom/pmos.sp | 4 +- technology/scn3me_subm/models/ss/nmos.sp | 4 +- technology/scn3me_subm/models/ss/pmos.sp | 4 +- 17 files changed, 306 insertions(+), 305 deletions(-) diff --git a/compiler/modules/control_logic.py b/compiler/modules/control_logic.py index 1ffe5aa5..a3de587c 100644 --- a/compiler/modules/control_logic.py +++ b/compiler/modules/control_logic.py @@ -69,7 +69,7 @@ class control_logic(design.design): c = reload(__import__(OPTS.replica_bitline)) replica_bitline = getattr(c, OPTS.replica_bitline) # FIXME: These should be tuned according to the size! - FO4_stages = 4 + FO4_stages = 8 bitcell_loads = int(math.ceil(self.num_rows / 10.0)) self.replica_bitline = replica_bitline(FO4_stages, bitcell_loads) self.add_mod(self.replica_bitline) diff --git a/compiler/modules/delay_chain.py b/compiler/modules/delay_chain.py index 5a97f711..b05da7ee 100644 --- a/compiler/modules/delay_chain.py +++ b/compiler/modules/delay_chain.py @@ -8,7 +8,8 @@ from globals import OPTS class delay_chain(design.design): """ - Generate a logic effort based delay chain. + Generate a delay chain with the given number of stages and fanout. + This automatically adds an extra inverter with no load on the input. Input is a list contains the electrical effort of each stage. """ diff --git a/compiler/tests/21_hspice_delay_test.py b/compiler/tests/21_hspice_delay_test.py index 10f50b14..d82c2be0 100644 --- a/compiler/tests/21_hspice_delay_test.py +++ b/compiler/tests/21_hspice_delay_test.py @@ -51,25 +51,25 @@ class timing_sram_test(openram_test): data = d.analyze(probe_address, probe_data,slews,loads) #print data if OPTS.tech_name == "freepdk45": - golden_data = {'read1_power': 0.0345742, - 'read0_power': 0.03526189999999999, - 'write0_power': 0.0270014, - 'delay1': [0.0573107], - 'delay0': [0.07055809999999998], - 'min_period': 0.234, - 'write1_power': 0.0376625, - 'slew0': [0.0284344], - 'slew1': [0.0189185]} + golden_data = {'read1_power': 0.0356004, + 'read0_power': 0.0364339, + 'write0_power': 0.0262249, + 'delay1': [0.0572987], + 'delay0': [0.0705677], + 'min_period': 0.41, + 'write1_power': 0.038824700000000004, + 'slew0': [0.028478], + 'slew1': [0.0190058]} elif OPTS.tech_name == "scn3me_subm": - golden_data = {'read1_power': 11.2474, - 'read0_power': 11.3148, - 'write0_power': 6.9064, - 'delay1': [1.0298], - 'delay0': [1.4102], - 'min_period': 4.063, - 'write1_power': 11.6964, - 'slew0': [1.3118], - 'slew1': [0.9816656]} + golden_data = {'read1_power': 10.3442, + 'read0_power': 10.5159, + 'write0_power': 6.9292, + 'delay1': [0.6536728], + 'delay0': [0.9019465999999999], + 'min_period': 4.531, + 'write1_power': 11.3108, + 'slew0': [0.8320245], + 'slew1': [0.5897582]} else: self.assertTrue(False) # other techs fail # Check if no too many or too few results diff --git a/compiler/tests/21_hspice_setuphold_test.py b/compiler/tests/21_hspice_setuphold_test.py index 9649a7a4..ec49090f 100644 --- a/compiler/tests/21_hspice_setuphold_test.py +++ b/compiler/tests/21_hspice_setuphold_test.py @@ -34,17 +34,17 @@ class timing_setup_test(openram_test): corner = (OPTS.process_corners[0], OPTS.supply_voltages[0], OPTS.temperatures[0]) sh = setup_hold.setup_hold(corner) data = sh.analyze(slews,slews) - + #print data if OPTS.tech_name == "freepdk45": golden_data = {'setup_times_LH': [0.014648399999999999], 'hold_times_LH': [0.0024414], 'hold_times_HL': [-0.0036620999999999997], 'setup_times_HL': [0.0085449]} elif OPTS.tech_name == "scn3me_subm": - golden_data = {'setup_times_LH': [0.1000977], - 'hold_times_LH': [0.020751999999999996], - 'hold_times_HL': [-0.0830078], - 'setup_times_HL': [0.020751999999999996]} + golden_data = {'setup_times_LH': [0.08178709999999999], + 'hold_times_LH': [0.0024414], + 'hold_times_HL': [-0.0646973], + 'setup_times_HL': [0.0390625]} else: self.assertTrue(False) # other techs fail diff --git a/compiler/tests/21_ngspice_setuphold_test.py b/compiler/tests/21_ngspice_setuphold_test.py index 4e28ce47..e26ce210 100644 --- a/compiler/tests/21_ngspice_setuphold_test.py +++ b/compiler/tests/21_ngspice_setuphold_test.py @@ -33,17 +33,17 @@ class timing_setup_test(openram_test): corner = (OPTS.process_corners[0], OPTS.supply_voltages[0], OPTS.temperatures[0]) sh = setup_hold.setup_hold(corner) data = sh.analyze(slews,slews) - + #print data if OPTS.tech_name == "freepdk45": golden_data = {'setup_times_LH': [0.01464844], 'hold_times_LH': [0.0024414059999999997], 'hold_times_HL': [-0.003662109], 'setup_times_HL': [0.008544922]} elif OPTS.tech_name == "scn3me_subm": - golden_data = {'setup_times_LH': [0.1000977], - 'hold_times_LH': [0.02075195], - 'hold_times_HL': [-0.08300781], - 'setup_times_HL': [0.02075195]} + golden_data = {'setup_times_LH': [0.1855469], + 'hold_times_LH': [-0.009765625], + 'hold_times_HL': [-0.15625], + 'setup_times_HL': [0.12451169999999999]} else: self.assertTrue(False) # other techs fail diff --git a/compiler/tests/22_sram_func_test.py b/compiler/tests/22_sram_func_test.py index f8042880..f719c390 100644 --- a/compiler/tests/22_sram_func_test.py +++ b/compiler/tests/22_sram_func_test.py @@ -49,7 +49,7 @@ class sram_func_test(openram_test): # This will exit if it doesn't find a feasible period import tech - load = tech.spice["FF_in_cap"]*4 + load = tech.spice["msflop_in_cap"]*4 slew = tech.spice["rise_time"]*2 feasible_period = d.find_feasible_period(load,slew) diff --git a/compiler/tests/golden/sram_2_16_1_freepdk45_TT_10V_25C.lib b/compiler/tests/golden/sram_2_16_1_freepdk45_TT_10V_25C.lib index 435a4f75..68458eba 100644 --- a/compiler/tests/golden/sram_2_16_1_freepdk45_TT_10V_25C.lib +++ b/compiler/tests/golden/sram_2_16_1_freepdk45_TT_10V_25C.lib @@ -92,10 +92,10 @@ cell (sram_2_16_1_freepdk45){ internal_power(){ when : "OEb & !clk"; rise_power(scalar){ - values("0.04024341"); + values("0.042347092"); } fall_power(scalar){ - values("0.029869287"); + values("0.029908723"); } } timing(){ @@ -129,10 +129,10 @@ cell (sram_2_16_1_freepdk45){ internal_power(){ when : "!OEb & !clk"; rise_power(scalar){ - values("0.050563718"); + values("0.054779642"); } fall_power(scalar){ - values("0.055867096"); + values("0.060081573"); } } timing(){ @@ -145,9 +145,9 @@ cell (sram_2_16_1_freepdk45){ "0.061, 0.062, 0.069"); } cell_fall(CELL_TABLE) { - values("0.442, 0.443, 0.452",\ - "0.442, 0.443, 0.453",\ - "0.448, 0.449, 0.458"); + values("0.522, 0.523, 0.533",\ + "0.523, 0.524, 0.533",\ + "0.528, 0.529, 0.539"); } rise_transition(CELL_TABLE) { values("0.013, 0.015, 0.026",\ @@ -308,20 +308,20 @@ cell (sram_2_16_1_freepdk45){ timing_type :"min_pulse_width"; related_pin : clk; rise_constraint(scalar) { - values("0.449"); + values("0.5275"); } fall_constraint(scalar) { - values("0.449"); + values("0.5275"); } } timing(){ timing_type :"minimum_period"; related_pin : clk; rise_constraint(scalar) { - values("0.898"); + values("1.055"); } fall_constraint(scalar) { - values("0.898"); + values("1.055"); } } } diff --git a/compiler/tests/golden/sram_2_16_1_freepdk45_TT_10V_25C_analytical.lib b/compiler/tests/golden/sram_2_16_1_freepdk45_TT_10V_25C_analytical.lib index 63e510fd..22715e9f 100644 --- a/compiler/tests/golden/sram_2_16_1_freepdk45_TT_10V_25C_analytical.lib +++ b/compiler/tests/golden/sram_2_16_1_freepdk45_TT_10V_25C_analytical.lib @@ -92,47 +92,47 @@ cell (sram_2_16_1_freepdk45){ internal_power(){ when : "OEb & !clk"; rise_power(scalar){ - values("0"); + values("0.039115101"); } fall_power(scalar){ - values("0"); + values("0.026662611"); } } timing(){ timing_type : setup_rising; related_pin : "clk"; rise_constraint(CONSTRAINT_TABLE) { - values("0.009, 0.009, 0.009",\ - "0.009, 0.009, 0.009",\ - "0.009, 0.009, 0.009"); + values("0.009, 0.015, 0.021",\ + "0.009, 0.015, 0.021",\ + "0.009, 0.015, 0.021"); } fall_constraint(CONSTRAINT_TABLE) { - values("0.009, 0.009, 0.009",\ - "0.009, 0.009, 0.009",\ - "0.009, 0.009, 0.009"); + values("0.009, 0.009, 0.015",\ + "0.009, 0.009, 0.015",\ + "0.009, 0.009, 0.015"); } } timing(){ timing_type : hold_rising; related_pin : "clk"; rise_constraint(CONSTRAINT_TABLE) { - values("0.001, 0.001, 0.001",\ - "0.001, 0.001, 0.001",\ - "0.001, 0.001, 0.001"); + values("0.002, 0.002, -0.004",\ + "0.002, 0.002, -0.004",\ + "0.002, 0.002, -0.004"); } fall_constraint(CONSTRAINT_TABLE) { - values("0.001, 0.001, 0.001",\ - "0.001, 0.001, 0.001",\ - "0.001, 0.001, 0.001"); + values("-0.004, -0.004, -0.016",\ + "-0.004, -0.004, -0.016",\ + "-0.004, -0.004, -0.016"); } } internal_power(){ when : "!OEb & !clk"; rise_power(scalar){ - values("0"); + values("0.036300681"); } fall_power(scalar){ - values("0"); + values("0.041472985"); } } timing(){ @@ -140,24 +140,24 @@ cell (sram_2_16_1_freepdk45){ related_pin : "clk"; timing_type : falling_edge; cell_rise(CELL_TABLE) { - values("0.123, 0.124, 0.133",\ - "0.123, 0.124, 0.133",\ - "0.123, 0.124, 0.133"); + values("0.054, 0.055, 0.061",\ + "0.055, 0.055, 0.062",\ + "0.06, 0.061, 0.067"); } cell_fall(CELL_TABLE) { - values("0.123, 0.124, 0.133",\ - "0.123, 0.124, 0.133",\ - "0.123, 0.124, 0.133"); + values("0.519, 0.52, 0.529",\ + "0.519, 0.52, 0.53",\ + "0.525, 0.526, 0.535"); } rise_transition(CELL_TABLE) { - values("0.006, 0.007, 0.018",\ - "0.006, 0.007, 0.018",\ - "0.006, 0.007, 0.018"); + values("0.013, 0.014, 0.026",\ + "0.013, 0.014, 0.026",\ + "0.013, 0.015, 0.026"); } fall_transition(CELL_TABLE) { - values("0.006, 0.007, 0.018",\ - "0.006, 0.007, 0.018",\ - "0.006, 0.007, 0.018"); + values("0.027, 0.029, 0.043",\ + "0.027, 0.029, 0.043",\ + "0.027, 0.029, 0.043"); } } } @@ -174,28 +174,28 @@ cell (sram_2_16_1_freepdk45){ timing_type : setup_rising; related_pin : "clk"; rise_constraint(CONSTRAINT_TABLE) { - values("0.009, 0.009, 0.009",\ - "0.009, 0.009, 0.009",\ - "0.009, 0.009, 0.009"); + values("0.009, 0.015, 0.021",\ + "0.009, 0.015, 0.021",\ + "0.009, 0.015, 0.021"); } fall_constraint(CONSTRAINT_TABLE) { - values("0.009, 0.009, 0.009",\ - "0.009, 0.009, 0.009",\ - "0.009, 0.009, 0.009"); + values("0.009, 0.009, 0.015",\ + "0.009, 0.009, 0.015",\ + "0.009, 0.009, 0.015"); } } timing(){ timing_type : hold_rising; related_pin : "clk"; rise_constraint(CONSTRAINT_TABLE) { - values("0.001, 0.001, 0.001",\ - "0.001, 0.001, 0.001",\ - "0.001, 0.001, 0.001"); + values("0.002, 0.002, -0.004",\ + "0.002, 0.002, -0.004",\ + "0.002, 0.002, -0.004"); } fall_constraint(CONSTRAINT_TABLE) { - values("0.001, 0.001, 0.001",\ - "0.001, 0.001, 0.001",\ - "0.001, 0.001, 0.001"); + values("-0.004, -0.004, -0.016",\ + "-0.004, -0.004, -0.016",\ + "-0.004, -0.004, -0.016"); } } } @@ -208,28 +208,28 @@ cell (sram_2_16_1_freepdk45){ timing_type : setup_rising; related_pin : "clk"; rise_constraint(CONSTRAINT_TABLE) { - values("0.009, 0.009, 0.009",\ - "0.009, 0.009, 0.009",\ - "0.009, 0.009, 0.009"); + values("0.009, 0.015, 0.021",\ + "0.009, 0.015, 0.021",\ + "0.009, 0.015, 0.021"); } fall_constraint(CONSTRAINT_TABLE) { - values("0.009, 0.009, 0.009",\ - "0.009, 0.009, 0.009",\ - "0.009, 0.009, 0.009"); + values("0.009, 0.009, 0.015",\ + "0.009, 0.009, 0.015",\ + "0.009, 0.009, 0.015"); } } timing(){ timing_type : hold_rising; related_pin : "clk"; rise_constraint(CONSTRAINT_TABLE) { - values("0.001, 0.001, 0.001",\ - "0.001, 0.001, 0.001",\ - "0.001, 0.001, 0.001"); + values("0.002, 0.002, -0.004",\ + "0.002, 0.002, -0.004",\ + "0.002, 0.002, -0.004"); } fall_constraint(CONSTRAINT_TABLE) { - values("0.001, 0.001, 0.001",\ - "0.001, 0.001, 0.001",\ - "0.001, 0.001, 0.001"); + values("-0.004, -0.004, -0.016",\ + "-0.004, -0.004, -0.016",\ + "-0.004, -0.004, -0.016"); } } } @@ -241,28 +241,28 @@ cell (sram_2_16_1_freepdk45){ timing_type : setup_rising; related_pin : "clk"; rise_constraint(CONSTRAINT_TABLE) { - values("0.009, 0.009, 0.009",\ - "0.009, 0.009, 0.009",\ - "0.009, 0.009, 0.009"); + values("0.009, 0.015, 0.021",\ + "0.009, 0.015, 0.021",\ + "0.009, 0.015, 0.021"); } fall_constraint(CONSTRAINT_TABLE) { - values("0.009, 0.009, 0.009",\ - "0.009, 0.009, 0.009",\ - "0.009, 0.009, 0.009"); + values("0.009, 0.009, 0.015",\ + "0.009, 0.009, 0.015",\ + "0.009, 0.009, 0.015"); } } timing(){ timing_type : hold_rising; related_pin : "clk"; rise_constraint(CONSTRAINT_TABLE) { - values("0.001, 0.001, 0.001",\ - "0.001, 0.001, 0.001",\ - "0.001, 0.001, 0.001"); + values("0.002, 0.002, -0.004",\ + "0.002, 0.002, -0.004",\ + "0.002, 0.002, -0.004"); } fall_constraint(CONSTRAINT_TABLE) { - values("0.001, 0.001, 0.001",\ - "0.001, 0.001, 0.001",\ - "0.001, 0.001, 0.001"); + values("-0.004, -0.004, -0.016",\ + "-0.004, -0.004, -0.016",\ + "-0.004, -0.004, -0.016"); } } } @@ -274,28 +274,28 @@ cell (sram_2_16_1_freepdk45){ timing_type : setup_rising; related_pin : "clk"; rise_constraint(CONSTRAINT_TABLE) { - values("0.009, 0.009, 0.009",\ - "0.009, 0.009, 0.009",\ - "0.009, 0.009, 0.009"); + values("0.009, 0.015, 0.021",\ + "0.009, 0.015, 0.021",\ + "0.009, 0.015, 0.021"); } fall_constraint(CONSTRAINT_TABLE) { - values("0.009, 0.009, 0.009",\ - "0.009, 0.009, 0.009",\ - "0.009, 0.009, 0.009"); + values("0.009, 0.009, 0.015",\ + "0.009, 0.009, 0.015",\ + "0.009, 0.009, 0.015"); } } timing(){ timing_type : hold_rising; related_pin : "clk"; rise_constraint(CONSTRAINT_TABLE) { - values("0.001, 0.001, 0.001",\ - "0.001, 0.001, 0.001",\ - "0.001, 0.001, 0.001"); + values("0.002, 0.002, -0.004",\ + "0.002, 0.002, -0.004",\ + "0.002, 0.002, -0.004"); } fall_constraint(CONSTRAINT_TABLE) { - values("0.001, 0.001, 0.001",\ - "0.001, 0.001, 0.001",\ - "0.001, 0.001, 0.001"); + values("-0.004, -0.004, -0.016",\ + "-0.004, -0.004, -0.016",\ + "-0.004, -0.004, -0.016"); } } } @@ -308,20 +308,20 @@ cell (sram_2_16_1_freepdk45){ timing_type :"min_pulse_width"; related_pin : clk; rise_constraint(scalar) { - values("0.0"); + values("0.5275"); } fall_constraint(scalar) { - values("0.0"); + values("0.5275"); } } timing(){ timing_type :"minimum_period"; related_pin : clk; rise_constraint(scalar) { - values("0.0"); + values("1.055"); } fall_constraint(scalar) { - values("0.0"); + values("1.055"); } } } diff --git a/compiler/tests/golden/sram_2_16_1_freepdk45_TT_10V_25C_pruned.lib b/compiler/tests/golden/sram_2_16_1_freepdk45_TT_10V_25C_pruned.lib index 06b9f36d..22715e9f 100644 --- a/compiler/tests/golden/sram_2_16_1_freepdk45_TT_10V_25C_pruned.lib +++ b/compiler/tests/golden/sram_2_16_1_freepdk45_TT_10V_25C_pruned.lib @@ -92,10 +92,10 @@ cell (sram_2_16_1_freepdk45){ internal_power(){ when : "OEb & !clk"; rise_power(scalar){ - values("0.0370166"); + values("0.039115101"); } fall_power(scalar){ - values("0.026622831"); + values("0.026662611"); } } timing(){ @@ -129,10 +129,10 @@ cell (sram_2_16_1_freepdk45){ internal_power(){ when : "!OEb & !clk"; rise_power(scalar){ - values("0.034203045"); + values("0.036300681"); } fall_power(scalar){ - values("0.039377859"); + values("0.041472985"); } } timing(){ @@ -145,9 +145,9 @@ cell (sram_2_16_1_freepdk45){ "0.06, 0.061, 0.067"); } cell_fall(CELL_TABLE) { - values("0.438, 0.439, 0.449",\ - "0.439, 0.44, 0.449",\ - "0.445, 0.446, 0.455"); + values("0.519, 0.52, 0.529",\ + "0.519, 0.52, 0.53",\ + "0.525, 0.526, 0.535"); } rise_transition(CELL_TABLE) { values("0.013, 0.014, 0.026",\ @@ -308,20 +308,20 @@ cell (sram_2_16_1_freepdk45){ timing_type :"min_pulse_width"; related_pin : clk; rise_constraint(scalar) { - values("0.449"); + values("0.5275"); } fall_constraint(scalar) { - values("0.449"); + values("0.5275"); } } timing(){ timing_type :"minimum_period"; related_pin : clk; rise_constraint(scalar) { - values("0.898"); + values("1.055"); } fall_constraint(scalar) { - values("0.898"); + values("1.055"); } } } diff --git a/compiler/tests/golden/sram_2_16_1_scn3me_subm_TT_50V_25C.lib b/compiler/tests/golden/sram_2_16_1_scn3me_subm_TT_50V_25C.lib index d08de617..b6fc4525 100644 --- a/compiler/tests/golden/sram_2_16_1_scn3me_subm_TT_50V_25C.lib +++ b/compiler/tests/golden/sram_2_16_1_scn3me_subm_TT_50V_25C.lib @@ -92,47 +92,47 @@ cell (sram_2_16_1_scn3me_subm){ internal_power(){ when : "OEb & !clk"; rise_power(scalar){ - values("6.0607574"); + values("11.756062"); } fall_power(scalar){ - values("3.8016626"); + values("7.1840422"); } } timing(){ timing_type : setup_rising; related_pin : "clk"; rise_constraint(CONSTRAINT_TABLE) { - values("0.082, 0.088, 0.186",\ - "0.082, 0.088, 0.186",\ - "0.082, 0.088, 0.186"); + values("0.076, 0.076, 0.149",\ + "0.076, 0.076, 0.149",\ + "0.076, 0.076, 0.149"); } fall_constraint(CONSTRAINT_TABLE) { - values("0.021, 0.021, 0.027",\ - "0.021, 0.021, 0.027",\ - "0.021, 0.021, 0.027"); + values("0.039, 0.039, 0.027",\ + "0.039, 0.039, 0.027",\ + "0.039, 0.039, 0.027"); } } timing(){ timing_type : hold_rising; related_pin : "clk"; rise_constraint(CONSTRAINT_TABLE) { - values("0.009, 0.015, 0.021",\ - "0.009, 0.015, 0.021",\ - "0.009, 0.015, 0.021"); + values("-0.004, -0.004, 0.009",\ + "-0.004, -0.004, 0.009",\ + "-0.004, -0.004, 0.009"); } fall_constraint(CONSTRAINT_TABLE) { - values("-0.065, -0.071, -0.175",\ - "-0.065, -0.071, -0.175",\ - "-0.065, -0.071, -0.175"); + values("-0.052, -0.059, -0.132",\ + "-0.052, -0.059, -0.132",\ + "-0.052, -0.059, -0.132"); } } internal_power(){ when : "!OEb & !clk"; rise_power(scalar){ - values("6.8609238"); + values("10.730552"); } fall_power(scalar){ - values("5.9579654"); + values("10.584523"); } } timing(){ @@ -140,24 +140,24 @@ cell (sram_2_16_1_scn3me_subm){ related_pin : "clk"; timing_type : falling_edge; cell_rise(CELL_TABLE) { - values("0.676, 0.761, 1.439",\ - "0.679, 0.763, 1.443",\ - "0.731, 0.813, 1.491"); + values("0.458, 0.503, 0.87",\ + "0.461, 0.505, 0.873",\ + "0.5, 0.544, 0.911"); } cell_fall(CELL_TABLE) { - values("0.866, 0.99, 1.98",\ - "0.868, 0.993, 1.985",\ - "0.92, 1.042, 2.034"); + values("0.573, 0.649, 1.249",\ + "0.576, 0.651, 1.252",\ + "0.616, 0.69, 1.289"); } rise_transition(CELL_TABLE) { - values("0.184, 0.333, 1.877",\ - "0.185, 0.334, 1.877",\ - "0.188, 0.337, 1.877"); + values("0.153, 0.232, 1.084",\ + "0.153, 0.233, 1.084",\ + "0.156, 0.236, 1.084"); } fall_transition(CELL_TABLE) { - values("0.363, 0.486, 2.459",\ - "0.367, 0.488, 2.459",\ - "0.37, 0.495, 2.46"); + values("0.277, 0.355, 1.499",\ + "0.277, 0.357, 1.499",\ + "0.278, 0.362, 1.499"); } } } @@ -174,28 +174,28 @@ cell (sram_2_16_1_scn3me_subm){ timing_type : setup_rising; related_pin : "clk"; rise_constraint(CONSTRAINT_TABLE) { - values("0.082, 0.088, 0.186",\ - "0.082, 0.088, 0.186",\ - "0.082, 0.088, 0.186"); + values("0.076, 0.076, 0.149",\ + "0.076, 0.076, 0.149",\ + "0.076, 0.076, 0.149"); } fall_constraint(CONSTRAINT_TABLE) { - values("0.021, 0.021, 0.027",\ - "0.021, 0.021, 0.027",\ - "0.021, 0.021, 0.027"); + values("0.039, 0.039, 0.027",\ + "0.039, 0.039, 0.027",\ + "0.039, 0.039, 0.027"); } } timing(){ timing_type : hold_rising; related_pin : "clk"; rise_constraint(CONSTRAINT_TABLE) { - values("0.009, 0.015, 0.021",\ - "0.009, 0.015, 0.021",\ - "0.009, 0.015, 0.021"); + values("-0.004, -0.004, 0.009",\ + "-0.004, -0.004, 0.009",\ + "-0.004, -0.004, 0.009"); } fall_constraint(CONSTRAINT_TABLE) { - values("-0.065, -0.071, -0.175",\ - "-0.065, -0.071, -0.175",\ - "-0.065, -0.071, -0.175"); + values("-0.052, -0.059, -0.132",\ + "-0.052, -0.059, -0.132",\ + "-0.052, -0.059, -0.132"); } } } @@ -208,28 +208,28 @@ cell (sram_2_16_1_scn3me_subm){ timing_type : setup_rising; related_pin : "clk"; rise_constraint(CONSTRAINT_TABLE) { - values("0.082, 0.088, 0.186",\ - "0.082, 0.088, 0.186",\ - "0.082, 0.088, 0.186"); + values("0.076, 0.076, 0.149",\ + "0.076, 0.076, 0.149",\ + "0.076, 0.076, 0.149"); } fall_constraint(CONSTRAINT_TABLE) { - values("0.021, 0.021, 0.027",\ - "0.021, 0.021, 0.027",\ - "0.021, 0.021, 0.027"); + values("0.039, 0.039, 0.027",\ + "0.039, 0.039, 0.027",\ + "0.039, 0.039, 0.027"); } } timing(){ timing_type : hold_rising; related_pin : "clk"; rise_constraint(CONSTRAINT_TABLE) { - values("0.009, 0.015, 0.021",\ - "0.009, 0.015, 0.021",\ - "0.009, 0.015, 0.021"); + values("-0.004, -0.004, 0.009",\ + "-0.004, -0.004, 0.009",\ + "-0.004, -0.004, 0.009"); } fall_constraint(CONSTRAINT_TABLE) { - values("-0.065, -0.071, -0.175",\ - "-0.065, -0.071, -0.175",\ - "-0.065, -0.071, -0.175"); + values("-0.052, -0.059, -0.132",\ + "-0.052, -0.059, -0.132",\ + "-0.052, -0.059, -0.132"); } } } @@ -241,28 +241,28 @@ cell (sram_2_16_1_scn3me_subm){ timing_type : setup_rising; related_pin : "clk"; rise_constraint(CONSTRAINT_TABLE) { - values("0.082, 0.088, 0.186",\ - "0.082, 0.088, 0.186",\ - "0.082, 0.088, 0.186"); + values("0.076, 0.076, 0.149",\ + "0.076, 0.076, 0.149",\ + "0.076, 0.076, 0.149"); } fall_constraint(CONSTRAINT_TABLE) { - values("0.021, 0.021, 0.027",\ - "0.021, 0.021, 0.027",\ - "0.021, 0.021, 0.027"); + values("0.039, 0.039, 0.027",\ + "0.039, 0.039, 0.027",\ + "0.039, 0.039, 0.027"); } } timing(){ timing_type : hold_rising; related_pin : "clk"; rise_constraint(CONSTRAINT_TABLE) { - values("0.009, 0.015, 0.021",\ - "0.009, 0.015, 0.021",\ - "0.009, 0.015, 0.021"); + values("-0.004, -0.004, 0.009",\ + "-0.004, -0.004, 0.009",\ + "-0.004, -0.004, 0.009"); } fall_constraint(CONSTRAINT_TABLE) { - values("-0.065, -0.071, -0.175",\ - "-0.065, -0.071, -0.175",\ - "-0.065, -0.071, -0.175"); + values("-0.052, -0.059, -0.132",\ + "-0.052, -0.059, -0.132",\ + "-0.052, -0.059, -0.132"); } } } @@ -274,28 +274,28 @@ cell (sram_2_16_1_scn3me_subm){ timing_type : setup_rising; related_pin : "clk"; rise_constraint(CONSTRAINT_TABLE) { - values("0.082, 0.088, 0.186",\ - "0.082, 0.088, 0.186",\ - "0.082, 0.088, 0.186"); + values("0.076, 0.076, 0.149",\ + "0.076, 0.076, 0.149",\ + "0.076, 0.076, 0.149"); } fall_constraint(CONSTRAINT_TABLE) { - values("0.021, 0.021, 0.027",\ - "0.021, 0.021, 0.027",\ - "0.021, 0.021, 0.027"); + values("0.039, 0.039, 0.027",\ + "0.039, 0.039, 0.027",\ + "0.039, 0.039, 0.027"); } } timing(){ timing_type : hold_rising; related_pin : "clk"; rise_constraint(CONSTRAINT_TABLE) { - values("0.009, 0.015, 0.021",\ - "0.009, 0.015, 0.021",\ - "0.009, 0.015, 0.021"); + values("-0.004, -0.004, 0.009",\ + "-0.004, -0.004, 0.009",\ + "-0.004, -0.004, 0.009"); } fall_constraint(CONSTRAINT_TABLE) { - values("-0.065, -0.071, -0.175",\ - "-0.065, -0.071, -0.175",\ - "-0.065, -0.071, -0.175"); + values("-0.052, -0.059, -0.132",\ + "-0.052, -0.059, -0.132",\ + "-0.052, -0.059, -0.132"); } } } @@ -308,20 +308,20 @@ cell (sram_2_16_1_scn3me_subm){ timing_type :"min_pulse_width"; related_pin : clk; rise_constraint(scalar) { - values("3.125"); + values("2.344"); } fall_constraint(scalar) { - values("3.125"); + values("2.344"); } } timing(){ timing_type :"minimum_period"; related_pin : clk; rise_constraint(scalar) { - values("6.25"); + values("4.688"); } fall_constraint(scalar) { - values("6.25"); + values("4.688"); } } } diff --git a/compiler/tests/golden/sram_2_16_1_scn3me_subm_TT_50V_25C_pruned.lib b/compiler/tests/golden/sram_2_16_1_scn3me_subm_TT_50V_25C_pruned.lib index b2c93949..b6fc4525 100644 --- a/compiler/tests/golden/sram_2_16_1_scn3me_subm_TT_50V_25C_pruned.lib +++ b/compiler/tests/golden/sram_2_16_1_scn3me_subm_TT_50V_25C_pruned.lib @@ -92,47 +92,47 @@ cell (sram_2_16_1_scn3me_subm){ internal_power(){ when : "OEb & !clk"; rise_power(scalar){ - values("5.5339993"); + values("11.756062"); } fall_power(scalar){ - values("3.2697936"); + values("7.1840422"); } } timing(){ timing_type : setup_rising; related_pin : "clk"; rise_constraint(CONSTRAINT_TABLE) { - values("0.082, 0.088, 0.186",\ - "0.082, 0.088, 0.186",\ - "0.082, 0.088, 0.186"); + values("0.076, 0.076, 0.149",\ + "0.076, 0.076, 0.149",\ + "0.076, 0.076, 0.149"); } fall_constraint(CONSTRAINT_TABLE) { - values("0.021, 0.021, 0.027",\ - "0.021, 0.021, 0.027",\ - "0.021, 0.021, 0.027"); + values("0.039, 0.039, 0.027",\ + "0.039, 0.039, 0.027",\ + "0.039, 0.039, 0.027"); } } timing(){ timing_type : hold_rising; related_pin : "clk"; rise_constraint(CONSTRAINT_TABLE) { - values("0.009, 0.015, 0.021",\ - "0.009, 0.015, 0.021",\ - "0.009, 0.015, 0.021"); + values("-0.004, -0.004, 0.009",\ + "-0.004, -0.004, 0.009",\ + "-0.004, -0.004, 0.009"); } fall_constraint(CONSTRAINT_TABLE) { - values("-0.065, -0.071, -0.175",\ - "-0.065, -0.071, -0.175",\ - "-0.065, -0.071, -0.175"); + values("-0.052, -0.059, -0.132",\ + "-0.052, -0.059, -0.132",\ + "-0.052, -0.059, -0.132"); } } internal_power(){ when : "!OEb & !clk"; rise_power(scalar){ - values("5.5897458"); + values("10.730552"); } fall_power(scalar){ - values("5.460329"); + values("10.584523"); } } timing(){ @@ -140,24 +140,24 @@ cell (sram_2_16_1_scn3me_subm){ related_pin : "clk"; timing_type : falling_edge; cell_rise(CELL_TABLE) { - values("0.664, 0.748, 1.425",\ - "0.667, 0.75, 1.429",\ - "0.718, 0.8, 1.477"); + values("0.458, 0.503, 0.87",\ + "0.461, 0.505, 0.873",\ + "0.5, 0.544, 0.911"); } cell_fall(CELL_TABLE) { - values("0.857, 0.981, 1.971",\ - "0.859, 0.984, 1.976",\ - "0.911, 1.033, 2.025"); + values("0.573, 0.649, 1.249",\ + "0.576, 0.651, 1.252",\ + "0.616, 0.69, 1.289"); } rise_transition(CELL_TABLE) { - values("0.182, 0.331, 1.876",\ - "0.183, 0.333, 1.876",\ - "0.186, 0.336, 1.876"); + values("0.153, 0.232, 1.084",\ + "0.153, 0.233, 1.084",\ + "0.156, 0.236, 1.084"); } fall_transition(CELL_TABLE) { - values("0.361, 0.487, 2.459",\ - "0.365, 0.488, 2.459",\ - "0.369, 0.496, 2.459"); + values("0.277, 0.355, 1.499",\ + "0.277, 0.357, 1.499",\ + "0.278, 0.362, 1.499"); } } } @@ -174,28 +174,28 @@ cell (sram_2_16_1_scn3me_subm){ timing_type : setup_rising; related_pin : "clk"; rise_constraint(CONSTRAINT_TABLE) { - values("0.082, 0.088, 0.186",\ - "0.082, 0.088, 0.186",\ - "0.082, 0.088, 0.186"); + values("0.076, 0.076, 0.149",\ + "0.076, 0.076, 0.149",\ + "0.076, 0.076, 0.149"); } fall_constraint(CONSTRAINT_TABLE) { - values("0.021, 0.021, 0.027",\ - "0.021, 0.021, 0.027",\ - "0.021, 0.021, 0.027"); + values("0.039, 0.039, 0.027",\ + "0.039, 0.039, 0.027",\ + "0.039, 0.039, 0.027"); } } timing(){ timing_type : hold_rising; related_pin : "clk"; rise_constraint(CONSTRAINT_TABLE) { - values("0.009, 0.015, 0.021",\ - "0.009, 0.015, 0.021",\ - "0.009, 0.015, 0.021"); + values("-0.004, -0.004, 0.009",\ + "-0.004, -0.004, 0.009",\ + "-0.004, -0.004, 0.009"); } fall_constraint(CONSTRAINT_TABLE) { - values("-0.065, -0.071, -0.175",\ - "-0.065, -0.071, -0.175",\ - "-0.065, -0.071, -0.175"); + values("-0.052, -0.059, -0.132",\ + "-0.052, -0.059, -0.132",\ + "-0.052, -0.059, -0.132"); } } } @@ -208,28 +208,28 @@ cell (sram_2_16_1_scn3me_subm){ timing_type : setup_rising; related_pin : "clk"; rise_constraint(CONSTRAINT_TABLE) { - values("0.082, 0.088, 0.186",\ - "0.082, 0.088, 0.186",\ - "0.082, 0.088, 0.186"); + values("0.076, 0.076, 0.149",\ + "0.076, 0.076, 0.149",\ + "0.076, 0.076, 0.149"); } fall_constraint(CONSTRAINT_TABLE) { - values("0.021, 0.021, 0.027",\ - "0.021, 0.021, 0.027",\ - "0.021, 0.021, 0.027"); + values("0.039, 0.039, 0.027",\ + "0.039, 0.039, 0.027",\ + "0.039, 0.039, 0.027"); } } timing(){ timing_type : hold_rising; related_pin : "clk"; rise_constraint(CONSTRAINT_TABLE) { - values("0.009, 0.015, 0.021",\ - "0.009, 0.015, 0.021",\ - "0.009, 0.015, 0.021"); + values("-0.004, -0.004, 0.009",\ + "-0.004, -0.004, 0.009",\ + "-0.004, -0.004, 0.009"); } fall_constraint(CONSTRAINT_TABLE) { - values("-0.065, -0.071, -0.175",\ - "-0.065, -0.071, -0.175",\ - "-0.065, -0.071, -0.175"); + values("-0.052, -0.059, -0.132",\ + "-0.052, -0.059, -0.132",\ + "-0.052, -0.059, -0.132"); } } } @@ -241,28 +241,28 @@ cell (sram_2_16_1_scn3me_subm){ timing_type : setup_rising; related_pin : "clk"; rise_constraint(CONSTRAINT_TABLE) { - values("0.082, 0.088, 0.186",\ - "0.082, 0.088, 0.186",\ - "0.082, 0.088, 0.186"); + values("0.076, 0.076, 0.149",\ + "0.076, 0.076, 0.149",\ + "0.076, 0.076, 0.149"); } fall_constraint(CONSTRAINT_TABLE) { - values("0.021, 0.021, 0.027",\ - "0.021, 0.021, 0.027",\ - "0.021, 0.021, 0.027"); + values("0.039, 0.039, 0.027",\ + "0.039, 0.039, 0.027",\ + "0.039, 0.039, 0.027"); } } timing(){ timing_type : hold_rising; related_pin : "clk"; rise_constraint(CONSTRAINT_TABLE) { - values("0.009, 0.015, 0.021",\ - "0.009, 0.015, 0.021",\ - "0.009, 0.015, 0.021"); + values("-0.004, -0.004, 0.009",\ + "-0.004, -0.004, 0.009",\ + "-0.004, -0.004, 0.009"); } fall_constraint(CONSTRAINT_TABLE) { - values("-0.065, -0.071, -0.175",\ - "-0.065, -0.071, -0.175",\ - "-0.065, -0.071, -0.175"); + values("-0.052, -0.059, -0.132",\ + "-0.052, -0.059, -0.132",\ + "-0.052, -0.059, -0.132"); } } } @@ -274,28 +274,28 @@ cell (sram_2_16_1_scn3me_subm){ timing_type : setup_rising; related_pin : "clk"; rise_constraint(CONSTRAINT_TABLE) { - values("0.082, 0.088, 0.186",\ - "0.082, 0.088, 0.186",\ - "0.082, 0.088, 0.186"); + values("0.076, 0.076, 0.149",\ + "0.076, 0.076, 0.149",\ + "0.076, 0.076, 0.149"); } fall_constraint(CONSTRAINT_TABLE) { - values("0.021, 0.021, 0.027",\ - "0.021, 0.021, 0.027",\ - "0.021, 0.021, 0.027"); + values("0.039, 0.039, 0.027",\ + "0.039, 0.039, 0.027",\ + "0.039, 0.039, 0.027"); } } timing(){ timing_type : hold_rising; related_pin : "clk"; rise_constraint(CONSTRAINT_TABLE) { - values("0.009, 0.015, 0.021",\ - "0.009, 0.015, 0.021",\ - "0.009, 0.015, 0.021"); + values("-0.004, -0.004, 0.009",\ + "-0.004, -0.004, 0.009",\ + "-0.004, -0.004, 0.009"); } fall_constraint(CONSTRAINT_TABLE) { - values("-0.065, -0.071, -0.175",\ - "-0.065, -0.071, -0.175",\ - "-0.065, -0.071, -0.175"); + values("-0.052, -0.059, -0.132",\ + "-0.052, -0.059, -0.132",\ + "-0.052, -0.059, -0.132"); } } } @@ -308,20 +308,20 @@ cell (sram_2_16_1_scn3me_subm){ timing_type :"min_pulse_width"; related_pin : clk; rise_constraint(scalar) { - values("3.125"); + values("2.344"); } fall_constraint(scalar) { - values("3.125"); + values("2.344"); } } timing(){ timing_type :"minimum_period"; related_pin : clk; rise_constraint(scalar) { - values("6.25"); + values("4.688"); } fall_constraint(scalar) { - values("6.25"); + values("4.688"); } } } diff --git a/technology/scn3me_subm/models/ff/nmos.sp b/technology/scn3me_subm/models/ff/nmos.sp index 1d5f74a6..70ffd267 100644 --- a/technology/scn3me_subm/models/ff/nmos.sp +++ b/technology/scn3me_subm/models/ff/nmos.sp @@ -5,6 +5,6 @@ * models from MOSIS or SCN3ME ********************************************* -.MODEL n NMOS (LEVEL=49 VTO=0.669845 KP=113.7771E-6 -+ NSUB=6E16 U0=461 GAMMA=0.5705 TOX=13.9n) +.MODEL n NMOS (LEVEL=49 VTHO=0.669845 KP=113.7771E-6 ++ NSUB=6E16 U0=461 K1=0.5705 TOX=13.9n) diff --git a/technology/scn3me_subm/models/ff/pmos.sp b/technology/scn3me_subm/models/ff/pmos.sp index 6ac2a4e6..ee0d9691 100644 --- a/technology/scn3me_subm/models/ff/pmos.sp +++ b/technology/scn3me_subm/models/ff/pmos.sp @@ -5,5 +5,5 @@ * models from MOSIS or SCN3ME ********************************************* -.MODEL p PMOS (LEVEL=49 VTO=-0.921340 KP=366.0244-6 -+ NSUB=6E16 U0=211 GAMMA=0.2370 TOX=13.9n) +.MODEL p PMOS (LEVEL=49 VTHO=-0.322431 KP=366.0244-6 ++ NSUB=6E16 U0=212 K1=0.0821 TOX=13.9n) diff --git a/technology/scn3me_subm/models/nom/nmos.sp b/technology/scn3me_subm/models/nom/nmos.sp index 23ecc1bc..d83289e8 100644 --- a/technology/scn3me_subm/models/nom/nmos.sp +++ b/technology/scn3me_subm/models/nom/nmos.sp @@ -5,5 +5,5 @@ * models from MOSIS or SCN3ME ********************************************* -.MODEL n NMOS (LEVEL=49 VTO=0.669845 KP=113.7771E-6 -+ NSUB=6E16 U0=458 GAMMA=0.5705 TOX=13.9n) +.MODEL n NMOS (LEVEL=49 VTHO=0.669845 KP=113.7771E-6 ++ NSUB=6E16 U0=458 K1=0.5705 TOX=13.9n) diff --git a/technology/scn3me_subm/models/nom/pmos.sp b/technology/scn3me_subm/models/nom/pmos.sp index c5bc4d59..ee0d9691 100644 --- a/technology/scn3me_subm/models/nom/pmos.sp +++ b/technology/scn3me_subm/models/nom/pmos.sp @@ -5,5 +5,5 @@ * models from MOSIS or SCN3ME ********************************************* -.MODEL p PMOS (LEVEL=49 VTO=-0.921340 KP=366.0244-6 -+ NSUB=6E16 U0=212 GAMMA=0.2370 TOX=13.9n) +.MODEL p PMOS (LEVEL=49 VTHO=-0.322431 KP=366.0244-6 ++ NSUB=6E16 U0=212 K1=0.0821 TOX=13.9n) diff --git a/technology/scn3me_subm/models/ss/nmos.sp b/technology/scn3me_subm/models/ss/nmos.sp index b882ad6d..667667cd 100644 --- a/technology/scn3me_subm/models/ss/nmos.sp +++ b/technology/scn3me_subm/models/ss/nmos.sp @@ -5,6 +5,6 @@ * models from MOSIS or SCN3ME ********************************************* -.MODEL n NMOS (LEVEL=49 VTO=0.669845 KP=113.7771E-6 -+ NSUB=6E16 U0=459 GAMMA=0.5705 TOX=13.9n) +.MODEL n NMOS (LEVEL=49 VTHO=0.669845 KP=113.7771E-6 ++ NSUB=6E16 U0=460 K1=0.5705 TOX=13.9n) diff --git a/technology/scn3me_subm/models/ss/pmos.sp b/technology/scn3me_subm/models/ss/pmos.sp index c5bc4d59..ee0d9691 100644 --- a/technology/scn3me_subm/models/ss/pmos.sp +++ b/technology/scn3me_subm/models/ss/pmos.sp @@ -5,5 +5,5 @@ * models from MOSIS or SCN3ME ********************************************* -.MODEL p PMOS (LEVEL=49 VTO=-0.921340 KP=366.0244-6 -+ NSUB=6E16 U0=212 GAMMA=0.2370 TOX=13.9n) +.MODEL p PMOS (LEVEL=49 VTHO=-0.322431 KP=366.0244-6 ++ NSUB=6E16 U0=212 K1=0.0821 TOX=13.9n)