There is an issue when using the Stratix® V or Arria V GZ Hard IP for PCI Express® IP core, where the link does not consistently come up. This issue is seen when the core is configured as a native Gen 2 core. This problem is associated with the PCIe® Hard Reset Controller (HRC).
Asserting PERST or Local Reset does not help bring the link up. Reprogramming the FPGA may allow the link to be brought up, but this is also inconsistent.
To workaround this issue in Quartus II software version 12.1 SP1, use the following procedure to change to the Soft Reset Controller (SRC):
For the MegaWizard™ flow:
1) Edit the <project_dir>/>variant>/synthesis/<variant>.v file
2) Search for the string, "hip_hard_reset_hwtcl"
3) Set parameter hip_hard_reset_hwtcl = 0
4) Save the variant.v
5) Go to step 7
For the Qsys flow:
1) Using a text editor, edit the .qsys file
2) Search for the string "force_src"
3) Ensure the following parameters are set as shown below:
<parameter name="force_hrc" value="0" />
<parameter name="force_src" value="1" />
4) Save the changes to the .qsys file
5) Regenerate the Qsys system to apply the changes made to the underlying design files
6) Go to Step 7
Common steps:
7) Open <project_dir>/<variant>/submodules/sv_xcvr_pipe_native.sv file
8) Search for "cal_offset_mode"
9) If the following lines match those in your sv_xcvr_pipe_native.sv file, make the changes as shown in Step 10, otherwise continue to Step 11
.cal_offset_mode ((protocol_version == "Gen 2") ? "MODE_ACCUMULATION_MIDSWEEP" : "MODE_INDEPENDENT"),
.cal_oneshot((protocol_version == "Gen 2") ? "ONESHOT_ON" : "ONESHOT_OFF"),
.rx_dprio_sel((protocol_version == "Gen 2") ? "RX_CALIBRATION_SEL" : "RX_DPRIO_SEL"),
10)
.cal_offset_mode ("MODE_INDEPENDENT"),
.cal_oneshot ("ONESHOT_OFF"),
.rx_dprio_sel ("RX_DPRIO_SEL"),
11) Recompile design
12) Search the map report file (eg.top.map.rpt) for hip_hard_reset_hwtcl and ensure the value is set to 0
Note that making changes to the Qsys system or PCIe core and regenerating may undo some or all the changes.
This problem is has been fixed in v13.1 of the Quartus II software.