Add support for UltraPlus SPRAM

This commit is contained in:
David Shah 2017-11-17 14:29:00 +00:00
parent c71db50a27
commit afcc653b78
4 changed files with 496 additions and 238 deletions

View File

@ -4438,6 +4438,249 @@ dsp_config_db = {
}
}
# SPRAM data for UltraPlus devices, use icefuzz/tests/fuzz_spram.py
# to generate this
spram_db = {
"5k" : {
(0, 0, 1): {
"ADDRESS_0": (0, 2, "lutff_0/in_1"),
"ADDRESS_10": (0, 2, "lutff_2/in_0"),
"ADDRESS_11": (0, 2, "lutff_3/in_0"),
"ADDRESS_12": (0, 2, "lutff_4/in_0"),
"ADDRESS_13": (0, 2, "lutff_5/in_0"),
"ADDRESS_1": (0, 2, "lutff_1/in_1"),
"ADDRESS_2": (0, 2, "lutff_2/in_1"),
"ADDRESS_3": (0, 2, "lutff_3/in_1"),
"ADDRESS_4": (0, 2, "lutff_4/in_1"),
"ADDRESS_5": (0, 2, "lutff_5/in_1"),
"ADDRESS_6": (0, 2, "lutff_6/in_1"),
"ADDRESS_7": (0, 2, "lutff_7/in_1"),
"ADDRESS_8": (0, 2, "lutff_0/in_0"),
"ADDRESS_9": (0, 2, "lutff_1/in_0"),
"CHIPSELECT": (0, 3, "lutff_6/in_1"),
"CLOCK": (0, 1, "clk"),
"DATAIN_0": (0, 1, "lutff_0/in_3"),
"DATAIN_10": (0, 1, "lutff_2/in_1"),
"DATAIN_11": (0, 1, "lutff_3/in_1"),
"DATAIN_12": (0, 1, "lutff_4/in_1"),
"DATAIN_13": (0, 1, "lutff_5/in_1"),
"DATAIN_14": (0, 1, "lutff_6/in_1"),
"DATAIN_15": (0, 1, "lutff_7/in_1"),
"DATAIN_1": (0, 1, "lutff_1/in_3"),
"DATAIN_2": (0, 1, "lutff_2/in_3"),
"DATAIN_3": (0, 1, "lutff_3/in_3"),
"DATAIN_4": (0, 1, "lutff_4/in_3"),
"DATAIN_5": (0, 1, "lutff_5/in_3"),
"DATAIN_6": (0, 1, "lutff_6/in_3"),
"DATAIN_7": (0, 1, "lutff_7/in_3"),
"DATAIN_8": (0, 1, "lutff_0/in_1"),
"DATAIN_9": (0, 1, "lutff_1/in_1"),
"DATAOUT_0": (0, 1, "slf_op_0"),
"DATAOUT_10": (0, 2, "slf_op_2"),
"DATAOUT_11": (0, 2, "slf_op_3"),
"DATAOUT_12": (0, 2, "slf_op_4"),
"DATAOUT_13": (0, 2, "slf_op_5"),
"DATAOUT_14": (0, 2, "slf_op_6"),
"DATAOUT_15": (0, 2, "slf_op_7"),
"DATAOUT_1": (0, 1, "slf_op_1"),
"DATAOUT_2": (0, 1, "slf_op_2"),
"DATAOUT_3": (0, 1, "slf_op_3"),
"DATAOUT_4": (0, 1, "slf_op_4"),
"DATAOUT_5": (0, 1, "slf_op_5"),
"DATAOUT_6": (0, 1, "slf_op_6"),
"DATAOUT_7": (0, 1, "slf_op_7"),
"DATAOUT_8": (0, 2, "slf_op_0"),
"DATAOUT_9": (0, 2, "slf_op_1"),
"MASKWREN_0": (0, 3, "lutff_0/in_0"),
"MASKWREN_1": (0, 3, "lutff_1/in_0"),
"MASKWREN_2": (0, 3, "lutff_2/in_0"),
"MASKWREN_3": (0, 3, "lutff_3/in_0"),
"POWEROFF": (0, 4, "lutff_4/in_3"),
"SLEEP": (0, 4, "lutff_2/in_3"),
"SPRAM_EN": (0, 1, "CBIT_0"),
"STANDBY": (0, 4, "lutff_0/in_3"),
"WREN": (0, 3, "lutff_4/in_1"),
},
(0, 0, 2): {
"ADDRESS_0": (0, 2, "lutff_6/in_0"),
"ADDRESS_10": (0, 3, "lutff_0/in_1"),
"ADDRESS_11": (0, 3, "lutff_1/in_1"),
"ADDRESS_12": (0, 3, "lutff_2/in_1"),
"ADDRESS_13": (0, 3, "lutff_3/in_1"),
"ADDRESS_1": (0, 2, "lutff_7/in_0"),
"ADDRESS_2": (0, 3, "lutff_0/in_3"),
"ADDRESS_3": (0, 3, "lutff_1/in_3"),
"ADDRESS_4": (0, 3, "lutff_2/in_3"),
"ADDRESS_5": (0, 3, "lutff_3/in_3"),
"ADDRESS_6": (0, 3, "lutff_4/in_3"),
"ADDRESS_7": (0, 3, "lutff_5/in_3"),
"ADDRESS_8": (0, 3, "lutff_6/in_3"),
"ADDRESS_9": (0, 3, "lutff_7/in_3"),
"CHIPSELECT": (0, 3, "lutff_7/in_1"),
"CLOCK": (0, 2, "clk"),
"DATAIN_0": (0, 1, "lutff_0/in_0"),
"DATAIN_10": (0, 2, "lutff_2/in_3"),
"DATAIN_11": (0, 2, "lutff_3/in_3"),
"DATAIN_12": (0, 2, "lutff_4/in_3"),
"DATAIN_13": (0, 2, "lutff_5/in_3"),
"DATAIN_14": (0, 2, "lutff_6/in_3"),
"DATAIN_15": (0, 2, "lutff_7/in_3"),
"DATAIN_1": (0, 1, "lutff_1/in_0"),
"DATAIN_2": (0, 1, "lutff_2/in_0"),
"DATAIN_3": (0, 1, "lutff_3/in_0"),
"DATAIN_4": (0, 1, "lutff_4/in_0"),
"DATAIN_5": (0, 1, "lutff_5/in_0"),
"DATAIN_6": (0, 1, "lutff_6/in_0"),
"DATAIN_7": (0, 1, "lutff_7/in_0"),
"DATAIN_8": (0, 2, "lutff_0/in_3"),
"DATAIN_9": (0, 2, "lutff_1/in_3"),
"DATAOUT_0": (0, 3, "slf_op_0"),
"DATAOUT_10": (0, 4, "slf_op_2"),
"DATAOUT_11": (0, 4, "slf_op_3"),
"DATAOUT_12": (0, 4, "slf_op_4"),
"DATAOUT_13": (0, 4, "slf_op_5"),
"DATAOUT_14": (0, 4, "slf_op_6"),
"DATAOUT_15": (0, 4, "slf_op_7"),
"DATAOUT_1": (0, 3, "slf_op_1"),
"DATAOUT_2": (0, 3, "slf_op_2"),
"DATAOUT_3": (0, 3, "slf_op_3"),
"DATAOUT_4": (0, 3, "slf_op_4"),
"DATAOUT_5": (0, 3, "slf_op_5"),
"DATAOUT_6": (0, 3, "slf_op_6"),
"DATAOUT_7": (0, 3, "slf_op_7"),
"DATAOUT_8": (0, 4, "slf_op_0"),
"DATAOUT_9": (0, 4, "slf_op_1"),
"MASKWREN_0": (0, 3, "lutff_4/in_0"),
"MASKWREN_1": (0, 3, "lutff_5/in_0"),
"MASKWREN_2": (0, 3, "lutff_6/in_0"),
"MASKWREN_3": (0, 3, "lutff_7/in_0"),
"POWEROFF": (0, 4, "lutff_5/in_3"),
"SLEEP": (0, 4, "lutff_3/in_3"),
"SPRAM_EN": (0, 1, "CBIT_1"),
"STANDBY": (0, 4, "lutff_1/in_3"),
"WREN": (0, 3, "lutff_5/in_1"),
},
(25, 0, 3): {
"ADDRESS_0": (25, 2, "lutff_0/in_1"),
"ADDRESS_10": (25, 2, "lutff_2/in_0"),
"ADDRESS_11": (25, 2, "lutff_3/in_0"),
"ADDRESS_12": (25, 2, "lutff_4/in_0"),
"ADDRESS_13": (25, 2, "lutff_5/in_0"),
"ADDRESS_1": (25, 2, "lutff_1/in_1"),
"ADDRESS_2": (25, 2, "lutff_2/in_1"),
"ADDRESS_3": (25, 2, "lutff_3/in_1"),
"ADDRESS_4": (25, 2, "lutff_4/in_1"),
"ADDRESS_5": (25, 2, "lutff_5/in_1"),
"ADDRESS_6": (25, 2, "lutff_6/in_1"),
"ADDRESS_7": (25, 2, "lutff_7/in_1"),
"ADDRESS_8": (25, 2, "lutff_0/in_0"),
"ADDRESS_9": (25, 2, "lutff_1/in_0"),
"CHIPSELECT": (25, 3, "lutff_6/in_1"),
"CLOCK": (25, 1, "clk"),
"DATAIN_0": (25, 1, "lutff_0/in_3"),
"DATAIN_10": (25, 1, "lutff_2/in_1"),
"DATAIN_11": (25, 1, "lutff_3/in_1"),
"DATAIN_12": (25, 1, "lutff_4/in_1"),
"DATAIN_13": (25, 1, "lutff_5/in_1"),
"DATAIN_14": (25, 1, "lutff_6/in_1"),
"DATAIN_15": (25, 1, "lutff_7/in_1"),
"DATAIN_1": (25, 1, "lutff_1/in_3"),
"DATAIN_2": (25, 1, "lutff_2/in_3"),
"DATAIN_3": (25, 1, "lutff_3/in_3"),
"DATAIN_4": (25, 1, "lutff_4/in_3"),
"DATAIN_5": (25, 1, "lutff_5/in_3"),
"DATAIN_6": (25, 1, "lutff_6/in_3"),
"DATAIN_7": (25, 1, "lutff_7/in_3"),
"DATAIN_8": (25, 1, "lutff_0/in_1"),
"DATAIN_9": (25, 1, "lutff_1/in_1"),
"DATAOUT_0": (25, 1, "slf_op_0"),
"DATAOUT_10": (25, 2, "slf_op_2"),
"DATAOUT_11": (25, 2, "slf_op_3"),
"DATAOUT_12": (25, 2, "slf_op_4"),
"DATAOUT_13": (25, 2, "slf_op_5"),
"DATAOUT_14": (25, 2, "slf_op_6"),
"DATAOUT_15": (25, 2, "slf_op_7"),
"DATAOUT_1": (25, 1, "slf_op_1"),
"DATAOUT_2": (25, 1, "slf_op_2"),
"DATAOUT_3": (25, 1, "slf_op_3"),
"DATAOUT_4": (25, 1, "slf_op_4"),
"DATAOUT_5": (25, 1, "slf_op_5"),
"DATAOUT_6": (25, 1, "slf_op_6"),
"DATAOUT_7": (25, 1, "slf_op_7"),
"DATAOUT_8": (25, 2, "slf_op_0"),
"DATAOUT_9": (25, 2, "slf_op_1"),
"MASKWREN_0": (25, 3, "lutff_0/in_0"),
"MASKWREN_1": (25, 3, "lutff_1/in_0"),
"MASKWREN_2": (25, 3, "lutff_2/in_0"),
"MASKWREN_3": (25, 3, "lutff_3/in_0"),
"POWEROFF": (25, 4, "lutff_4/in_3"),
"SLEEP": (25, 4, "lutff_2/in_3"),
"SPRAM_EN": (25, 1, "CBIT_0"),
"STANDBY": (25, 4, "lutff_0/in_3"),
"WREN": (25, 3, "lutff_4/in_1"),
},
(25, 0, 4): {
"ADDRESS_0": (25, 2, "lutff_6/in_0"),
"ADDRESS_10": (25, 3, "lutff_0/in_1"),
"ADDRESS_11": (25, 3, "lutff_1/in_1"),
"ADDRESS_12": (25, 3, "lutff_2/in_1"),
"ADDRESS_13": (25, 3, "lutff_3/in_1"),
"ADDRESS_1": (25, 2, "lutff_7/in_0"),
"ADDRESS_2": (25, 3, "lutff_0/in_3"),
"ADDRESS_3": (25, 3, "lutff_1/in_3"),
"ADDRESS_4": (25, 3, "lutff_2/in_3"),
"ADDRESS_5": (25, 3, "lutff_3/in_3"),
"ADDRESS_6": (25, 3, "lutff_4/in_3"),
"ADDRESS_7": (25, 3, "lutff_5/in_3"),
"ADDRESS_8": (25, 3, "lutff_6/in_3"),
"ADDRESS_9": (25, 3, "lutff_7/in_3"),
"CHIPSELECT": (25, 3, "lutff_7/in_1"),
"CLOCK": (25, 2, "clk"),
"DATAIN_0": (25, 1, "lutff_0/in_0"),
"DATAIN_10": (25, 2, "lutff_2/in_3"),
"DATAIN_11": (25, 2, "lutff_3/in_3"),
"DATAIN_12": (25, 2, "lutff_4/in_3"),
"DATAIN_13": (25, 2, "lutff_5/in_3"),
"DATAIN_14": (25, 2, "lutff_6/in_3"),
"DATAIN_15": (25, 2, "lutff_7/in_3"),
"DATAIN_1": (25, 1, "lutff_1/in_0"),
"DATAIN_2": (25, 1, "lutff_2/in_0"),
"DATAIN_3": (25, 1, "lutff_3/in_0"),
"DATAIN_4": (25, 1, "lutff_4/in_0"),
"DATAIN_5": (25, 1, "lutff_5/in_0"),
"DATAIN_6": (25, 1, "lutff_6/in_0"),
"DATAIN_7": (25, 1, "lutff_7/in_0"),
"DATAIN_8": (25, 2, "lutff_0/in_3"),
"DATAIN_9": (25, 2, "lutff_1/in_3"),
"DATAOUT_0": (25, 3, "slf_op_0"),
"DATAOUT_10": (25, 4, "slf_op_2"),
"DATAOUT_11": (25, 4, "slf_op_3"),
"DATAOUT_12": (25, 4, "slf_op_4"),
"DATAOUT_13": (25, 4, "slf_op_5"),
"DATAOUT_14": (25, 4, "slf_op_6"),
"DATAOUT_15": (25, 4, "slf_op_7"),
"DATAOUT_1": (25, 3, "slf_op_1"),
"DATAOUT_2": (25, 3, "slf_op_2"),
"DATAOUT_3": (25, 3, "slf_op_3"),
"DATAOUT_4": (25, 3, "slf_op_4"),
"DATAOUT_5": (25, 3, "slf_op_5"),
"DATAOUT_6": (25, 3, "slf_op_6"),
"DATAOUT_7": (25, 3, "slf_op_7"),
"DATAOUT_8": (25, 4, "slf_op_0"),
"DATAOUT_9": (25, 4, "slf_op_1"),
"MASKWREN_0": (25, 3, "lutff_4/in_0"),
"MASKWREN_1": (25, 3, "lutff_5/in_0"),
"MASKWREN_2": (25, 3, "lutff_6/in_0"),
"MASKWREN_3": (25, 3, "lutff_7/in_0"),
"POWEROFF": (25, 4, "lutff_5/in_3"),
"SLEEP": (25, 4, "lutff_3/in_3"),
"SPRAM_EN": (25, 1, "CBIT_1"),
"STANDBY": (25, 4, "lutff_1/in_3"),
"WREN": (25, 3, "lutff_5/in_1"),
}
}
}
# This contains the data for extra cells not included
# in any previous databases

View File

@ -325,7 +325,17 @@ if ic.device in icebox.extra_cells_db:
for key in sorted(cellinfo):
print("%s %s" % (key, " ".join([str(k) for k in cellinfo[key]])))
print()
if ic.device in icebox.spram_db:
for cell in icebox.spram_db[ic.device]:
loc = cell
x, y, z = loc
print(".extra_cell %d %d %d SPRAM" % (x, y, z))
cellinfo = icebox.spram_db[ic.device][cell]
for key in sorted(cellinfo):
print("%s %s" % (key, " ".join([str(k) for k in cellinfo[key]])))
print()
print(".extra_bits")
extra_bits = dict()
for idx in sorted(ic.extra_bits_db()):

View File

@ -77,7 +77,7 @@ for loc in spram_locs:
net_map = {}
for sig in spram_signals:
net_map[sig] = set()
net_map["C_SPRAM_EN"] = set() # actually a CBIT not a net
net_map["SPRAM_EN"] = set() # actually a CBIT not a net
for n in fuzz_options:
with open("./work_spram/spram.v","w") as f:
@ -159,15 +159,16 @@ for loc in spram_locs:
bits = []
with open("./work_spram/spram.exp", "r") as f:
bits = parse_exp(f)
net_map["C_SPRAM_EN"].update(bits)
net_map["SPRAM_EN"].update(bits)
spram_data[loc] = net_map
with open(device + "_spram_data.txt", "w") as f:
for loc in spram_data:
print("SPRAM %d %d %d" % loc, file=f)
print("\t(%d, %d, %d): {" % loc, file=f)
data = spram_data[loc]
for net in sorted(data):
cnets = []
for cnet in data[net]:
cnets.append("(%d, %d, %s)" % cnet)
print("\t%s: %s" % (net, " ".join(cnets)), file=f)
cnets.append("(%d, %d, \"%s\")" % cnet)
print("\t\t%s %s, " % (("\"" + net.replace("[","_").replace("]","") + "\":").ljust(24), " ".join(cnets)), file=f)
print("\t},", file=f)

View File

@ -1,232 +1,236 @@
SPRAM 0 0 1
ADDRESS[0]: (0, 2, lutff_0/in_1)
ADDRESS[10]: (0, 2, lutff_2/in_0)
ADDRESS[11]: (0, 2, lutff_3/in_0)
ADDRESS[12]: (0, 2, lutff_4/in_0)
ADDRESS[13]: (0, 2, lutff_5/in_0)
ADDRESS[1]: (0, 2, lutff_1/in_1)
ADDRESS[2]: (0, 2, lutff_2/in_1)
ADDRESS[3]: (0, 2, lutff_3/in_1)
ADDRESS[4]: (0, 2, lutff_4/in_1)
ADDRESS[5]: (0, 2, lutff_5/in_1)
ADDRESS[6]: (0, 2, lutff_6/in_1)
ADDRESS[7]: (0, 2, lutff_7/in_1)
ADDRESS[8]: (0, 2, lutff_0/in_0)
ADDRESS[9]: (0, 2, lutff_1/in_0)
CHIPSELECT: (0, 3, lutff_6/in_1)
CLOCK: (0, 1, clk)
C_SPRAM_EN: (0, 1, CBIT_0)
DATAIN[0]: (0, 1, lutff_0/in_3)
DATAIN[10]: (0, 1, lutff_2/in_1)
DATAIN[11]: (0, 1, lutff_3/in_1)
DATAIN[12]: (0, 1, lutff_4/in_1)
DATAIN[13]: (0, 1, lutff_5/in_1)
DATAIN[14]: (0, 1, lutff_6/in_1)
DATAIN[15]: (0, 1, lutff_7/in_1)
DATAIN[1]: (0, 1, lutff_1/in_3)
DATAIN[2]: (0, 1, lutff_2/in_3)
DATAIN[3]: (0, 1, lutff_3/in_3)
DATAIN[4]: (0, 1, lutff_4/in_3)
DATAIN[5]: (0, 1, lutff_5/in_3)
DATAIN[6]: (0, 1, lutff_6/in_3)
DATAIN[7]: (0, 1, lutff_7/in_3)
DATAIN[8]: (0, 1, lutff_0/in_1)
DATAIN[9]: (0, 1, lutff_1/in_1)
DATAOUT[0]: (0, 1, slf_op_0)
DATAOUT[10]: (0, 2, slf_op_2)
DATAOUT[11]: (0, 2, slf_op_3)
DATAOUT[12]: (0, 2, slf_op_4)
DATAOUT[13]: (0, 2, slf_op_5)
DATAOUT[14]: (0, 2, slf_op_6)
DATAOUT[15]: (0, 2, slf_op_7)
DATAOUT[1]: (0, 1, slf_op_1)
DATAOUT[2]: (0, 1, slf_op_2)
DATAOUT[3]: (0, 1, slf_op_3)
DATAOUT[4]: (0, 1, slf_op_4)
DATAOUT[5]: (0, 1, slf_op_5)
DATAOUT[6]: (0, 1, slf_op_6)
DATAOUT[7]: (0, 1, slf_op_7)
DATAOUT[8]: (0, 2, slf_op_0)
DATAOUT[9]: (0, 2, slf_op_1)
MASKWREN[0]: (0, 3, lutff_0/in_0)
MASKWREN[1]: (0, 3, lutff_1/in_0)
MASKWREN[2]: (0, 3, lutff_2/in_0)
MASKWREN[3]: (0, 3, lutff_3/in_0)
POWEROFF: (0, 4, lutff_4/in_3)
SLEEP: (0, 4, lutff_2/in_3)
STANDBY: (0, 4, lutff_0/in_3)
WREN: (0, 3, lutff_4/in_1)
SPRAM 0 0 2
ADDRESS[0]: (0, 2, lutff_6/in_0)
ADDRESS[10]: (0, 3, lutff_0/in_1)
ADDRESS[11]: (0, 3, lutff_1/in_1)
ADDRESS[12]: (0, 3, lutff_2/in_1)
ADDRESS[13]: (0, 3, lutff_3/in_1)
ADDRESS[1]: (0, 2, lutff_7/in_0)
ADDRESS[2]: (0, 3, lutff_0/in_3)
ADDRESS[3]: (0, 3, lutff_1/in_3)
ADDRESS[4]: (0, 3, lutff_2/in_3)
ADDRESS[5]: (0, 3, lutff_3/in_3)
ADDRESS[6]: (0, 3, lutff_4/in_3)
ADDRESS[7]: (0, 3, lutff_5/in_3)
ADDRESS[8]: (0, 3, lutff_6/in_3)
ADDRESS[9]: (0, 3, lutff_7/in_3)
CHIPSELECT: (0, 3, lutff_7/in_1)
CLOCK: (0, 2, clk)
C_SPRAM_EN: (0, 1, CBIT_1)
DATAIN[0]: (0, 1, lutff_0/in_0)
DATAIN[10]: (0, 2, lutff_2/in_3)
DATAIN[11]: (0, 2, lutff_3/in_3)
DATAIN[12]: (0, 2, lutff_4/in_3)
DATAIN[13]: (0, 2, lutff_5/in_3)
DATAIN[14]: (0, 2, lutff_6/in_3)
DATAIN[15]: (0, 2, lutff_7/in_3)
DATAIN[1]: (0, 1, lutff_1/in_0)
DATAIN[2]: (0, 1, lutff_2/in_0)
DATAIN[3]: (0, 1, lutff_3/in_0)
DATAIN[4]: (0, 1, lutff_4/in_0)
DATAIN[5]: (0, 1, lutff_5/in_0)
DATAIN[6]: (0, 1, lutff_6/in_0)
DATAIN[7]: (0, 1, lutff_7/in_0)
DATAIN[8]: (0, 2, lutff_0/in_3)
DATAIN[9]: (0, 2, lutff_1/in_3)
DATAOUT[0]: (0, 3, slf_op_0)
DATAOUT[10]: (0, 4, slf_op_2)
DATAOUT[11]: (0, 4, slf_op_3)
DATAOUT[12]: (0, 4, slf_op_4)
DATAOUT[13]: (0, 4, slf_op_5)
DATAOUT[14]: (0, 4, slf_op_6)
DATAOUT[15]: (0, 4, slf_op_7)
DATAOUT[1]: (0, 3, slf_op_1)
DATAOUT[2]: (0, 3, slf_op_2)
DATAOUT[3]: (0, 3, slf_op_3)
DATAOUT[4]: (0, 3, slf_op_4)
DATAOUT[5]: (0, 3, slf_op_5)
DATAOUT[6]: (0, 3, slf_op_6)
DATAOUT[7]: (0, 3, slf_op_7)
DATAOUT[8]: (0, 4, slf_op_0)
DATAOUT[9]: (0, 4, slf_op_1)
MASKWREN[0]: (0, 3, lutff_4/in_0)
MASKWREN[1]: (0, 3, lutff_5/in_0)
MASKWREN[2]: (0, 3, lutff_6/in_0)
MASKWREN[3]: (0, 3, lutff_7/in_0)
POWEROFF: (0, 4, lutff_5/in_3)
SLEEP: (0, 4, lutff_3/in_3)
STANDBY: (0, 4, lutff_1/in_3)
WREN: (0, 3, lutff_5/in_1)
SPRAM 25 0 3
ADDRESS[0]: (25, 2, lutff_0/in_1)
ADDRESS[10]: (25, 2, lutff_2/in_0)
ADDRESS[11]: (25, 2, lutff_3/in_0)
ADDRESS[12]: (25, 2, lutff_4/in_0)
ADDRESS[13]: (25, 2, lutff_5/in_0)
ADDRESS[1]: (25, 2, lutff_1/in_1)
ADDRESS[2]: (25, 2, lutff_2/in_1)
ADDRESS[3]: (25, 2, lutff_3/in_1)
ADDRESS[4]: (25, 2, lutff_4/in_1)
ADDRESS[5]: (25, 2, lutff_5/in_1)
ADDRESS[6]: (25, 2, lutff_6/in_1)
ADDRESS[7]: (25, 2, lutff_7/in_1)
ADDRESS[8]: (25, 2, lutff_0/in_0)
ADDRESS[9]: (25, 2, lutff_1/in_0)
CHIPSELECT: (25, 3, lutff_6/in_1)
CLOCK: (25, 1, clk)
C_SPRAM_EN: (25, 1, CBIT_0)
DATAIN[0]: (25, 1, lutff_0/in_3)
DATAIN[10]: (25, 1, lutff_2/in_1)
DATAIN[11]: (25, 1, lutff_3/in_1)
DATAIN[12]: (25, 1, lutff_4/in_1)
DATAIN[13]: (25, 1, lutff_5/in_1)
DATAIN[14]: (25, 1, lutff_6/in_1)
DATAIN[15]: (25, 1, lutff_7/in_1)
DATAIN[1]: (25, 1, lutff_1/in_3)
DATAIN[2]: (25, 1, lutff_2/in_3)
DATAIN[3]: (25, 1, lutff_3/in_3)
DATAIN[4]: (25, 1, lutff_4/in_3)
DATAIN[5]: (25, 1, lutff_5/in_3)
DATAIN[6]: (25, 1, lutff_6/in_3)
DATAIN[7]: (25, 1, lutff_7/in_3)
DATAIN[8]: (25, 1, lutff_0/in_1)
DATAIN[9]: (25, 1, lutff_1/in_1)
DATAOUT[0]: (25, 1, slf_op_0)
DATAOUT[10]: (25, 2, slf_op_2)
DATAOUT[11]: (25, 2, slf_op_3)
DATAOUT[12]: (25, 2, slf_op_4)
DATAOUT[13]: (25, 2, slf_op_5)
DATAOUT[14]: (25, 2, slf_op_6)
DATAOUT[15]: (25, 2, slf_op_7)
DATAOUT[1]: (25, 1, slf_op_1)
DATAOUT[2]: (25, 1, slf_op_2)
DATAOUT[3]: (25, 1, slf_op_3)
DATAOUT[4]: (25, 1, slf_op_4)
DATAOUT[5]: (25, 1, slf_op_5)
DATAOUT[6]: (25, 1, slf_op_6)
DATAOUT[7]: (25, 1, slf_op_7)
DATAOUT[8]: (25, 2, slf_op_0)
DATAOUT[9]: (25, 2, slf_op_1)
MASKWREN[0]: (25, 3, lutff_0/in_0)
MASKWREN[1]: (25, 3, lutff_1/in_0)
MASKWREN[2]: (25, 3, lutff_2/in_0)
MASKWREN[3]: (25, 3, lutff_3/in_0)
POWEROFF: (25, 4, lutff_4/in_3)
SLEEP: (25, 4, lutff_2/in_3)
STANDBY: (25, 4, lutff_0/in_3)
WREN: (25, 3, lutff_4/in_1)
SPRAM 25 0 4
ADDRESS[0]: (25, 2, lutff_6/in_0)
ADDRESS[10]: (25, 3, lutff_0/in_1)
ADDRESS[11]: (25, 3, lutff_1/in_1)
ADDRESS[12]: (25, 3, lutff_2/in_1)
ADDRESS[13]: (25, 3, lutff_3/in_1)
ADDRESS[1]: (25, 2, lutff_7/in_0)
ADDRESS[2]: (25, 3, lutff_0/in_3)
ADDRESS[3]: (25, 3, lutff_1/in_3)
ADDRESS[4]: (25, 3, lutff_2/in_3)
ADDRESS[5]: (25, 3, lutff_3/in_3)
ADDRESS[6]: (25, 3, lutff_4/in_3)
ADDRESS[7]: (25, 3, lutff_5/in_3)
ADDRESS[8]: (25, 3, lutff_6/in_3)
ADDRESS[9]: (25, 3, lutff_7/in_3)
CHIPSELECT: (25, 3, lutff_7/in_1)
CLOCK: (25, 2, clk)
C_SPRAM_EN: (25, 1, CBIT_1)
DATAIN[0]: (25, 1, lutff_0/in_0)
DATAIN[10]: (25, 2, lutff_2/in_3)
DATAIN[11]: (25, 2, lutff_3/in_3)
DATAIN[12]: (25, 2, lutff_4/in_3)
DATAIN[13]: (25, 2, lutff_5/in_3)
DATAIN[14]: (25, 2, lutff_6/in_3)
DATAIN[15]: (25, 2, lutff_7/in_3)
DATAIN[1]: (25, 1, lutff_1/in_0)
DATAIN[2]: (25, 1, lutff_2/in_0)
DATAIN[3]: (25, 1, lutff_3/in_0)
DATAIN[4]: (25, 1, lutff_4/in_0)
DATAIN[5]: (25, 1, lutff_5/in_0)
DATAIN[6]: (25, 1, lutff_6/in_0)
DATAIN[7]: (25, 1, lutff_7/in_0)
DATAIN[8]: (25, 2, lutff_0/in_3)
DATAIN[9]: (25, 2, lutff_1/in_3)
DATAOUT[0]: (25, 3, slf_op_0)
DATAOUT[10]: (25, 4, slf_op_2)
DATAOUT[11]: (25, 4, slf_op_3)
DATAOUT[12]: (25, 4, slf_op_4)
DATAOUT[13]: (25, 4, slf_op_5)
DATAOUT[14]: (25, 4, slf_op_6)
DATAOUT[15]: (25, 4, slf_op_7)
DATAOUT[1]: (25, 3, slf_op_1)
DATAOUT[2]: (25, 3, slf_op_2)
DATAOUT[3]: (25, 3, slf_op_3)
DATAOUT[4]: (25, 3, slf_op_4)
DATAOUT[5]: (25, 3, slf_op_5)
DATAOUT[6]: (25, 3, slf_op_6)
DATAOUT[7]: (25, 3, slf_op_7)
DATAOUT[8]: (25, 4, slf_op_0)
DATAOUT[9]: (25, 4, slf_op_1)
MASKWREN[0]: (25, 3, lutff_4/in_0)
MASKWREN[1]: (25, 3, lutff_5/in_0)
MASKWREN[2]: (25, 3, lutff_6/in_0)
MASKWREN[3]: (25, 3, lutff_7/in_0)
POWEROFF: (25, 4, lutff_5/in_3)
SLEEP: (25, 4, lutff_3/in_3)
STANDBY: (25, 4, lutff_1/in_3)
WREN: (25, 3, lutff_5/in_1)
(0, 0, 1): {
"ADDRESS_0": (0, 2, "lutff_0/in_1"),
"ADDRESS_10": (0, 2, "lutff_2/in_0"),
"ADDRESS_11": (0, 2, "lutff_3/in_0"),
"ADDRESS_12": (0, 2, "lutff_4/in_0"),
"ADDRESS_13": (0, 2, "lutff_5/in_0"),
"ADDRESS_1": (0, 2, "lutff_1/in_1"),
"ADDRESS_2": (0, 2, "lutff_2/in_1"),
"ADDRESS_3": (0, 2, "lutff_3/in_1"),
"ADDRESS_4": (0, 2, "lutff_4/in_1"),
"ADDRESS_5": (0, 2, "lutff_5/in_1"),
"ADDRESS_6": (0, 2, "lutff_6/in_1"),
"ADDRESS_7": (0, 2, "lutff_7/in_1"),
"ADDRESS_8": (0, 2, "lutff_0/in_0"),
"ADDRESS_9": (0, 2, "lutff_1/in_0"),
"CHIPSELECT": (0, 3, "lutff_6/in_1"),
"CLOCK": (0, 1, "clk"),
"DATAIN_0": (0, 1, "lutff_0/in_3"),
"DATAIN_10": (0, 1, "lutff_2/in_1"),
"DATAIN_11": (0, 1, "lutff_3/in_1"),
"DATAIN_12": (0, 1, "lutff_4/in_1"),
"DATAIN_13": (0, 1, "lutff_5/in_1"),
"DATAIN_14": (0, 1, "lutff_6/in_1"),
"DATAIN_15": (0, 1, "lutff_7/in_1"),
"DATAIN_1": (0, 1, "lutff_1/in_3"),
"DATAIN_2": (0, 1, "lutff_2/in_3"),
"DATAIN_3": (0, 1, "lutff_3/in_3"),
"DATAIN_4": (0, 1, "lutff_4/in_3"),
"DATAIN_5": (0, 1, "lutff_5/in_3"),
"DATAIN_6": (0, 1, "lutff_6/in_3"),
"DATAIN_7": (0, 1, "lutff_7/in_3"),
"DATAIN_8": (0, 1, "lutff_0/in_1"),
"DATAIN_9": (0, 1, "lutff_1/in_1"),
"DATAOUT_0": (0, 1, "slf_op_0"),
"DATAOUT_10": (0, 2, "slf_op_2"),
"DATAOUT_11": (0, 2, "slf_op_3"),
"DATAOUT_12": (0, 2, "slf_op_4"),
"DATAOUT_13": (0, 2, "slf_op_5"),
"DATAOUT_14": (0, 2, "slf_op_6"),
"DATAOUT_15": (0, 2, "slf_op_7"),
"DATAOUT_1": (0, 1, "slf_op_1"),
"DATAOUT_2": (0, 1, "slf_op_2"),
"DATAOUT_3": (0, 1, "slf_op_3"),
"DATAOUT_4": (0, 1, "slf_op_4"),
"DATAOUT_5": (0, 1, "slf_op_5"),
"DATAOUT_6": (0, 1, "slf_op_6"),
"DATAOUT_7": (0, 1, "slf_op_7"),
"DATAOUT_8": (0, 2, "slf_op_0"),
"DATAOUT_9": (0, 2, "slf_op_1"),
"MASKWREN_0": (0, 3, "lutff_0/in_0"),
"MASKWREN_1": (0, 3, "lutff_1/in_0"),
"MASKWREN_2": (0, 3, "lutff_2/in_0"),
"MASKWREN_3": (0, 3, "lutff_3/in_0"),
"POWEROFF": (0, 4, "lutff_4/in_3"),
"SLEEP": (0, 4, "lutff_2/in_3"),
"SPRAM_EN": (0, 1, "CBIT_0"),
"STANDBY": (0, 4, "lutff_0/in_3"),
"WREN": (0, 3, "lutff_4/in_1"),
},
(0, 0, 2): {
"ADDRESS_0": (0, 2, "lutff_6/in_0"),
"ADDRESS_10": (0, 3, "lutff_0/in_1"),
"ADDRESS_11": (0, 3, "lutff_1/in_1"),
"ADDRESS_12": (0, 3, "lutff_2/in_1"),
"ADDRESS_13": (0, 3, "lutff_3/in_1"),
"ADDRESS_1": (0, 2, "lutff_7/in_0"),
"ADDRESS_2": (0, 3, "lutff_0/in_3"),
"ADDRESS_3": (0, 3, "lutff_1/in_3"),
"ADDRESS_4": (0, 3, "lutff_2/in_3"),
"ADDRESS_5": (0, 3, "lutff_3/in_3"),
"ADDRESS_6": (0, 3, "lutff_4/in_3"),
"ADDRESS_7": (0, 3, "lutff_5/in_3"),
"ADDRESS_8": (0, 3, "lutff_6/in_3"),
"ADDRESS_9": (0, 3, "lutff_7/in_3"),
"CHIPSELECT": (0, 3, "lutff_7/in_1"),
"CLOCK": (0, 2, "clk"),
"DATAIN_0": (0, 1, "lutff_0/in_0"),
"DATAIN_10": (0, 2, "lutff_2/in_3"),
"DATAIN_11": (0, 2, "lutff_3/in_3"),
"DATAIN_12": (0, 2, "lutff_4/in_3"),
"DATAIN_13": (0, 2, "lutff_5/in_3"),
"DATAIN_14": (0, 2, "lutff_6/in_3"),
"DATAIN_15": (0, 2, "lutff_7/in_3"),
"DATAIN_1": (0, 1, "lutff_1/in_0"),
"DATAIN_2": (0, 1, "lutff_2/in_0"),
"DATAIN_3": (0, 1, "lutff_3/in_0"),
"DATAIN_4": (0, 1, "lutff_4/in_0"),
"DATAIN_5": (0, 1, "lutff_5/in_0"),
"DATAIN_6": (0, 1, "lutff_6/in_0"),
"DATAIN_7": (0, 1, "lutff_7/in_0"),
"DATAIN_8": (0, 2, "lutff_0/in_3"),
"DATAIN_9": (0, 2, "lutff_1/in_3"),
"DATAOUT_0": (0, 3, "slf_op_0"),
"DATAOUT_10": (0, 4, "slf_op_2"),
"DATAOUT_11": (0, 4, "slf_op_3"),
"DATAOUT_12": (0, 4, "slf_op_4"),
"DATAOUT_13": (0, 4, "slf_op_5"),
"DATAOUT_14": (0, 4, "slf_op_6"),
"DATAOUT_15": (0, 4, "slf_op_7"),
"DATAOUT_1": (0, 3, "slf_op_1"),
"DATAOUT_2": (0, 3, "slf_op_2"),
"DATAOUT_3": (0, 3, "slf_op_3"),
"DATAOUT_4": (0, 3, "slf_op_4"),
"DATAOUT_5": (0, 3, "slf_op_5"),
"DATAOUT_6": (0, 3, "slf_op_6"),
"DATAOUT_7": (0, 3, "slf_op_7"),
"DATAOUT_8": (0, 4, "slf_op_0"),
"DATAOUT_9": (0, 4, "slf_op_1"),
"MASKWREN_0": (0, 3, "lutff_4/in_0"),
"MASKWREN_1": (0, 3, "lutff_5/in_0"),
"MASKWREN_2": (0, 3, "lutff_6/in_0"),
"MASKWREN_3": (0, 3, "lutff_7/in_0"),
"POWEROFF": (0, 4, "lutff_5/in_3"),
"SLEEP": (0, 4, "lutff_3/in_3"),
"SPRAM_EN": (0, 1, "CBIT_1"),
"STANDBY": (0, 4, "lutff_1/in_3"),
"WREN": (0, 3, "lutff_5/in_1"),
},
(25, 0, 3): {
"ADDRESS_0": (25, 2, "lutff_0/in_1"),
"ADDRESS_10": (25, 2, "lutff_2/in_0"),
"ADDRESS_11": (25, 2, "lutff_3/in_0"),
"ADDRESS_12": (25, 2, "lutff_4/in_0"),
"ADDRESS_13": (25, 2, "lutff_5/in_0"),
"ADDRESS_1": (25, 2, "lutff_1/in_1"),
"ADDRESS_2": (25, 2, "lutff_2/in_1"),
"ADDRESS_3": (25, 2, "lutff_3/in_1"),
"ADDRESS_4": (25, 2, "lutff_4/in_1"),
"ADDRESS_5": (25, 2, "lutff_5/in_1"),
"ADDRESS_6": (25, 2, "lutff_6/in_1"),
"ADDRESS_7": (25, 2, "lutff_7/in_1"),
"ADDRESS_8": (25, 2, "lutff_0/in_0"),
"ADDRESS_9": (25, 2, "lutff_1/in_0"),
"CHIPSELECT": (25, 3, "lutff_6/in_1"),
"CLOCK": (25, 1, "clk"),
"DATAIN_0": (25, 1, "lutff_0/in_3"),
"DATAIN_10": (25, 1, "lutff_2/in_1"),
"DATAIN_11": (25, 1, "lutff_3/in_1"),
"DATAIN_12": (25, 1, "lutff_4/in_1"),
"DATAIN_13": (25, 1, "lutff_5/in_1"),
"DATAIN_14": (25, 1, "lutff_6/in_1"),
"DATAIN_15": (25, 1, "lutff_7/in_1"),
"DATAIN_1": (25, 1, "lutff_1/in_3"),
"DATAIN_2": (25, 1, "lutff_2/in_3"),
"DATAIN_3": (25, 1, "lutff_3/in_3"),
"DATAIN_4": (25, 1, "lutff_4/in_3"),
"DATAIN_5": (25, 1, "lutff_5/in_3"),
"DATAIN_6": (25, 1, "lutff_6/in_3"),
"DATAIN_7": (25, 1, "lutff_7/in_3"),
"DATAIN_8": (25, 1, "lutff_0/in_1"),
"DATAIN_9": (25, 1, "lutff_1/in_1"),
"DATAOUT_0": (25, 1, "slf_op_0"),
"DATAOUT_10": (25, 2, "slf_op_2"),
"DATAOUT_11": (25, 2, "slf_op_3"),
"DATAOUT_12": (25, 2, "slf_op_4"),
"DATAOUT_13": (25, 2, "slf_op_5"),
"DATAOUT_14": (25, 2, "slf_op_6"),
"DATAOUT_15": (25, 2, "slf_op_7"),
"DATAOUT_1": (25, 1, "slf_op_1"),
"DATAOUT_2": (25, 1, "slf_op_2"),
"DATAOUT_3": (25, 1, "slf_op_3"),
"DATAOUT_4": (25, 1, "slf_op_4"),
"DATAOUT_5": (25, 1, "slf_op_5"),
"DATAOUT_6": (25, 1, "slf_op_6"),
"DATAOUT_7": (25, 1, "slf_op_7"),
"DATAOUT_8": (25, 2, "slf_op_0"),
"DATAOUT_9": (25, 2, "slf_op_1"),
"MASKWREN_0": (25, 3, "lutff_0/in_0"),
"MASKWREN_1": (25, 3, "lutff_1/in_0"),
"MASKWREN_2": (25, 3, "lutff_2/in_0"),
"MASKWREN_3": (25, 3, "lutff_3/in_0"),
"POWEROFF": (25, 4, "lutff_4/in_3"),
"SLEEP": (25, 4, "lutff_2/in_3"),
"SPRAM_EN": (25, 1, "CBIT_0"),
"STANDBY": (25, 4, "lutff_0/in_3"),
"WREN": (25, 3, "lutff_4/in_1"),
},
(25, 0, 4): {
"ADDRESS_0": (25, 2, "lutff_6/in_0"),
"ADDRESS_10": (25, 3, "lutff_0/in_1"),
"ADDRESS_11": (25, 3, "lutff_1/in_1"),
"ADDRESS_12": (25, 3, "lutff_2/in_1"),
"ADDRESS_13": (25, 3, "lutff_3/in_1"),
"ADDRESS_1": (25, 2, "lutff_7/in_0"),
"ADDRESS_2": (25, 3, "lutff_0/in_3"),
"ADDRESS_3": (25, 3, "lutff_1/in_3"),
"ADDRESS_4": (25, 3, "lutff_2/in_3"),
"ADDRESS_5": (25, 3, "lutff_3/in_3"),
"ADDRESS_6": (25, 3, "lutff_4/in_3"),
"ADDRESS_7": (25, 3, "lutff_5/in_3"),
"ADDRESS_8": (25, 3, "lutff_6/in_3"),
"ADDRESS_9": (25, 3, "lutff_7/in_3"),
"CHIPSELECT": (25, 3, "lutff_7/in_1"),
"CLOCK": (25, 2, "clk"),
"DATAIN_0": (25, 1, "lutff_0/in_0"),
"DATAIN_10": (25, 2, "lutff_2/in_3"),
"DATAIN_11": (25, 2, "lutff_3/in_3"),
"DATAIN_12": (25, 2, "lutff_4/in_3"),
"DATAIN_13": (25, 2, "lutff_5/in_3"),
"DATAIN_14": (25, 2, "lutff_6/in_3"),
"DATAIN_15": (25, 2, "lutff_7/in_3"),
"DATAIN_1": (25, 1, "lutff_1/in_0"),
"DATAIN_2": (25, 1, "lutff_2/in_0"),
"DATAIN_3": (25, 1, "lutff_3/in_0"),
"DATAIN_4": (25, 1, "lutff_4/in_0"),
"DATAIN_5": (25, 1, "lutff_5/in_0"),
"DATAIN_6": (25, 1, "lutff_6/in_0"),
"DATAIN_7": (25, 1, "lutff_7/in_0"),
"DATAIN_8": (25, 2, "lutff_0/in_3"),
"DATAIN_9": (25, 2, "lutff_1/in_3"),
"DATAOUT_0": (25, 3, "slf_op_0"),
"DATAOUT_10": (25, 4, "slf_op_2"),
"DATAOUT_11": (25, 4, "slf_op_3"),
"DATAOUT_12": (25, 4, "slf_op_4"),
"DATAOUT_13": (25, 4, "slf_op_5"),
"DATAOUT_14": (25, 4, "slf_op_6"),
"DATAOUT_15": (25, 4, "slf_op_7"),
"DATAOUT_1": (25, 3, "slf_op_1"),
"DATAOUT_2": (25, 3, "slf_op_2"),
"DATAOUT_3": (25, 3, "slf_op_3"),
"DATAOUT_4": (25, 3, "slf_op_4"),
"DATAOUT_5": (25, 3, "slf_op_5"),
"DATAOUT_6": (25, 3, "slf_op_6"),
"DATAOUT_7": (25, 3, "slf_op_7"),
"DATAOUT_8": (25, 4, "slf_op_0"),
"DATAOUT_9": (25, 4, "slf_op_1"),
"MASKWREN_0": (25, 3, "lutff_4/in_0"),
"MASKWREN_1": (25, 3, "lutff_5/in_0"),
"MASKWREN_2": (25, 3, "lutff_6/in_0"),
"MASKWREN_3": (25, 3, "lutff_7/in_0"),
"POWEROFF": (25, 4, "lutff_5/in_3"),
"SLEEP": (25, 4, "lutff_3/in_3"),
"SPRAM_EN": (25, 1, "CBIT_1"),
"STANDBY": (25, 4, "lutff_1/in_3"),
"WREN": (25, 3, "lutff_5/in_1"),
},