uvm_primerオブジェクト指向プログラミングOOP
ch4オブジェクト指向プログラミングOOP
第4章から第10章まで、uvmを含まないoop関連のコンテンツを紹介します。sv
はoop言語であり、特に検証でsvを使用する場合、
uvmはsv上に構築されたフレームワークでもあります。コンテンツのこの部分は背後にあるuvmを理解するための基礎。
Svは実際にはverilog + javaに似ています。c++にはjavaとsvにはないポインタの概念があります
。cppに割り当てられたメモリはそれ自体で再利用する必要があり、javaとsvのシステムは自動的に不要なメモリを再利用します。管理。
おっとの利点
- コードを再利用する
- コードの保守性が向上
- メモリ管理
コードの再利用
Oopはデータとメソッドをカプセル化します。APIを使用するときは、ドキュメントの説明に従ってこれらのクラスと内部のメソッドを呼び出すだけで済みます。前のクラス拡張を使用して、より強力なクラスを作成できます。
コードの保守性
同じ関数を実装するコードのプロジェクトにn個のコピーがある場合、問題があることがわかった場合は、n個すべてのコピーを変更する必要があります。おっと、コード自体を変更するだけで、他の場所は次のようになります。クラスまたはメソッドの呼び出しコード自体は正しく変更され、このコードを使用する他の場所は問題ありません
ch5クラスと拡張
構造体
Cは通常、構造体を使用してデータをカプセル化します
typedef struct {
int length;
int width;
} rectangle_struct;
クラス
クラスには、データだけでなく、これらのデータのメソッドもあります。
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
クラスとそのメソッドを定義する方法には、多くの原則やルールがあります。参照用にデザインパターンに関する本を探すことができます。
オブジェクトをインスタンス化します
さらに、svはメモリ管理を担当します
。structは定義時にメモリを割り当てます。クラスはメモリを割り当てるためにnew()関数を明示的に呼び出す必要があります。
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
ハンドルはメモリハンドルに似てい
ますが、ハンドルを許可しない点が異なります。算術ハンドルはポインタに似ていますが、ポインタ操作に使用できない点が異なります。
クラスを拡張します
superは、親クラスのデータメンバーとメソッドを呼び出すようにコンパイラーに指示します
。super.new()は、長方形内のコンストラクターメソッドを呼び出します。
class square extends rectangle;
function new(int side);
//调用父类的new()函数去构造
super.new(.l(side), .w(side)); //super指的是父类,也就是rectangle
endfunction
endclass
概要
- クラス定義
- クラス拡張
- 新着
- 素晴らしい