Bonjour à tous,

Je cherche donc à connaître un moyen de calculer sin/cos en VHDL pour obtenir une tangente.

J'ai, à la base, deux std_logic_vector (11 downto 0) :

sin : in std_logic_vector (11 downto 0);
cos : std_logic_vector (11 downto 0);

La division de sin par cos me renvoi, bien entendu, une erreur sur le "/". Je peux donc implémenter une fonction vhdl qui divisera sin par cos ou utiliser un divider déjà préconstruit (sur quartus II). Ceci me donnera une division avec un résultat entier et un reste ce qui ne m'intéresse pas car il me faut un résultat réel.

j'ai essayé avec des réels cependant lors de la synthèse il apparaît une erreur disant :

"cannot synthezise non-constant real objects or values"

en effet j'avais seulement déclaré les variables suivantes :

variable realsin: real;
variable realcos real;
variable realtan: real;


et par la suite pour calculer la tangente:

realsin:=real((CONV_INTEGER(si n));
realsin:=real((CONV_INTEGER(co s));
realtan:=(realsin/realcos);

Faut-il donc préciser la plage de définition des réels? (comme integer range 0 to 4096) si oui, comment pour des réels?

Sinon existe t-il un type binaire avec virgule ?

Ou avez vous une autre solution me permettant d'implémenter cette fonction tangente en VDHL?


Je vous remercie par avance,

Arnaud.


PS: je sais que ceci peut etre implémenté tres facilement du un uC mais je ne peux pas utiliser cette solution car le routage du système est déja effectué et pour d'autres raisons qui ne relèvent pas de moi.