2013-04-28 31 views
2

Je veux faire fonctionner la puissance en utilisant vhdl où la puissance est un nombre flottant et le nombre est entier (sera toujours "2").Fonction de puissance dans vhdl

2^un certain nombre flottant. J'utilise ieee library et (fixed_float_types.all, fixed_pkg.all, et float_pkg.all). J'ai pensé à calculer toutes les sorties possibles et les enregistrer en ROM, mais je ne connais pas les plages de puissance.

Comment implémenter cette fonction et s'il y a une fonction implémentée comme celle-ci où la trouver?

grâce

Répondre

3

Pour la simulation, vous trouverez des fonctions de puissance appropriées dans la bibliothèque IEEE.math_real

library IEEE; 
use IEEE.math_real.all; 
... 
X <= 2 ** Y; 
or 
X <= 2.0 ** Y; 

Ceci est probablement pas synthétisable. Si j'avais besoin d'une opération similaire pour la synthèse, j'utiliserais une table de recherche de valeurs, de pentes et de dérivées secondes, et un interpolateur quadratique. J'ai utilisé cette approche pour les fonctions racines réciproques et carrées pour une précision de précision unique; 2 ** n sur une plage raisonnable de n est suffisamment lisse pour que la même approche fonctionne.

1

Si une approximation ferait, je pense que j'utiliserais la partie entière de mon exposant pour déterminer la puissance entière de 2, comme si le nombre à virgule flottante est 111.011010111 Vous savez que la puissance entière de 2 partie est 0b10000000. Ensuite, je ferais un ajout conditionnel de gauche à droite basé sur le bit fractionnaire, donc pour 111.011010111 vous savez que vous devez ajouter l'outil 0b10000000 fois (0 * (1/2) + 1 * (1/4) + 1 * (1/8) + 0 * (1/16) ..... et ainsi de suite). 1/2, 1/4, 1/8, et cetera sont des quarts de droite de 0b10000000. Ceci implémente la partie entière de l'exponentiation, puis la partie fractionnaire se rapproche de la multiplication de la partie entière.