ID do artigo: 000077043 Tipo de conteúdo: Solução de problemas Última revisão: 30/09/2015

Por que o meu Hard IP para PCI Express permanece no estado de reinicialização a quente por mais de 2ms após a saída do Host?

Ambiente

BUILT IN - ARTICLE INTRO SECOND COMPONENT
Descrição

Devido a um problema com o Altera® Hard IP para variantes PCI® Express que usam o Soft Reset Controller (SRC), ele pode não deixar o estado de reinicialização quente dentro do tempo necessário.

Nota: os projetos da 2ª geração no Quartus versão 13.1 ou posterior, e todos os projetos da 3ª Geração, para os dispositivos Stratix® V e Arria® V GZ, exigem o uso do SRC. Outros dispositivos não usam o SRC.

A sequência de reinicialização a quente é a seguinte:

  • O host PCIe inicia uma reinicialização a quente e entra no estado de reinicialização a quente.
  • O HARD IP entra no estado de reinicialização a quente.
  • Assim que o host PCIe deixar o estado de reinicialização quente, o Hard IP deve permanecer em reinicialização quente para mais 2 ms e depois sair para Detect.Quiet, de acordo com a especificação PCIe.

No entanto, em projetos que usam o SRC, o tempo limite de 2ms será reiniciado se os receptores alternarem locked_to_data em qualquer uma das pistas ativas. Se existir ruído excessivo em qualquer uma das pistas, os receptores podem alternar locked_to_data. Cada alternância de locked_to_data faz com que o contador de 2ms seja reiniciado, potencialmente para sempre, deixando o Hard IP em um estado constante de reinicialização a quente.

Resolução

Para contornar esse problema, execute as seguintes etapas.

Abra o arquivo altpcie_rs_serdes.v,

Encontre e comente o código abaixo

dl_ltssm_r <= ltssm;
dl_ltssm_rr <= dl_ltssm_r;
se (dl_ltssm_r == 5\'h14) && (rx_signaldetect_sync[7:0]=8\'h0) && (hotreset_cnt>20\'h0)) começar
hotreset_cnt <= hotreset_cnt-20\'h1;
Final
outro começar

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;

Insira as seguintes linhas:

dl_ltssm_r <= ltssm;
dl_ltssm_rr <= dl_ltssm_r;
se (dl_ltssm_r == 5\'h14) && (dl_ltssm_rr != 5\'h14)) começar

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

Final
se (hotreset_2ms == 1\'b1) começar
exits_hotreset <= 1\'b0;
Final
caso contrário se (dl_ltssm_r == 5\'h14) && (rx_signaldetect_sync[7:0]==8\'h0)) começar
exits_hotreset <= 1\'b1;
Final
se (exits_hotreset == 1\'b1) && (hotreset_cnt > 20\'h0)) começar
hotreset_cnt <= hotreset_cnt-20\'h1;
Final
hotreset_2ms <= (hotreset_cnt==20\'h1)?1\'b1:1\'b0;

Produtos relacionados

Este artigo aplica-se a 4 produtos

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

O conteúdo desta página é uma combinação de tradução humana e por computador do conteúdo original em inglês. Este conteúdo é fornecido para sua conveniência e apenas para informação geral, e não deve ser considerado completo ou exato. Se houver alguma contradição entre a versão em inglês desta página e a tradução, a versão em inglês prevalecerá e será a determinante. Exibir a versão em inglês desta página.