Quiero averiguar el rango máximo para los tipos físicos definidos por el usuario, como los siguientes:
type resistance is range 0 to 1_000_000
units
Ohm;
kOhm = 1000 Ohm;
MOhm = 1000 kOhm;
end units resistance;
(consulte también enlace ).
La documentación para tipos físicos (VHDL LRM secciones 3.1.3 y 3.1.2) dice que el rango es de tipo entero, por lo que podría escribir range integer'low to integer'high
que es el mismo que range -2_147_483_648 to 2_147_483_647
. Sin embargo, mi simulador parece usar aritmética de 64 bits aquí, y range -40_000_000_000_000 to 40_000_000_000_000
también funciona, al igual que range -2**62 to 2**62
(mientras que 2**63
no lo hace).
¿Existe una forma canónica de averiguar el rango compatible con el simulador?
Si no, ¿cómo pondría el 2**62
empíricamente encontrado en una constante (para la externalización de dicho código específico del simulador)? Una constante entera no lo cortará :)