I am using MMCM internal compensation via a direct connection (wire) from the CLKFBOUT to the CLKFBIN port in the instantiation.
However, in the synthesized design, the CLKFBIN port is grounded and the CLKFBOUT is left unconnected.
Is this expected behavior? Why does the tool trim the net?
Yes, this is expected behavior introduced in Vivado 2015.3. This affects MMCME3*, MMCME4*, PLLE3*, PLLE4* primitives.
When COMPENSATION = INTERNAL, the MMCM uses its own internal feedback path and the CLKFBIN is not used.
When opening the Synthesized design or running opt_design, the connection between CLKFBOUT and CLKFBIN will be optimized away if the compensation of the MMCM is set to internal, so that it does not waste routing resources.
You will see the following message in the synthesis report in Vivado 2016.1 and later versions:
This is the correct representation for internal feedback. It is also documented on Page 48 of (UG572) v1.3.
The direct source code connection (wire) from CLKFBOUT to CLKFBIN is optimized away by logic optimization.