You are on page 1of 2

// parameterized class

class transaction #(type T = int, type A = bit, int R = 3);

T crc;

bit [R:0] SA;

T dynam [];

function new (A a);


SA = a;
endfunction: new

task CalCrc (T t);


this.crc = t;
endtask: CalCrc

/// Print Function


function void print;
$display("Value of R = %0d, Source Address = %b, No. of DyArr entries = %0d, CRC
= %b, Dynamic Element[3] = %b ", this.R, this.SA, this.dynam.size(), this.crc,
dynam[3]);
endfunction: print

endclass: transaction
///// Extended Class with Non-default Specialization
class my_transaction extends transaction #(bit [3:0], int, 9);

int errBit;

/// Constructor
function new (A b);
super.new(b);
endfunction: new

endclass: my_transaction

module top;

initial begin
fork
begin
transaction #(bit [7:0], bit [3:0]) txn;
txn = new(5);
txn.dynam = new[5];
foreach (txn.dynam[i])
txn.dynam[i] = i;
txn.CalCrc(6);
txn.print;
end
begin
my_transaction mtxn;
mtxn = new(5);
mtxn.dynam = new[5];
foreach (mtxn.dynam[i])
mtxn.dynam[i] = i;
mtxn.CalCrc(7);
mtxn.print;
end
join
end

endmodule

You might also like