La llamada de función no se ejecuta en verilog

3

Por qué la llamada de función a clogb2 no se está ejecutando en el siguiente código. No obtengo ningún error de compilación, pero el parámetro adder_width no se actualiza con el valor de clogb2 . De hecho, esa función no devuelve ningún valor.

Consulte enlace .

module ram_model ();

   parameter ram_depth = 8;
   localparam adder_width = clogb2(ram_depth);
   initial begin
      $dumpfile("dump.vcd");
      $dumpvars(1);
      $monitor("%d",adder_width);
   end

   function integer clogb2;
      input depth;
      integer i,result;
      begin
         for (i = 0; 2**(i) < depth; i = i + 1)
            result = i + 1;
         clogb2 = result;
      end
   endfunction 

endmodule
    
pregunta Abhi

1 respuesta

3

Se llama a la función pero devuelve 'x' porque su argumento depth solo tiene un bit de ancho y el LSB de 8 es cero, por lo que a result nunca se le asigna un valor.

Cambia la línea

input depth;

a

input integer depth;

y adder_width se establecerán en 3 como se esperaba.

    
respondido por el CliffordVienna

Lea otras preguntas en las etiquetas