proceso y asignación de señal

2

Tengo el segmento de código anterior. Estoy un poco confundido, entonces, ¿alguien me puede ayudar?

 wait until rising_edge ( clk ) ;
      sig_a <= sig_x and sig_y ;
      sig_b <= sig_a ;

¿Sig_b usa el nuevo valor de sig_a?

    
pregunta

3 respuestas

3

Ambos eventos suceden simultáneamente, por lo que sig_a obtiene un nuevo valor mientras que sig_b lo hace. En la práctica, esto se hace a menudo con flip-flops en cascada, que están todos sincronizados por el mismo borde, como en registros de desplazamiento . Esto no es un problema debido a la demora entre la entrada y la salida, por lo que la entrada tomará el valor anterior de la salida anterior antes de que cambie de valor.

    
respondido por el stevenvh
1

Una de las cosas difíciles de HDL es que las declaraciones de asignación se producen simultáneamente. Podría reordenar las dos declaraciones sig_a y sig_b y el resultado sería el mismo.

El sintetizador creará dos flip-flops para almacenar tanto sig_a como sig_b . La salida de sig_x AND sig_y se conectará a la entrada de datos de sig_a flip-flop, y la salida de sig_a flip-flop se incorporará a la entrada de datos de sig_b flip-flop.

Como resultado, sig_b almacenará el valor antiguo de sig_a en el borde positivo del reloj.

    
respondido por el W5VO
0

No, sig_b obtiene el valor de sig_a al inicio del proceso.

<= significa "programar una actualización de la señal", pero no se actualizará hasta que pase un tiempo de simulación.

(Esa cantidad de tiempo podría ser 0 ns:

wait until rising_edge ( clk ) ;
sig_a <= sig_x and sig_y ;
wait for 0 ns;
sig_b <= sig_a ; -- sig_b now gets "sig_x and sig_y" from sig_a

Pero eso no se sintetizará ...)

    
respondido por el Martin Thompson

Lea otras preguntas en las etiquetas