2010-11-05 20 views
2

I ont une FIFO qui a une interface qui ressemble à quelque chose comme ceci:lecture des ports pour le débogage

entity fifo is 
    port (
    CLK    : IN std_logic := '0'; 
    DIN    : IN std_logic_vector(31 DOWNTO 0); 
    ALMOST_EMPTY  : OUT std_logic; 
    ALMOST_FULL  : OUT std_logic; 
    DOUT    : OUT std_logic_vector(31 DOWNTO 0); 
    ... 
    WR_ACK   : OUT std_logic 
); 
end fifo; 

Cette interface est donnée et je ne peux pas changer est. La chose est maintenant, à des fins de débogage, je veux voir ce qui est écrit et lu vers/depuis le FIFO. En d'autres termes, idéalement je voudrais assigner deux déboguer les valeurs in et out du FIFO, ie.

DBG_FIFO_IN <= DIN; 
    DBG_FIFO_OUT <= DOUT; 

Pour des raisons évidentes, la deuxième mission me donne le message d'erreur suivant:

[exec] ERREUR: HDLParsers: 1401 - Objet DOUT du mode ne peut pas être lu. Donc, je me demande s'il y a un moyen de donner la valeur DOUT à mon symbole de débogage de quelque manière que ce soit. L'interface est donnée, donc je ne peux pas faire de DOUT un signal inout.

Merci beaucoup pour vos commentaires utiles!

Répondre

4

Vous devez assigner la sortie fifo à un signal local, vous pouvez lecture, puis attribuer ce signal à la sortie (ou les affecter à la fois en parallèle):

DBG_FIFO_OUT <= (your logic here); 
DOUT   <= DBG_FIFO_OUT; 

ou

DBG_FIFO_OUT <= (your logic here); 
DOUT   <= (your logic here); 
+1

Attention en utilisant la première option dans un processus cadencé - vous vous retrouverez avec un seul retard de cycle entre les deux signaux. La deuxième forme est préférable pour cela (mais si vous changez "votre logique ici" vous devrez vous rappeler de changer les deux ...) –

+2

La façon dont nous faisons habituellement ceci est en mettant le 'DBG_FIFO_OUT <= (votre logique ici) ; 'à l'intérieur du processus cadencé et' DOUT <= DBG_FIFO_OUT; 'en dehors de celui-ci (avec toutes les autres sorties qui ont besoin du même traitement) – QuantumRipple

2

Utilisez BUFFER au lieu de sortir. Alors vous pouvez lire sans le signal intermédiaire utilisé dans la solution de Charles.

+0

Je ne le recommanderais pas. La plupart des directives recommandent que les tampons ne soient pas utilisés. Au lieu de cela, utilisez un signal local qui peut être lu à la fois par le débogage et le port régulier. – trondd

2

Vous avez déjà de bonnes réponses pour les anciens outils - mais si vous utilisez un outil qui prend en charge VHDL-2008, vous êtes autorisé à lire directement les ports de sortie. Vous devrez peut-être activer ceci avec une option de ligne de commande.

Si vos outils ne le supportent pas, se plaindre chez le fournisseur jusqu'à ce qu'ils le fassent!