Vivado: configuración de restricciones para la interfaz SPI con reloj común

2

He estado usando Vivado 2018 para un diseño a nivel de sistema y tengo problemas con la programación de la interfaz SPI. A continuación se muestra un diagrama de bloques de mi sistema.

El Artix-7 FPGA (en la placa base) envía una interfaz SPI de 3 cables a 4 placas hija. Las siguientes son las especificaciones:

FPGA:

  • CLK : reloj de entrada al FPGA
  • SCLK: reloj generado por MMCM utilizado para generar el reloj SPI para los módulos internos. Estos módulos generan los datos en serie para programar los IC en la placa base.
  • SPI_SCLK : reloj serial para la interfaz SPI común a todas las placas hijas.
  • SPI_CS : seleccione las líneas comunes a todas las placas secundarias (utilizando la línea de selección del módulo # 1 en el FPGA)
  • SPI_SDI [1,2,3,4] : datos en serie específicos de cada placa hija generados por el módulo correspondiente en la placa hija

Daughter-Board(s)

  • CLK_BUF: un búfer de reloj para el reloj SPI, que introduce un retraso de propagación de 5 ns.
  • IC # 1 - > Margarita IC # 7 encadenada en la placa base
  • Líneas de selección comunes a las placas hija

CONDICIONES

  • El retraso en todas las líneas SPI que van desde FPGA a las tablas hija es igual.
  • retraso introducido por BUF IC = 5ns
  • t configuración (IC) = 5ns
  • t mantener (IC) = 5ns

He configurado mis archivos de restricción de la siguiente manera:

create_generated_clock -name sclk [get_pins clock_sources/inst/mmcm_adv_inst/CLKOUT2]

set_output_delay -clock sclk -max 5.000 [get_ports {spi_sdi[*]}]
set_output_delay -clock sclk -min -5.000 [get_ports {spi_sdi[*]}]

set_output_delay -clock sclk -max 5.000 [get_ports {spi_cs]
set_output_delay -clock sclk -min -5.000 [get_ports {spi_cs}]

PREGUNTAS

  1. ¿Es este el enfoque correcto para configurar el archivo de restricción para la interfaz SPI? Debido al retraso en la propagación introducido por CLK BUF IC en la placa hija, me gustaría retrasar las líneas SPI_CS y SPI_SDI [1,2,34] cantidad igual al retraso de propagación del CLK BUF IC.
  2. Creo que los módulos 1,2,3,4 tendrán diferentes retrasos netos para las rutas SPI_SDI [*] que salen de la placa FPGA. ¿Cómo debo asegurarme de que estas líneas vean la misma demora y, por lo tanto, estén sincronizadas entre sí?
  3. De forma similar, el SCLK que va a cada uno de los módulos en el FPGA frente al SPI_SCLK que va a las placas secundarias ve un retraso diferente. ¿Afectará esto a los datos en serie colocados en el bus?

Me gustaría entender cómo abordar estos problemas. Cualquier ayuda es apreciada.

Gracias

    
pregunta CanisMajoris

1 respuesta

1

En primer lugar:

El momento (quizás) es la parte más esencial y más difícil del desarrollo de FPGA. Así que primero sugiero leer / ver guías de tiempo.

Tecnología de medición:

Por supuesto, es imposible hacer matemáticamente iguales los retrasos. (Lo que es más, no solo el retraso, cualquiera de las dos cantidades no puede ser exactamente igual). Por lo tanto, debe definir los rangos que se encuentran entre tolerar las diferencias de retraso. Entonces, más precisamente, ¿qué quiere decir en síncrono ?

Particular :

Sugiero leer esto guía. (Esta es una guía de Altera, pero la metodología y la sintaxis xdc son las mismas.) Hay una plantilla detallada en página 9 .

Por lo tanto, necesita obtener los extremos de demoras de sus tableros. Los retrasos completos de pin a pin. Preguntar a los chicos de HW, o medir o simular. Necesita los valores mínimo-máximo en todos los casos de esquina posibles. (Temperatura, distribución de la producción de voltaje, etc.) Luego llene la plantilla con los valores.

    
respondido por el betontalpfa

Lea otras preguntas en las etiquetas