|  | import os | 
|  |  | 
|  | num = 20 | 
|  |  | 
|  | device_class = os.getenv("ICEDEVICE") | 
|  |  | 
|  | if device_class == "8k": | 
|  | num_ramb40 = 32 | 
|  | num_iobanks = 4 | 
|  | num_dsp = 0 | 
|  |  | 
|  | pins=""" | 
|  | A1  A2          A5  A6  A7      A9  A10 A11             A15 A16 | 
|  | B1  B2  B3  B4  B5  B6  B7  B8  B9  B10 B11 B12 B13 B14 B15 B16 | 
|  | C1  C2  C3  C4  C5  C6  C7  C8  C9  C10 C11 C12 C13 C14     C16 | 
|  | D1  D2  D3  D4  D5  D6  D7  D8  D9  D10 D11     D13 D14 D15 D16 | 
|  | E2  E3  E4  E5  E6          E9  E10 E11     E13 E14     E16 | 
|  | F1  F2  F3  F4  F5      F7      F9      F11 F12 F13 F14 F15 F16 | 
|  | G1  G2  G3  G4  G5                  G10 G11 G12 G13 G14 G15 G16 | 
|  | H1  H2  H3  H4  H5  H6                  H11 H12 H13 H14     H16 | 
|  | J1  J2  J3  J4  J5                  J10 J11 J12 J13 J14 J15 J16 | 
|  | K1      K3  K4  K5              K9      K11 K12 K13 K14 K15 K16 | 
|  | L1      L3  L4  L5  L6  L7      L9  L10 L11 L12 L13 L14     L16 | 
|  | M1  M2  M3  M4  M5  M6  M7  M8  M9      M11 M12 M13 M14 M15 M16 | 
|  | N2  N3  N4  N5  N6  N7      N9  N10     N12             N16 | 
|  | P1  P2      P4  P5  P6  P7  P8  P9  P10 P11 P12 P13 P14 P15 P16 | 
|  | R1  R2  R3  R4  R5  R6          R9  R10 R11 R12     R14 R15 R16 | 
|  | T1  T2  T3      T5  T6  T7  T8  T9  T10 T11     T13 T14 T15 T16 | 
|  | """.split() | 
|  |  | 
|  | gpins = "C8 F7 G1 H11 H16 I3 K9 R9".split() | 
|  |  | 
|  | elif device_class == "384": | 
|  | num_ramb40 = 0 | 
|  | num_iobanks = 3 | 
|  | num_dsp = 0 | 
|  |  | 
|  | pins = """ | 
|  | 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 = "B4 C4 D2 D6 D7 E2 F3 F4".split() | 
|  |  | 
|  | elif device_class == "1k": | 
|  | num_ramb40 = 16 | 
|  | num_iobanks = 4 | 
|  | num_dsp = 0 | 
|  |  | 
|  | pins = """ | 
|  | 1 2 3 4 7 8 9 10 11 12 19 22 23 24 25 26 28 29 31 32 33 34 | 
|  | 37 38 41 42 43 44 45 47 48 52 56 58 60 61 62 63 64 | 
|  | 73 74 75 76 78 79 80 81 87 88 90 91 95 96 97 98 101 102 104 105 106 107 | 
|  | 112 113 114 115 116 117 118 119 120 121 122 134 135 136 137 138 139 141 142 143 144 | 
|  | """.split() | 
|  |  | 
|  | gpins = "20 21 49 50 93 94 128 129".split() | 
|  |  | 
|  | elif device_class == "4k": | 
|  | num_ramb40 = 20 | 
|  | num_iobanks = 2 | 
|  | num_dsp = 0 | 
|  |  | 
|  | # TODO(awygle) add F5 G6 F6 E6 which are constrained to (config) SPI. | 
|  | pins = """ | 
|  | A1 A2 A3 A4 A5 A6 A7 | 
|  | B1 B2    B4    B6 B7 | 
|  | C1    C3 C4    C6 C7 | 
|  | D1 D2 D3       D6 D7 | 
|  | E1 E2 E3 E4 E5    E7 | 
|  | F2 F3 F4       F7 | 
|  | G3 | 
|  | """.split() | 
|  |  | 
|  | gpins = "A3 A4 D2 E2 E5 G3".split() | 
|  |  | 
|  | elif device_class == "5k": | 
|  | num_ramb40 = 30 | 
|  | num_iobanks = 2 | 
|  | num_dsp = 8 | 
|  | num_spram256ka = 4 | 
|  | #TODO(tannewt): Add 39, 40, 41 to this list. It causes placement failures for some reason. | 
|  | # Also add 14 15 16 17 which are constrained to SPI. | 
|  | #TODO(daveshah1): Add back I3C IO 23 which cause placement failures when assigned to | 
|  | #an SB_IO clk_in | 
|  | pins = """2 3 4 6 9 10 11 12 | 
|  | 13 18 19 20 21 | 
|  | 25 26 27 28 31 32 34 35 36 | 
|  | 37 38 42 43 44 45 46 47 48 | 
|  | """.split() | 
|  |  | 
|  | #TODO(tannewt): Add 39, 40, 41 to this list. It causes placement failures for some reason. | 
|  | gpins = "20 35 37 44".split() | 
|  | led_pins = "39 40 41".split() | 
|  |  | 
|  | elif device_class == "u4k": | 
|  | num_ramb40 = 20 | 
|  | num_iobanks = 2 | 
|  | num_dsp = 4 | 
|  |  | 
|  | #TODO(tannewt): Add 39, 40, 41 to this list. It causes placement failures for some reason. | 
|  | # Also add 14 15 16 17 which are constrained to SPI. | 
|  | #TODO(daveshah1): Add back I3C IO 23 which cause placement failures when assigned to | 
|  | #an SB_IO clk_in | 
|  | pins = """2 3 4 6 9 10 11 12 | 
|  | 13 18 19 20 21 | 
|  | 25 26 27 28 31 32 34 35 36 | 
|  | 37 38 42 43 44 45 46 47 48 | 
|  | """.split() | 
|  |  | 
|  | #TODO(tannewt): Add 39, 40, 41 to this list. It causes placement failures for some reason. | 
|  | gpins = "20 35 37 44".split() | 
|  | led_pins = "39 40 41".split() | 
|  |  | 
|  | def output_makefile(working_dir, fuzzname): | 
|  | with open(working_dir + "/Makefile", "w") as f: | 
|  | print("all: %s" % " ".join(["%s_%02d.bin" % (fuzzname, i) for i in range(num)]), file=f) | 
|  | for i in range(num): | 
|  | basename = "%s_%02d" % (fuzzname, i) | 
|  | print("%s.bin:" % basename, file=f) | 
|  | print("\t-bash ../icecube.sh %s > %s.log 2>&1 && rm -rf %s.tmp || tail %s.log" % (basename, basename, basename, basename), file=f) | 
|  | print("\tpython3 ../glbcheck.py %s.asc %s.glb" % (basename, basename), file=f) |