In UltraScale and UltraScale+ designs generated with Vivado versions up to and including 2016.1, the DIFF_TERM attribute is not reported appropriately, nor is the attribute properly checked to ensure that a valid bank voltage is used when the attribute is defined in the HDL as TRUE.
In these designs if DIFF_TERM is set to TRUE in the HDL, the IBUFDS or IOBUFDS instance will enable the internal termination, but will not trigger Design Rules Checks on the attribute, nor will the design or reports indicate the presence of internal termination.
If a design resides in a 1.8V HP bank or a 2.5V HR bank (UltraScale only) on an LVDS input, there are no issues and the design will function with termination enabled even though the attributes presence is not detectable in the tools.
When DIFF_TERM is set to TRUE in the HDL, IBUFDS or IOBUFDS instance will enable the internal termination, but will not trigger all Design Rules Checks (DRC) on the attribute, nor will the design or reports indicate the presence of internal termination.
The DRC that is missed can allow an LVDS input with DIFF_TERM enabled to reside in a bank, whose bank voltage is not supported. Having DIFF_TERM enabled in a bank will not cause damage provided the input voltage does not violate the Data Sheets Vin (I/O input voltage for I/O banks) Specification.
Typically DIFF_TERM will be applied in the design constraints file (XDC) and thus there are no issues. However, when the attribute is defined in the HDL the design might be operating in a mode that is not expected by the user:
Several IP cores, such as memory interface IP will leverage the HDL to define the DIFF_TERM properly, so a safe way to ensure the most complete design is to enable the attribute on all LVDS and DIFF_SSTL inputs in the XDC file.
As noted, defining DIFF_TERM via the XDC file will ensure the implementation tools operate correctly and will over-ride any attribute set in the HDL.
When internal differential termination is NOT desired use the following:
set_property DIFF_TERM_ADV TERM_NONE [get_ports LVDS_P_PORTNAME]
When internal 100ohm differential termination IS desired use the following:
set_property DIFF_TERM_ADV TERM_100 [get_ports LVDS_P_PORTNAME]