11-22-2017 11:05 AM - edited 11-22-2017 11:09 AM
I have a module that contains some combinatorial logic that can be mapped to fit in one slice. I was wondering if there was a way to force this module to be fit in one slice without having to specify the placement of each LUT.
Vivado does sometimes optimize the module into one slice, is there a way I can save this configuration from the floorplanning window as a macro of some sorts, so the module will always maintain the same relative layout within each slice?
This module is used thousands of times, so manually placing them is not an option.
EDIT: Basically I'm trying to avoid having to manually map the combinatorial logic to LUTs, I'd rather let Vivado do it once and save the results for future use.
11-22-2017 11:20 AM - edited 11-22-2017 11:22 AM
I would suggest that you bite the bullet and just use code that places the logic where you want it. Using XDC constraints is tricky, and not very amenable to being parameterized in your source code. Since you are making a module that will be repeated many times, crafting a good solution will pay dividends in the future. You will want to use RLOC constraints, so that LUT addressing location is relative to the lower left corner of your module. RPM design in RTL can be a very powerful technique.
11-27-2017 12:45 AM
I've been trying to use RLOCs and they work to some extent, but I can't seem to prevent opt_design from removing elements. It seems that once opt_design removes a single RLOC element it messes up the whole thing. If I don't run opt_design the RLOCs work correctly.
Searching for information on RLOCs, KEEP attributes, DONT_TOUCH, etc... half the information is outdated and doesn't apply anymore. I was using LUT_MAP for a while but apparently that doesn't do anything anymore, so now I am using truth table strings with the LUT macros. I don't understand why Xilinx makes manual floorplanning so difficult.
11-27-2017 02:29 AM
Are you using XDC macros?
Refer to "XDC macros" section in https://www.xilinx.com/support/documentation/sw_manuals/xilinx2017_3/ug903-vivado-using-constraints.pdf
Look at the examples given in "managing macros" section.