SystemVerilog OOP Mastery · All levels

Interface Classes and `implements`: Code Examples

Code Examples for Interface Classes and `implements`.

Code examples

Single role contract with implements

systemverilog
interface class resettable_if;
  pure virtual task reset_phase();
  pure virtual function bit is_in_reset();
endclass

class phy_agent implements resettable_if;
  bit rst_n;

  virtual task reset_phase();
    rst_n = 0;
    #10ns;
    rst_n = 1;
  endtask

  virtual function bit is_in_reset();
    return !rst_n;
  endfunction
endclass

Any class that claims `implements resettable_if` must provide all required methods with matching signatures.

One class implementing multiple interface roles

systemverilog
interface class packable_if;
  pure virtual function int unsigned byte_count();
endclass

interface class loggable_if;
  pure virtual task log(string msg);
endclass

class monitor_base;
  string name;
  function new(string name = "monitor_base");
    this.name = name;
  endfunction
endclass

class axi_monitor extends monitor_base implements packable_if, loggable_if;
  function new(string name = "axi_monitor");
    super.new(name);
  endfunction

  virtual function int unsigned byte_count();
    return 64;
  endfunction

  virtual task log(string msg);
    $display("[%0s] %0s", name, msg);
  endtask
endclass

The class keeps a single inheritance path (`extends monitor_base`) while adopting multiple role contracts via interface classes.

Related topics