Redefiniendo un parámetro en verilog

0

Soy nuevo en verilog y tengo una pregunta.

¿Puedo inicializar un parámetro en el alcance global y reinicializarlo en el alcance del módulo?

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

En este código he inicializado el parámetro GLOB_FOO twise en alcance global y en alcance de módulo.

También busqué en el Manual de referencia de idiomas. Pero no pude encontrar la respuesta ya que hay muchos detalles.

¿Este tipo de reinicialización de parámetros es válido en verilog?

    
pregunta e11438

1 respuesta

1

Usted ha re-declarado GLOB_FOO dentro del módulo mod2 , no lo ha reinicializado. Eso significa que tiene dos parámetros, uno en el alcance de la unidad de compilación con el valor 5 y uno en mod2 con el valor 7. La declaración dentro de mod2 oculta la declaración de la unidad de compilación externa. $unit:: se puede utilizar para acceder a la declaración externa.

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

Puede anular el valor de los parámetros declarados dentro de un módulo al crear una instancia.

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

Esto se muestra

#top.inst1           3           5
#top.inst2           4           5
    
respondido por el dave_59

Lea otras preguntas en las etiquetas