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;