Carreras en circuitos secuenciales VHDL

-1

¿Debo conocer las carreras al escribir código para circuitos secuenciales en VHDL (uso ISE Design Suite)? Si no lo hago, ¿cuál es el problema que resuelve el problema de las razas en lugar de mí?

    
pregunta Al Bundy

2 respuestas

1

Las herramientas de diseño principales están muy orientadas hacia prácticas de diseño sincrónicas, en las que toda la información de estado se mantiene en flip-flops maestro-esclavo, y toda la lógica asíncrona es puramente combinatoria (sin retroalimentación).

En esas raras ocasiones en las que es absolutamente necesario tener un circuito secuencial asíncrono (p. ej., la lógica del apretón de manos que cruza los dominios del reloj), las herramientas se enfrentarán a usted por eso, y tendrá que esforzarse para tratar con cuidado las condiciones de la carrera. Y también deberás asegurarte de que las herramientas no optimicen tus rutas redundantes.

Por esta razón, querrá reducir cualquier lógica secuencial asíncrona requerida al mínimo absoluto necesario.

    
respondido por el Dave Tweed
-1

Las condiciones de carrera como en la programación de múltiples hilos (por ejemplo, las variables compartidas) no existen en VHDL.

Esto se debe a que tiene que especificar el valor que entra en un registro en cada reloj. No puedes escribir el mismo registro desde dos procesos diferentes. Estás obligado a resolver cualquier condición de carrera explícitamente en el proceso de escritura. Por supuesto, aún puede producir condiciones de carrera en un nivel superior (por ejemplo, los datos llegan un reloj antes de que su máquina de estados esté lista), pero no lo sorprenderán por completo.

Lo más cercano a las condiciones de carrera (como se conoce de los subprocesos múltiples) con lógica sincronizada es durante el acceso a la RAM (comportamiento de lectura durante la escritura). Pero incluso allí, en algún momento, se verá obligado a tomar una decisión explícita sobre lo que debería suceder en este caso.

Por otro lado, hay muchas oportunidades para las condiciones de carrera cuando intentas mover datos a través de dominios de reloj asíncronos. Es posible que algunos bits sean transferidos, pero no otros. Debe tener mucho cuidado con el cruce del dominio del reloj: si tiene un error allí, puede ocurrir en el 5% de los casos en un resultado de síntesis, y no en ningún otro resultado de síntesis, o solo por encima de cierta temperatura. Pero eso ya no es realmente lógica secuencial.

    
respondido por el maxy

Lea otras preguntas en las etiquetas