ID del artículo: 000076343 Tipo de contenido: Resolución de problemas Última revisión: 12/04/2023

¿Por qué el bloque DSP nativo de punto fijo muestra una latencia inesperada en la simulación?

Entorno

  • Edición de suscripción de Intel® Quartus® II
  • DSP
  • Simulación
  • BUILT IN - ARTICLE INTRO SECOND COMPONENT
    Descripción

    Para algunas combinaciones de parámetros, simuladores y estilos de codificación RTL, la latencia de este bloque en simulación se desvía de la latencia esperada en , - un reloj. El hardware real presenta la latencia esperada.

    Este comportamiento se verá, por ejemplo, si el reloj que impulsa el bloque DSP es una versión retardada del reloj que genera los datos de entrada, lo que presenta más retraso de simulación para el reloj de entrada que para los datos de entrada.

    Resolución

    Para evitar este problema, usted debe asegurarse de que las demoras entre el reloj que genera datos de entrada al bloque DSP y el reloj de entrada del bloque DSP, estén equilibradas por las demoras en los datos de entrada. Alternativamente, asegúrese de que los datos de entrada lleguen a un tiempo absoluto posterior o a un tiempo de retraso delta de simulación posterior, en comparación con el reloj de entrada del bloque DSP.

    Tenga en cuenta que, como más declaraciones de asignación en la ruta de reloj en comparación con la ruta de datos, se producirán diferencias de demora delta de simulación entre esas rutas.

    Para lograrlo, modifique el nivel de prueba para:

    1. Asegúrese de que las entradas de generación de reloj al bloque DSP nativo sean exactamente la misma señal que la entrada de reloj al bloque DSP nativo.
    2. Si no es factible el número 1, retrase los datos de entrada en relación con el reloj.

    Por ejemplo, considere el siguiente código RTL original:

    RTL original:

    clk_gen: proceso
    Comenzar
    clk_orig <= \'0\';
    espera de 5 ns;
    clk_orig <= \'1\';
    espera de 5 ns;
    proceso final;

    ...

    si (rising_edge(clk_orig)) a continuación
    ax <= ax 1;
    ay < = ay - 1;
    end if

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

    resulta2 mostrará un reloj con una latencia menor de la esperada. Tenga en cuenta que la asignación de puerto clk del multiplicador "00 & clk" agrega un retraso delta de simulación del "clk_orig" que genera los datos de entrada.

    Las posibles soluciones incluyen:

    Ejemplo 1, Recomendación: Utilice un reloj de 3 bits en todo

    Puede generar el reloj de 3 bits del multiplicador directamente y utilizar el bit activo para reloj de los datos de entrada:

    clk_gen: proceso
    Comenzar
    clk3bit <= \'000\';
    espera de 5 ns;
    clk3bit <= \'001\';
    espera de 5 ns;
    proceso final;

    ...

    si (rising_edge(clk3bit(0)) a continuación
    ax <= ax 1;
    ay < = ay - 1;
    end if

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

    Ejemplo 2, Recomendación alternativa: añada la demora correspondiente a los datos de entrada

    La declaración \'clk = > ("00" &clk_orig)\' hace que el puerto \'clk" tenga un retraso delta de simulación adicional de \'clk_orig\' que 's impulsa los datos. Para superar esto, puede utilizar el proceso de clk_gen original y simplemente agregar demoras de delta de simulación a los datos con declaraciones de asignación.

    clk_gen: proceso (igual que el original)

    ax_del <= ax;
    ay_del< =ay;

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

    Productos relacionados

    Este artículo se aplica a 1 productos

    FPGA Intel® Arria® 10 GX

    El contenido de esta página es una combinación de la traducción humana y automática del contenido original en inglés. Este contenido se ofrece únicamente para su comodidad como información general y no debe considerarse completa o precisa. Si hay alguna contradicción entre la versión en inglés de esta página y la traducción, prevalecerá la versión en inglés. Consulte la versión en inglés de esta página.