systermverilog类中变量涉及的super/this

相信super/this是你在看sv代码经常遇见的。
按照我的理解: super就是到基类中去找对应的变量或者function/task.
this就是指定作用域。

例子一:基类和扩展类有同名变量

systermverilog类中变量涉及的super/this

systermverilog类中变量涉及的super/this

  • B找src的时候,就会先在B里面找,如果找到以后,就认为已经找到了。
  • A也同理。

例子二:扩展类可以看到基类的变量

systermverilog类中变量涉及的super/this

systermverilog类中变量涉及的super/this

  • B首先会在自己类的范围内找dst,没有找到,然后再去基类里面找。

例子三:基类的句柄指向扩展类的对象

systermverilog类中变量涉及的super/this

systermverilog类中变量涉及的super/this

  • OOP一个很重要的应用就是用virtual修饰task/function,当基类的句柄指向扩展类的时候,就会用扩展类的task/function的定义。这在UVM源码中几乎无处不在。
  • 从仿真结果来看,变量却不是如此

例子四:扩展类中访问同名的基类变量

systermverilog类中变量涉及的super/this

systermverilog类中变量涉及的super/this

  • super就是帮助你从基类里面找。

例子五:基类句柄指向扩展类的对象,通过基类句柄访问扩展类中的变量

systermverilog类中变量涉及的super/this

systermverilog类中变量涉及的super/this

  • 也就是说基类的句柄虽然指向扩展类的对象,但是基类的句柄是不能访问扩展类对象中独有的变量的。这其实跟virtual function/task是一样的。
  • 详情可以参考:https://www.cnblogs.com/xuqing125/p/15928599.html

例子六:this指定作用域

systermverilog类中变量涉及的super/this

systermverilog类中变量涉及的super/this

  • this就是指定变量的作用域
上一篇:super调用父类的构造函数


下一篇:Java面向对象