ID do artigo: 000085194 Tipo de conteúdo: Solução de problemas Última revisão: 12/06/2013

Por que a saída do controlador de reconfiguração do transceptor reconfig_busy fica presa alta após uma reinicialização?

Ambiente

  • Intel® Quartus® II Subscription Edition
  • BUILT IN - ARTICLE INTRO SECOND COMPONENT
    Descrição

    A reconfiguração do transceptor \'reconfig_busy\' porta de saída pode ficar presa, afirmada alta após uma afirmação de redefinição.  Os canais do transceptor conectados ao controlador de reconfiguração afetado também podem ficar travados na reinicialização.  A porta de saída \'reconfig_busy\' permanece presa mesmo após redefinir o controlador de reconfiguração; apenas reprogramar o dispositivo pode resolver o problema.

    Este sintoma pode ser causado pela estrutura de reinicialização interna do controlador de reconfiguração do transceptor.  Uma afirmação assíncrona de redefinição da lógica que conduz o barramento de endereço de uma RAM M20K pode causar propagação lógica assíncrona.  Isso pode fazer com que várias linhas de endereço no M20K se tornem afirmadas simultaneamente, o que pode causar compartilhamento de carga entre células de bits, corrompendo o conteúdo do M20K.

    Esta corrupção afeta o controlador de reconfiguração de dispositivos Stratix® V e Arria® V GZ porque contém um processador Nios® II que é usado para calibração de PMA, e o código do programa do processador é armazenado na RAM M20K.  Se a corrupção ocorrer dentro da memória Nios® II do programa, isso pode fazer com que o processador seja travado, resultando na porta de reconfig_busy de saída ficando emperrada.  A recuperação desta situação só é possível reprogramando o dispositivo, pois o conteúdo do M20K é carregado apenas durante a programação do dispositivo.

    Resolução

    A correção para este problema alterará o controlador de reinicialização interna e a estrutura de redefinição do controlador de reconfiguração do transceptor para usar reinicializações síncronas, bem como desaconsorize preventivamente a porta clock_enable M20K durante uma condição de reinicialização.

    A correção estará disponível em uma versão futura do software Quartus® II.  Um patch pode ser fornecido para versões anteriores do software Quartus II enviando uma solicitação de serviço no meuSupport.  Se uma solução for necessária imediatamente, a correção pode ser aplicada manualmente usando as seguintes instruções.

    Há 9 arquivos que precisam ser adicionados ou modificados:

    • altera_reset_controller_early_ce_mod.v (adicionar)
    • altera_reset_synchronizer_early_ce_mod.v (adicionar)
    • Arquivo QIP associado ao controlador de reconfiguração do transceptor (modifique)
    • alt_xcvr_reconfig.sv (modificar)
    • alt_xcvr_reconfig_soc.sv (modificar)
    • alt_xcvr_reconfig_cpu.v (modificar)
    • alt_xcvr_reconfig_cpu_ram.sv (modificar)
    • sv_xrbasic_lif_csr.sv (modificar)
    • sv_xcvr_reconfig_mif_avmm.sv (modificar)

    Esses 9 arquivos devem estar localizados no diretório onde o controlador de reconfiguração do transceptor foi gerado.


    Baixe altera_reset_controller_early_ce_mod.v e coloque-o no diretório onde os arquivos de reconfiguração do transceptor são mantidos:

    Download altera_reset_synchronizer_early_ce_mod.v e coloque-o no diretório onde os arquivos de reconfiguração do transceptor são mantidos:

    Para adicionar esses dois arquivos ao seu design, localize e modifique o arquivo .qip associado à instância do controlador de reconfiguração do transceptor e adicione as duas linhas a seguir ao arquivo:
    set_global_assignment -library "LIBRARY_NAME" -name VERILOG_FILE [junte-se a $:quartus(qip_path) "LIBRARY_PATH/altera_reset_controller_early_ce_mod.v"]
    set_global_assignment -library "LIBRARY_NAME" -name VERILOG_FILE [junte-se a $:quartus(qip_path) "LIBRARY_PATH/altera_reset_synchronizer_early_ce_mod.v"]

    Nas duas linhas acima, modifique LIBRARY_NAME e LIBRARY_PATH para corresponder às outras entradas no arquivo .qip do controlador de reconfiguração do transceptor.

    Para alt_xcvr_reconfig.sv, faça as seguintes modificações:

    • Localize a alt_xcvr_resync do módulo de alt_xcvr_resync e reverte as conexões entre as portas 'd' e 'redefinir'.  Uma vez modificada, a instação deve ser a seguinte:

    alt_xcvr_resync #(
    . INIT_VALUE (1)
    ) inst_reconfig_reset_sync (
    .clk (mgmt_clk_clk),
    .d (mgmt_rst_reset),
    .reset (1\'b0),
    .q (r_mgmt_rst_reset)
    );

    Para alt_xcvr_reconfig_soc.sv, faça as seguintes modificações:

    Adicione a seguinte definição de fio perto da parte superior do módulo:

    fio cpu_reset_req;

    Localize a instação do módulo alt_xcvr_reconfig_cpu e adicione a seguinte porta:

    .ram_ce (cpu_reset_req),

    Localize a instação do módulo alt_xcvr_reconfig_cpu_ram e adicione a seguinte porta:

    .ram_ce (cpu_reset_req),

    Para alt_xcvr_reconfig_cpu.v, faça as seguintes modificações:

    • Adicione a seguinte porta ao nível superior:

    fio de saída ram_ce,

    • Adicione o seguinte código ao módulo:

    fio m20k_gate;
    fio altera_ram_clock_enable;
    atribuir altera_ram_clock_enable = ~ m20k_gate;
    atribuir ram_ce = altera_ram_clock_enable;

    • Encontre a instação do altera_reset_controller e altere isso para uma instaução de altera_reset_controller_early_ce_mod.  Adicione a porta m20k_gate a esta instação e conecte-a ao sinal m20k_gate sinal.  Após fazer essas modificações, a instação deve ser a seguinte:

    altera_reset_controller_early_ce_mod #(
    . NUM_RESET_INPUTS (1),
    . OUTPUT_RESET_SYNC_EDGES ("desaassert"),
    . SYNC_DEPTH (2)
    ) rst_controller (
    .reset_in0 (~reset_reset_n), // reset_in0.reset
    .clk (clk_clk), // clk.clk
    .reset_out (reconfig_ctrl_reset_reset), // reset_out.reset
    .m20k_gate (m20k_gate),
    .reset_in1 (1\'b0), // (encerrado)
    .reset_in2 (1\'b0), // (encerrado)
    .reset_in3 (1\'b0), // (encerrado)
    .reset_in4 (1\'b0), // (encerrado)
    .reset_in5 (1\'b0), // (encerrado)
    .reset_in6 (1\'b0), // (encerrado)
    .reset_in7 (1\'b0), // (encerrado)
    .reset_in8 (1\'b0), // (encerrado)
    .reset_in9 (1\'b0), // (encerrado)
    .reset_in10 (1\'b0), // (encerrado)
    .reset_in11 (1\'b0), // (encerrado)
    .reset_in12 (1\'b0), // (encerrado)
    .reset_in13 (1\'b0), // (encerrado)
    .reset_in14 (1\'b0), // (encerrado)
    .reset_in15 (1\'b0) // (encerrado)
    );

    Para o arquivo alt_xcvr_reconfig_cpu_ram.sv , faça as seguintes modificações:

    • Adicione a seguinte porta de entrada:

    entrada ram_ce,

    • Encontre a instanização de altsyncram e modifique a porta clocken0 para conectá-la à nova porta de entrada ram_ce de entrada:

    .clocken0 (ram_ce),

    • Modifique as definições de defparam clock_enable_input/output_a/b da seguinte forma:

    altsyncram_component.clock_enable_input_a = "NORMAL",
    altsyncram_component.clock_enable_input_b = "NORMAL",
    altsyncram_component.clock_enable_output_a = "NORMAL",
    altsyncram_component.clock_enable_output_b = "NORMAL",

    Para o arquivo sv_xrbasic_lif_csr.sv , faça as seguintes modificações:

    • Localize o bloqueio sequencial sempre que controla o endereço do canal lógico.  Este bloqueio sempre pode ser identificado pelo comentário "// registro de canal lógico" acima.  Remova a condição de redefinição da lista de sensibilidade.  Uma vez modificado, o início do bloco sempre deve ser o seguinte:

    registro de canal lógico
    sempre @(posedge reconfig_clk) começar
    se (reset == 1) começar
    ...

    • Localize o bloqueio sequencial sempre que controla o registro de endereços de reconfig nativo.  Este bloqueio sempre pode ser identificado pelo comentário "// registro de endereço de reconfig nativo, pode ser interpretado como endereço de deslocamento de canal ou endereço físico" acima dele.  Remova a condição de redefinição da lista de sensibilidade.  Uma vez modificado, o início do bloco sempre deve ser o seguinte:

    registro de endereços de reconfig nativo, pode ser interpretado como endereço de deslocamento de canal ou endereço físico
    sempre @(posedge reconfig_clk) começar
    se (reset == 1) começar
    ...

    Para o arquivo sv_xcvr_reconfig_mif_avmm.sv , essa alteração só é necessária se a reconfiguração de canal ou PLL estiver habilitada na GUI megawizard do controlador de reconfiguração do transceptor.  Faça a seguinte modificação:

    • Localize o bloqueio sequencial sempre que tenha o comentário "/Avalon saída e armazenamento interno" acima e remova a condição de redefinição da lista de sensibilidade.  Uma vez modificado, o início do bloco sempre deve ser o seguinte:

    Avalon e armazenamento interno
    sempre @(posedge clk)
    Começar
    se (redefinir) começar
    ...

    Após todas essas alterações, seu design precisará ser recompilado.

    Produtos relacionados

    Este artigo aplica-se a 2 produtos

    FPGA Stratix® V GX
    FPGA Arria® V GZ

    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.