The Open Core Protocol (OCP) is a freely available bus-independent protocol. Download full spec from »OCPIP. See also »D & R article.
A prominent feature is totally separate request and response ports. This makes it highly tolerant of delays over the network and amenable to crossing clock domains. However requests and responses must not get our of order since there is no id token. Older-style protocols where targets had to respond within a prescribed number of clock cycles cannot be used in these situations.
For each half of the port there are request and acknowledge signals, with data being transferred on any positive edge of the clock where both are asserted.
If a block is both an initiator and a target, such as our DMA controller example, then there are two complete instances of the port.