ID do artigo: 000076355 Tipo de conteúdo: Solução de problemas Última revisão: 24/05/2017

Por que o rapidIO port_ok de status não pode afirmar após a re-inicialização do link?

Problema crítico

Descrição

port_ok status em bit-0, erro de porta 0 e CSR de status (0x158) pode permanecer em LOW após a re-inicialização do link ocorrer. A re-inicialização do link é feita pelo acionamento de bit-23 PORT_DIS no CSR de controle da porta 0 (0x15C), ou quando o parceiro de link está executando a reinicialização. Isso pode causar um erro fatal durante a operação normal,

Este problema acontece devido aos seguintes motivos:

  • O núcleo RapidIO pode estar fora de reinicialização antes do transceptor sair do reset. Isso faz com que o núcleo RapidIO comece a operar enquanto o transceptor ainda está em reinicialização.
  • O processo de re-alinhamento da palavra é limitado à faixa 0 e será acionado apenas uma vez durante a reinicialização do link.

Este problema afeta as seguintes variantes do RapidIO I:

  • Arria® V/Cyclone® V com modo x2.
  • Arria V/Cyclone V à taxa baud 5000 Mbaud.
  • Arria V com modo x4 na taxa baud 3125 Mbaud.
Resolução

Para garantir que o transceptor está fora de reinicialização e pronto para iniciar qualquer operação antes do núcleo RapidIO, qualibilize o reset do núcleo RapidIO com os sinais de status prontos para transceptor no módulo _riophy_reset:

TX_SIDE

 

sempre @(posedge tx_clk ou negedge reset_n)

Começar

se (!reset_n) começar

tx_ready_s0 <= 1'b0;

tx_ready_s1 <= 1'b0;

 

fim de outra começa

tx_ready_s0 <= tx_ready;

tx_ready_s1 <= tx_ready_s0;

 

Final

 

Final

 

sempre @ (posedge tx_clk ou negedge reset_n) começar

se(!reset_n)começar

txreset_n_p2 <= 1'b0;

txreset_n_p1 <= 1'b0;

txreset_n <= 1'b0;

fim de outra começa

se (!gxbpll_locked_tx_clk_d2 || !tx_ready_s1) começar

txreset_n_p2 <= 1'b0;

txreset_n_p1 <= 1'b0;

txreset_n <= 1'b0;

fim de outra começa

txreset_n_p2 <= 1'b1;

txreset_n_p1 <= txreset_n_p2;

txreset_n <= txreset_n_p1;

Final

Final

Final

 

RX_SIDE

 

sempre @(posedge rx_clk ou negedge reset_n)

Começar

se (!reset_n) começar

rx_ready_s0 <= 1'b0;

rx_ready_s1 <= 1'b0;

 

fim de outra começa

rx_ready_s0 <= rx_ready;

rx_ready_s1 <= rx_ready_s0;

 

Final

Final

 

sempre @ (posedge rx_clk ou negedge reset_n) começar

se(!reset_n)começar

rxreset_n_p2 <= 1'b0;

rxreset_n_p1 <= 1'b0;

rxreset_n <= 1'b0;

fim de outra começa

se (!rx_ready_s1) começar

rxreset_n_p2<=1'b0;

rxreset_n_p1<=1'b0;

rxreset_n<=1'b0;

 

fim de outra começa

rxreset_n_p2 <= 1'b1;

rxreset_n_p1 <= rxreset_n_p2;

rxreset_n <= rxreset_n_p1;

 

Final

Final

Final

 

Para desencadear o processo de re-alinhamento de palavras manualmente, execute as seguintes etapas através da interface Avalon-MM phy_mgmt transceptor:

(1) Afirme phy_mgmt_write=1'b1 para especificar a operação de gravação.

(2) Gravar dados phy_mgmt_writedata=32'b0 no endereço phy_mgmt_address=9'h80 para atingir a faixa 0.

(3) Gravar dados phy_mgmt_writedata=32'b1 no endereço phy_mgmt_address=9'h85 para afirmar rx_enapatternalign que desencadeará a operação de alinhamento de palavras para a faixa 0.

(4) Gravar dados phy_mgmt_writedata=32'b0 no endereço phy_mgmt_address=9'h85 para desassert rx_enapatternalign.

Repita as etapas acima para todas as outras vias: faixa 1 (0x80=32'b1), pista 2 (0x80=32'b2) e faixa 3 (0x80=32'b3).

Produtos relacionados

Este artigo aplica-se a 2 produtos

Mostrar tudo

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.