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í.