# Autres langages > Autres langages > VHDL >  Oprations arithmtiques simples

## binome-x

Bonjour,
je voudrais faire des oprations arithmtiques simples en VHDL. Mon code est le suivant :


```

```

et dj j'ai l'erreur : Subprogram "+" is ambiguous.
avec Modelsim et j'ai des erreurs quelques soient les librairies utilises.
Vous savez comment faire ?

----------


## titiri

Bonjour,

    Le pige malheureusement classique li  une sournoiserie des IEEE. Les bibliothques "std_logic_arith" et "std_logic_signed" ne sont pas de vraies bibliothques IEEE, contrairement  ce que leur nom laisse penser.
    Les seules combinaisons qui existent et qui soient viables (simulation, synthse, et cohrence/exactitude), avec dans tous les cas la std_logic_1164 :
pour ne grer que des "unsigned" : 
1ere possibilit : std_logic_arith et std_logic_unsigned2eme possiblit : numeric_stdpour ne grer que des "signed"
1ere possibilit *KO* : std_logic_arith et std_logic_signed2eme possiblit : numeric_std

La mme chose en raccourcie : seule la "numeric_std" permet de couvrir tous les cas (unsigned et/ou signed) avec un comportement fonctionnel.

Donc, en n'utilisant que numeric_std, a fonctionne toujours. Par contre (et oui, il faut bien qu'il y ait quelques inconvnients  ::aie:: ), les std_logic_vector n'ont plus de type (sign ou non-sign) par dfaut. Ils restent de simples tableaux de std_logic.
Pour faire une addition : 



```

```

Vous pouvez aussi dfinir les objets "a", "b", "c" et "result_x" en tant que "unsigned" ou "signed" (au lieu de std_logic_vector). On crit alors directement



```

```

Mais attention (et oui, encore un "warning"  ::aie::  ::mouarf:: ) : vitez les types "unsigned" et/ou "signed" dans les ports des entits (a peut devenir trs rapidement la jungle en synthse).

Cdlt,

----------


## binome-x

Eh ben, tout a n'est pas fait pour nous aider !
En tous cas, merci pour cette explication trs claire.

----------


## binome-x

Bon, j'ai toujours un problme. Mon code :


```

```

Ca me donne l'erreur :



> (vcom-1136) Unknown identifier "signed".

----------


## titiri

Bonjour,

L'erreur de compilation est simplement lie  l'oubli du ".all" aprs la bibliothque "numeric_std". ::aie:: 

Une petite remarque sur le code : bonne ide que d'utiliser des paramtres "generic" pour rendre paramtrable votre code, mais votre addition et soustraction font apparatre un vecteur de 16bits. Remplacez plutt ces deux vecteurs tout simplement par "1" (un integer, donc sans les ""), et c'est plus simple & lisible  ::ccool:: 



```

```

Cdlt

----------


## binome-x

Bon ben merci pour le signalement du ".all" manquant. Erreur d'tourderie !
Merci aussi pour le +-1, c'est vrai que c'est nettement plus lisible et plus facile  crire.

----------


## binome-x

Dsol de continuer avec mes ennuis mais j'ai de nouveau un problme : je voudrais dclarer un signal mais Modelsim me dit que le type pose problme :** Error: D:/work/FFT/cellule/src/butt.vhd(15): Expecting a type name, found type conversion (to ieee.NUMERIC_STD.SIGNED) instead.
et c'est pareil avec du std_logic_vector

Je vous donne mon code :


```

```

Vous voyez le problme ?

----------


## titiri

Bonjour,

    Ligne 15, la "range" dfinie n'est pas correcte; d'ailleurs ce n'est pas une range mais une valeur numrique ::oops:: 
    x_size + w_size - 1 ==> 31
    Ne serait-ce pas plutt signed(x_size+w_size-1 downto 0) ?  ::ccool:: 

Cdlt,

----------


## binome-x

Houlala, que d'idioties !
Merci pour ce dbogage de base, je manque apparemment dexprience en VHDL.

----------

