• Skip to main content
  • Skip to search
  • Skip to footer
Cadence Home
  • This search text may be transcribed, used, stored, or accessed by our third-party service providers per our Cookie Policy and Privacy Policy.

  1. Community Forums
  2. Functional Verification
  3. Is it a must to declare with keyword 'virtual' when define...

Stats

  • Locked Locked
  • Replies 2
  • Subscribers 64
  • Views 1125
  • Members are here 0
This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

Is it a must to declare with keyword 'virtual' when define a task in a child class with the same name as its parent?

Jeff000
Jeff000 over 8 years ago

Look into the code as below, the task whoAmI() is not declared using 'virtual', but when calling it from class B, it actually get B's task executed. Then it seems that the 'virtual' keyword is not necessary here?

class A;

   task whoAmI();
      $display("This is A");
   endtask // whoAmI
  
endclass // A

class B extends A;

     task whoAmI();
        $display("This is B");
     endtask // whoAmI
endclass // B
  
B b = new();
b.whoAmI();

  • Cancel
  • TAM1
    TAM1 over 8 years ago

    Without any "virtual" keyword, SV will call the function based on the type of handle used to invoke it. Since the handle "b" is of type "B", the class B version of the function will be called.

    The "virtual" keyword comes into play when you are using a base class handle to reference a derived class object (polymorphism).

    A a;
    B b = new();
    a = b;
    a.whoAmI();

    Without the virtual keyword, the call to a.shoAmI will return "This is A". With the virtual keyword, it will return "This is B".

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • Jeff000
    Jeff000 over 8 years ago
    Thanks TAM1 for your kind reply!
    • Cancel
    • Vote Up 0 Vote Down
    • Cancel

Community Guidelines

The Cadence Design Communities support Cadence users and technologists interacting to exchange ideas, news, technical information, and best practices to solve problems and get the most from Cadence technology. The community is open to everyone, and to provide the most value, we require participants to follow our Community Guidelines that facilitate a quality exchange of ideas and information. By accessing, contributing, using or downloading any materials from the site, you agree to be bound by the full Community Guidelines.

© 2025 Cadence Design Systems, Inc. All Rights Reserved.

  • Terms of Use
  • Privacy
  • Cookie Policy
  • US Trademarks
  • Do Not Sell or Share My Personal Information