SystemVerilog OOP Mastery · All levels
Pure Virtual Methods as Compile-Time Contracts: Code Examples
Code Examples for Pure Virtual Methods as Compile-Time Contracts.
Code examples
Protocol driver contract with mandatory methods
systemverilog
virtual class protocol_driver;
pure virtual task drive_transfer(bit [31:0] addr, bit [31:0] data);
pure virtual function string protocol_name();
endclass
class apb_driver extends protocol_driver;
virtual task drive_transfer(bit [31:0] addr, bit [31:0] data);
// APB setup/access sequence would be here
endtask
virtual function string protocol_name();
return "APB";
endfunction
endclassAny class extending `protocol_driver` must implement both required methods or remain abstract.
Polymorphic use through abstract handle
systemverilog
virtual class protocol_driver;
pure virtual task drive_transfer(bit [31:0] addr, bit [31:0] data);
endclass
class spi_driver extends protocol_driver;
virtual task drive_transfer(bit [31:0] addr, bit [31:0] data);
// SPI framing and shift logic
endtask
endclass
task run_one(protocol_driver drv);
drv.drive_transfer('h20, 'hAB);
endtask
module demo;
initial begin
spi_driver d = new();
run_one(d);
end
endmoduleCode that consumes `protocol_driver` can stay generic while concrete subclasses provide protocol-specific behavior.