Hi,
I am hoping someone can help. We have a custom (inhouse) designed PCI
board that uses the Xilinx Virtex-II FPGA and their PCI core for a custom
interface application. It is a 64 bit 66Mhz PCI card. According to the
hardware designers, it follows the rules to be 64 bit compatible.
I am in charge of the software, specifically the device driver under
Windows 2000 Pro. Our development environment is MS Visual Studio.NET. I
used NuMega’s DriverWorks to create a driver that has a couple functions.
Its main function is open, and provide a DeviceIOControl method to memory
map one of the boards BAR spaces into the users calling process. This all
works fine, and 32 bit accesses to the board work fine. The user process
simply de-references a pointer offset based on the memory map of an
“unsigned __int32 *”.
However, I am attempting to do native 64 bit transfers to the PCI device.
I have already discovered that the MS compiler will not easily generate a
native 64 bit instruction (MOVQ), even if I declare the variable as
“unsigned __int64”. This is not a big deal, the inline assembly feature is
quite nice, and I have a simple inline routine that essentially does the
following (say for a write) where address is the device mapped address,
and data is the value to write…
MOVD edx,address
MOVQ mm0, data
MOVQ MMWORD PTR [edx], mm0
This result in two 32bit transfers to the PCI device (the data is
correct), as verified by a VMETRO PB615 PCI analyzer. According to the
hardware engineers, the system should attempt a 64bit transaction on the
PCI by asserting REQ64, and the board should respond with ACK64. The
analyzer NEVER sees REQ64 go active at any time, even through the reset,
POST, and reboot process, all the way through my software attempting a
64bit cycle as described above.
I can find little information on the subject to understand why a single 64
bit transaction is not performed instead of two 32 bit. I don’t know if
there is some setup I need to do to make sure the MMU, or chipset will
perform 64 bit transactions.
The hardware (the only one I have with a 64 bit PCI bus) is a SuperMicro
P4DSE motherboard with a Pentium 4 Xeon processor installed. This uses the
ServerWorks Grand Champion (GC-SL) chipset.
I hope someone has seen something similar, or knows more about it than I
do.
Thanks in advance,
Russ Poffenberger
xxxxx@nptest.com