Frequently Asked Questions

All FAQs | Organizational | General Technical
Specification Version | Relationship to Other Technologies | Bursting
Simulation & Test | Threads & Connections | Participant Membership/VSIA Status

Bursting

1. What is an OCP transfer?
2. What is an OCP transaction?
3. What is the burst model for OCP?
4. What is the difference between an incrementing burst and a streaming burst?
5. What do these burst codes mean?
6. Does the Burst Read timing diagram specify the number of transfers or number of bytes?
7. Why doesn't the burst code equal the number of words left?
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?
9. What burst size should I use?
10. The burst size for my core does not match any of the OCP burst codes. What do I do?
11. Can I transfer a burst that is longer than 8 OCP words?
12. Can I end a burst transfer early?
13. Can an OCP initiator abort a burst transfer after it is started?
14. Why would I want to enable burst on my initiator core?
15. What is a Single-Request Multiple-Data (SRMD) burst?
16. How can two-dimensional block burst sequences be handled?




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 ] ]
All FAQs | Organizational | General Technical
Specification Version | Relationship to Other Technologies | Bursting
Simulation & Test | Threads & Connections | Participant Membership/VSIA Status