ID del artículo: 000077043 Tipo de contenido: Resolución de problemas Última revisión: 07/08/2023

¿Por qué mi IP física para PCI Express permanece en el estado de restablecimiento en caliente durante más de 2 ms después de que el host se cierra?

Entorno

BUILT IN - ARTICLE INTRO SECOND COMPONENT
Descripción

Debido a un problema con la IP dura de Altera® para las variantes PCI® Express que utilizan el controlador de restablecimiento parcial (SRC), es posible que no salga del estado de restablecimiento en caliente dentro del tiempo requerido.

Nota: Los diseños de Gen2 en Quartus versión 13.1 o posterior, y todos los diseños de Gen 3, para los dispositivos Stratix® V y Arria® V GZ, requieren el uso del SRC. Otros dispositivos no utilizan el SRC.

La secuencia para el restablecimiento en caliente es la siguiente:

  • El host PCIe inicia un hot reset y entra en su estado de hot reset
  • El IP duro entra en su estado de restablecimiento en caliente.
  • Una vez que el host PCIe deja su estado de restablecimiento en caliente, la IP dura debe permanecer en restablecimiento en caliente durante 2 ms adicionales y luego salir a Detect.Quiet, según la especificación PCIe.

Sin embargo, en los diseños que utilizan el SRC, el tiempo de espera de 2 ms se reiniciará si los receptores alternan locked_to_data en cualquiera de los carriles activos. Si hay ruido excesivo en alguno de los carriles, los receptores pueden alternar locked_to_data. Cada alternancia de locked_to_data hace que el contador de 2 ms se reinicie, potencialmente para siempre, dejando la IP dura en un estado de restablecimiento en caliente constante.

Resolución

Para evitar este problema, realice los pasos siguientes.

Abra el archivo altpcie_rs_serdes.v,

Busque y comente el código a continuación

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)) begin
hotreset_cnt <= hotreset_cnt-20\'h1;
Final
else begin

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

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

Insértese las líneas siguientes:

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;

Final
if(hotreset_2ms == 1\'b1) begin
exits_hotreset <= 1\'b0;
Final
else if ((dl_ltssm_r == 5\'h14) && (rx_signaldetect_sync[7:0]==8\'h0)) begin
exits_hotreset <= 1\'b1;
Final
if ((exits_hotreset == 1\'b1) && (hotreset_cnt > 20\'h0)) begin
hotreset_cnt <= hotreset_cnt-20\'h1;
Final
hotreset_2ms <= (hotreset_cnt==20\'h1)?1\'b1:1\'b0;

Productos relacionados

Este artículo se aplica a 4 productos

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

1

El contenido de esta página es una combinación de traducción humana y automática del contenido original en inglés. Este contenido se proporciona únicamente para su comodidad como información general y no debe considerarse como completo o preciso. Si hay alguna contradicción entre la versión en inglés de esta página y la traducción, prevalecerá la versión en inglés. Consulte la versión en inglés de esta página.