2017-07-05 7 views
1

Je voudrais être en mesure de forcer en permanence un signal vers le bas dans ma hiérarchie de test. Voici un exemple simple illustrant comment je l'ai fait dans mes bancs d'essai.VHDL-2008 force continuellement un nom externe

library ieee; 
use ieee.std_logic_1164.all; 
use ieee.numeric_std.all; 

entity double_inverter is 
port(
    a : in std_logic; 
    z : out std_logic 
); 
end double_inverter; 

architecture x of double_inverter is 
signal b : std_logic; 
begin 

    b <= not a; 
    z <= not b; 

end architecture x; 


library ieee; 
use ieee.std_logic_1164.all; 
use ieee.numeric_std.all; 

entity inverter_tb is 
end inverter_tb; 

architecture y of inverter_tb is 
    signal z : std_logic; 
    signal clk : std_logic := '0'; 
begin 

    clk <= not clk after 5 ns; 

    dut : entity work.double_inverter 
    port map(
    a => '0', 
    z => z 
); 

    continuous_stim : process(clk) 
    begin 

    << signal dut.b : std_logic >> <= force clk; 

    end process; 

end architecture y; 

Cela fonctionne dans Modelsim 10.4b dire signal b dans l'instance de double_inverter sera fixé par clk et le signal pas, mais est-il une meilleure façon de contrôler les signaux de noms externes?

Merci pour votre aide.

+0

* ... y at-il un meilleur moyen ... * Mieux de quelle manière? Une force de pilote VHDL et des noms externes révèlent le mécanisme utilisé par les simulateurs, généralement fourni par les commandes de la console ou l'exécution de scripts en fonction de VHPI/VPI/PLI/DLI. Il améliore théoriquement la portabilité des constructions de vérification en fonction des bancs de test au lieu des scripts de plate-forme de simulation dans le visage croissant des 'autres solutions de langage' utilisant VHP, etc. Préférez-vous écrire des programmes VHDL ou utiliser d'autres solutions de vérification? Vous demandez une opinion alors qu'un simple exemple peut ne pas conduire le choix. – user1155120

+0

Y a-t-il une meilleure façon de le faire dans VHDL-2008? Parfois, je vais avoir une situation où je voudrais pouvoir forcer un signal profond dans ma hiérarchie de testbench à un autre signal, comme "clk" dans cet exemple. VHDL-2008 vous donne la possibilité d'atteindre profondément dans votre hiérarchie avec des noms externes. Je voulais savoir comment conduire ces noms externes avec d'autres signaux dans le banc d'essai, mais les seuls exemples dans le LRM et sur le web montraient que les noms externes étaient pilotés par '1' ou '0', pas par des signaux explicites. J'ai juste essayé quelque chose et cela fonctionne, mais est-ce une bonne ou même une façon acceptable de le faire? Merci. –

+0

Les primitives en tant qu'expressions (objets nommés ici) peuvent fournir des valeurs pour l'affectation. Les exemples ne sont pas exhaustifs. Pour un signal, voir IEEE Std 1076-2008 10.5.2.2 Exécution d'une instruction d'affectation simple, 9. Expressions, 9.1 Général (EBNF pour primaire et paragraphe 3). – user1155120

Répondre

3

Dans certaines situations, vous pouvez utiliser est un alias au nom externe:

alias dut_b is <<signal dut.b : std_logic >> ; 

Puisque nous pensons signaux étant déclarés dans une architecture, notre instinct est de mettre l'alias dans l'architecture. Cependant, dans cette situation, cela n'est pas autorisé parce que le DUT n'a pas encore été élaboré.

Vous pouvez être autorisé à le mettre dans le processus - je devrais faire quelques recherches pour vérifier si la langue le permet. Je crains que les processus n'autorisent pas les déclarations de signaux. Je ne suis donc pas certain que cela permettra aux alias de transmettre des signaux dans un processus - il n'y a pas de mal à l'essayer et à nous faire savoir si cela fonctionne.

Généralement quand j'utilise quelque chose comme ceci, je le place dans une région déclarative d'architecture d'un composant qui crée les cas de test et qui est instanciée par le banc d'essai. Pour éviter les problèmes d'ordre d'élaboration, je m'assure d'utiliser mon DUT en premier dans le testbench et généralement le composant qui génère les cas de test en dernier (avec les modèles basés sur les transactions au milieu). VHDL élabore les conceptions dans l'ordre où elles sont instanciées.

+0

Merci pour votre réponse, Jim. Juste essayé votre suggestion pour mettre l'alias dans la région de processus et cela a fonctionné. De plus, pour ceux qui s'en soucient, Modelsim vous permettra en fait de mettre un alias à un nom externe dans la région déclarative top de l'architecture de testbench, il enverra juste un avertissement que l'objet dut n'a pas encore été élaboré. Probablement pas la chose la plus propre à faire, cependant ... –

+0

Voir IEEE Std 1076-2008 8. Noms, 8.1 Général paragraphes 6 et 7, un nom externe n'est pas localement statique. Voir 8.7 Noms externes para 3 b) post 5. et para 4, les noms externes peuvent être évalués lors de l'élaboration de la déclaration d'alias (14.4.2.6 Déclarations d'alias et 6.6.2 Alias ​​d'objets, 14.2 Elaboration d'une hiérarchie de conception para 15 - voir aussi la NOTE, 14.4.1). Modelsim met historiquement en garde contre la non-portabilité tout en préconisant de nouvelles fonctionnalités mais ne participe pas actuellement au processus de révision standard. – user1155120