Me encuentro usando una función que devuelve la cantidad de bits necesarios para representar mucho un valor entero en mis diseños.
Defino esta función en cada uno de mis módulos:
function int_width(value: integer) return integer is
begin
return integer(floor(log2(real(value))));
end function;
Ejemplo de uso:
entity vga_sync is
generic(
TOTAL_WIDTH: integer := 800;
TOTAL_HEIGHT: integer := 525;
-- [...]
port(
-- [...]
);
end vga_sync;
architecture arch of vga_sync is
signal horizontal_counter: unsigned(int_width(TOTAL_WIDTH) downto 0);
signal vertical_counter: unsigned(int_width(TOTAL_HEIGHT) downto 0);
-- [...]
end arch;
Me parece que es un problema común. ¿Hay una función estándar en VHDL para hacer esto? ¿Debo usar siempre un número suficientemente grande (es decir, siempre de 32 bits) sin firma en estos casos?