ID do artigo: 000082815 Tipo de conteúdo: Solução de problemas Última revisão: 10/04/2018

Por que eu observo a afirmação de erro intermitente ao executar várias reinicializações do exemplo de projeto de controle de máquina de estado RTL JESD204B IP?

Ambiente

  • Intel® Quartus® II Subscription Edition
  • Intel® Quartus® Prime Standard Edition
  • JESD204B Intel® FPGA IP
  • BUILT IN - ARTICLE INTRO SECOND COMPONENT

    Problema crítico

    Descrição

    Ao executar várias reinicializações dos dispositivos JESD204B IP RTL implementados em Intel® Arria® 10, Stratix® V, Arria® V ou Cyclone® V, você poderá observar pinos de interrupção (jesd204_tx_int e/ou jesd204_rx_int) sendo afirmados devido a erros(s), que podem ser lidos a partir do tx_err (0x60)), rx_err0 (0x60), e rx_err1 (0x64) registros.

    Resolução

    Para Intel Arria 10 dispositivos, use o exemplo Nios® II de design do processador.

    Para Stratix V, Arria V ou Cyclone V, execute as seguintes modificações no RTL:

    1. Modifique o módulo de jesd204b_ed no arquivo jesd204b_ed.sv.

    Defina fios de reinicialização alta ativos:

    fio tx_link_rst_sync;

    fio tx_frame_rst_sync;

    fio rx_link_rst_sync;

    fio rx_frame_rst_sync;

    fio global_rst_sync;

     

    Modifique a polaridade de reinicialização nas seguintes atribuições de fio:

    Mantenha o núcleo no modo de reinicialização até que o transceptor esteja pronto

    atribuir global_rst_n_sync = ~global_rst_sync; Adicionar global_rst_n_sync atribuição

    atribuir tx_avs_rst_n = avs_rst_n;

    atribuir rx_avs_rst_n = avs_rst_n;

    atribuir tx_frame_rst_n = ~tx_frame_rst_sync;

    atribuir rx_frame_rst_n = ~rx_frame_rst_sync;

    atribuir tx_link_rst_n = ~tx_link_rst_sync;

    atribuir rx_link_rst_n = ~rx_link_rst_sync;

     

    altera_reset_controller é um sincronizador ativo de alta reinicialização. Modifique a entrada e a saída das instações do sincronizador de reset de acordo para refletir a polaridade correta:

    //

    Redefinir os sincronizadores para reinicialização global (domínio do clock mgmt)

    //

    altera_reset_controller #(

    . NUM_RESET_INPUTS (1),

    . OUTPUT_RESET_SYNC_EDGES ("desaassert"),

    . SYNC_DEPTH (2)

    ) u_avs_rst_sync (

    .reset_in0 (~global_rst_n),

    .clk (mgmt_clk),

    .reset_out (global_rst_sync)

    );

     

    Execute bitwise AND on wire_tx_ready & wire_rx_ready, que são sinais de barramento.

    //

     

    Redefinir os sincronizadores para redefinição de camada de transporte (domínio do clock de quadros)

    //

    altera_reset_controller #(

    . NUM_RESET_INPUTS (1),

    . OUTPUT_RESET_SYNC_EDGES ("desaassert"),

    . SYNC_DEPTH (2)

    ) u_tx_frame_rst_sync (

    .reset_in0 (~(wire_frame_rst_n & wire_tx_ready)),

    .clk (frame_clk),

    .reset_out (tx_frame_rst_n_sync)

    );

     

    altera_reset_controller #(

    . NUM_RESET_INPUTS (1),

    . OUTPUT_RESET_SYNC_EDGES ("desaassert"),

    . SYNC_DEPTH (2)

    ) u_rx_frame_rst_sync (

    .reset_in0 (~(wire_frame_rst_n & wire_rx_ready)),

    .clk (frame_clk),

    .reset_out (rx_frame_rst_n_sync)

    );

     

    //

    Redefinir os sincronizadores para reinicialização básica do núcleo (domínio do clock do link)

    //

    altera_reset_controller #(

    . NUM_RESET_INPUTS (1),

    . OUTPUT_RESET_SYNC_EDGES ("desaassert"),

    . SYNC_DEPTH (2)

    ) u_tx_link_rst_sync (

    .reset_in0 (~(wire_link_rst_n & wire_tx_ready)),

    .clk (link_clk),

    .reset_out (tx_link_rst_n_sync)

    );

       

    altera_reset_controller #(

    . NUM_RESET_INPUTS (1),

    . OUTPUT_RESET_SYNC_EDGES ("desaassert"),

    . SYNC_DEPTH (2)

    ) u_rx_link_rst_sync (

    .reset_in0 (~(wire_link_rst_n & wire_rx_ready)),

    .clk (link_clk),

    .reset_out (rx_link_rst_n_sync)

    );

     

    ----------------------------------------

     

    2. No módulo control_unit (control_unit.sv ), altere o valor de redefinição para frame_rst, link_rst, avs_rst e xcvr_rst.

    //

    Registro de saída para reinicializações do transceptor de núcleo base

    //

    sempre @ (posedge clk ou negedge rst_n)

    Começar

    se (~rst_n) começar

    frame_rst

    link_rst

    avs_rst

    xcvr_rst

    fim de outra começa

     

    Não há nenhuma correção planejada para este problema.

    Produtos relacionados

    Este artigo aplica-se a 7 produtos

    FPGAs Intel® Arria® 10 e FPGAs SoC
    FPGAs Stratix® V
    FPGAs Arria® V e FPGAs SoC
    FPGA Cyclone® V GX
    FPGA Cyclone® V GT
    FPGA SoC Cyclone® V SX
    FPGA SoC Cyclone® V ST

    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.