FPGA SPI esclavo no funciona bien

1
  • Estoy intentando integrar un esclavo SPI en VHDL (opencores) enlace
  • la idea es conectar un microcontrolador y un FPGA
  • Estoy usando Quartus ..

más información:

  • microcontrolador diferente reloj 50 MHz, creo ..

  • La frecuencia del reloj SPI es 16Mhz

  • SPI VHDL core clock @ 100 Mhz

  • He hecho una prueba de resistencia escribiendo y leyendo algunos registros ... no hay errores con spi

el problema:

  • cuando intento integrar el SPI VHDL al resto de mi aplicación VHDL (también 100 mhz) ... el circuito se vuelve un poco "inestable"

algunos síntomas:

  • a veces en algunos registros hay bits que no escribí por spi, lo que hace que la aplicación vhdl actúe de manera imprevista ...

  • Al agregar sondas de señal, el comportamiento de vhdl cambia un poco ...

preguntas:

¿Necesito usar timequest para SPI CORE para agregar restricciones de tiempo a los pines de entrada de SPI? ¿Tengo metastabilidad?

    

2 respuestas

2

Su suposición de que tiene un problema de metastabilidad parece ser correcta. Solo hice una encuesta del código spi slave, y aquí encontré:

  • El reloj spi se usa tal como está, es decir, requiere un búfer de reloj.
  • Los datos que lees del spi core no se vuelven a sincronizar con el reloj de 100MHz, están en el dominio spi clk.
  • La señal de datos válidos se vuelve a sincronizar con el reloj de 100Mhz.

Si lees los datos continuamente, tendrás metastabilidad ya que no está sincronizado. El diseñador del núcleo probablemente espera que uses datos válidos para evitar eso. Personalmente, creo que es un mal diseño y utilizaría para FIFO superficial para hacer la escritura limpiamente.

Además, prefiero hacer lo que Brian sugiere y simplemente sincronizar los datos / datos con un reloj más rápido (que 100MHz) y hacer la lógica central con ese reloj. De 16MHz a 100MHz sesgará el borde del reloj para su lógica de salida (después de la resincronización), pero debería ser O.K ..

En cuanto a las restricciones, 16MHz es muy lento ... No necesita restricciones, su CPOL / CPHA tiene que coincidir, obviamente.

    
respondido por el Jonathan Drolet
3

¿Metastabilidad? Altamente improbable.

¿Entradas no sincronizadas? Muy probable y pueden causar los síntomas que usted describe.

Registre cada entrada SPI de su reloj rápido y dirija las versiones cronometradas al núcleo SPI. (A menos que ya esté seguro de que ya los vuelve a bloquear).

    
respondido por el Brian Drummond

Lea otras preguntas en las etiquetas