Doubts on PCI

Do you have a question? Post it now! No Registration Necessary

Translate This Thread From English to

Threaded View
I was having a small problem interfacing a linux driver with a PCI
card (FPGA with OC PCI bridge Core). I was having problems when
sending data to addresses different from multiples of 4 (e.g 1, 2, 3,
5...)..After some homework i think  i could find the explanation to my
problem. Reading the PCI spec, i could see that on memory space
transactions (read and write), the bits 0 and 1 of the AD line on the
addressing phase are not part of the address, so i belive they are
aways considered as 0. So when i send something on the address 1, it
is going to perform 2 transactions, one with byte 0  1 and 2 of my
data related to the address 0, and a second one with the byte 3
related to the addres 4.  Am i assuming that correct? Is that how
linux drive the PCI bus when you send data one address 1 (or 2 .. 3 ..
5 and so on)? I could find on many places that x86 cannot perform
burst transactions, but when i write to an address 1 i see just one
transaction on my PCI side (i am monitoring when my device sets TRDY)
and 2 on my Wishbone (it does not suport burst yet), representing that
2 DWORDs were received. But when i read address 1 (always relared to
BAR1) i see 2 transactions on the PCI bus, and 2 on the wishbone bus.
So x86 can burst write but not read? And more weird, most addresses
behave like that but 5, 6 and 7 generate 2 write transactions (i did
not test all the others addresses, just some of them).. any idea why?

Thank you for the help!

Re: Doubts on PCI

Quoted text here. Click to load it
I can't help you with Linux driver or Wishbone or your PCI bridge, but
perhaps I can help you with PCI.
The PCI bus has four byte enables (also used for commands during the
addressing phase).  These are the same four signals that told you that the
transaction is a memory space read or write.  During the data phase, they
indicate which bytes are being transferred, with low (0) indicating the byte
is to be transferred, and high (1) indicating not being transferred.

There are four byte enables, with each one being a 0 or a 1, for a total of
16 combinations.  All 16 combinations are possible, including '1111'
indicating a null transfer.

Good luck!

Site Timeline