diff options
-rw-r--r-- | icebox/Makefile | 2 | ||||
-rw-r--r-- | icebox/icebox.py | 133 | ||||
-rwxr-xr-x | icebox/icebox_chipdb.py | 5 | ||||
-rw-r--r-- | icefuzz/fuzzconfig.py | 13 | ||||
-rw-r--r-- | icefuzz/icecube.sh | 10 |
5 files changed, 142 insertions, 21 deletions
diff --git a/icebox/Makefile b/icebox/Makefile index 0948852..446fb18 100644 --- a/icebox/Makefile +++ b/icebox/Makefile @@ -1,6 +1,6 @@ include ../config.mk -all: chipdb-1k.txt chipdb-8k.txt # chipdb-384.txt +all: chipdb-384.txt chipdb-1k.txt chipdb-8k.txt chipdb-384.txt: icebox.py iceboxdb.py icebox_chipdb.py python3 icebox_chipdb.py -3 > chipdb-384.new diff --git a/icebox/icebox.py b/icebox/icebox.py index 192b245..a39fa53 100644 --- a/icebox/icebox.py +++ b/icebox/icebox.py @@ -169,7 +169,19 @@ class iceconfig: if 25 <= y <= 33: src_y = 25 entries.append((x, src_y, x, y)) return entries -#384? + + if self.device == "384": + entries = list() + for x in range(self.max_x+1): + for y in range(self.max_y+1): + src_y = None + if 0 <= y <= 2: src_y = 2 #384? + if 3 <= y <= 4: src_y = 3 #384? + if 5 <= y <= 6: src_y = 6 #384? + if 7 <= y <= 9: src_y = 7 #384? + entries.append((x, src_y, x, y)) + return entries + assert False def tile_db(self, x, y): @@ -1056,8 +1068,17 @@ extra_bits_db = { (1, 871, 270): ("padin_glb_netwk", "5"), (0, 870, 271): ("padin_glb_netwk", "6"), (0, 871, 271): ("padin_glb_netwk", "7"), + }, + "384": { + (0, 180, 78): ("padin_glb_netwk", "0"), + (0, 181, 78): ("padin_glb_netwk", "1"), + (1, 180, 79): ("padin_glb_netwk", "2"), + (1, 181, 79): ("padin_glb_netwk", "3"), + (1, 180, 78): ("padin_glb_netwk", "4"), + (1, 181, 78): ("padin_glb_netwk", "5"), + (0, 180, 79): ("padin_glb_netwk", "6"), + (0, 181, 79): ("padin_glb_netwk", "7"), } -#384? } gbufin_db = { @@ -1080,8 +1101,17 @@ gbufin_db = { (33, 17, 2), (16, 0, 5), (16, 33, 4), + ], + "384": [ + ( 7, 4, 7), + ( 0, 4, 6), + ( 4, 9, 1), + ( 4, 0, 0), + ( 0, 5, 3), + ( 7, 5, 2), + ( 3, 0, 5), + ( 3, 9, 4), ] -#384? } iolatch_db = { @@ -1097,7 +1127,12 @@ iolatch_db = { (18, 0), (15, 33), ], -#384? + "384": [ + ( 0, 3), #384? + ( 7, 5), #384? + ( 2, 0), #384? + ( 5, 9), #384? + ], } warmbootinfo_db = { @@ -1110,8 +1145,12 @@ warmbootinfo_db = { "BOOT": ( 31, 0, "fabout" ), "S0": ( 33, 1, "fabout" ), "S1": ( 33, 2, "fabout" ), + }, + "384": { + "BOOT": ( 6, 0, "fabout" ), #384? + "S0": ( 7, 1, "fabout" ), + "S1": ( 7, 2, "fabout" ), } -#384? } noplls_db = { @@ -1407,7 +1446,6 @@ pllinfo_db = { "SDI": ( 22, 33, "fabout"), "SCLK": ( 21, 33, "fabout"), }, -#384? } padin_pio_db = { @@ -1430,8 +1468,17 @@ padin_pio_db = { (33, 17, 0), (16, 0, 1), (16, 33, 1), + ], + "384": [ + ( 7, 4, 1), + ( 0, 4, 1), + ( 4, 9, 0), + ( 4, 0, 0), #QFN32: no pin?! + ( 0, 5, 0), + ( 7, 5, 0), + ( 3, 0, 1), #QFN32: no pin?! + ( 3, 9, 1), ] -#384? } ieren_db = { @@ -1758,8 +1805,47 @@ ieren_db = { (33, 30, 0, 33, 30, 0), (33, 30, 1, 33, 30, 1), (33, 31, 0, 33, 31, 0), - ] -#384? + ], + "384": [ + # IO-block (X, Y, Z) <-> IeRen-block (X, Y, Z) + ( 0, 1, 0, 0, 0, 0), #384? + ( 0, 1, 1, 0, 1, 0), #384? + ( 0, 2, 0, 0, 2, 0), #384? + ( 0, 2, 1, 0, 2, 0), #384? + ( 0, 4, 0, 0, 4, 0), #384? + ( 0, 4, 1, 0, 4, 0), #384? + ( 0, 5, 0, 0, 5, 0), #384? + ( 0, 5, 1, 0, 5, 0), #384? + ( 0, 6, 0, 0, 6, 0), #384? + ( 0, 6, 1, 0, 6, 0), #384? + ( 0, 7, 0, 0, 7, 0), #384? + ( 0, 7, 1, 0, 7, 0), #384? + ( 2, 9, 0, 2, 9, 0), #384? + ( 2, 9, 1, 2, 9, 0), #384? + ( 3, 0, 0, 3, 0, 0), #384? + ( 3, 0, 1, 3, 0, 0), #384? + ( 3, 9, 0, 3, 9, 0), #384? + ( 3, 9, 1, 3, 9, 0), #384? + ( 4, 0, 0, 4, 0, 0), #384? + ( 4, 0, 1, 4, 0, 0), #384? + ( 4, 9, 0, 4, 9, 0), #384? + ( 4, 9, 1, 4, 9, 0), #384? + ( 5, 0, 0, 5, 0, 0), #384? + ( 5, 0, 1, 5, 0, 0), #384? + ( 5, 9, 0, 5, 9, 0), #384? + ( 5, 9, 1, 5, 9, 0), #384? + ( 6, 0, 0, 6, 0, 0), #384? + ( 6, 0, 1, 6, 0, 0), #384? + ( 6, 9, 0, 6, 9, 0), #384? + ( 6, 9, 1, 6, 9, 0), #384? + ( 7, 3, 1, 7, 3, 0), #384? + ( 7, 4, 0, 7, 4, 0), #384? + ( 7, 4, 1, 7, 4, 0), #384? + ( 7, 5, 0, 7, 5, 0), #384? + ( 7, 5, 1, 7, 5, 0), #384? + ( 7, 6, 0, 7, 6, 0), #384? + ( 7, 6, 1, 7, 6, 0), #384? + ], } pinloc_db = { @@ -3676,8 +3762,30 @@ pinloc_db = { ("T14", 23, 0, 0), ("T15", 22, 0, 1), ("T16", 27, 0, 0), + ], + "384-qn32": [ + ( "1", 0, 7, 0), + ( "2", 0, 7, 1), + ( "5", 0, 5, 1), + ( "6", 0, 5, 0), + ( "7", 0, 4, 0), + ( "8", 0, 4, 1), + ( "12", 5, 0, 0), + ( "13", 5, 0, 1), + ( "14", 6, 0, 1), + ( "15", 6, 0, 0), + ( "18", 7, 4, 0), + ( "19", 7, 4, 1), + ( "20", 7, 5, 0), + ( "22", 7, 6, 0), + ( "23", 7, 6, 1), + ( "26", 6, 9, 0), + ( "27", 5, 9, 0), + ( "29", 4, 9, 0), + ( "30", 3, 9, 1), + ( "31", 2, 9, 0), + ( "32", 2, 9, 1), ] -#384? } iotile_full_db = parse_db(iceboxdb.database_io_txt) @@ -3723,9 +3831,10 @@ logictile_db.append([["B1[50]"], "CarryInSet"]) logictile_8k_db.append([["B1[49]"], "buffer", "carry_in", "carry_in_mux"]) logictile_8k_db.append([["B1[50]"], "CarryInSet"]) -#384? +logictile_384_db.append([["B1[49]"], "buffer", "carry_in", "carry_in_mux"]) #384? +logictile_384_db.append([["B1[50]"], "CarryInSet"]) -for db in [iotile_l_db, iotile_r_db, iotile_t_db, iotile_b_db, logictile_db, logictile_8k_db, rambtile_db, ramttile_db, rambtile_8k_db, ramttile_8k_db]: +for db in [iotile_l_db, iotile_r_db, iotile_t_db, iotile_b_db, logictile_db, logictile_8k_db, logictile_384_db, rambtile_db, ramttile_db, rambtile_8k_db, ramttile_8k_db]: for entry in db: if entry[1] in ("buffer", "routing"): entry[2] = netname_normalize(entry[2], ramb=(db == rambtile_db), ramt=(db == ramttile_db), ramb_8k=(db == rambtile_8k_db), ramt_8k=(db == ramttile_8k_db)) diff --git a/icebox/icebox_chipdb.py b/icebox/icebox_chipdb.py index 299ce5c..7988e6a 100755 --- a/icebox/icebox_chipdb.py +++ b/icebox/icebox_chipdb.py @@ -254,8 +254,9 @@ def print_tile_nonrouting_bits(tile_type, idx): print_tile_nonrouting_bits("logic", list(ic.logic_tiles.keys())[0]) print_tile_nonrouting_bits("io", list(ic.io_tiles.keys())[0]) -print_tile_nonrouting_bits("ramb", list(ic.ramb_tiles.keys())[0]) -print_tile_nonrouting_bits("ramt", list(ic.ramt_tiles.keys())[0]) +if not mode_384: + print_tile_nonrouting_bits("ramb", list(ic.ramb_tiles.keys())[0]) + print_tile_nonrouting_bits("ramt", list(ic.ramt_tiles.keys())[0]) print(".extra_cell 0 0 WARMBOOT") for key in sorted(icebox.warmbootinfo_db[ic.device]): diff --git a/icefuzz/fuzzconfig.py b/icefuzz/fuzzconfig.py index 6bb1338..19cbec3 100644 --- a/icefuzz/fuzzconfig.py +++ b/icefuzz/fuzzconfig.py @@ -30,13 +30,16 @@ elif os.getenv('ICE384PINS'): num_ramb40 = 0 pins = """ - 1 2 5 6 7 8 - 12 13 14 15 - 18 19 20 22 23 - 26 27 29 30 31 32 + A1 A2 A3 A4 A5 A6 A7 + B1 B2 B3 B4 + C1 C2 C4 C5 C6 C7 + D1 D2 D3 D4 D6 D7 + E2 E6 E7 + F1 F2 F3 F4 F5 F6 F7 + G1 G3 G4 G6 """.split() - gpins = "6 8 19 20 29 30".split() + gpins = "B4 C4 D2 D6 D7 E2 F3 F4".split() else: num_ramb40 = 16 diff --git a/icefuzz/icecube.sh b/icefuzz/icecube.sh index 991c53f..a13d440 100644 --- a/icefuzz/icecube.sh +++ b/icefuzz/icecube.sh @@ -42,7 +42,7 @@ if [ "$1" == "-8k" ]; then fi if [ "$1" == "-384" ]; then - ICEDEV=lp384-qn32 + ICEDEV=lp384-cm49 shift fi @@ -101,6 +101,14 @@ case "${ICEDEV:-hx1k-tq144}" in iCEPACKAGE="QN32" iCE40DEV="iCE40LP384" ;; + lp384-cm36) + iCEPACKAGE="CM36" + iCE40DEV="iCE40LP384" + ;; + lp384-cm49) + iCEPACKAGE="CM49" + iCE40DEV="iCE40LP384" + ;; lp1k-swg16tr) iCEPACKAGE="SWG16TR" iCE40DEV="iCE40LP1K" |