ID do artigo: 000074260 Tipo de conteúdo: Solução de problemas Última revisão: 11/09/2012

Por que o Nios II do compilador de C-to-Hardware (C2H) gera o tempo de falha do acelerador quando o código fonte contém operadores de deslocamento variável?

Ambiente

  • Processador Intel® Nios® II
  • BUILT IN - ARTICLE INTRO SECOND COMPONENT
    Descrição

    Uma possível razão para o design não atender ao tempo é que ele contém um ou mais shifters de cano em série com outra lógica combinatória. Sempre que um operador de turno é usado com uma variável operand ou seja, "a = b << c;" Nios® II C2H gera lógica de torção de cano. A lógica de mudança de cano gerada pelo C2H implementa um grande número de multiplexadores combinatórios que podem afetar significativamente o tempo do projeto.  Os dois exemplos a seguir mostram o código-fonte que pode causar degradação do tempo devido aos shifters de cano.


    Entrada de mudança combinatória:

    Abaixo está um exemplo de uma entrada de mudança combinatória no shifter do cano que pode causar degradação de temporização.

    int a, b, c, d, result, shift_distance;
    result = (a b c d) >> shift_distance;

    O resultado de adição é usado como o operacional para o operador de deslocamento, de modo que um longo caminho de sincronização é criado entre uma das entradas de adição e o "resultado". Para aumentar a quantidade de pipelining, atribua o resultado de adição a uma variável temporária, conforme mostrado abaixo:

    int a, b, c, d, addition_result, shift_distance;
    addition_result = a b c d;
    result = addition_result >> shift_distance;


    Saída de mudança combinatória:

    Abaixo está um exemplo de uma saída de deslocamento combinatória do shifter do cano que pode causar degradação de temporização.

    int a, b, c, d, result, shift_distance;
    result = (a >> shift_distance) b c d;

    O resultado da mudança é usado como um operacional para um operador de adição, de modo que um longo caminho de sincronização é criado entre "a" e "resultado". Para aumentar a quantidade de pipelining, atribua o resultado da mudança a uma variável conforme mostrado abaixo:

    int a, b, c, d, result, shift_result, shift_distance;
    shift_result = a >> shift_distance;
    result = shift_result b c d;

    Produtos relacionados

    Este artigo aplica-se a 1 produtos

    Dispositivos programáveis Intel®

    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.