Command Validation/Decode Module - 3.0 English

NVMe Target Controller LogiCORE IP Product Guide (PG329)

Document ID
Release Date
3.0 English

This module validates the incoming command (SQE) from the arbitration module and does the following checks:

  • PRP1/2 offset error check
  • Invalid field in command

Once the command is validated validation, it is pushed to the local command buffer pool. If the command requires additional PRP entries, the required information (PRP list pointer) is pushed to PRP fetch manager module for fetching the remaining PRP data pointers. Once the first set of PRPs are fetched, the SQE command is modified and pushed on the cmd_m_axis towards the hardware application. Each command is appended with the UID. In case any error is encountered, the same is reported to the hardware/software application. The application may then prepare an error completion (CQE) and post it to the host using the NVMe TC IP. The format of the entry provided to the hardware/software application is shown in the following table.

Table 1. Validated Command Entry Format
Bitwidth Field Size (Bytes) Description
[511:0] SQE 64 Standard NVMe Command
[527:512] UID 2 NVMe TC level unique ID, used to identify PRP buffer.
Note: 16’hFFFF is used for no PRP list case.
[543:528] SQID 2 Submission Queue ID
[559:544] FNID 2 Physical/Virtual Function ID
[575:560] ERR_CODE 2 NVMe Command Validation Error Status

The error code decoding is provided in the following table.

Table 2. ERR_CODE Decoding
ERR_CODE Description
16’h0002 Invalid Field in Command:

Asserted when host submits a command that exceeds MDTS transfer size or in case of an invalid Namespace ID in the command.

16’h0006 Internal Error:

Error while fetching Submission Queue entry from QDMA/Host

16’h0013 PRP Offset Invalid:

The Offset field for a PRP entry is invalid. This may occur when there is a PRP entry with a non-zero offset after the first entry.