For each I/O that is required for stage 1 of a Tandem
Configuration design, the entire bank in which that I/O resides must be configured in the
stage 1 bitstream. In addition to this bank, the configuration bank (65) is enabled also, so
the following details apply to these two banks (or one, if the reset pin is in the
configuration bank). For PCI Express, the only signal needed in the stage 1 design is the
sys_reset
input port. Therefore, any stage 2 I/O in the same I/O bank as
sys_reset
port is also configured with stage 1. Any pins in the same I/O
bank as sys_reset
are unconnected internally, so output pins demonstrate
unknown behavior until their internal connections are completed by the stage 2 configuration.
Also, components requiring initialization for the stage 2 functionality should not be placed
in these I/O banks unless these components are reset by the design after stage2 is
programmed.
If output pins must reside in the same bank as the
sys_reset
pin and their value cannot float prior to stage 2 completion, the
following approach can be taken. Use an OBUFT that is held in 3-state between stage 1
completion (when the output becomes active) and stage 2 completion (when the driver logic
becomes active). The mcap_design_switch
signal can be used to control the
enable pin, releasing that output when the handshake events complete.
mcap_design_switch
– watch the
polarity!
OBUFT test_out_obuf (.O(test_out), .I(test_internal),
.T(!mcap_design_switch));
Using the syntax below as an example, create a Pblock to contain
the reset pin location.This Pblock should contain the entire bank of I/O along with the
associated XiPhy and clocking primitives. The first column of FPGA slice resources should also
be included in the Pblock so that it is aligned with partial configuration boundaries. Any
logic that should be placed in this region should be added to the Pblock and identified as
stage 1 logic using the HD.TANDEM property. It is important to know that this logic becomes
active after stage 1 is loaded whereas the driving logic might not become active until stage 2
is loaded. The system design should be created with this consideration in mind. It is
recommended that they be grouped together in their own Pblock. The following is an example for
an output port named test_out_obuf
.
# Create a new Pblock
create_pblock IO_pblock
set_property HD.TANDEM 1 [get_cells <my_cell>
# Range the Pblock to include the entire IO Bank and the associate XiPhy and clocking primitives.
resize_pblock [get_pblocks IO_pblock] -add { \
IOB_X1Y52:IOB_X1Y103 \
SLICE_X86Y60:SLICE_X86Y119 \
MMCME3_ADV_X1Y1 \
PLLE3_ADV_X1Y2:PLLE3_ADV_X1Y3 \
PLL_SELECT_SITE_X1Y8:PLL_SELECT_SITE_X1Y15 \
BITSLICE_CONTROL_X1Y8:BITSLICE_CONTROL_X1Y15 \
BITSLICE_TX_X1Y8:BITSLICE_TX_X1Y15 \
BITSLICE_RX_TX_X1Y52:BITSLICE_RX_TX_X1Y103 \
XIPHY_FEEDTHROUGH_X4Y1:XIPHY_FEEDTHROUGH_X7Y1 \
RIU_OR_X1Y4:RIU_OR_X1Y7 \
}
# Add components and routes to stage 1 external Pblock
# This constraint should be repeated for each primitive within this pblock region
add_cells_to_pblock [get_pblocks IO_pblock] [get_cells test_out_obuf]
# Identify the logic within this pblock as stage1 logic by applying the HD.TANDEM property.
# This constraint should be repeated for each primitive within this pblock region
set_property HD.TANDEM 1 [get_cells test_out_obuf]
The remaining user I/O in the design are pulled active-High, by
default, during the stage 2 configuration. The use of the PUDC_B
pin, when
held active-High, forces all I/O in banks beyond the three noted above to be in 3-state mode.
Between stage 1 and stage 2, which for Tandem PCIe could be a considerable
amount of time, these pins are pulled Low by the internal weak pull-down for each I/O as these
pins are unconfigured at that time.