|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||
|
Invité de passage
![]() Ingénieur/Chercheur Inscription : novembre 2007 Messages : 56 ![]() |
Bonjour,
je voudrais faire des opérations arithmétiques simples en VHDL. Mon code est le suivant : Code :
avec Modelsim et j'ai des erreurs quelques soient les librairies utilisées. Vous savez comment faire ? |
||
|
|
00
|
|
|
#2 | ||||
|
Membre régulier
![]() Inscription : juin 2009 Messages : 37 ![]() |
Bonjour,
Le piège malheureusement classique lié à une sournoiserie des IEEE. Les bibliothèques "std_logic_arith" et "std_logic_signed" ne sont pas de vraies bibliothèques IEEE, contrairement à ce que leur nom laisse penser. Les seules combinaisons qui existent et qui soient viables (simulation, synthèse, et cohérence/exactitude), avec dans tous les cas la std_logic_1164 :
La même 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 inconvénients ), les std_logic_vector n'ont plus de type (signé ou non-signé) par défaut. Ils restent de simples tableaux de std_logic.Pour faire une addition : Code :
Code :
![]() ) : évitez les types "unsigned" et/ou "signed" dans les ports des entités (ça peut devenir très rapidement la jungle en synthèse).Cdlt, |
||||
|
|
10
|
|
|
#3 |
|
Invité de passage
![]() Ingénieur/Chercheur Inscription : novembre 2007 Messages : 56 ![]() |
Eh ben, tout ça n'est pas fait pour nous aider !
En tous cas, merci pour cette explication très claire. |
|
|
00
|
|
|
#4 | |||
|
Invité de passage
![]() Ingénieur/Chercheur Inscription : novembre 2007 Messages : 56 ![]() |
Bon, j'ai toujours un problème. Mon code :
Code :
Citation:
|
|||
|
|
00
|
|
|
#5 | ||
|
Membre régulier
![]() Inscription : juin 2009 Messages : 37 ![]() |
Bonjour,
L'erreur de compilation est simplement liée à l'oubli du ".all" après la bibliothèque "numeric_std". ![]() Une petite remarque sur le code : bonne idée que d'utiliser des paramètres "generic" pour rendre paramétrable votre code, mais votre addition et soustraction font apparaître un vecteur de 16bits. Remplacez plutôt ces deux vecteurs tout simplement par "1" (un integer, donc sans les ""), et c'est plus simple & lisible ![]() Code :
|
||
|
|
10
|
|
|
#6 |
|
Invité de passage
![]() Ingénieur/Chercheur Inscription : novembre 2007 Messages : 56 ![]() |
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. |
|
|
00
|
|
|
#7 | ||
|
Invité de passage
![]() Ingénieur/Chercheur Inscription : novembre 2007 Messages : 56 ![]() |
Désolé de continuer avec mes ennuis mais j'ai de nouveau un problème : je voudrais déclarer un signal mais Modelsim me dit que le type pose problème :** 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 : Code :
|
||
|
|
00
|
|
|
#8 |
|
Membre régulier
![]() Inscription : juin 2009 Messages : 37 ![]() |
Bonjour,
Ligne 15, la "range" définie n'est pas correcte; d'ailleurs ce n'est pas une range mais une valeur numérique x_size + w_size - 1 ==> 31 Ne serait-ce pas plutôt "signed(x_size+w_size-1 downto 0)" ? ![]() Cdlt, |
|
|
10
|
|
|
#9 |
|
Invité de passage
![]() Ingénieur/Chercheur Inscription : novembre 2007 Messages : 56 ![]() |
Houlala, que d'idioties !
Merci pour ce débogage de base, je manque apparemment d’expérience en VHDL. |
|
|
00
|
Copyright © 2000-2013 - www.developpez.com