2017-05-17 2 views
1

Je suis nouveau sur verilog et j'ai une question. Puis-je initialiser un paramètre dans une portée globale et réinitialiser sa portée de module?Redéfinition d'un paramètre dans verilog

parameter GLOB_FOO = 5; 
module mod2 (in1,clk,out1); 
    parameter GLOB_FOO = 7; 
    input in1,clk; 
    output out1; 
    assign out1 = in1; 
endmodule 

Dans ce code, j'ai initialisé le paramètre GLOB_FOO twise portée mondiale et la portée du module.

J'ai également consulté le manuel de référence du langage. Mais n'a pas pu trouver la réponse car il y a beaucoup de détails.

Est-ce que ce type de réinitialisation de paramètre est valide dans Verilog?

Répondre

2

Vous avez re-déclaréeGLOB_FOO l'intérieur du module mod2, pas réinitialisés il. Cela signifie que vous avez deux paramètres, l'un dans l'étendue de l'unité de compilation avec la valeur 5 et l'autre dans mod2 avec la valeur 7. La déclaration dans mod2 masque la déclaration de l'unité de compilation externe. $unit:: peut être utilisé pour accéder à la déclaration extérieure.

parameter GLOB_FOO = 5; 
module mod2 (input in1,clk, output out1); 
    parameter GLOB_FOO = 7; 
    initial begin 
     $display(GLOB_FOO); // displays 7 
     $display($unit::GLOB_FOO); // displays 5 
    end 
endmodule 

Vous pouvez remplacer la valeur des paramètres déclarés dans un module lors de l'instanciation.

parameter GLOB_FOO = 5; 
module mod2 (input in1,clk, output out1); 
    parameter GLOB_FOO = 7; 
    initial begin 
     $display("%m %d %d", GLOB_FOO, $unit::GLOB_FOO); 
endmodule 
module top; 
    bit A,B, C, CLK; 
    mod2 #(3) inst1 (A,CLK,B); 
    mod2 #(.GLOB_FOO(4)) inst2 (A,CLK,C); 
endmodule 

Cette affiche

#top.inst1   3   5 
#top.inst2   4   5 
+0

dave_59 explique bien. Je veux juste ajouter quelque chose. Si vous voulez utiliser des définitions globales, vous devez utiliser ''define' au lieu de' parameter'. –

+1

@AlperKucukkomurler Absolument pas d'accord. Utilisez un «paquet» et mettez vos définitions là. –

+1

Oui, mais dans SystemVerilog uniquement. –