¿Este código creará un pestillo?

5

¿Eso creará un pestillo?

always @ (posedge clk) begin
 if (enable) begin
   myvar1[63:0] <= some value;
   myvar2[63:0] <=some value2;
   myvar3[63:0] <= value3;
 end else begin
    myvar1[63:0] <=othervalue
 end
end

¿Debería todo lo que está en el if, estar también en la cláusula else? He entendido que dejar un "if" sin "if" puede causar un bloqueo, pero ¿significa también que cada señal en el "if" debería estar en el "else"? Si ese es el caso, debo escribir algo como esto:

myvar2[63:0] <= myvar2[63:0];

o no?

    
pregunta ghostrider

2 respuestas

9

No, este código no debe inferir pestillos. Es el caso en todos los sintetizadores que vi.

El motivo es que una herramienta de síntesis inferirá un flip-flop para cualquier señal que se asigne dentro de un bloque de código secuencial ( @(posedge clk) ). Para todas las ramas que no tienen asignaciones explícitas, la herramienta de síntesis simplemente convierte la salida en la entrada, pero dado que inicialmente es un fracaso, no hay ninguna preocupación.

Lo que estás diciendo acerca de los latches se aplica a la lógica conbinacional. Por ejemplo, el siguiente código infiere latches para myvar2 y myvar3 :

always @* begin
 if (enable) begin
   myvar1[63:0] = some value;
   myvar2[63:0] =some value2;
   myvar3[63:0] = value3;
 end else begin
    myvar1[63:0] =othervalue
 end
end

La síntesis intenta imitar la salida a la entrada, pero esto requiere que haya un elemento de "memoria" en su lugar para evitar un "bucle". Los pestillos controlados por la señal enable se deducirán.

Espero que esto ayude.

    
respondido por el Vasiliy
2

No hay preocupación por el contenido de su cláusula else , porque de todos modos ya ha creado latches (registros) para todas esas señales, al ponerlas en un proceso que se activa en el borde del reloj.

    
respondido por el Dave Tweed

Lea otras preguntas en las etiquetas