Erreur code vhdl - Divers - Programmation
Marsh Posté le 29-05-2014 à 23:39:37
Oui il faut que sum fasse 17 bits pour gérer l'éventuel overflow.
Tu peux passer par un signal intermédiaire, regarder si il y a eu overflow et remettre sur 16 bits si ce n'est pas le cas.
Marsh Posté le 29-05-2014 à 23:55:50
vous avez une idée à propos la fonction ""resize "" comment je peux l'utiliser ?!
Marsh Posté le 30-05-2014 à 00:12:40
C'est à dire comment tu peux l'utiliser? Tu en as besoin?
Qu'est ce que tu ne comprends pas dans cette fonction?
Marsh Posté le 30-05-2014 à 00:29:03
sum(0)<= ('0' & temp(0)) + ('0' & temp(1));
autres trucs et astuces du genre là dedans:
http://www.synthworks.com/papers/v [...] d_2003.pdf
Marsh Posté le 30-05-2014 à 08:26:25
Attention, ta méthode te fait perdre le bit de signe. Et tu peux te retrouver avec des valeurs qui n'ont rien à voir.
Je ne sais plus si l'attribut length est papplicable à un signal. si c'est la cas, cette version est plus sure:
Code :
|
DE même pour être générique, tu peux déclarer tes signaux en fonction de la taille de tes entrées, Par exemple:
Code :
|
Aussi, au lieu de faire des cast (signed) sur data et CD, pourquoi ne pas les déclarrer signed?
Marsh Posté le 30-05-2014 à 08:57:25
tu veux dire que je fasse un tableau pour le sihnal ""sum"" !?
Marsh Posté le 30-05-2014 à 09:19:50
comme ça :
type Rom is array (0 to 3) of signed(16 downto 0) ;
signal sum :Rom ;
et aprés :
sum(0) <= resize(temp(0), temp(0)'17) + resize(temp(1), temp(1)'17);
ou bien !?
Marsh Posté le 30-05-2014 à 09:23:48
Length est un attribut, seulement je ne sais pas si il va s'appliquer correctement à temp(x).
Mais ça s'écrit bien temp(0)'length + 1
temp(0)'length renvoie la taille de temp 0 (16 ici) et tu ajoute 1 pour ajouter un bit au signal.
Marsh Posté le 29-05-2014 à 23:18:37
Bonsoir mes ami(e)s :
est ce que vous pouvez m'aider svp .
voici mon code :
voici l'erreur :
Error (10344): VHDL expression error at correla.vhd(70): expression has 16 elements, but must have 17 elements
Je vous remercie .