J'essaie de créer une bibliothèque à virgule flottante de précision arbitraire basée sur un modèle en C++ qui supporte les variables Exponents et la variable Mantissa qui peut être spécifiée en tant qu'arguments de modèle. J'ai déjà développé une bibliothèque de points fixes basée sur un modèle. Le type de mise en œuvre que je veux est:Bibliothèque de virgules flottantes de précision arbitraire pour la synthèse de haut niveau
template<int EXPONENT_BITS, int MANTISSA_BITS>
struct fp_float
{
<some_data_type_to_store_exponent_and_mantissa_values>;
};
Je suis incapable de trouver un type de données approprié pour stocker les exposants pour que je ne pas utiliser plus de bits que nécessaire pour le code. Je pensais utiliser intn_t
où n = {8, 16, 32, 64}
mais si je déclare fp_float<3,11>
il utilisera 8
bits pour EXPONENT
et 16
bits pour MANTISSA
. Par conséquent, cela rend toute la bibliothèque inutile car elle utilise plus de ressources qu'elle ne le devrait pour une précision spécifiée.
Je voudrais savoir s'il existe d'autres types de données de précision arbitraires qui répondent à mes besoins.
J'ai rencontré quelques bibliothèques de précision arbitraires, mais ces bibliothèques ont une structure de code qui ne peut pas être synthétisée dans Descriptions matérielles en utilisant la synthèse de haut niveau (raison pour laquelle je crée cette bibliothèque).
Boost en avoir un. – Bathsheba
@Bathsheba: J'ai passé par 'Boost',' MPFR', 'ttmath' et' GMP' et essayé de les synthétiser en descriptions matérielles, mais ils utilisent tous plusieurs implémentations de code qui ne sont pas supportées par les outils de synthèse de haut niveau comme Vivado. Le fait que je doive rendre la bibliothèque compatible avec la synthèse est la raison pour laquelle je la construis. –