I have a design that fails with the error codes "Pack:679" and "Pack:2811". When I search for an Answer Record that matches these problems, I receive several results that cover a variety of issues.
How can I determine whether any of the Answer Records are a good match for my issue?
Overview
Pack:679 and Pack:2811 errors are general purpose errors that handle a wide variety of error conditions that might occur if the packer is unable to resolve hard constraints. The constraints involved might be packing constraints or location constraints since, in either case, logic elements are constrained to the same component.
Example of Pack:679 message
ERROR:Pack:679 - Unable to obey design constraints (LOC =SLICE_X0Y0) which require the combination of the following symbols into a single slice component:
FLOP symbol ...
FLOP symbol ...
The clock signals don't agree. Please correct the design constraints accordingly.
Understanding the three sections of the message
Example of Pack:2811 message
ERROR:Pack:2811 - Directed packing was unable to obey the user design constraints (LOC=A13) which requires the combination of the symbols listed below to be packed into a single IBUF component.
The directed pack was not possible because: There is more than one pad symbol.
The symbols involved are:
BUF symbol "BPI_CS_N_I_ibuf(0)" (Output Signal = BPI_CS_N_I_int(0))
PAD symbol "BPI_CS_N_I(0)" (Pad Signal = BPI_CS_N_I(0))
PAD symbol "BPI_CS_N_I(1)" (Pad Signal = BPI_CS_N_I(1))
Understanding the three sections of the message
Debug steps
In these simple cases, it is easy to identify the root cause of the pack failure. Other cases can be more difficult to understand but can be debugged by examining the details of the logic involved and the error reported. All pack errors involve a resource limitation in the component involved (Slices, IOBs, etc.). This limitation is either a BEL (Basic Element of Logic) based limitation or a connectivity restriction as in the example above. BEL conflicts are easy to debug. For example, it is not hard to understand why a Pack:679 error would occur if three LUTs are constrained to a single Virtex-4 Slice that contains only two LUT BELs. Connectivity restrictions can be harder to understand since they require a more detailed understanding of the resources available in the component and the logic that is targeted to the component. The following steps can be used to debug the root cause of the error:
Current known causes of Pack:679 errors
(Xilinx Answer 6968) - Floorplanner does not check for clock conflicts for Slice FFs
(Xilinx Answer 6968) - Floorplanner allows standard I/O components to be improperly constrained to clock IOBs
(Xilinx Answer 18889) - MAP incorrectly optimizes MUXCYs and XORCYs to LUTs causing a conflict
(Xilinx Answer 8926) - Two signals accidently constrained to the same pad
(Xilinx Answer 23694) - Failed inverter push blocks a legal slice pack