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)