When I power-up, the PCI Express Core does not appear to train.
Xilinx recommends that you assert trn_rdst_rdy_n low from power-up.
This will protect against the possibility that a vendor-defined message is sent to the core ahead of the first configuration transaction or intermixed with configuration transactions. The message will not be consumed by the core, but will be passed to the user application. If this occurs, the core might not return the completion for the configuration transaction behind the message in a timely manner and the root complex might think the link is dead causing a system level problem, and making the core appear not to be trained. The configuration transaction will not be routed to the configuration management module in the core until the vendor-defined message ahead of it is drained by the user application. When you have trn_rdst_rdy_n asserted, it speeds up this process, allowing the core to return the completion sooner.