¿Pueden ocurrir oscilaciones en VHDL con declaraciones concurrentes?

3

Imagina que tenemos dos declaraciones simultáneas que dependen una de la otra:

ARCHITECTURE Behavior of xxx IS
BEGIN
    s1 <= (A and B and s2);
    s2 <= (B and C and s1); 
END Behavior;

Entonces, si A o B o s2 cambian, s1 se actualiza. Entonces, como s1 se actualiza, s2 se actualiza. Dado que s2 se actualiza, parece que s1 se actualiza de nuevo ... etc.

¿Pueden ocurrir tales cosas en VHDL? Por supuesto, en un sistema real , la salida oscilaría, pero tengo muy poca idea de cómo se sintetiza el código VHDL en el hardware.

    
pregunta sherrellbc

1 respuesta

3

Si su descripción VHDL muestra ciclos de dependencia combinatorios, entonces los sintetizadores generarán el mismo circuito exacto. Si lo quieres, lo consigues. Sin embargo, se emitirán advertencias porque es difícil ( pero no imposible ) decir si el circuito oscilará o no (es decir: se comportará como circuitos de circuitos combinatorios puros o circuito secuencial). Así que los algoritmos de síntesis prefieren informarle acerca de este peligro. Tales circuitos cíclicos también causan varias dificultades en los flujos de diseño de SoC en general: por ejemplo, durante el análisis de temporización ...

Tenga en cuenta que su pregunta es de hecho un tema de investigación. Por ejemplo, puedes leer sobre esto en varios artículos conocidos:

Para resumir, este recurso al circuito combinatorio cíclico puede ser interesante cuando pueden estabilizarse, porque su rendimiento (área y velocidad) será mejor que un equivalente secuencial. Sin embargo, como se mencionó anteriormente, esto no es convencional y, como tal, todavía no se recomienda en los flujos de diseño clásico (industrial).

En lo que respecta a VHDL simulación , el algoritmo de simulación se basa en eventos: una evaluación de una asignación concurrente (o proceso) puede conducir a una nueva evaluación de otras partes o de sí misma . Esto no es un problema para el simulador. Nuevamente, dependiendo del circuito descrito, este comportamiento se detendrá (comportamiento secuencial) o no (bucle infinito).

    
respondido por el JCLL

Lea otras preguntas en las etiquetas