AR# 46318: 13.4 - XST: option IOB = FORCE does not work the same as IOB = TRUE
13.4 - XST: option IOB = FORCE does not work the same as IOB = TRUE
When output signals of a registerare defined with the IOB attribute set to "FORCE", the equivalent registers are not kept after the synthesis process.
Whenthe output signals of a register are defined with the IOBattribute set to "FORCE", the associated equivalent registers are trimmed.However,when the same IOB attributeis set to TRUE all registers are kept and the registers are packed into an IOB.
Normally, the IOB attribute set to "FORCE" applied on a flop/register should be handled by XST the same way as it wouldhandle when an IOB attribute set to "TRUE" is applied on a flop/register. In this particular problem theoutput signals of a register/flopare not handled correctly when the IOB attributeis set to "FORCE," and as a result the flip-flopsare not mapped into the IOB anymore.
The following IOB attribute declaration with "FORCE"fails to keep DataBitOut2and DataBitOut3:
attribute IOB : string; attribute IOB of DataBitOut1 : signal is "FORCE"; attribute IOB of DataBitOut2 : signal is "FORCE"; attribute IOB of DataBitOut3 : signal is "FORCE";
To work around this problem, add the following attribute declaration to the trimmed signals in the HDL code:
attribute equivalent_register_removal : string; attribute equivalent_register_removal of DataBitOut2: signal is "no"; attribute equivalent_register_removal of DataBitOut3: signal is "no";