Will temp variable en always_comb crea latch

0

Tengo el siguiente fragmento de código donde se utiliza una variable temporal para contar el número de 1s en una matriz:

   // count the number 1s in array 
   logic [5:0] count_v; //temp
   always_comb begin
      count_v = arr[0];
      if (valid) begin
         for (int i=1; i<=31; i++) begin
            count_v = arr[i] + count_v;
         end
      end
      final_count = count_v;
   end

¿Esta lógica creará un pestillo para count_v? ¿Es la herramienta de síntesis lo suficientemente inteligente como para sintetizar correctamente esta lógica? Estoy luchando para encontrar cualquier recomendación de codificación para este tipo de escenarios.

Otro ejemplo:

logic temp; // temp variable
always_comb begin
   temp = 0;
   for (int i=0; i<64; i++) begin
      if (i>=start && i<start+3) begin
         out_data[temp*8 +: 8] = in_data[i*8 +: 8];
         temp = temp + 1'b1;
      end
   end
end

El ejemplo anterior está relacionado con la división de bits donde la entrada es de 64 bytes y la salida es menor que 64 bytes (3 bytes, por ejemplo, a partir del byte # start ). Sé que hay mejores formas de codificar esto, pero todavía quiero saber cómo la herramienta de síntesis interpretará el diseño aquí.

    
pregunta newbie

1 respuesta

0

Si dentro del bloque always_comb su asignación aparece antes de cualquier acceso de lectura, no hay bloqueo. Debería obtener un error si hay algún flujo posible a través del bloque si hubo una lectura antes de escribir en una variable local.

    
respondido por el dave_59

Lea otras preguntas en las etiquetas