Ejecución dentro de un proceso [VHDL]

1

Tengo, por ejemplo, este fragmento de código:

p1 : process (clk)
begin

if (a = '1') then
    a <= 0;
end if;

if (b = '1') then
    b <= 0;
end if;

end process p1;

¿Qué if-sentece se ejecuta primero? ¿a o B? Sé que el proceso es una declaración concurrente, pero no sé si dentro de un proceso la ejecución es concurrente o simultánea.

¡Gracias!

    
pregunta ferdepe

2 respuestas

1

Este código no describe una máquina de estado, por lo que los conceptos de sentencias secuenciales o ejecución del programa no se aplican aquí. La respuesta correcta a tu pregunta es "無".

La ejecución secuencial de un proceso creará una máquina de estado solo si hay declaraciones wait , que no están permitidas en procesos con listas de sensibilidad. El orden de las declaraciones es relevante para resolver asignaciones de señales (la última asignación a una señal gana) y para condiciones basadas en variables (donde las asignaciones son visibles para las siguientes declaraciones en el mismo proceso).

Las dos sentencias condicionales solo dependen de los valores de la señal, solo modifican los valores de la señal y no tienen interdependencias, por lo que sus efectos son concurrentes aunque sean técnicamente parte de una secuencia. Si sintetizas este diseño, terminas con circuitos completamente independientes.

En un ámbito más amplio, todo el proceso se optimiza, ya que solo hay un lugar que maneja a y b , y el único valor asignado es 0 .

Tampoco puede tener otras declaraciones o procesos simultáneos en la unidad a y b , ya que podría causar un conflicto.

    
respondido por el Simon Richter
0

Secuencialmente. Todas las declaraciones en los programas de VHDL se ejecutan una después, como si un proceso fuera un programa SW convencional.

Me gusta hablar sobre el programa VHDL como una red de procesos, que se ejecutan en paralelo entre sí. Es exactamente igual que el programa SW moderno consiste en hilos en el nivel superior. Sí, los hilos también son concurrentes, pero las declaraciones dentro de ellos no lo son. La diferencia por la cual VHDL es más simple porque todas las comunicaciones están cableadas (no puede decidir de forma dinámica qué proceso enviar o recibir información) y el cálculo se sincroniza cada reloj (para saber qué están haciendo los otros procesos, a diferencia de los procesos de SW asíncronos). Para ser justos, la sincronización no es obligatoria. Puede escribir procesos asíncronos (sincronizando en una señal diferente del reloj común), pero normalmente tiene procesos síncronos en un dominio de reloj porque hace la vida mucho más fácil.

    
respondido por el Little Alien

Lea otras preguntas en las etiquetas