I/O Behavior - 4.4 English

UltraScale Devices Gen3 Integrated Block for PCI Express LogiCORE IP Product Guide (PG156)

Document ID
PG156
Release Date
2023-11-24
Version
4.4 English

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.

TIP: In your top-level design, infer or instantiate an OBUFT. Control the enable (port named T) with 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 note 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.