UPGRADE YOUR BROWSER

We have detected your current browser version is not the latest one. Xilinx.com uses the latest web technologies to bring you the best online experience possible. Please upgrade to a Xilinx.com supported browser:Chrome, Firefox, Internet Explorer 11, Safari. Thank you!

AR# 20464

LogiCORE PCI-X - Why does the PCI-X Core tranmit 64-bit initiator request of less than 3 quadwords as a 32-bit request?

Description

General Description:

Under the "Basic Initiator Control" section of the PCI-X User Guide on page 77, it states:

"64-bit wide data transfer is requested by setting bit 28. If used with a memory command or a split completion, and the requested transfer is at least three QWORDS, setting this bit will result in a 64-bit data transfer request on the bus. Otherwise, the transfer will take place as a 32-bit data transfer."

Why is this?

Solution

This eliminates some undesirable corner cases related to the deassertion of FRAME#.

Yes, if you have one QWORD, it is possible to do a single 64-bit transfer. But it raises some corner cases that would have to be addressed.

For example, if you assert FRAME# and REQ64#, for your single dataphase QWORD transfer, and then deassert those signals immediately to indicate you are doing one dataphase. What if the target responds only with DEVSEL# and not ACK64#? Then, only one DWORD transfers, and then you have to finish the transfer because you indicated it was one dataphase. So you have to start a second transfer to move the other DWORD.

In developing the core, it was decided that small transfers should be transformed as 32-bit only, so that situations such as this do not happen. The trade off is:

* always have a "couple" more dataphases for small transfers

(constant, small overhead ~50%)

versus

* sometimes have to do multiple transfers

(system dependent, large overhead >100%)

If you only have 32 bits of data, you should do a 32-bit transfer.

AR# 20464
Date Created 09/03/2007
Last Updated 12/15/2012
Status Active
Type General Article