82 lines
2.4 KiB
Systemverilog
82 lines
2.4 KiB
Systemverilog
//===========================================================================
|
|
// 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
|