2012-10-05 4 views
2

Je suis au-dessus de l'erreur lors de l'exécution de modelsim sur un test de VHDL et je n'arrive pas à comprendre pourquoi c'est une erreur.La fonction de conversion "To_bit" doit avoir exactement un paramètre formel

Le Testcase:

LIBRARY IEEE; 
Use ieee.std_logic_1164.all; 

entity a is 
port (in11 : in std_logic 
); 
end a; 

architecture a un est:

component b_1 
port (in1 : in bit); 
end component; 


begin 
    inst : b_1 port map (in1=> **to_Bit**(in11)); 
end a; 

Répondre

4

C'est une erreur ModelSim, en fait, il devrait signaler que vous n'êtes pas autorisé à utiliser cette fonction réelle dans un port carte, cela fonctionne:

LIBRARY IEEE; Use ieee.std_logic_1164.all; 

entity a is port (in11 : in std_logic); end a; 

architecture a of a is 
signal inBit : Bit; 
component b_1 port (in1 : in bit); end component; 

begin 
inBit <= to_bit(in11); 
inst : b_1 port map (in1=> inBit); end a; 

Il existe des restrictions qui s'appliquent aux actuels dans les cartes de port, cf vhdlref:

Le réel, si un port ou d'un signal, doivent être désignés par un nom statique (voir 6.1). La valeur réelle, si une expression, doit être une expression globalement statique (voir 7.4).

La chose est, les deux cas devrait être globalement statique ...

+0

Si j'écris une fonction wrapper à "to_bit" dans un paquet, puis si j'utilise cette fonction, alors cela fonctionne.Code 'package: mgc_package paquet est mgc_to_Bit fonction (p: std_ulogic) bit de retour; paquet final; Le corps du package mgc_package est function mgc_to_Bit (p: std_ulogic) le bit de retour est begin return to_bit (p); fin; corps de l'embout; VHDL Cas: travail de bibliothèque; utilise work.mgc_package.all; l'architecture a un est .... commencent inst: b carte du port (IN11 => mgc_to_Bit (in1)); fin a; ' Si je peux utiliser une fonction sur réelle dans un portmap, alors pourquoi ne puis-je pas utiliser la fonction" to_bit "elle-même? – Dharmendra

+0

to_bit est défini dans le paquet standard, donc en fait c'est la même situation ... aucune idée de pourquoi cela devrait fonctionner – BennyBarns

+0

La réponse Christian U. montre pourquoi une fonction de conversion fonctionnerait. Voir 4.3.3.2 Listes d'associations, * fonction de conversion * (6.5.7.1 en -2008), le problème est le nombre de paramètres surmontés en -2008 (6.5.6.3 clauses Port) en associant un signal implicitement déclaré à la cible d'une affectation simultanée de la valeur de l'expression (par exemple un appel de fonction avec un sous-type globalement statique pour une marque de type retour). – user1155120

1

VHDL-93 permet des conversions de types et fonctions de conversion dans les listes d'association. Une fonction de conversion est un cas particulier d'une fonction avec un seul argument.

Regardons à la déclaration de to_bit:

function to_bit(s : std_ulogic; xmap : bit := '0') return bit; 

Bien que to_bit(s) ressemble à une fonction de conversion valide, ce n'est pas, parce que la déclaration contient deux arguments. Le deuxième argument xmap est utilisé comme résultat lorsque is_x(s) est vrai.

Ceci est pas un bug ModelSim, mais peut-être le message d'erreur est un peu cryptique. ModelSim chiffre que to_bit est censé être une fonction de conversion, mais refuse de l'utiliser, car il a un second argument, et n'est donc pas une fonction de conversion valide.

Une fonction simple emballage peut résoudre le problème:

function to_bit(s : std_ulogic) return bit is 
begin 
     return to_bit(s, '0'); 
end; 

Notez que la fonction peut aussi avoir le nom to_bit, parce que VHDL supporte la surcharge de fonction. Ce serait bien d'avoir ceci dans le paquet std_logic_1164.

+0

Le paramètre xmap prend en charge la modélisation de différents systèmes de rails logiques. Voir IEEE Std 1076-2008 6.5.6.3 Clauses de port, qui prévoit l'utilisation d'expressions non statiques (par exemple, appels de fonctions avec paramètres multiples) pour les formalités de mode ** dans ** utilisant un signal implicitement déclaré, la cible d'une affectation de l'expression étant associée au réel (comme vous le faites explicitement). Bien que trouver un support de synthèse puisse être problématique, votre problème a été subsumé. Ce n'est généralement pas une mise en œuvre de l'outil de -2002 à -2008 hautement prioritaire. – user1155120

Questions connexes