Problema crítico
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.
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).