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
endclassAny 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
endclassThe class keeps a single inheritance path (`extends monitor_base`) while adopting multiple role contracts via interface classes.