uvm_primer programación orientada a objetos OOP sv ch4-5

ch4 Programación orientada a objetos OOP

Desde el Capítulo 4 al Capítulo 10, presentaremos contenido relacionado con oop, sin involucrar uvm.
Sv es un lenguaje de oop, especialmente cuando usa sv en verificación,
uvm también es un marco construido en sv. Esta parte del contenido es un base para entender el uvm detrás.

Sv es en realidad más como verilog + java; existe el concepto de punteros en c ++, que no está en java y sv;
la memoria asignada en cpp debe ser recuperada por sí misma, y ​​el sistema en java y sv automáticamente recuperará la memoria inútil administración.

Beneficios de oop

  • Reutilizar código
  • La capacidad de mantenimiento del código es mejor
  • Gestión de la memoria

reutilización de código

Oop encapsula datos y métodos. Solo necesita llamar a estas clases y los métodos internos de acuerdo con la descripción del documento mientras usa api. Puede usar la extensión de clase anterior para crear clases más poderosas.

mantenibilidad del código

Si el código que implementa la misma función tiene n copias en el proyecto, si encuentra que hay un problema, necesita modificar todas las n copias. Después del oop, solo necesita modificar el código en sí, y otros lugares son llamar a clases o métodos. El código en sí se modifica correctamente, y otros lugares que usan este código no serán un problema

clase ch5 y extensión

estructura

C generalmente usa struct para encapsular datos

typedef struct {
    
    
   int         length;
   int         width;
} rectangle_struct;

clase

No solo hay datos, sino también métodos para estos datos en la clase;

  class rectangle;
    int length;
    int width;
    
    function new(int l, int w);
      length = l;
      width  = w;
    endfunction
    
    function int area();
      return length * width;
    endfunction
  endclass

Cómo definir una clase y sus métodos, hay muchos principios o reglas, puede buscar libros sobre patrones de diseño como referencia;

Crear instancia de objeto

Además, sv es responsable de la gestión de la memoria, la
estructura le asigna memoria cuando está definida y la clase necesita llamar explícitamente a la función new () para poder asignar memoria;

  module top_class ;
    rectangle rectangle_h;  //声明句柄
    square    square_h;
    
    initial begin
    //rectangle_h 是实例化出来的 **对象**;
      rectangle_h = new(.l(50),.w(20));  //构造  或者实例化;实例化出来的
      $display("rectangle area: %0d", rectangle_h.area());
      
      square_h = new(.side(50));
      $display("square area: %0d", square_h.area());
      
    end
  endmodule

Un identificador es similar a un identificador de memoria, excepto que no permite el identificador. El identificador aritmétrico es similar a un
puntero , excepto que no se puede usar para operaciones de puntero;

extiende la clase

super le dice al compilador que llame a los miembros de datos y métodos de su clase padre;
super.new () llama al método constructor en el rectángulo

  class square extends rectangle;
  
    function new(int side);
      //调用父类的new()函数去构造
      super.new(.l(side), .w(side));  //super指的是父类,也就是rectangle
    endfunction
  
  endclass

resumen

  • definición de clase
  • la clase se extiende
  • nuevo
  • súper

Supongo que te gusta

Origin blog.csdn.net/weixin_39060517/article/details/112745673
Recomendado
Clasificación