Why do flip-flops not get packed into the IOB when DONT_TOUCH and IOB attributes are applied in HDL?
The DONT_TOUCH attribute in RTL is evaluated early and doesn't allow the register/flip-flop to be packed into the IOB.
When using the DONT_TOUCH attribute in the HDL code, it prevents Vivado Synthesis from doing any optimization to the logic applied.
As a result, certain logic defined with the I/O registers (like in I/O ports) may prevent the tool from mapping the flip-flops into the corresponding I/O registers.
This can cause a conflict between attributes, for example DONT_TOUCH and IOB.