blob: 792b47f625719c3bc19e34b42d7680e38ca6b22c [file] [log] [blame]
typedef enum {UNICAST=11,MULTICAST,BROADCAST} pkt_type;
program constaint_mode_ex;
class frame_t;
rand pkt_type ptype;
rand integer len;
rand bit [7:0] payload [];
constraint common {
payload.size() == len;
}
// Constraint the members
constraint unicast {
len <= 2;
ptype == UNICAST;
}
// Constraint the members
constraint multicast {
len >= 3;
len <= 4;
ptype == MULTICAST;
}
function string getType(pkt_type ltype);
begin
case(ltype)
UNICAST : getType = "UNICAST";
MULTICAST : getType = "MULTICAST";
BROADCAST : getType = "BROADCAST";
default : getType = "UNKNOWN";
endcase
end
endfunction
// Print the members of the class
task print() ;
begin
integer i =0;
$write("Packet type %s\n",getType(ptype));
$write("Size of frame is %0d\n",len);
if (payload.size() > 0) begin
$write("Payload is ");
for (i=0; i < len; i++) begin
$write(" %2x",payload[i]);
end
$write("\n");
end
end
endtask
endclass
initial begin
frame_t frame = new();
integer j = 0;
$write("-------------------------------\n");
// Do contraint for Unicast frame
frame.multicast.constraint_mode(0);
if (frame.multicast.constraint_mode() == 0) begin
if (frame.randomize() == 1) begin
frame.print();
end else begin
$write("Failed to randomize frame\n");
end
end else begin
$write("Failed to disable constraint multicast\n");
end
$write("-------------------------------\n");
// Check the status of constraint multicast
$write ("Constraint state of multicast is %0d\n",
frame.multicast.constraint_mode());
$write("-------------------------------\n");
// Now disable the unitcast and enable multicast
frame.unicast.constraint_mode(0);
frame.multicast.constraint_mode(1);
if (frame.randomize() == 1) begin
frame.print();
end else begin
$write("Failed to randomize frame\n");
end
$write("-------------------------------\n");
end
endprogram