diff --git a/gatemate/chip.py b/gatemate/chip.py index 46a0135..604e5e3 100644 --- a/gatemate/chip.py +++ b/gatemate/chip.py @@ -554,10 +554,26 @@ def get_timings(name): #val["del_preplace"] = convert_delay(timing_data.timing_delays.del_preplace.val) + cnt_comb_cy1 = 1 + cnt_comb_py1 = 1 for i1 in range(42): # [1..42] d = timing_data.timing_delays.del_CPE_timing_mod[i1] if d.name == "": # not used continue + if d.name == "comb12_compout_COUTY": + if cnt_comb_cy1 == 1: + d.name = "comb12_compout_COUTY1" + cnt_comb_cy1 = 2 + else: + d.name = "comb12_compout_COUTY2" + cnt_comb_cy1 = 1 + if d.name == "comb12_compout_POUTY": + if cnt_comb_py1 == 1: + d.name = "comb12_compout_POUTY1" + cnt_comb_py1 = 2 + else: + d.name = "comb12_compout_POUTY2" + cnt_comb_py1 = 1 val[d.name] = convert_delay(d.val) return val diff --git a/gatemate/die.py b/gatemate/die.py index e972a01..032626c 100644 --- a/gatemate/die.py +++ b/gatemate/die.py @@ -3545,10 +3545,10 @@ def get_mux_connections_for_type(type): create_mux("CPE.IN4_int", "CPE.TI4_int", 1, 0, False, "C_I2", False, delay="del_dummy") create_mux("CPE.IN6_int", "CPE.TI6_int", 1, 0, False, "C_I3", False, delay="del_dummy") create_mux("CPE.IN8_int", "CPE.TI8_int", 1, 0, False, "C_I4", False, delay="del_dummy") - create_mux("CPE.PINY1", "CPE.TI2_int", 1, 1, False, "C_I1", False, delay="del_dummy") - create_mux("CPE.CINX", "CPE.TI4_int", 1, 1, False, "C_I2", False, delay="del_dummy") - create_mux("CPE.PINY1", "CPE.TI6_int", 1, 1, False, "C_I3", False, delay="del_dummy") - create_mux("CPE.PINX", "CPE.TI8_int", 1, 1, False, "C_I4", False, delay="del_dummy") + create_mux("CPE.PINY1", "CPE.TI2_int", 1, 1, False, "C_I1", False, delay="PINY1_IN2_6") + create_mux("CPE.CINX", "CPE.TI4_int", 1, 1, False, "C_I2", False, delay="CINX_IN4") + create_mux("CPE.PINY1", "CPE.TI6_int", 1, 1, False, "C_I3", False, delay="PINY1_IN2_6") + create_mux("CPE.PINX", "CPE.TI8_int", 1, 1, False, "C_I4", False, delay="PINX_IN8") create_mux("CPE.IN1_int", "CPE.D0_00_int", 1, 0, False, "LUT2_00", False, delay="del_dummy") create_mux("CPE.TI2_int", "CPE.D1_00_int", 1, 0, False, "LUT2_00", False, delay="del_dummy") @@ -3585,43 +3585,43 @@ def get_mux_connections_for_type(type): create_mux("CPE.EN", "CPE.EN_int", 1, 0, False, "C_ENSEL", False, delay="del_dummy") create_mux("CPE.PINY2", "CPE.EN_int", 1, 1, False, "C_ENSEL", False, delay="del_dummy") - create_mux("CPE.CINX", "CPE.COUTX", 1, 0, False, "CPE.C_CX_I", True, delay="del_dummy", resource=C_CX_I, block=IS_MULT | IS_ADDF) - create_mux("CPE.CINY1", "CPE.COUTY1", 1, 0, False, "CPE.C_CY1_I", True, delay="del_dummy", resource=C_CY1_I, block=IS_ADDF) - create_mux("CPE.CINY2", "CPE.COUTY2", 1, 0, False, "CPE.C_CY2_I", True, delay="del_dummy", resource=C_CY2_I, block=IS_MULT) - create_mux("CPE.PINX", "CPE.POUTX", 1, 0, False, "CPE.C_PX_I", True, delay="del_dummy", resource=C_PX_I, block=IS_MULT | IS_COMP) - create_mux("CPE.PINY1", "CPE.POUTY1", 1, 0, False, "CPE.C_PY1_I", True, delay="del_dummy", resource=C_PY1_I, block=IS_COMP) - create_mux("CPE.PINY2", "CPE.POUTY2", 1, 0, False, "CPE.C_PY2_I", True, delay="del_dummy", resource=C_PY2_I, block=IS_MULT) + create_mux("CPE.CINX", "CPE.COUTX", 1, 0, False, "CPE.C_CX_I", True, delay="_ROUTING_CINX_COUTX", resource=C_CX_I, block=IS_MULT | IS_ADDF) + create_mux("CPE.CINY1", "CPE.COUTY1", 1, 0, False, "CPE.C_CY1_I", True, delay="_ROUTING_CINY1_COUTY1", resource=C_CY1_I, block=IS_ADDF) + create_mux("CPE.CINY2", "CPE.COUTY2", 1, 0, False, "CPE.C_CY2_I", True, delay="_ROUTING_CINY2_COUTY2", resource=C_CY2_I, block=IS_MULT) + create_mux("CPE.PINX", "CPE.POUTX", 1, 0, False, "CPE.C_PX_I", True, delay="_ROUTING_PINX_POUTX", resource=C_PX_I, block=IS_MULT | IS_COMP) + create_mux("CPE.PINY1", "CPE.POUTY1", 1, 0, False, "CPE.C_PY1_I", True, delay="_ROUTING_PINY1_POUTY1", resource=C_PY1_I, block=IS_COMP) + create_mux("CPE.PINY2", "CPE.POUTY2", 1, 0, False, "CPE.C_PY2_I", True, delay="_ROUTING_PINY2_POUTY2", resource=C_PY2_I, block=IS_MULT) - create_mux("CPE.OUT1_IN_int", "CPE.CX_OUT", 1, 0, False, "CPE.C_SELX", True, delay="del_dummy", resource=C_SELX) - create_mux("CPE.OUT2_IN_int", "CPE.CX_OUT", 1, 1, False, "CPE.C_SELX", True, delay="del_dummy", resource=C_SELX) - create_mux("CPE.OUT1_IN_int", "CPE.CY1_OUT", 1, 1, False, "CPE.C_SELY1", True, delay="del_dummy", resource=C_SELY1) - create_mux("CPE.OUT2_IN_int", "CPE.CY1_OUT", 1, 0, False, "CPE.C_SELY1", True, delay="del_dummy", resource=C_SELY1) - create_mux("CPE.OUT1_IN_int", "CPE.CY2_OUT", 1, 0, False, "CPE.C_SELY2", True, delay="del_dummy", resource=C_SELY2) - create_mux("CPE.OUT2_IN_int", "CPE.CY2_OUT", 1, 1, False, "CPE.C_SELY2", True, delay="del_dummy", resource=C_SELY2) - create_mux("CPE.OUT1_IN_int", "CPE.PX_OUT", 1, 1, False, "CPE.C_SELX", True, delay="del_dummy", resource=C_SELX) - create_mux("CPE.OUT2_IN_int", "CPE.PX_OUT", 1, 0, False, "CPE.C_SELX", True, delay="del_dummy", resource=C_SELX) - create_mux("CPE.OUT1_IN_int", "CPE.PY1_OUT", 1, 0, False, "CPE.C_SELY1", True, delay="del_dummy", resource=C_SELY1) - create_mux("CPE.OUT2_IN_int", "CPE.PY1_OUT", 1, 1, False, "CPE.C_SELY1", True, delay="del_dummy", resource=C_SELY1) - create_mux("CPE.OUT1_IN_int", "CPE.PY2_OUT", 1, 1, False, "CPE.C_SELY2", True, delay="del_dummy", resource=C_SELY2) - create_mux("CPE.OUT2_IN_int", "CPE.PY2_OUT", 1, 0, False, "CPE.C_SELY2", True, delay="del_dummy", resource=C_SELY2) + create_mux("CPE.OUT1_IN_int", "CPE.CX_OUT", 1, 0, False, "CPE.C_SELX", True, delay="comb12_COUTX", resource=C_SELX) + create_mux("CPE.OUT2_IN_int", "CPE.CX_OUT", 1, 1, False, "CPE.C_SELX", True, delay="comb12_COUTX", resource=C_SELX) + create_mux("CPE.OUT1_IN_int", "CPE.CY1_OUT", 1, 1, False, "CPE.C_SELY1", True, delay="comb12_COUTY1", resource=C_SELY1) + create_mux("CPE.OUT2_IN_int", "CPE.CY1_OUT", 1, 0, False, "CPE.C_SELY1", True, delay="comb12_COUTY1", resource=C_SELY1) + create_mux("CPE.OUT1_IN_int", "CPE.CY2_OUT", 1, 0, False, "CPE.C_SELY2", True, delay="comb12_COUTY2", resource=C_SELY2) + create_mux("CPE.OUT2_IN_int", "CPE.CY2_OUT", 1, 1, False, "CPE.C_SELY2", True, delay="comb12_COUTY2", resource=C_SELY2) + create_mux("CPE.OUT1_IN_int", "CPE.PX_OUT", 1, 1, False, "CPE.C_SELX", True, delay="comb12_POUTX", resource=C_SELX) + create_mux("CPE.OUT2_IN_int", "CPE.PX_OUT", 1, 0, False, "CPE.C_SELX", True, delay="comb12_POUTX", resource=C_SELX) + create_mux("CPE.OUT1_IN_int", "CPE.PY1_OUT", 1, 0, False, "CPE.C_SELY1", True, delay="comb12_POUTY1", resource=C_SELY1) + create_mux("CPE.OUT2_IN_int", "CPE.PY1_OUT", 1, 1, False, "CPE.C_SELY1", True, delay="comb12_POUTY1", resource=C_SELY1) + create_mux("CPE.OUT1_IN_int", "CPE.PY2_OUT", 1, 1, False, "CPE.C_SELY2", True, delay="comb12_POUTY2", resource=C_SELY2) + create_mux("CPE.OUT2_IN_int", "CPE.PY2_OUT", 1, 0, False, "CPE.C_SELY2", True, delay="comb12_POUTY2", resource=C_SELY2) - create_mux("CPE.CINY1", "CPE.CIY12", 1, 0, False, "CPE.C_Y12", True, delay="del_dummy", resource=C_Y12) - create_mux("CPE.CINY2", "CPE.CIY12", 1, 1, False, "CPE.C_Y12", True, delay="del_dummy", resource=C_Y12) - create_mux("CPE.PINY1", "CPE.PIY12", 1, 0, False, "CPE.C_Y12", True, delay="del_dummy", resource=C_Y12) - create_mux("CPE.PINY2", "CPE.PIY12", 1, 1, False, "CPE.C_Y12", True, delay="del_dummy", resource=C_Y12) + create_mux("CPE.CINY1", "CPE.CIY12", 1, 0, False, "CPE.C_Y12", True, delay="_ROUTING_CINY1_COUTX", resource=C_Y12) + create_mux("CPE.CINY2", "CPE.CIY12", 1, 1, False, "CPE.C_Y12", True, delay="_ROUTING_CINY2_COUTX", resource=C_Y12) + create_mux("CPE.PINY1", "CPE.PIY12", 1, 0, False, "CPE.C_Y12", True, delay="_ROUTING_PINY1_POUTX", resource=C_Y12) + create_mux("CPE.PINY2", "CPE.PIY12", 1, 1, False, "CPE.C_Y12", True, delay="_ROUTING_PINY1_POUTX", resource=C_Y12) # No data in timing info for this - create_mux("CPE.CIY12", "CPE.CX_OUT2", 1, 1, False, "CPE.C_SELX", True, delay="del_dummy", resource=C_SELX) - create_mux("CPE.COMPOUT_IN_int", "CPE.CX_OUT2", 1, 0, False, "CPE.C_SELX", True, delay="del_dummy", resource=C_SELX) - create_mux("CPE.CINX", "CPE.CY1_OUT2", 1, 1, False, "CPE.C_SELY1", True, delay="del_dummy", resource=C_SELY1) - create_mux("CPE.COMPOUT_IN_int", "CPE.CY1_OUT2", 1, 0, False, "CPE.C_SELY1", True, delay="del_dummy", resource=C_SELY1) - create_mux("CPE.CINX", "CPE.CY2_OUT2", 1, 1, False, "CPE.C_SELY2", True, delay="del_dummy", resource=C_SELY2) - create_mux("CPE.COMPOUT_IN_int", "CPE.CY2_OUT2", 1, 0, False, "CPE.C_SELY2", True, delay="del_dummy", resource=C_SELY2) - create_mux("CPE.PIY12", "CPE.PX_OUT2", 1, 1, False, "CPE.C_SELX", True, delay="del_dummy", resource=C_SELX) - create_mux("CPE.COMPOUT_IN_int", "CPE.PX_OUT2", 1, 0, False, "CPE.C_SELX", True, delay="del_dummy", resource=C_SELX) - create_mux("CPE.PINX", "CPE.PY1_OUT2", 1, 1, False, "CPE.C_SELY1", True, delay="del_dummy", resource=C_SELY1) - create_mux("CPE.COMPOUT_IN_int", "CPE.PY1_OUT2", 1, 0, False, "CPE.C_SELY1", True, delay="del_dummy", resource=C_SELY1) - create_mux("CPE.PINX", "CPE.PY2_OUT2", 1, 1, False, "CPE.C_SELY2", True, delay="del_dummy", resource=C_SELY2) - create_mux("CPE.COMPOUT_IN_int", "CPE.PY2_OUT2", 1, 0, False, "CPE.C_SELY2", True, delay="del_dummy", resource=C_SELY2) + create_mux("CPE.CIY12", "CPE.CX_OUT2", 1, 1, False, "CPE.C_SELX", True, delay="del_dummy", resource=C_SELX) + create_mux("CPE.COMPOUT_IN_int", "CPE.CX_OUT2", 1, 0, False, "CPE.C_SELX", True, delay="comb12_compout_COUTX", resource=C_SELX) + create_mux("CPE.CINX", "CPE.CY1_OUT2", 1, 1, False, "CPE.C_SELY1", True, delay="_ROUTING_CINX_COUTY1", resource=C_SELY1) + create_mux("CPE.COMPOUT_IN_int", "CPE.CY1_OUT2", 1, 0, False, "CPE.C_SELY1", True, delay="comb12_compout_COUTY1", resource=C_SELY1) + create_mux("CPE.CINX", "CPE.CY2_OUT2", 1, 1, False, "CPE.C_SELY2", True, delay="_ROUTING_CINX_COUTY2", resource=C_SELY2) + create_mux("CPE.COMPOUT_IN_int", "CPE.CY2_OUT2", 1, 0, False, "CPE.C_SELY2", True, delay="comb12_compout_COUTY2", resource=C_SELY2) + create_mux("CPE.PIY12", "CPE.PX_OUT2", 1, 1, False, "CPE.C_SELX", True, delay="del_dummy", resource=C_SELX) + create_mux("CPE.COMPOUT_IN_int", "CPE.PX_OUT2", 1, 0, False, "CPE.C_SELX", True, delay="comb12_compout_POUTX", resource=C_SELX) + create_mux("CPE.PINX", "CPE.PY1_OUT2", 1, 1, False, "CPE.C_SELY1", True, delay="_ROUTING_PINX_POUTY1", resource=C_SELY1) + create_mux("CPE.COMPOUT_IN_int", "CPE.PY1_OUT2", 1, 0, False, "CPE.C_SELY1", True, delay="comb12_compout_POUTY1", resource=C_SELY1) + create_mux("CPE.PINX", "CPE.PY2_OUT2", 1, 1, False, "CPE.C_SELY2", True, delay="_ROUTING_PINX_POUTY2", resource=C_SELY2) + create_mux("CPE.COMPOUT_IN_int", "CPE.PY2_OUT2", 1, 0, False, "CPE.C_SELY2", True, delay="comb12_compout_POUTY2", resource=C_SELY2) create_mux("CPE.CX_OUT", "CPE.CX_VAL", 1, 0, False, "CPE.C_SEL_C", True, delay="del_dummy", resource=C_SEL_C) create_mux("CPE.CY1_OUT", "CPE.CY1_VAL", 1, 0, False, "CPE.C_SEL_C", True, delay="del_dummy", resource=C_SEL_C) @@ -3644,26 +3644,6 @@ def get_mux_connections_for_type(type): create_mux("CPE.PY1_VAL", "CPE.POUTY1", 1, 1, False, "CPE.C_PY1_I", True, delay="del_dummy", resource=C_PY1_I, block=IS_COMP) create_mux("CPE.PY2_VAL", "CPE.POUTY2", 1, 1, False, "CPE.C_PY2_I", True, delay="del_dummy", resource=C_PY2_I, block=IS_MULT) - - #create_mux("CPE.PINX", "CPE.POUTX", 1, 1, False, "PASS", False, delay="_ROUTING_PINX_POUTX" , data=0, mask=C_PX_I | IS_MULT | IS_COMP) - #create_mux("CPE.CINX", "CPE.COUTX", 1, 1, False, "PASS", False, delay="_ROUTING_CINX_COUTX" , data=0, mask=C_CX_I | IS_MULT | IS_ADDF) - #create_mux("CPE.PINY1", "CPE.POUTY1", 1, 1, False, "PASS", False, delay="_ROUTING_PINY1_POUTY1" , data=0, mask=C_PY1_I | IS_COMP) - #create_mux("CPE.PINY2", "CPE.POUTY2", 1, 1, False, "PASS", False, delay="_ROUTING_PINY2_POUTY2" , data=0, mask=C_PY2_I | IS_MULT) - #create_mux("CPE.CINY1", "CPE.COUTY1", 1, 1, False, "PASS", False, delay="_ROUTING_CINY1_COUTY1" , data=0, mask=C_CY1_I | IS_ADDF) - #create_mux("CPE.CINY2", "CPE.COUTY2", 1, 1, False, "PASS", False, delay="_ROUTING_CINY2_COUTY2" , data=0, mask=C_CY2_I | IS_MULT) - - #create_mux("CPE.CINY1", "CPE.COUTX", 1, 1, False, "PASS", False, delay="_ROUTING_CINY1_COUTX" , data=C_SEL_C | C_SELX | C_CX_I, mask=C_Y12 | C_SEL_C | C_SELX | C_CX_I | IS_MULT | IS_ADDF) - #create_mux("CPE.CINY2", "CPE.COUTX", 1, 1, False, "PASS", False, delay="_ROUTING_CINY2_COUTX" , data=C_Y12 | C_SEL_C | C_SELX | C_CX_I, mask=C_Y12 | C_SEL_C | C_SELX | C_CX_I | IS_MULT | IS_ADDF) - - #create_mux("CPE.CINX", "CPE.COUTY1", 1, 1, False, "PASS", False, delay="_ROUTING_CINX_COUTY1" , data=C_SEL_C | C_SELY1 | C_CY1_I, mask=C_SEL_C | C_SELY1 | C_CY1_I | IS_ADDF) - #create_mux("CPE.CINX", "CPE.COUTY2", 1, 1, False, "PASS", False, delay="_ROUTING_CINX_COUTY2" , data=C_SEL_C | C_SELY2 | C_CY2_I, mask=C_SEL_C | C_SELY2 | C_CY2_I | IS_MULT) - - #create_mux("CPE.PINY1", "CPE.POUTX", 1, 1, False, "PASS", False, delay="_ROUTING_PINY1_POUTX" , data=C_SEL_P | C_SELX | C_PX_I, mask=C_Y12 | C_SEL_P | C_SELX | C_PX_I | IS_MULT | IS_COMP) - #create_mux("CPE.PINY2", "CPE.POUTX", 1, 1, False, "PASS", False, delay="_ROUTING_PINY1_POUTX" , data=C_Y12 | C_SEL_P | C_SELX | C_PX_I, mask=C_Y12 | C_SEL_P | C_SELX | C_PX_I | IS_MULT | IS_COMP) - - #create_mux("CPE.PINX", "CPE.POUTY1", 1, 1, False, "PASS", False, delay="_ROUTING_PINX_POUTY1" , data=C_SEL_P | C_SELY1 | C_PY1_I, mask=C_SEL_P | C_SELY1 | C_PY1_I | IS_COMP) - #create_mux("CPE.PINX", "CPE.POUTY2", 1, 1, False, "PASS", False, delay="_ROUTING_PINX_POUTY2" , data=C_SEL_P | C_SELY2 | C_PY2_I, mask=C_SEL_P | C_SELY2 | C_PY2_I | IS_MULT) - for p in range(1,13): plane = f"{p:02d}" for i in range(8):