Configuration Snoop Interface
The PCIe Controller has configuration space registers for each function as defined in the PCIe specifications. It supports PCI-compatible configuration space as well as PCIe extended space registers. The PCIe Controller automatically builds a linked list of capability structures, depending on the features you choose when configuring the PCI Express block in the Efinity Interface Designer.
During the enumeration process, the host can traverse through the PCIe Controller's linked list of structures to find out which features are supported. Root port software uses the same capability structures for control and status information. The PCIe configuration read/write TLPs are used for this purpose. The PCIe Controller maps an incoming configuration read/write TLP to a read/write access to the internal configuration space registers. The control fields of various capability structures route to different PCIe Controller layers so that the logic can use the control information as expected.
The PCIe Controller also has an optional configuration snoop interface that lets you implement your own register set in the PCIe configuration space. The interface snoops incoming configuration read/write TLPs received from the link and places them on a simple configuration snoop read/write interface. You can enable the configuration snoop interface in the Interface Designer.
CONFIG_REG_NUM value by 4. For example, a configuration space address of
0xa00 equates to a value on CONFIG_REG_NUM of 0x280.For a configuration write transaction, the interface places the address and data on the
configuration snoop interface and asserts the CONFIG_WRITE_RECEIVED signal
for one clock cycle. If the PCIe Controller implements the register being
accessed, the write data is updated internally.
For configuration read transactions, the interface places the address on the configuration
snoop interface and asserts the CONFIG_READ_RECEIVED signal for one clock
cycle. If you want to provide the read data externally for this address, your user application
must place the data on the CONFIG_READ_DATA[31:0] read data bus and assert
CONFIG_READ_DATA_VALID on the first clock cycle after
CONFIG_READ_RECEIVED is sampled high. The externally-provided data is sent
back in the completion TLP. If the CONFIG_READ_RECEIVED input is not asserted
by the user application, the PCIe Controller returns the data from its
registers.
If you need more clock cycles for the configuration snoop read, you set a local management
register bit. Set the Enable Extended Config Snoop Read bit in the Debug Mux Control 2
Register to 1 to change the read interface timing as shown in the following
figure. If you want to provide the read data externally for this address, the user application
must place the data on the CONFIG_READ_DATA[31:0] read data bus and assert
CONFIG_READ_DATA_VALID within the specified number of clock cycles after
CONFIG_READ_RECEIVED is sampled. If CONFIG_READ_DATA_VALID
is not asserted within the window, the PCIe Controller sends the data placed in
the internal registers to the completion TLP.
The control fields are routed from the internally implemented registers to the various parts of the PCIe Controller. Therefore, replacing a capability structure entirely outside the PCIe Controller is not possible.