关于参数化的参数,请教一个sv的语法问题
时间:10-02
整理:3721RD
点击:
写一个task,要传递一个参数进去,我现在有一个需求,因为有些传入参数的类型是不定的,就是想要传递的这个参数是可参数化的,就是比如它可以是int a,或者是bit[17:0] signed等,有什么好办法实现吗?
谢谢!
谢谢!
class #(type T=int) myclass;
static function T myfun();
endfunction
endclass
myclass #(bit[7:0]) ::myfun()
这是一个不错的办法,非常感谢,对了这个function为啥要定义成static的呢,有什么特殊的意义吗?
和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型同理
我说这回复咋那么眼熟。