3 votos

El interruptor DEBUG no parece funcionar en mi código

El siguiente código lo probé en el patio de juegos de EDA con el comando anexado con +define+DEBUG pero el interruptor DEBUG no parece estar funcionando. Su bloque siempre es sensible al error y esta variable está cambiando cuatro veces aquí, pero todavía el bloque no está siendo sensible.

http://www.edaplayground.com/x/7Cg

module test;      
  integer error;
  event err;

  initial
  begin
      #10 ->err;
      #10 ->err;
      #3 ->err;
      #1 ->err;
      #10 finish(error);
      $display("%d",error);
  end

  initial error=0;

  always@(err)
  begin
      error=error+1;
  end

  always@(error)
  begin
    `ifdef DEBUG
      $display("Error at %d",$time);
    `endif
  end

  task finish(wrong);
    integer wrong;
  begin
    #10 if(wrong==0) $display("-----------TEST PASSED-----------");
        else $display("---------------TEST FAILED---------------");
  end
  endtask  
endmodule

2voto

MegaMind Puntos 116

+define+DEBUG es un argumento en tiempo de compilación, no en tiempo de ejecución. Moviendo +define+DEBUG a la línea apropiada arreglará el problema. Véase http://www.edaplayground.com/x/7ES

Información: SystemVerilog tiene $test$plusargs / $value$plusargs que permitirá argumentos en tiempo de ejecución. Ejemplo con argumento en tiempo de ejecución +DEBUG : http://www.edaplayground.com/x/5zF

always@(err) begin
  error=error+1;
  if($test$plusargs("DEBUG")) begin
    $display("Error at %d",$time);
  end
end

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X