¿Es necesario tener una máquina de estados finitos para cada filtro que escriba en VHDL?

0

Recientemente, he codificado un filtro en VHDL para sintetizarlo para un FPGA y lo hice usando el método convencional en el que primero diseñas la máquina de estados finitos (FSM) y luego la implementas en tu código. Pero me di cuenta de que cuando reduje el número de estados en el FSM combinando algunos estados, el filtro funcionó mucho más rápido. Entonces, en un intento de maximizar la velocidad de cálculo, si escribo todo el filtro dentro de un proceso para que todas las declaraciones se ejecuten secuencialmente, ¿afectará al cálculo de alguna manera?

    
pregunta ayerhs7

3 respuestas

0

Depende de cómo quieras construir tu filtro. Las preguntas reales son estas: ¿qué frecuencia de muestreo necesita y durante cuánto tiempo es su filtro? Si su frecuencia de muestreo es baja, entonces puede salirse con un diseño impulsado por FSM que puede usar muchos ciclos de reloj para producir cada muestra de salida. Sin embargo, es una buena idea hacer que el FSM sea lo más eficiente posible. No tiene sentido perder ciclos adicionales sin hacer nada, aunque puede tener sentido hacer un poco de tubería para que pueda correr a una alta velocidad de reloj y obtener un cierre de tiempo más fácilmente. Si su frecuencia de muestreo es alta, entonces no puede ahorrar los ciclos de reloj y tendrá que implementar más paralelismo, probablemente en la forma de algún tipo de canalización. Si su frecuencia de muestreo es tan alta que necesita procesar varias muestras en cada ciclo de reloj, entonces necesita hacer un diseño segmentado bastante cuidadoso.

    
respondido por el alex.forencich
2

En última instancia, al escribir HDL (ya sea VHDL o verilog), debe recordar que está escribiendo código como una forma de diseñar hardware.

Su herramienta de síntesis a menudo le brindará herramientas que le permitirán ver lo que ha hecho con su código en diferentes etapas del procesamiento. En quartus, por ejemplo, puede encontrarlos en "herramientas - > netlist viewers". Estos (especialmente el "visor rtl") pueden ser muy útiles para tener una idea de cómo el código se convierte en hardware.

Diseñar hardware es un juego de compensaciones.

Una máquina de estados le permite reutilizar los mismos bloques lógicos para diferentes cosas (o lo mismo con diferentes entradas, por ejemplo, en un filtro, su máquina de estados puede usar un solo multiplicador para multiplicar el elemento de datos de entrada por todos los diferentes toques de filtro ) pero viene a costa del rendimiento. El rendimiento es limitado ya que la máquina de estado tiene que trabajar a través de diferentes estados para cada elemento de datos.

Un diseño combinatorio le da resultados "inmediatamente" pero puede crear problemas de tiempo. Cuando escribe múltiples pasos de procesamiento en secuencia en un proceso, lo que sucede en la síntesis es que cada uno de esos pasos se convierte en parte de una cadena de lógica combinatoria con los valores finales de las variables que se almacenan en los registros para usar en la siguiente iteración del proceso .

Un diseño canalizado puede proporcionar un alto rendimiento y funcionar a altas velocidades de reloj, pero normalmente requiere la mayor lógica y es la mejor opción para trabajar.

    
respondido por el Peter Green
0

Actualmente, un filtro solo consiste en operaciones de demora, suma y ganancia y podría implementarse como un simple circuito secuencial, lo que significa que un proceso es apropiado para describirlo.

por ejemplo Considera este filtro IIR

Sin embargo, requerirá recursos de hardware más caros (multiplicadores). Si implementa el filtro con un FSM, podrá usar el mismo multiplicador para todas las operaciones de ganancia.

    
respondido por el Simon

Lea otras preguntas en las etiquetas