system verilog参数化的类
时间:10-02
整理:3721RD
点击:
uvm中,创建类很多都带参数,如class my_driver extends uvm_driver #(my_transaction)
……
endclass
这里#(my_transaction)有什么意义?
此外,还有一种是用参数化的类进行实例化的方法,是什么意思?
class parameterized_class # (type T)
T t;
function new();
t = new();
endfunction
endclass
class A;
…
endclass
class B;
parameterized_classs#(A) pa;
function new();
pa = new();
endfunction
endclass
……
endclass
这里#(my_transaction)有什么意义?
此外,还有一种是用参数化的类进行实例化的方法,是什么意思?
class parameterized_class # (type T)
T t;
function new();
t = new();
endfunction
endclass
class A;
…
endclass
class B;
parameterized_classs#(A) pa;
function new();
pa = new();
endfunction
endclass
和UVM没关系,只是SV支持的一种属性,当然也是从别的OOP语言里借鉴过来的,建议你补一补OOP相关的知识。
模板类或者叫参数化类一般用于代码的重用,比如说要实现两个数相加的类,如果是两个int的数,要写一个类,如果是两个real的数相加,又要写一个类,而实际上他们的代码几乎是相同的,除了类型不同。这时完全可以只写一个类,把类型当做“参数”传进去。
class calc #(type T)
function T add (T a, T b);
add = a + b;
endfunction
endclass
这样要实现的时候生成calc #(int)的对象就可以算int型,real型同理
学习了。
Good, easy to understand, thanks!
谢谢你的答复,我还想请教一个问题:uvm源代码中有这样一个类定义,class uvm_analysis_port # (type T = int) extends ……endclass,因此在实例化是需要加入一个参数,如uvm_analysis_port#(my_transaction) ap; 参数化类定义时,用type关键字表示,可是有时又能看到class my_driver extends uvm_driver #(my_transaction)的代码,没有使用type关键字,同时my_driver实例化时也没有传递进参数,my_driver drv;这是为什么?
好,解释的通俗易通!