Uso del reloj en restricciones de IO de estilo SDC para FPGA

3

Pregunta sobre el uso del reloj en las restricciones de retardo de E / S de estilo SDC

La intención de este informe es aclarar cómo debe restringirse una interfaz de IO de FPGA. Como preámbulo, las dos restricciones de tiempo que se pueden usar para restringir una interfaz IO de FPGA son:

  • set_input_delay

    Uso: set_input_delay [-add_delay] -clock [-clock_fall] [-fall] [-max] [-min] [- referencia_pin] [-rise] [-source_latency_included]

  • set_output_delay

    Uso: set_output_delay [-add_delay] -clock [-clock_fall] [-fall] [-max] [-min] [- referencia_pin] [-rise] [-source_latency_included]

La restricción set_input_delay se asegura de que una entrada al FPGA desde un chip externo cumpla con los requisitos de configuración y retención interna. De manera similar, set_output_delay se asegura de que los datos controlados desde un FPGA cumplan con los requisitos de configuración y retención del chip externo. Las restricciones utilizan varias temporizaciones como [tCO tSU tH] del chip externo, retardo de traza de PCB, sesgo de reloj, etc. para la estimación. Estas cosas son bastante claras para mí, excepto el "uso del reloj" . ¡Aquí comienza la confusión!

Ambas restricciones especifican los valores de retardo con respecto a un reloj. Ahora viene el concepto de un reloj virtual, un reloj que alimenta el chip externo y no existe dentro del FPGA. He visto documentaciones de Intel FPGA (anteriormente Altera) que prescriben el uso de un Reloj Virtual para restringir todas las interfaces IO. ¡Pero hasta ahora no tenía sentido para mí!

En cuanto al cronometraje, hay dos casos que me interesan. Por favor, verifique el adjunto para los dibujos.

  • Caso 1 : si tengo una interfaz sincrónica de origen como una interfaz SDRAM o QSPI, el FPGA genera internamente el reloj para el chip externo. En la figura clk_ext y datos se envían desde el FPGA. Entonces, ¿la restricción SDC debe usar un reloj virtual o un reloj generado desde FPGA?

  • Caso 2 : hay un sintetizador de reloj externo que alimenta los relojes FPGA y ASIC. Los relojes clk_osc_fpga y clk_osc_asic pueden o no estar relacionados en lo que a nosotros respecta. Pero de hecho hay un flujo de datos desde el FPGA - > ASIC. Tenga en cuenta que la generación de datos dentro de FPGA se realiza utilizando clk_int que no se envía. Entonces, ¿es aquí donde deberíamos usar un reloj virtual? ¿Y cómo modelaría el analizador de tiempo los sesgos o las diferencias de frecuencia en el reloj virtual con respecto al reloj fpga interno?

Agradecería cualquier consejo sobre esto. Y gracias por leer una pregunta realmente larga.

Actualización sobre la pregunta:

En uno de los diseños, pude estimar la latencia de clk_int con respecto a clk_osc_fpga . Encontré que está alrededor de -1.3ns . Básicamente, esto significa que el reloj virtual o clk_osc_asic se propaga con respecto al reloj interno de fpga clk_int . La pregunta es ¿cómo puedo restringir esta latencia? ¿Debo usar set_clock_latency en el reloj virtual? ¿O simplemente ajusta la fase del reloj virtual al usar la restricción create_clock? ¿También cómo especificar el borde de muestreo del reloj virtual?

Gracias de nuevo por el apoyo.

    
pregunta electro_sm11

1 respuesta

2

Considere el caso anterior, donde el bloque se encuentra fuera de FPGA y FPGA le está enviando datos síncronos a través de un puerto de salida. Aquí, el analizador de temporización no podrá analizar la ruta Reg A - > a - > b - > Reg. B. Porque el reloj de frecuencia. y la latencia en la ruta física fuera de FPGA es desconocida para la herramienta. Así que definiremos un retraso de salida en el puerto de salida con respecto a un reloj imaginario clock_in_virtual llamado virtual clock . El retardo de salida constituirá el retardo de ruta, el retardo de b y el tiempo de configuración de Reg B (el retardo de a, y el retardo de reloj-q de Reg A ya son conocidos por la herramienta del analizador de temporización). Podemos modelar el período de tiempo y la latencia del reloj virtual. La herramienta ahora puede analizar esta ruta en busca de violaciones de configuración-retención Supongamos que no usamos el reloj virtual y definimos el retardo de salida con respecto a clock_in , tal análisis será pesimista para la configuración y optimista para la retención, porque la latencia del reloj de captura se toma como cero. La misma idea se usa en los puertos de entrada también. Espero que esto tenga algún sentido para usted ahora sobre por qué se usan los relojes virtuales.

Caso I:

Aquí el diseño es fuente síncrono. La salida de datos y la salida de reloj cambiarán en el tiempo conocido y la ruta física es irrelevante porque los retrasos de la ruta para el reloj y las líneas de datos serían casi iguales. Esto asegura el mejor momento para la configuración y la espera. Por lo tanto, puede restringir el retardo de salida con respecto al reloj generado para restringir la ruta. El reloj virtual no es necesario.

Caso II:

Para analizar esto, ambos relojes deberían estar sincronizados. Debe definir un reloj virtual que modele las características y la relación entre el reloj ASIC y el reloj FPGA. El retardo de salida se restringe entonces con respecto al reloj virtual. La latencia del reloj virtual se define como el retardo de inserción / latencia de red del clk_int .

    
respondido por el MITU RAJ

Lea otras preguntas en las etiquetas