Diferencia entre el bloqueo y la asignación de no bloqueo en VHDL

2

Empecé a leer acerca de las asignaciones de Bloqueo y No Bocking con referencia a verilog. Pero cuando cambié a VHDL es confuso.

Lo que sentí es que, en VHDL, aparte de diferenciar visualmente la asignación de la variable y la señal, no hay importancia para el bloqueo y la asignación sin bloqueo. ¿Estoy equivocado?

    
pregunta tollin jose

2 respuestas

8

Deshazte de los términos las asignaciones de bloqueo y no bloqueo, no tienen lugar en VHDL. Por lo que me alegro, parecen causar suficiente confusión en Verilog.

La única gran ventaja que VHDL tiene no solo sobre Verilog, sino en casi todos los demás lenguajes de simulación / verificación digital que hay por ahí es su modelo de temporización determinista. En Verilog, las simulaciones pueden entregar legítimamente diferentes resultados en diferentes simuladores debido al orden en que se ejecutan los procesos (tareas, módulos). No puede ocurrir con VHDL, o si lo hace, hay un error en el simulador.

Pero vale la pena entender cómo funciona este modelo de tiempo; diría que es absolutamente clave para entender VHDL. Sujete esto y VHDL será mucho más fácil.

Se basa en 2 puntos clave:

  1. Solo hay asignaciones variables y asignaciones de señales, estas últimas también se conocen como asignaciones pospuestas.
  2. El tiempo pasa en segmentos infinitamente cortos llamados "delta cycles" hasta que no pasa nada, cuando puede avanzar un paso de tiempo finito (fs, ps, ns) al siguiente evento programado (retraso o borde del reloj).

Las variables son locales a un proceso, y las asignaciones de variables tienen lugar inmediatamente: la siguiente declaración ve el nuevo valor.

Las asignaciones de señales no se producen de inmediato, pero están programadas para que se realicen después del final del delta cycle actual, cuando todos los procesos en ejecución hayan ocurrido. Más detalles aquí .

Si aún no está claro, refina la pregunta.

    
respondido por el Brian Drummond
4

Bloquear / No bloquear es una cuestión de Verilog y, en este nivel, es mejor aprender VHDL sin hacer ninguna asociación de estos elementos.

Si debe, sin embargo, las asignaciones de variables se actualizan inmediatamente y, por lo tanto, son un poco como bloquear asignaciones. Sin embargo, las asignaciones de variables siempre son locales para un proceso y, por lo tanto, no debemos preocuparnos por ese conjunto de condiciones de carrera. Además, las variables nunca tienen un retraso.

Las señales se actualizan después de un ciclo de simulación o un retraso específico. Así que quizás esto sea un poco como la tarea de no bloqueo de Verilog. El retraso en VHDL solo se aplica cuando la señal se programa en relación con el tiempo de proceso actual y nunca afecta el tiempo de proceso. El tiempo en un proceso solo avanza debido a detenerse en una lista de sensibilidad o debido a una declaración de espera. Y un proceso nunca tiene una lista de sensibilidad y una declaración de espera.

Nuevamente, son lo suficientemente diferentes como para justificar el aprendizaje de cómo funcionan las señales y variables de VHDL, independientemente de cómo las asignaciones de bloqueo y no bloqueo de Verilog.

    
respondido por el Jim Lewis

Lea otras preguntas en las etiquetas