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 12/15/2012
Status Active
Type General Article
People Also Viewed