| 1: |
What is an OCP transfer? |
| A: |
There are in OCP 1.0 two types of transfers, a posted write
transfer and a read transfer.
When an OCP initiator issues a write request to an OCP target, it
also specifies an address where the slave should store the data
associated with the request. When the slave receives the request,
address and data, a posted write transfer has occurred. Likewise,
when a master issues a read request to an OCP target, it also
specifies an address from which to fetch the data associated with the
request. When the master receives the data, a read transfer has
occurred. Finally, OCP defines a broadcast transfer which is similar
to a write transfer but is intended to be relayed to multiple
entities that connect to the receiving slave interface. |
|
| 2: |
What is an OCP transaction? |
| A: |
Multiple request transfers of the same type can be grouped
together to create a transaction. This is also called a burst. Note
that this is not one long transfer (as in PCI for example) but
instead is a sequence of individual short (single OCP word) transfers
that are linked together. |
|
| 3: |
What is the burst model for OCP? |
| A: |
OCP 1.0 defines two burst address sequencing models, one for
memory bursts (incrementing) and one for FIFO bursts (streaming). It
also allows two additional application-defined burst models. In each
of the four models, a burst code associates each individual transfer
with a single burst transaction. OCP 2.0 contains significant
enhancements to the burst model, including additional burst address
sequencing models, as well as adding the precise bursts and
single-request multiple-data (SRMD) burst models. In addition, the
Wrapping, Exclusive-Or (XOR) and Unknown address sequences were added
to the set of burst address sequencing models. OCP 2.0 provides three
general burst models: the imprecise burst model used in OCP 1.0, the
precise burst model and the Single Request Multiple Data (SRMD) burst
model. |
|
| 4: |
What is the difference between an incrementing burst and a
streaming burst? |
| A: |
With an incrementing burst the target address increments with
each transfer comprising the burst. The increment value is the OCP
word size. With streaming bursts, the address value remains static.
With both type bursts, the OCP Initiator is required to supply the
correct address associated with each burst transfer and mark the last
transfer as LAST. |
|
| 5: |
What do these burst codes mean? |
| A: |
In the case of imprecise bursts, burst codes are just a hint from
the initiator to the target on how long a burst transaction will
continue. The last transfer associated with a burst has a burst tag
value of LAST. This is the only burst value that can be interpreted
with complete certainty. In the case of precise bursts, the
request information is given for each transfer, but the burst length
is fixed throughout the entire transaction. |
|
| 6: |
Does the Burst Read timing diagram specify the number of
transfers or number of bytes? |
| A: |
MBurstLength specifies the number of OCP words contained in the
burst, not the number of bytes. Since the OCP interface can be any
value between 1 to 16 bytes, this burst code refers to the number of
OCP words in the burst that are going to be transferred. |
|
| 7: |
Why doesn't the burst code equal the number of words
left? |
| A: |
In the case of an imprecise burst, the burst length code is
simply meant to be a hint. There is no particular obligation assumed
by the target to use the hint. In the case of a precise burst,
the burst length code is held constant and contains the precise
length of the burst transaction. |
|
| 8: |
How does an initiator make sure that a write burst has been
committed to its target before it signals another initiator that data
is indeed ready? |
| A: |
The initiator that wrote the data needs to read it back and
examine it for accuracy to ensure the data has been correctly
written. |
|
| 9: |
What burst size should I use? |
| A: |
Use what ever size is convenient. However, bursts can obstruct
all other transfers (i.e. on the same thread) not associated with the
burst until the burst completes. There are also cases where some
performance advantage can be gained by restricting bursts to binary
power lengths of OCP words. |
|
| 10: |
The burst size for my core does not match any of the OCP burst
codes. What do I do? |
| A: |
Bursts are a hint, not a guarantee. Thus, you can use a burst tag
of CONT for all transfers except for the last one, which should be
tagged LAST. You can also use the largest available burst size that
is not greater than your burst length, and use it multiple times. For
example a 6 word burst could be done by using the burst code of 4
multiple times until the remaining length is less than 4. |
|
| 11: |
Can I transfer a burst that is longer than 8 OCP
words? |
| A: |
Yes, see above. Also, a transfer can continue to present a burst
tag value of EIGHT as long as at least eight transfers remain. |
|
| 12: |
Can I end a burst transfer early? |
| A: |
An initiator can always end a request burst "early" by tagging
what would normally be an intermediate transfer as LAST. However,
some targets may need to logically clean up after a burst ends
"early" if it has assumed a state that requires additional
transfers. |
|
| 13: |
Can an OCP initiator abort a burst transfer after it is
started? |
| A: |
Tagging a transfer as LAST always terminates a burst. This is
different than aborting which implies withdrawing the burst.
According to the OCP specification, it is illegal to abort a burst
after it has been started. |
|
| 14: |
Why would I want to enable burst on my initiator
core? |
| A: |
The main use for the type of burst information available on an
OCP core is to pre-fetch data from memory (for reads) or keep a
memory bank or page open (for writes). The other use comes from
resource locking - once a burst has started on an OCP thread (port),
the port OCP thread is dedicated to that burst and is locked to all
other commands from other threads activities until the burst is
complete. |
|
| 15: |
What is a Single-Request Multiple-Data (SRMD) burst? |
| A: |
A Single-Request Multiple-Data (SRMD) burst is the same as a
precise burst, but the request information is only given once for the
entire burst transaction. This SRMD burst category can be thought of
as a “data packet” burst transaction. |
|
| 16: |
How can two-dimensional block burst sequences be handled? |
| A: |
With OCP version 2.2, the new two dimensional block burst address sequence was added. This new burst address sequence provides the ability to specify block sub-sequences, each of which follows the normal incrementing burst address sequence model. |
|
| [[CODE ] ] |