Within an FPGA, various memories (latches, block RAMs, distributed RAMs)
contain the state of signal routing, BEL configuration, and runtime
storage. Configuration is the process of loading an initial state into all of
these memories both to define the intended logic operations as well as set
initial data for runtime memories. Note that the same mechanisms used for
configuration are also capable of reading out the active state of these
memories as well. This can be used to examine the contents of a block RAM or
other memory at any point in the device’s operation.

As described in Overview, 7-Series FPGAs are constructed
out of tiles organized into clock domains. Each tile contains a set of BELs and the memories used
to configure them. Uniquely addressing each of these memories
involves first identifying the horizontal clock row, then the tile within
that row, and finally the specific bit within the tile.

Horizontal clock row addressing follows the hierarchical structure described
in Overview with a single bit used to indicate top or bottom half
and a 5-bit integer to encode the row number. Within the row, tiles are connected to
one or more configuration busses depending on the type of tile and what configuration
memories it contains. These busses are identified by a 3-bit integer:

Address

Name

Connected tile type

000

CLB, I/O, CLB

Interconnect (INT)

001

Block RAM content

Block RAM (BRAM)

010

CFG_CLB

???

Within each bus, the connected tiles are organized into
columns. A column roughly
corresponds to a physical vertical line of tiles perpendicular to and centered over
the horizontal clock row. Each column contains varying amounts of configuration data
depending on the types of tiles attached to that column. Regardless of the amount,
a column’s configuration data is organized into a multiple of frames.
Each frame consists of 101 words with 100 words for the connected tiles and 1 word for
the horizontal clock row. The 7-bit address used to identify a specific frame within
the column is called the minor address.

Putting all these pieces together, a 32-bit frame address is constructed:

Columns on this bus are comprised of 50 directly-attached interconnect tiles with various
kinds of tiles connected behind them. Frames are striped across the interconnect tiles
with each tile receiving 2 words out of the frame. The number of frames in a column
depends on the type of tiles connected behind the interconnect. For example, interconnect
tiles always have 26 frames and a CLBL tile has an additional 12 frames so a column of CLBs
will have 36 frames.

As the name says, this bus provides access to the block RAM contents.
Block RAM configuration data is accessed via the CLB, I/O, CLB bus. The mapping
of frame words to memory locations is not currently understood.