文章 ID: 000077043 内容类型: 故障排除 上次审核日期: 2015 年 09 月 30 日

为什么在主机退出后,用于 PCI Express 的硬 IP 会保持热重置状态超过 2 毫秒?

环境

BUILT IN - ARTICLE INTRO SECOND COMPONENT
说明

由于使用软重置控制器 (SRC) 的 PCI® Express 变体的Altera®硬 IP 存在问题,它可能无法在规定的时间内离开热重置状态。

注意:Quartus 13.1 或更高版本中的 Gen2 设计以及面向 Stratix® V 和 Arria® V GZ 设备的所有 Gen3 设计都需要使用 SRC。其他设备不使用 SRC。

热重置的顺序如下:

  • PCIe 主机启动热重置并进入热重置状态。
  • 硬 IP 进入其热重置状态。
  • 一旦 PCIe 主机离开其热重置状态,硬 IP 应再保持热重置 2 毫秒,然后退出 Detect.Quiet,根据 PCIe 规范。

但是,在使用 SRC 的设计中,如果接收器在任何活动通道上切换locked_to_data,则将重启 2ms 超时。如果任何通道上存在过多的噪音,接收器可能会切换 locked_to_data每次切换locked_to_data 都会导致 2ms 计数器重新启动,可能是永远重新启动,使硬 IP 处于持续的热重置状态。

解决方法

要变通解决此问题,请执行以下步骤。

打开文件 altpcie_rs_serdes.v

查找并注释掉下面的代码

dl_ltssm_r <= LTSSM;
dl_ltssm_rr <= dl_ltssm_r;
if ((dl_ltssm_r == 5\'h14) && (rx_signaldetect_sync[7:0]==8\'h0) && (hotreset_cnt>20\'h0)) 开始
hotreset_cnt <= hotreset_cnt-20\'h1;
结束
否则开始

hotreset_cnt <= (test_sim==1\'b1)?20\'h10:(rc_inclk_eq_125mhz==1\'b1)?20\'h3D091:20\'h7A121;

结束
hotreset_2ms <= (hotreset_cnt==20\'h1)?1\'b1:1\'b0;

插入以下行:

dl_ltssm_r <= LTSSM;
dl_ltssm_rr <= dl_ltssm_r;
if((dl_ltssm_r == 5\'h14) && (dl_ltssm_rr != 5\'h14)) begin

hotreset_cnt <= (test_sim==1\'b1)?20\'h10:(rc_inclk_eq_125mhz==1\'b1)?20\'h3D091:20\'h7A121;

结束
if(hotreset_2ms == 1\'b1) 开始
exits_hotreset <= 1\'b0;
结束
否则如果 ((dl_ltssm_r == 5\'h14) && (rx_signaldetect_sync[7:0]==8\'h0)) 开始
exits_hotreset <= 1\'b1;
结束
if ((exits_hotreset == 1\'b1) && (hotreset_cnt > 20\'h0)) 开始
hotreset_cnt <= hotreset_cnt-20\'h1;
结束
hotreset_2ms <= (hotreset_cnt==20\'h1)?1\'b1:1\'b0;

相关产品

本文适用于 4 产品

Arria® V GZ FPGA
Stratix® V GS FPGA
Stratix® V GT FPGA
Stratix® V GX FPGA

本页面上的内容是原始英文内容的人工翻译与计算机翻译的组合。我们提供此内容是为了您的便利并且仅供参考,未必完整或准确。如果本页面的英文版与翻译版之间存在任何冲突,应以英文版为准。 查看此页面的英语版本。