//=========================================================================== // Organization : Individual developer // Filename : tb.sv // Author : Feng Bohan // Create Time : 11:26:47 2025-03-18 // Last Modified: 11:27:17 2025-03-18 // Abstract : //-------------------------------------------------------------------------- // Description: // //-------------------------------------------------------------------------- // Modification History: //-------------------------------------------------------------------------- // Rev Date Who Description // --- ---- --- ----------- // 0.0.01 2025-03-18 Feng Bohan initial version //=========================================================================== module tb(); class BasePacket; int A; // 1; int B; // 2; int C; // 3; function new(int A=1, int B=2, int C=3); this.A=A; this.B=B; this.C=C; endfunction virtual function void printA; $display("[%m] A is %0d", A); endfunction virtual function void printB; $display("[%m] B is %0d", B); endfunction : printB function void printC; $display("[%m] C is %0d", C); endfunction : printC endclass : BasePacket class My_Packet extends BasePacket; int A; // 4 int B; // 5 int C; // 6 function new(int A=4, int B=5, int C=6); this.A=A; this.B=B; this.C=C; endfunction /* -----\/----- EXCLUDED -----\/----- virtual function void printA; $display("A is %0d", A); endfunction -----/\----- EXCLUDED -----/\----- */ virtual function void printB; $display("[%m] B is %0d", B); endfunction : printB function void printC; $display("[%m] C is %0d", C); endfunction : printC endclass : My_Packet initial begin BasePacket P1; My_Packet P2 = new; P1 = P2; // P1 has a handle to a My_packet object $display("//******************** P1.print ********************"); P1.printA; P1.printB; P1.printC; $display("//**************************************************"); $display("//******************** P2.print ********************"); P2.printA; P2.printB; P2.printC; $display("//**************************************************"); end endmodule // tb