module top;
typedef enum {RED, BLUE, BLACK, WHITE} color_t;
virtual class car;
static int counter = 0; // shared by all instances
int car_id;
static local function void increment_counter();
counter++;
$display("creating item %0d ...", counter);
endfunction : increment_counter
function new();
increment_counter(); // increment on construction to a new class
car_id = counter;
endfunction : new
endclass : car
virtual class sports_car extends car; // note that car is a virtual class
rand color_t color;
virtual function void print();
$display("Car #%0d: I'm a %s sports car", car_id, color.name());
endfunction : print
endclass : sports_car
class plorsche extends sports_car;
virtual function void print();
$display("Car #%0d: I'm a %s plorsche", car_id, color.name());
endfunction : print
endclass : plorsche
class flerrari extends sports_car;
virtual function void print();
$display("Car #%0d: I'm a %s flerrari", car_id, color.name());
endfunction : print
endclass : flerrari
sports_car cars[];
plorsche p1, p2;
flerrari f1, f2;
initial begin
cars = new[4];
p1 = new(); p2 = new();
void'(p1.randomize());
void'(p2.randomize());
f1 = new(); f2 = new();
void'(f1.randomize());
void'(f2.randomize());
$cast(cars[0], p1);
$cast(cars[1], f1);
$cast(cars[2], p2);
$cast(cars[3], f2);
print_all(cars);
end
task print_all(sports_car cars[]);
for (int i=0; i
endtask : print_all
endmodule : top
沒有留言:
張貼留言