>>> d = Device.getDevice(Device.PYNQ_Z1)
>>> m = TileColumnPattern.genColumnPatternMap(d)
>>> list(filter(lambda e: "BRAM" not in e.getKey().toString() and "DSP" not in e.getKey().toString() and e.getKey().size() == 4, m.entrySet()))
>>> filtered.sort(key=lambda x: x.getValue().size(), reverse=True)
>>> from pprint import pprint
>>> pprint(filtered)
[[CLBLM_R, CLBLL_L, CLBLM_R, CLBLL_L]=[73, 77, 97, 102], [CLBLL_L, CLBLM_R, CLBLL_L, CLBLM_R]=[74, 99, 103, 169], [CLBLL_R, CLBLM_L, CLBLL_R, CLBLM_L]=[128], [CLBLM_R, CLBLL_L, CLBLM_L, CLBLL_R]=[81], [CLBLM_R, CLBLL_L, CLBLM_R, CLBLL_R]=[106], [CLBLL_L, CLBLM_R, CLBLL_L, CLBLM_L]=[78], [CLBLM_L, CLBLM_R, CLBLL_L, CLBLM_R]=[70], [CLBLM_L, CLBLL_R, CLBLM_L, CLBLL_R]=[129], [CLBLM_R, CLBLL_R, CLBLM_L, CLBLL_R]=[110], [CLBLM_L, CLBLM_R, CLBLM_L, CLBLM_R]=[149], [CLBLL_L, CLBLM_R, CLBLL_R, CLBLM_L]=[107]]
using lambda with
"BRAM" not in and
"DSP" not in with size 10 or as you said 4, but it will filter the patterns which have a DSP or BRAM or both in the middle which is not I want,
and yes, my design uses mostly lutram (SLICEM) in the design,
I'm not targeting any particular device now, I'm experimenting with these two parts: "xc7z020clg400-1" or PYNQ-Z1 as you said and "xc7z100ffg900-2".
I'm not trying to replicate my module over the device, I'm trying to study different placement of my modules to examine the timing and I want to automate it
putting my module in square (like 10*10) or other like (4*25) is also something I'm trying to study and see which one gives me the better result.
list(filter(lambda e: "BRAM" not in e.getKey().toString() and "DSP" not in e.getKey().toString() and e.getKey().size() == 4, m.entrySet()))
filtered = list(filter(lambda e: not TileTypeEnum.BRAM_L in e.getKey() and not TileTypeEnum.BRAM_R in e.getKey() and not TileTypeEnum.DSP_L in e.getKey() and not TileTypeEnum.DSP_R in e.getKey() and e.getKey().size() == 10, colMap.entrySet()))
filtered = list(filter(lambda e: TileTypeEnum.BRAM_L in e.getKey() and not TileTypeEnum.BRAM_R in e.getKey() and not TileTypeEnum.DSP_L in e.getKey() and not TileTypeEnum.DSP_R in e.getKey() and e.getKey().size() == 11, colMap.entrySet()))
...
...
...
>>> filtered = list(filter(lambda e: e.getKey().toString().count("CLB") == 4, m.entrySet()))>>> filtered.sort(key=lambda x: x.getValue().size(), reverse=True)
>>> pprint(filtered)[[CLBLM_R, CLBLL_L, CLBLM_R, CLBLL_L]=[73, 77, 97, 102], [CLBLL_L, CLBLM_R, CLBLL_L, CLBLM_R]=[74, 99, 103, 169],
[BRAM_L, CLBLM_R, CLBLM_L, DSP_R, CLBLM_L, CLBLM_R]=[59, 138], [CLBLM_R, CLBLM_L, DSP_R, CLBLM_L, CLBLM_R]=[63, 142], [CLBLM_L, CLBLL_R, BRAM_L, CLBLM_R, CLBLM_L]=[133],
[CLBLM_R, CLBLL_L, CLBLM_R, CLBLL_R]=[106],
[CLBLM_R, CLBLM_L, BRAM_R, CLBLL_L, CLBLM_R]=[162],
[CLBLL_L, CLBLM_R, CLBLL_L, CLBLM_L]=[78],
[DSP_L, CLBLM_R, CLBLM_L, BRAM_R, CLBLL_L, CLBLM_R]=[158], [DSP_R, CLBLM_L, CLBLM_R, CLBLL_L, CLBLM_R]=[68], [CLBLL_L, CLBLM_R, BRAM_L, CLBLM_R, CLBLM_L, DSP_R]=[54], [CLBLM_L, CLBLM_R, DSP_L, CLBLM_R, CLBLM_L, BRAM_R]=[153], [CLBLL_R, BRAM_L, CLBLM_R, CLBLL_L, CLBLM_R]=[92], [CLBLM_L, DSP_R, CLBLM_L, CLBLM_R, CLBLL_L]=[64],
[CLBLM_L, CLBLM_R, CLBLM_L, CLBLM_R]=[149],
[CLBLM_L, DSP_R, CLBLM_L, CLBLM_R, CLBLM_L]=[143], [CLBLM_R, CLBLM_L, CLBLM_R, DSP_L, CLBLM_R]=[152], [BRAM_R, CLBLL_L, CLBLM_R, CLBLL_L, CLBLM_R]=[167], [CLBLM_R, CLBLL_L, CLBLM_L, CLBLL_R, BRAM_L]=[81], [CLBLL_L, CLBLM_R, BRAM_L, CLBLM_R, CLBLM_L]=[54], [CLBLL_R, BRAM_L, CLBLM_R, CLBLM_L, DSP_R, CLBLM_L]=[136], [CLBLM_L, BRAM_R, CLBLL_L, CLBLM_R, CLBLL_L]=[163],
[CLBLM_R, CLBLL_R, CLBLM_L, CLBLL_R]=[110],
[CLBLM_L, CLBLL_R, BRAM_L, CLBLM_R, CLBLM_L, DSP_R]=[133],
[CLBLL_R, CLBLM_L, CLBLL_R, CLBLM_L]=[128],
[DSP_R, CLBLM_L, CLBLM_R, CLBLM_L, CLBLM_R]=[147],
[CLBLM_L, CLBLL_R, CLBLM_L, CLBLL_R]=[129],
[CLBLM_L, CLBLL_R, BRAM_L, CLBLM_R, CLBLL_L]=[89], [CLBLM_L, CLBLL_R, CLBLM_L, CLBLL_R, BRAM_L]=[129], [BRAM_L, CLBLM_R, CLBLL_L, CLBLM_R, CLBLL_L]=[93], [CLBLL_L, CLBLM_R, CLBLL_R, CLBLM_L]=[107],
[CLBLM_L, CLBLM_R, CLBLL_L, CLBLM_R]=[70],
[CLBLM_R, CLBLL_L, CLBLM_L, CLBLL_R]=[81],
[CLBLM_L, CLBLM_R, DSP_L, CLBLM_R, CLBLM_L]=[153], [CLBLL_R, CLBLM_L, CLBLL_R, BRAM_L, CLBLM_R]=[132], [CLBLM_L, CLBLM_R, CLBLM_L, CLBLM_R, DSP_L]=[149], [DSP_R, CLBLM_L, CLBLM_R, CLBLM_L, CLBLM_R, DSP_L]=[147], [CLBLL_L, CLBLM_L, CLBLL_R, BRAM_L, CLBLM_R]=[83], [CLBLM_R, CLBLL_L, CLBLM_R, BRAM_L, CLBLM_R]=[53], [CLBLM_R, BRAM_L, CLBLM_R, CLBLM_L, DSP_R, CLBLM_L]=[57], [CLBLM_R, DSP_L, CLBLM_R, CLBLM_L, BRAM_R, CLBLL_L]=[156]]