What are inline and block in hierarchies?

Hey all! I’m trying to better understand how HLS tools handle function hierarchies, specifically the difference between ‘inline’ and ‘block’. I’ve seen both terms tossed around in synthesis reports and directives, but I’m not quite clear on their practical implications. Please share some info…

Inline is when the function is merged into the parent function and no separate hardware module is created.
The logic is integrated into the calling function. This is helpful in situations when sharing of resources is possible and not specific boundaries are needed.
Block is when the inner functions are not merged with the parent. Instead a separate module is created in the RTL and communication is done with specific protocols. ac_channels or axi protocols are used. Help in having separate boundaries between hierarchies and works best when sharing is minimal. Interconnect for classes or functions mapped to design blocks cannot be mixed with inlined C++ code.