2017-10-21 1 views
0

J'ai un fichier verilog que tout ce que je veux y avoir est une tâche qui fait quelques maths que je suis alors include "maths.v" dans un autre fichier et appelant la tâche en écrivant mathsfunction; dans un initial begin - end bloc dans l'autre fichier qui doit exécuter la tâche à ce moment-là, si je comprends bien, le code est ci-dessous:déclarations globales illégales dans verilog 2001 syntaxe Tâche

Maths.v

task mathsfunction; 
reg [0:31] x; 
reg [0:31] y; 
reg [0:31] z; 
begin 
    x = $urandom; 
    y = $urandom; 
    z = x + y 
end 
#200  
endtask 

Je reçois une erreur de compilation qui est le premier ligne task mathsfunction; qui est Global declarations are illegal in Verilog 2001 syntax. De ce que j'ai appris jusqu'à présent, ayant un fichier Verilog qui est juste une tâche (pas un module, je ne veux pas que ce soit un module) devrait être bien? Donc je ne sais pas pourquoi cela ne fonctionne pas.

Toute aide serait grande

+0

vous devez fournir plus d'informations. Les tâches peuvent être déclarées dans l'espace global. Donc, votre message est lié à autre chose. – Serge

+0

Je n'ai pas les LRM devant moi, mais je crois que toutes les versions de Verilog ne supportent pas les déclarations de signaux, de tâches, de fonctions ou de paramètres dans l'espace global (c'est-à-dire en dehors d'un module). Je connais SystemVerilog, mais il est considéré comme une mauvaise pratique de le faire. Le recommandé était de définir des tâches communément partagées, des fonctions, etc., de les mettre dans un paquet SystemVerilog. – Greg

Répondre

0

Votre premier problème est que vous confondez Verilog2K (« Verilog ») et SystemVerilog. Dans Verilog, les déclarations de tâches peuvent uniquement apparaître à l'intérieur des modules ou générer (et non «globalement»), ce qui donne votre message d'erreur. Deuxièmement, votre tâche contient deux instructions (le bloc seq begin/end et le contrôle de synchronisation), qui n'est pas valide dans Verilog; SV détend ça. Cela dit, mettre le #200 en dehors du bloc ne sert à rien, alors vous pouvez aussi le déplacer dans le bloc pour le rendre compatible avec Verilog.

Votre prochain problème est que votre tâche n'a pas d'entrées ou de sorties - x, y, z sont internes; vous devez les faire input, output ou inout.

Enfin, vous avez copié/collé de façon incorrecte - ce code ne sera pas compilé sans deux autres points-virgules.