Implementando tiempos de espera / temporizadores en VHDL

2

¿Cuál es la mejor manera de implementar un tiempo de espera, escrito en VHDL?

El propósito de esto es restablecer una máquina de estado a un estado IDLE si una cierta cantidad de tiempo ha pasado (unos segundos como máximo), para evitar un interbloqueo. Lo único que me viene a la mente es un contador de reloj desagradable con un gran rango de enteros, pero mi preocupación es el uso y la optimización de las LUT aquí. Y supongo que mi FPGA podría tener problemas para ajustar la lógica de un contador de enteros de 16 bits a toda velocidad

Gracias por tu ayuda

    
pregunta Fluffy

2 respuestas

3

Aquí hay un patrón flexible I He usado mucho para este y otros propósitos similares.

Prefiero usar el período de reloj real y los valores de retardo para generar los valores de conteo, en lugar de calcular números mágicos.

Generará un contador, pero un contador de 16 bits es invisiblemente pequeño en cualquier FPGA que pueda encontrar hoy. Más allá de los 24 bits puede comenzar a impactar la velocidad, luego puede dividirla en dos contadores más pequeños, usando el primero como preescalador, generando una habilitación de reloj para el segundo.

Y el patrón que se muestra reutiliza el mismo contador, independientemente de la cantidad de valores de retardo que necesite, a menos que necesite más de un retardo simultáneamente.

    
respondido por el Brian Drummond
2

Este es un tema relativamente grande, pero aquí hay una descripción general. Depende de cuál sea tu frecuencia máxima. Si su frecuencia no es demasiado alta, puede usar contadores.

El secreto para un buen contador de reinicio es parametrizarlo con respecto a la frecuencia. Puede escribirlo de tal manera que ponga los siguientes parámetros: frecuencia como flotante, demora requerida también como flotante. El sintetizador entonces puede hacerse cargo de la cuenta requerida. Esto puede funcionar para frecuencias más altas de lo que piensas. Un contador de 16 bits no es tan grande.

Si busca la máxima frecuencia de reloj posible, los registros de cambio de realimentación lineal (LFSR) son su solución. LUTs en FPGAs tienen una cadena de transporte como esta: UtilizasestocuandousasLFSRs.UnLFSRtienelasiguienteestructura: Tiene un polinomio característico, que determina si hay una puerta XOR entre dos etapas. Algo como: si 1 coloca XOR, si 0 se conecta directamente. Luego genera un patrón que no es secuencial, pero siempre tiene la misma longitud.

Los LFSR son rápidos porque tiene un retardo de propagación de 1 LUT como máximo. En contadores, es decir, sumadores, el acarreo debe propagarse a través de todas las LUT. Los LFSR también se conectan directamente a la LUT adyacente a través de la cadena de transporte.

    
respondido por el user110971

Lea otras preguntas en las etiquetas