There are 64 CAL_SEQ_STATUS registers which contain the calibration stage codes as well as the status of each calibration stage. Calibration starts with CAL_SEQ_STATUS_0. There are 64 registers allowing for a maximum of 64 stages, but in practice only a subset is utilized.
The CAL_POINTER register indicates the current status and stage of calibration. By the time the Hardware Manager refreshes these registers it is likely that calibration has already completed, so you should not expect to see it change values. In the event of a calibration error, it will point at the stage where the error occurred. In the event of an error during calibration, the Vivado Hardware Manager will display additional information regarding the reason for failure.
The encoding of the CAL_SEQ_STATUS and CAL_POINTER register is shown in the following table.
0: Stage enabled, but not yet started
1: Stage not yet started, but will be skipped (invalid or unnecessary due to lower frequency operation)
3: Calibration in progress
4: Calibration stage has been skipped
6: Calibration stage completed successfully
7: Calibration stage failed
Stage encoding. The following list represents the encoding of the stages, but does not imply the same sequence is used for calibration.
If calibration has completed successfully, CAL_POINTER Status will be b'110 (Calibration stage completed successfully) and the Stage will be x3f (CAL_DONE). The concatenated value will be x1bf. If calibration encounters an error, the Status will be b'111 (Calibration stage failed) and the Stage will indicate the failing stage.
If a calibration error occurs, Hardware Manager extracts the error code from the register CAL_ERROR. The error codes can be decoded from Table 2.
If there is a bit or a nibble number given in the error message, it refers to the physical pin/nibble number given in the package file for the I/O triplet containing the memory controller.
There are three IO Banks in a triplet. The first IO bank contains nibbles 0..8, the next contains 9..17, and the last 18..26.
- N5 = Nibble 5 (0 to 8 in each IO Bank)
- P5 = Pin 5 (0 to 5 in each Nibble)
- M0 = Triplet 0 (0 to X in the ACAP)
- P89 = Pin 89 (0 to 161 in each triplet )
- 701 = IO Bank 701