2009-04-09 9 views
1

Je suis en train d'écrire une tâche qui donne une des valeurs variables PADDR de diffrent:tâche Verilog

module paddr1 ; 
task paddr1; 
input [10:0]paddr; 
input clock; 

@(posedge clock) 
begin 
paddr=10 
#100; 
paddr=20; 
#100; 
paddr=30; 
#100; 
paddr=40; 
#100; 
paddr=50; 
#100; 
paddr=60; 
#100; 
paddr=70; 
#100; 
paddr=80; 
#100; 

end 
endtask 
endmodule 

j'ai essayé d'appeler cette tâche de banc d'essai et a écrit: paddr1 (PADDR, horloge);

Il passe la compilation Mais quand j'essaie de lancer la simulation, je reçois un massage éror: Référence non résolue à 'paddr1'. Merci pour votre réponse la tâche est dans un fichier diffrent alors le banc d'essai

Merci Yaniv

+0

Ce code a trop de problèmes à signaler, s'il vous plaît étudier verilog. – Alphaneo

Répondre

4

Vous avez une tâche à l'intérieur d'un module. Alors, as-tu instancié le module dans le banc d'essai? Si vous avez fait, alors vous aurez besoin de regarder à l'intérieur du module pour appeler la tâche:

module tb(); 

    paddr1 U0; // instantiate module with the task in it... 

    initial begin 
    U0.paddr1(paddr,clock); 
    end 

endmodule 

Vous avez beaucoup plus de sérieux problèmes cependant. Dans verilog, les arguments sont passés aux tâches par valeur. Cela signifie que la valeur de 'clock' sera fixée pour la durée de vie de l'appel à la tâche. Votre tâche ne trouvera jamais une posture d'horloge et attendra pour toujours. En outre, vous affectez une entrée de tâche, ce qui n'est pas utile.

0

Je suppose que vous voulez un bloc initial au lieu d'une tâche. Câblez le paddr et l'horloge en tant que ports au module, puis à l'intérieur d'un bloc initial begin vous modifiez le paddr.

Bien sûr, vous aurez toujours besoin d'instancier paddr1 quelque part pour être utile.