blob: 389de2846e36d580dba1e9d08409622709efbd67 [file] [log] [blame]
import dbcopy
import pytrellis
import nets
# In the below filters: accept HF/HL/and HBSX fixed connections to be copied
# for now.
def exclude_abcd_conns(conn):
if isinstance(conn, pytrellis.FixedConnection):
src = conn.source
sink = conn.sink
else:
(src, sink) = conn
if (src.endswith("A") or "A_" in src
or src.endswith("B") or "B_" in src
or src.endswith("C") or "C_" in src
or src.endswith("D") or "D_" in src):
return False
elif (sink.endswith("A") or "A_" in sink
or sink.endswith("B") or "B_" in sink
or sink.endswith("C") or "C_" in sink
or sink.endswith("D") or "D_" in sink):
return False
else:
return True
def exclude_cd_conns(conn):
if isinstance(conn, pytrellis.FixedConnection):
src = conn.source
sink = conn.sink
else:
(src, sink) = conn
if src.endswith("C") or "C_" in src or src.endswith("D") or "D_" in src:
return False
elif sink.endswith("C") or "C_" in sink or sink.endswith("D") or "D_" in sink:
return False
else:
return True
# URC0 has same routing as `CIB_PIC_T`, but the globals are unique.
def exclude_globals(conn):
if isinstance(conn, pytrellis.FixedConnection):
src = conn.source
sink = conn.sink
else:
(src, sink) = conn
return not (src.startswith("G_") and (sink.startswith("BRANCH_") or sink.startswith("G_")))
def include_globals_only(conn):
return not exclude_globals(conn)
# Key: (Mux Predicate, Conn Predicate)
pio_tiles_l = {
"PIC_LS0" : (exclude_cd_conns, exclude_cd_conns),
"PIC_L0_VREF3" : (lambda a: True, lambda c: True),
"PIC_L0_DUMMY" : (exclude_abcd_conns, exclude_abcd_conns),
"LLC0" : (exclude_abcd_conns, exclude_abcd_conns),
}
pio_tiles_r = {
"PIC_RS0" : (exclude_cd_conns, exclude_cd_conns),
"PIC_R0_DUMMY" : (exclude_abcd_conns, exclude_abcd_conns),
"LRC0" : (exclude_abcd_conns, exclude_abcd_conns),
}
pio_tiles_cib = {
"URC0" : (exclude_globals, exclude_globals)
}
def main():
pytrellis.load_database("../../../database")
for dest, pred in pio_tiles_l.items():
dbcopy.copy_muxes_with_predicate("MachXO2", "LCMXO2-1200HC", "PIC_L0", dest, pred[0])
dbcopy.copy_conns_with_predicate("MachXO2", "LCMXO2-1200HC", "PIC_L0", dest, pred[1])
for dest, pred in pio_tiles_r.items():
dbcopy.copy_muxes_with_predicate("MachXO2", "LCMXO2-1200HC", "PIC_R0", dest, pred[0])
dbcopy.copy_conns_with_predicate("MachXO2", "LCMXO2-1200HC", "PIC_R0", dest, pred[1])
for dest, pred in pio_tiles_cib.items():
dbcopy.copy_muxes_with_predicate("MachXO2", "LCMXO2-1200HC", "CIB_PIC_T0", dest, pred[0])
dbcopy.copy_conns_with_predicate("MachXO2", "LCMXO2-1200HC", "CIB_PIC_T0", dest, pred[1])
if __name__ == "__main__":
main()