Para evitar bloqueos, debe asegurarse de que todas sus salidas estén asignadas a todas las ramas posibles del código.
por ejemplo,
if a = '1' then
b(0) <= '1';
else
b(1 downto 0) <= "00";
end if;
generaría un pestillo, porque en la primera condición, el valor de b (1) no se especifica, por lo que el compilador decidió que deseaba mantener el valor anterior de b (1) allí. Una forma de escribir esto que no generaría un pestillo es:
if a = '1' then
b <= prev_b;
b(0) <= '1';
else
b(1 downto 0) <= "00";
end if;
...
if rising_edge (clk)
prev_b <= b;
end if;
Aquí usted declara explícitamente que b debe retener su valor anterior y luego sobrescribe b (0) con el nuevo valor.
Otra forma es dar un valor predeterminado ba, como en la respuesta de @ TomiJ.
Si publica el código en el que se está bloqueando, podríamos ayudarlo a encontrar el motivo específico.