ID do artigo: 000076343 Tipo de conteúdo: Solução de problemas Última revisão: 05/10/2015

Por que o meu bloco DSP de ponto fixo nativo está mostrando uma latência inesperada na simulação?

Ambiente

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

Para algumas combinações de parâmetros, simuladores e estilos de codificação RTL, a latência deste bloco na simulação se desvia da latência esperada por , - um clock. O hardware real exibe a latência esperada.

Esse comportamento será visto, por exemplo, se o clock que conduz o bloco DSP for uma versão atrasada do clock gerando os dados de entrada, introduzindo assim mais atraso de simulação para o clock de entrada do que para os dados de entrada.

Resolução

Para resolver este problema, você deve garantir que os atrasos entre o clock que gera dados de entrada para o bloco DSP e o clock de entrada do bloco DSP sejam equilibrados por atrasos nos dados de entrada. Como alternativa, certifique-se de que os dados de entrada cheguem em um tempo absoluto posterior, ou um tempo de atraso delta de simulação posterior, em comparação com o clock de entrada do bloco DSP.

Observe que coisas como mais instruções de atribuição no caminho do clock em comparação com o caminho de dados causarão diferenças de atraso delta de simulação entre esses caminhos.

Para fazer isso, modifique seu testbench para:

  1. Certifique-se de que o clock que gera entradas para o bloco DSP nativo seja exatamente o mesmo sinal que a entrada do clock no bloco DSP nativo.
  2. Se o número 1 não for viável, atrase os dados de entrada relativos ao clock.

Por exemplo, considere o seguinte código RTL original:

RTL original:

clk_gen: processo
Começar
clk_orig <= \'0\';
esperar por 5 ns;
clk_orig <= \'1\';
esperar por 5 ns;
processo final;

...

se (rising_edge(clk_orig))
ax <= ax 1;
ay <= ay - 1;
terminar se

mac_test_bad_style: mult_acc
mapa de porta (
...
ax => std_logic_vector(ax), -- [in]
ay => std_logic_vector(ay), -- [in]
clk => ("00" e clk_orig), -- [in]
resulta => resulta2, -- [out]
...
);

Resulta2 mostrará um clock a menos de latência do que o esperado. Observe que a concatenação de "00 & clk" na atribuição de porta clk do multiplicador adiciona um atraso delta de simulação a partir do "clk_orig" que gera os dados de entrada.

Possíveis soluções alternativas incluem:

Exemplo 1, recomendação: use um clock de 3 bits em todo

Você pode gerar diretamente o clock de 3 bits do multiplicador e usar o bit ativo para clock dos dados de entrada:

clk_gen: processo
Começar
clk3bit <= \'000\';
esperar por 5 ns;
clk3bit <= \'001\';
esperar por 5 ns;
processo final;

...

se (rising_edge(clk3bit(0)) em seguida
ax <= ax 1;
ay <= ay - 1;
terminar se

mac_test_bad_style: mult_acc
mapa de porta (
...
ax => std_logic_vector(ax), -- [in]
ay => std_logic_vector(ay), -- [in]
clk => (clk_3bit), -- [in]
resulta => resulta2, -- [out]
...
);

Exemplo 2, Recomendação alternativa: adicione atraso correspondente aos dados de entrada

A instrução \'clk => ("00" e clk_orig)\' faz com que a porta \'clk' tenha um atraso delta de simulação adicional de \'clk_orig\' que está impulsionando os dados. Para superar isso, você pode usar o processo de clk_gen original e adicionar atrasos delta de simulação aos dados com instruções de atribuição.

clk_gen: processo (o mesmo que original)

ax_del <= ax;
ay_del<=ay;

mac_test_bad_style: mult_acc
mapa de porta (
...
ax => std_logic_vector(ax_del), -- [in]
ay => std_logic_vector(ay_del), -- [in]
clk => ("00" e clk_orig), -- [in]
resulta => resulta2, -- [out]
...
);

Produtos relacionados

Este artigo aplica-se a 1 produtos

FPGA Intel® Arria® 10 GX

1

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 governará e será a controle. Exibir a versão em inglês desta página.