- Generate CPM design to your specification and connect all the required interconnect or interfaces in your design within the Vivado IP integrator (BD design) and create an HDL wrapper for it (you can use the auto-generated HDL wrapper from Vivado).
- Generate the complement (RP or EP) simulation model by creating a new Vivado
IP integrator (BD design) that complements your DUT. For simplicity, it is
recommended to use PCIe controller mode only in Gen3 or lower
speed.Note: If you plan to use an existing PCIe example design from an earlier generation (for example, UltraScale+), simulation models are typically generated in Gen3x16 512-bit interface compatible only. Therefore, it is easier to generate your complement design to match this interface requirement for a simpler plug-n-play.
- If you choose to use PIPE simulation to shorten simulation time, it can be enabled by using the Enable External PIPE Interface option in the CIPS GUI as shown in the following figure:
Figure 1. Enable External PIPE Interface Option

This option exposes new interfaces called common_commands_in
, common_commands_out
,
pipe_rx_#_sigs
, and pipe_tx_#_sigs
where # is your PCIe lane
numbers, which provide direct connection between two PCIe
PHYs without the GT transceivers. The signal mapping is shown in the following
table:
In Commands | PCIE PIPE Signal Mapping | Out Commands | PCIE PIPE Signal Mapping |
---|---|---|---|
Pipe_commands_in[0] | Pipe_clk_input (sync to PIPE_RX buses) | Pipe_commands_out[0] | Pipe_clk_output (sync to PIPE_TX buses) |
Pipe_commands_in[13:1] | Not used | Pipe_commands_out[2:1] | Pipe_tx_rate[1:0] |
Pipe_commands_out[3] | Pipe_tx_rcvr_det | ||
Pipe_commands_out[6:4] | Pipe_tx_margin | ||
Pipe_commands_out[7] | Pipe_tx_swing | ||
Pipe_commands_out[8] | Pipe_tx_reset | ||
Pipe_commands_out[9] | Pipe_tx_deemph | ||
Pipe_commands_out[10] | Pipe_tx_rate[2] | ||
Pipe_commands_out[13:11] | Not used |
In Commands | PCIE PIPE Signal Mapping | Out Commands | PCIE PIPE Signal Mapping |
---|---|---|---|
Pipe_rx# _sigs[31:0] | Pipe_rx#_data | Pipe_tx# _sigs[31:0] | Pipe_tx#_data |
Pipe_rx# _sigs[33:32] | Pipe_rx#_char_is_k | Pipe_tx# _sigs[33:32] | Pipe_tx#_char_is_k |
Pipe_rx# _sigs[34] | Pipe_rx#_elec_idle | Pipe_tx# _sigs[34] | Pipe_tx#_elec_idle |
Pipe_rx# _sigs[35] | Pipe_rx#_data_valid | Pipe_tx# _sigs[35] | Pipe_tx#_data_valid |
Pipe_rx# _sigs[36] | Pipe_rx#_start_block | Pipe_tx# _sigs[36] | Pipe_tx#_start_block |
Pipe_rx# _sigs[38:37] | Pipe_rx#_syncheader | Pipe_tx# _sigs[38:37] | Pipe_tx#_syncheader |
Pipe_rx# _sigs[41:39] | Not used | Pipe_tx# _sigs[39] | Pipe_tx#_polarity |
Pipe_tx# _sigs[41:40] | Pipe_tx#_powerdown | ||
|