I have packaged my design in Vivado 2017.x and it works correctly with the default customization parameters. However, if non-default parameters are used, it appears that IP core files (.xci) are not being delivered.
It is reporting black boxes for the modules that seem to have been moved out of the hierarchy.
This same design could be packaged and used without issues in Vivado 2016.4.
The problem appears to be related to conditional statements. The IP cores which are missing are only used based on the value of a generic or parameter.
For example, if the generic is true, the code will generate module A which instantiates IP_CORE_A and if false, it will generate module B which instantiates IP_CORE_B and "true" is the default value of the generic.
After packaging the design, I see that IP_CORE_B.xci has not been added to any of the File Groups of the package IP.
If a non-default customization value is used which requires this IP core, the implementation will fail because the core was not packaged and cannot be delivered.
This is a side effect of the issue covered in (Xilinx Answer 69320). The hierarchy parser evaluates the conditional statements when determining which files are to be sent to the IP Packager.
The parser code is only using the default value of generics and parameters based on the current level of hierarchy.
Therefore if the use of an IP core is dependent on a non-default value, it will not be sent to the IP Packager to be added to the file groups.In most cases, you can work around this issue by setting the "Hierarchy Update" option to "Automatic Update, Manual Compile Order".
set_property source_mgmt_mode DisplayOnly [current_project]
With this option, the hierarchy in the Vivado Hierarchy Source View will still be displayed based on the default value of generics and parameters, but all source files in the project will be sent to the IP packager.
The downside of using this parameter is that if there are any files in the project which are unused for all parameter values, they will also be added to the packaged IP.
You should manually remove these unused files from the file groups in the packaged IP.
In Vivado 2018.1 a solution for this issue is added under parameter control.
To use this fix in Vivado 2018.1 or 2018.2, run the following command in the Tcl console or in the vivado_init.tcl file before opening the project to be packaged.
set_param project.handleIPBDInactiveUnits 1
The parameter will be set by default in Vivado 2018.3.