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# 13799

LogiCORE PCI - Can the 64-bit PCI Core respond to both 64-bit and 32-bit transactions?


Can the 64-bit PCI Core respond to both 64-bit and 32-bit transactions?


Yes. Each of the 3 BARs in the 64-bit PCI LogiCORE can be set to respond to either 64-bit or 32-bit transactions when configured as memory space.

In the configuration file that accompanies the core, each BAR has a specific bit that is set to instruct the core how to respond when each BAR's address space is targeted.

For example, if BAR0 and BAR1 are set as follows in the "cfg.v" file:

(NOTE: If using "cfg.vhd", it is similar because only the syntax is changed.)

//BAR0 - 64 bit capable

assign CFG[0] = 'ENABLE;

assign CFG[32:1] = `Size1M;

assign CFG[33] = 'PREFETCH;

assign CFG[35:34] = `TYPE00;

assign CFG[36] = `MEMORY;

assign CFG[241] = 'SPACE64;

//BAR1 - 32 bit capable

assign CFG[37] = 'ENABLE;

assign CFG[69:38] = `Size1M;

assign CFG[70] = 'PREFETCH;

assign CFG[72:71] = `TYPE00;

assign CFG[73 = `MEMORY;

assign CFG[242] = 'SPACE32;

If the core is configured this way, then when an Initiator targets the BAR0 and asserts REQ64#, the core will respond with ACK64#. If the Initiator targets BAR0 and does not assert REQ64#, the core will accept the transaction and not assert ACK64#.

When BAR1 is targeted by an Initiator, the core will claim the transaction and not assert ACK64# regardless of the status of REQ64#. If the Initiator tried to address BAR1 and assert REQ64#, the Initiator is responsible for turning the transaction into 32 bits.

This is further explained in the user guide:


AR# 13799
Date Created 08/29/2007
Last Updated 12/15/2012
Status Active
Type General Article