This appendix describes the Fetch Interface which is used to provide the SEM controller a frame of essential bits data to use for classifying errors. It is only needed when the classification feature of the SEM controller is enabled. It also provides helpful information for you to replace the SPI flash master helper block with an alternate function like a parallel flash memory controller.
For AMD UltraScale™ SSI devices, the example design SPI flash master demonstrates how to manage a single SPI flash with the Fetch interfaces of multiple SLR. For all others, the example SPI flash master manages a single SPI flash with a single fetch interface.
The following figure illustrates the protocol used
on the transmit portion of the Fetch Interface. When the controller wants to transmit a byte
of data, it first samples the fetch_txfull
signal to determine
if the transmit buffer is capable of accepting a byte of data. Provided that fetch_txfull
is Low, the controller transmits the byte of data by
applying the data to fetch_txdata[7:0]
and asserting fetch_txwrite
for a single clock cycle.
The controller can perform burst writes by
applying a data sequence to fetch_txdata[7:0]
and asserting
fetch_txwrite
for multiple cycles. However, the controller
observes fetch_txfull
so that it never over-runs the transmit
buffer.
The peripheral receiving the data is responsible
for tracking its correct buffer availability and reporting it through fetch_txfull
. In the cycle after the peripheral samples fetch_txwrite
High, it must assert fetch_txfull
if the data written completely fills the buffer.
Further, the peripheral must only assert fetch_txfull
in response to fetch_txwrite
from the controller. Under no circumstances can the peripheral
assert fetch_txfull
based on events internal to the
peripheral. This requirement exists because the controller can sample fetch_txfull
several cycles in advance of performing a write.
While fetch_txfull
is asserted by the peripheral, the controller stalls if it is waiting
to transmit additional data. This can have negative side effects on the error mitigation
performance of the controller.
The following figure illustrates the protocol
used on the receive portion of the Fetch Interface. When the controller wants to receive a
byte of data, it first samples the fetch_rxempty
signal to
determine if the receive buffer is providing a byte of data. Provided that fetch_rxempty
is Low, the controller receives the byte of data from
fetch_rxdata[7:0]
and acknowledges reception by asserting
fetch_rxread
for a single clock cycle.
The controller can perform burst reads by
obtaining a data sequence from fetch_rxdata[7:0]
and
asserting fetch_rxread
for multiple cycles. However, the
controller observes fetch_rxempty
so that it never under-runs
the receive buffer.
The peripheral providing the data is responsible
for tracking its correct buffer status and reporting it through fetch_rxempty
. In the cycle after the peripheral samples fetch_rxread
High, it must assert fetch_rxempty
if the data buffer is empty.
Further, the peripheral must only assert fetch_rxempty
in response to fetch_rxread
from the controller. Under no circumstances can the peripheral assert
fetch_rxempty
based on events internal to the peripheral.
This requirement exists because the controller can sample fetch_rxempty
several cycles in advance of performing a read.
The data exchanged is binary and represents a
command-response pair. The data format is little endian. For data[7:0]
, 0 is the LSB and 7 is the MSB. For a 32-bit word Byte 0 is the least
significant byte, and Byte 3 is the most significant byte. The controller uses the Fetch
Interface to send commands and to read the classification data from external memory during the
classification state (status_classification
= 1). All
addresses are byte addresses, and all transactions are one byte at a time.
The controller transmits a 6-byte command
sequence to initiate a data fetch using fetch_tx
interface.
The command sequence is:
- Byte 1: ADD[31:24]
- Byte 2: ADD[23:16]
- Byte 3: ADD[15:8]
- Byte 4: ADD[7:0]
- Byte 5: LEN[15:8]
- Byte 6: LEN[7:0]
The ADD field is the address, and LEN field represents the number of bytes of data the controller expects to receive from the peripheral. In general, the command type is "read LEN bytes starting at ADD address." The ADD field value that the controller provides is dependent on the classification base pointer that is defined by the user. See Fetch Interface.
The following figure illustrates this command sequence.
In response, the peripheral must fetch LEN[15:0]
bytes of data starting from address ADD[31:0] and return this data to the controller. After
the controller has issued a command, the peripheral must fulfill the command with the exact
number of requested bytes on the fetch_rx
interface. The
following figure illustrates transaction with the LEN field equals 4.
fetch_rxread
port to reset this interface. The controller does not expect any data
from this read sequence and it can be ignored.fetch_rxempty
must be tied to ‘1’
and fetch_txfull
has to be tied to ‘0’ when the sem ip core is coming out of
reset.