04-29-2020 09:05 AM
I've got a design that passes a lot of registers contained an object, that is passed to various functions. These functions all use common methods on that object. When a local instance of the method is created, they all create pipeline registers for pipeleining. Normally this is what I would want BUT I know these registers are initialized when I start the HLS function, and remain constant for the remainder of operation. How can I help HLS understand this so it doesn't waste cycles and resources pipeleining unnecessarily in such cases?
04-30-2020 03:54 AM
My guess is that HLS is inserting registers because the register bank you're "passing" is in one physical location on the chip, but the local function instances are spread out. It needs extra registers to cope with the delays in accessing the register bank.
04-30-2020 03:00 PM
@u4223374 - I don't believe this is the case. HLS has a particular naming convention that it uses for pipeline registers.
Very basic mockup code:
const Object_c object(init_params); //Contains LOTs of registers funcA(object, otherstuff); funcB(object, otherstuff); funcC(object, otherstuff); fundD(object, otherstuff);
Each of those functions will want to pipeline those registers in object. And I do want the functions to pipeline otherstuff, but to treat object as a constant, similar to the stable directive or ap_stable interface. Do you follow?