programmation orientée objet uvm_primer POO
ch4 Programmation orientée objet POO
Du chapitre 4 au chapitre 10, nous présenterons du contenu lié à l'oop, n'impliquant pas uvm. Sv
est un langage oop, en particulier lorsque vous utilisez sv pour la vérification,
uvm est également un framework construit sur sv. Cette partie du contenu C'est un base pour comprendre l'uvm derrière.
Sv est en fait plus comme verilog + java; il y a le concept de pointeurs en c ++, qui n'est pas en java et sv;
la mémoire allouée dans cpp doit être récupérée par lui-même, et le système en java et sv récupérera automatiquement la mémoire inutile la gestion.
Avantages de oop
- Réutiliser le code
- La maintenabilité du code est meilleure
- Gestion de la mémoire
réutilisation du code
Oop encapsule les données et les méthodes. Il vous suffit d'appeler ces classes et les méthodes à l'intérieur selon la description du document lorsque vous utilisez l'API. Vous pouvez utiliser la classe précédente extend pour créer des classes plus puissantes.
maintenabilité du code
Si le code qui implémente la même fonction a n copies dans le projet, si vous trouvez qu'il y a un problème, vous devez modifier toutes les n copies. Après le oop, il vous suffit de modifier le code lui-même, et d'autres endroits sont appel de classes ou de méthodes. Le code lui-même est correctement modifié et les autres emplacements utilisant ce code ne poseront aucun problème
classe et extension ch5
struct
C utilise généralement struct pour encapsuler des données
typedef struct {
int length;
int width;
} rectangle_struct;
classe
Il n'y a pas seulement des données mais aussi des méthodes pour ces données dans la classe;
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
Comment définir une classe et ses méthodes, il existe de nombreux principes ou règles, vous pouvez rechercher des livres sur les modèles de conception pour référence;
Instancier un objet
De plus, sv est responsable de la gestion de la mémoire,
struct lui alloue de la mémoire lorsqu'elle est définie, et la classe doit appeler explicitement la fonction new () afin d'allouer de la mémoire;
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 handle est similaire à un handle de mémoire, sauf qu'il n'autorise pas le handle de handle arithmétique est similaire à un
pointeur , sauf qu'il ne peut pas être utilisé pour les opérations de pointeur;
étend la classe
super dit au compilateur d'appeler les données membres et les méthodes de sa classe parent;
super.new () appelle la méthode constructeur dans le rectangle
class square extends rectangle;
function new(int side);
//调用父类的new()函数去构造
super.new(.l(side), .w(side)); //super指的是父类,也就是rectangle
endfunction
endclass
sommaire
- définition de classe
- la classe s'étend
- Nouveau
- super