¿Para qué se utiliza un #delay dentro de un proceso síncrono?

1

Encontré un proceso síncrono similar a este hoy, y noté de inmediato la presencia del #delay:

'define dly #1

always @ (posedge fpga_sysclk_b or negedge reset_l) begin 
    if (!reset_l) begin 
        mv_in <= 'dly 'h0; 
        mv_datai <= 'dly 'h0; 
    end 
    else begin 
        mv_datai <= 'dly mv_dataix; 
        mv_in <= 'dly mv_datai; 
    end 
end 

¿Qué logra esto? Dado que el proceso ya está sincronizado con el reloj, no entiendo por qué es necesario.

¿Esto es sintetizable? Mi entendimiento es que los #delays no son sintetizables, ¿es este el caso en este caso también?

    
pregunta stanri

2 respuestas

5

Este tipo de retraso se llama como retraso de transporte . Mientras se usa la asignación no bloqueante, en un circuito secuencial, este tipo de demora generalmente se usa para demora de modelado entre el reloj y la salida .

Cada vez que cambia la entrada, la salida se evalúa inmediatamente y se mantiene en una cola de eventos y se asigna a la salida después del retraso de "transporte" especificado.

Por supuesto, cualquier tipo de retraso es no sintetizable .

Por ejemplo, digamos que la siguiente declaración se ejecuta en 5ns marca de tiempo.

always @(a,b)
  s <= #2 a+b;

El valor de a+b se evalúa y almacena internamente en la cola de eventos de simuladores , en 5ns. Pero el valor es no asignado hasta 7ns. Si alguna de las variables a o b cambia en la brecha de 2ns, entonces nuevamente se activará el bloque siempre. Y otro valor se insertará en la cola de eventos.

Para obtener información detallada, CummingsHDLCON1999_BehavioralDelays_Rev1_1.pdf"> CummingsHDLCON1999_BehavioralDelays_Rev1_1.pdf"> CummingsHDLCON1999_BehavioralDelays_Rev1_1.pdf=> Además, las diapositivas en Slideshare proporcionan información sobre demoras.

    
respondido por el sharvil111
1

Es para simular el retardo de reloj a salida. Tienes razón en que no es sintetizable.

    
respondido por el alex.forencich

Lea otras preguntas en las etiquetas