La conversion de Type en VHDL: réel en entier - Est le mode d'arrondi spécifié?
Pendant le débogage de la manipulation de l'utilisateur défini des types physiques dans Vivado (lire plus), j'ai trouvé un comportement différent pour les conversions de type de réel en entier.
Voici mon code d'exemple:
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
--use IEEE.MATH_REAL.all;
entity Top_PhysicalTest_Simple is
port (
Clock : in STD_LOGIC;
Input : in STD_LOGIC;
Output : out STD_LOGIC
);
end;
architecture top of Top_PhysicalTest_Simple is
constant int_1 : INTEGER := natural(0.5);
constant int_2 : INTEGER := integer(-0.5);
-- constant int_2 : INTEGER := natural(-0.5);
begin
assert FALSE report "16 - int_1 (natural(0.5)): " & INTEGER'image(int_1) severity note;
assert FALSE report "17 - int_2 (natural(-0.5)): " & INTEGER'image(int_2) severity note;
Output <= Input when rising_edge(Clock);
end;
Le mannequin flip flop est utilisé pour prévenir certains outils de se plaindre au sujet d'une conception vide.
XST 14.7:
Elaborating entity <Top_PhysicalTest_Simple> (architecture <top>) from library <work>.
Note: "16 - int_1 (natural(0.5)): 1"
Note: "17 - int_2 (natural(-0.5)): 0"
XST semble utiliser le mode round up et il se charge de la conversion de type inclusif contrôle de portée.
Donc, je dois utiliser integer(-0.5)
au lieu de natural(-0.5)
.
Vivado 2014.4:
[Synth 8-63] RTL assertion: "16 - int_1 (natural(0.5)): 1" ["D:/Temp/PhysicalTest_Vivado2014.4/vhdl/Top_PhysicalTest_Simple.vhdl":80]
[Synth 8-63] RTL assertion: "17 - int_2 (natural(-0.5)): -1" ["D:/Temp/PhysicalTest_Vivado2014.4/vhdl/Top_PhysicalTest_Simple.vhdl":81]
Synthé semble utiliser le mode ronde à l'infini et gère le type de conversion, sans contrôle de portée. Alors peut-être natural(..)
est juste un alias pour integer(..)
.
La ligne de commentaire: constant int_2 : INTEGER := natural(-0.5);
ne renvoie pas d'erreur.
GHDL 0.29:
GHDL 0.29 n'a pas de contrôle de portée dans natural(..)
.
Je sais que c'est daté, mais depuis 0.31 me déteste, je ne peux pas dire si c'est déjà corrigé.
GHDL 0.31:
Je vais présenter les résultats par la suite. GHDL refuse à analyser mon code parce que:
Top_PhysicalTest_Simple.vhdl:29:14: fichier std_logic_1164.v93 a changé et doivent être analysés de nouveau
Mes questions:
- Ne VHDL définir un mode d'arrondi? Et si oui, lequel?
- Comment dois-je gérer arrondissement si aucun mode n'est-elle définie?
ghdl-0.32 ... ./top_physicaltest_simple Top_PhysicalTest_Simple.vhd:18:3:@0ms:(affirmation de la note): 16 - int_1 (naturel(0.5)): 1 Top_PhysicalTest_Simple.vhd:19:3:@0ms:(affirmation de la note): 17 - int_2 (naturel(-0.5)): -1
Désolé pour le mixup: 0.29 a été testé sur une Debian (offre standard), de 0,31 est ma machine Windows (mcode version). Installation et compilation 0.32 est toujours une tâche 🙂
ghdl -un top_phystest_simple.vhdl (fin). ghdl --version GHDL 0.31 (20140108) [Dunoon edition] (sur Mac OS X, demander à Brian que Dunoon, moyens). Vous pouvez également trouver un téléchargement pour Debian - sourceforge.net/projects/ghdl-updates/files/Builds/ghdl-0.31/....
La question est de savoir ce que
ghdl -e ...
imprime 🙂 j'ai essayé d'installer ghdl 0.31 sur ma machine virtuelle linux, mais il existe une version de package missmatch. Debian 8.0 (test) libgnat-4.9, ghdl nécessite 4.6, mais c'est une question pour un autre jour ...
OriginalL'auteur Paebbels | 2015-01-07
Vous devez vous connecter pour publier un commentaire.
De la norme IEEE Std 1076-2002 section 7.3.5 "conversions de Type"
Si vous voulez quelque chose d'autre, peut-être des fonctions dans
IEEE.MATH_REAL
peut être de quelque usage (notammentCEIL
,FLOOR
et/ouTRUNC
).OriginalL'auteur Philippe Aubertin
( affichage présente comme une réponse parce que je ne peux pas poster un commentaire inline... )
Voici les résultats à l'aide de la prédéfinis ghdl-de 0,31-mcode-win32 :
"0.31 est ma machine Windows (mcode version)"
"GHDL refuse à analyser mon code "
Si vous rencontrez des difficultés avec des bibliothèques sur le Windows mcode construire de 0,31, essayez de désinstaller tout de 0,29 ou plus tôt, les INS-installer les versions de GHDL sur cette machine.
Assurez-vous également que vous avez exécuté le à travers l'ensemble du processus d'installation comme décrit dans la 0.31 d'INSTALLATION de Windows, en particulier reanalyze_libraries.chauve-souris
Voici la version utilisée pour le test ci-dessus:
Et le chemin de la bibliothèque info :
OriginalL'auteur Brian Davis