Restricción de tiempo de datos de entrada de Xilinx FPGA

Estoy usando Xilinx Spartan 6 Automotive FPGA. Mi diseño de FPGA tiene una interfaz SPI para un periférico externo.

Desde FPGA hasta el periférico, tengo estas señales relacionadas con SPI:

  1. spi clk
  2. datos spi (mosi): los datos se presentan en el borde descendente del spi clk

Del periférico a FPGA:

  1. datos spi (miso): los datos se presentan en el flanco ascendente utilizando el spi clk recibido de FPGA

FPGA muestrea los datos MISO SPI utilizando el borde descendente SPI CLK: se genera internamente (a través de una máquina de estado).

Ahora, quiero agregar una restricción de tiempo en el pin MISO para garantizar que los datos MISO lleguen al primer componente de sincronización (un latch cronometrado por spi clk) sin violar el tiempo de configuración y espera. ¿Qué restricción de tiempo de Xilinx debo usar?

Algunas opciones que estaba buscando son COMPENSACIÓN EN, DESDE/HASTA...

Prefiero OFFSET IN porque relaciona los datos con el reloj, pero no puedo entender cómo especificar un reloj interno (no tengo bucle invertido SPI clk). FROM/TO podría funcionar, pero no es relativo al reloj.

¿No es el periférico responsable de generar MISO? ¿Cómo espera que la herramienta de síntesis FPGA cambie el tiempo de una señal generada por el periférico?
eso no es lo que quiero hacer. mi spi_clk sale al periférico, que usa ese clk para generar datos MISO. en el pin de entrada MISO en mi FPGA, es posible que los datos MISO ya no se alineen con mi spi_clk debido a la demora del periférico. otro retraso (el que estoy tratando de restringir) es el retraso del pin FPGA al primer componente de sincronización. Este retraso es interno en FPGA y podría restringirse adecuadamente durante la síntesis

Respuestas (1)

Entiendo que tiene un reloj interno SYS_CLK, que usa para controlar la máquina de estado que genera SPI_CLK.

El flip-flop que genera SPI_CLK debe ubicarse en IOB, para garantizar una temporización determinista entre SYS_CLK y SPI_CLK (puede especificar el retraso máximo requerido para SPI_CLK, utilizando OFFSET OUT).

Luego puede especificar sus restricciones utilizando OFFSET IN (para MOSI) y OFFSET OUT (para MISO) con respecto a SYS_CLK, considerando el retraso entre SYS_CLK y SPI_CLK.