quick.gif

space2.gif

space2.gif

space2.gif

space2.gif

space2.gif

space2.gif

space2.gif

   

space.gif

   

space.gif

  ../images/main/bulllet_4dots_orange.gif randomize()

In last page we saw basic usage of randomize() method. randomize() method in Systemverilog has following extension.

   

space.gif

  • constraint_mode()
  • rand_mode()
  • randomize() with
  • pre_randomize()
  • post_randomize()
   

space.gif

   

space.gif

  ../images/main/bullet_star_pink.gif constraint_mode()

Systemverilog provides the predefined constraint_mode() method to control whether a constraint is active or inactive. All constraints are initially active.

   

space.gif

Syntax

   

space.gif

task object[.constraint_identifier]::constraint_mode( bit on_off );
or
function int object.constraint_identifier::constraint_mode();
   

space.gif

Where

   

space.gif

  • object_name Is the name of the object in which the constraint block is defined.
  • constraint_identifierIs the name of the constraint block to which the operation is applied.
  • 1 (ON) Sets the specified constraint block to active so that it is enforced on subsequent calls to the randomize() method.
  • 0 (OFF) Sets the specified constraint block to inactive so that it is not enforced on subsequent calls to the randomize() method.
  • A compiler error will be issued if the specified constraint block does not exist within the class hierarchy.
   

space.gif

constraint_mode method is really usefull when we want to randomize a class which is coded for different configs. Below example shows we can use constraint mode.

   

space.gif

  ../images/main/4blue_dots_bullets.gif Example : constraint_mode()
   

space.gif


  1 typedef enum {UNICAST=11,MULTICAST,BROADCAST} pkt_type;
  2 
  3 program constaint_mode_ex;
  4   class frame_t; 
  5     rand pkt_type ptype;
  6     rand integer len;
  7     rand bit  [7:0] payload [];
  8     constraint common {
  9       payload.size() == len;
 10     }
 11     // Constraint the members
 12     constraint unicast {
 13       len <= 2;
 14       ptype == UNICAST;
 15     }
 16     // Constraint the members
 17     constraint multicast {
 18       len >= 3;
 19       len <= 4;
 20       ptype == MULTICAST;
 21     }
 22     function string getType(pkt_type ltype);
 23       begin
 24         case(ltype)
 25          UNICAST   : getType = "UNICAST";
 26          MULTICAST : getType = "MULTICAST";
 27          BROADCAST : getType = "BROADCAST";
 28          default   : getType = "UNKNOWN";
 29         endcase
 30       end
 31     endfunction
 32     // Print the members of the class
 33     task print() ;
 34       begin
 35         integer i =0;
 36         $write("Packet type %s\n",getType(ptype));
 37         $write("Size of frame is %0d\n",len);
 38         if (payload.size() > 0) begin
 39           $write("Payload is ");
 40           for (i=0; i < len; i++) begin
 41             $write(" %2x",payload[i]);
 42           end
 43           $write("\n");
 44         end
 45       end  
 46     endtask
 47   endclass
 48  
 49   initial begin 
 50      frame_t frame = new();
 51      integer j = 0;
 52      $write("-------------------------------\n");
 53      // Do contraint for Unicast frame
 54      frame.multicast.constraint_mode(0);
 55      if (frame.multicast.constraint_mode() == 0) begin
 56        if (frame.randomize() == 1) begin
 57          frame.print(); 
 58        end else begin
 59          $write("Failed to randomize frame\n");
 60        end
 61      end else begin
 62         $write("Failed to disable constraint multicast\n");
 63      end
 64      $write("-------------------------------\n");
 65      // Check the status of constraint multicast
 66      $write ("Constraint state of multicast is %0d\n",
 67          frame.multicast.constraint_mode());
 68      $write("-------------------------------\n");
 69      // Now disable the unitcast and enable multicast
 70      frame.unicast.constraint_mode(0);
 71      frame.multicast.constraint_mode(1);
 72      if (frame.randomize() == 1) begin
 73        frame.print(); 
 74      end else begin
 75        $write("Failed to randomize frame\n");
 76      end
 77      $write("-------------------------------\n");
 78   end
 79 endprogram
You could download file constraint_mode_ex.sv here
   

space.gif

  ../images/main/4blue_dots_bullets.gif Simulation Output : constraint_mode()
   

space.gif

 -------------------------------
 Packet type UNICAST
 Size of frame is 1
 Payload is  7d
 -------------------------------
 Constraint state of multicast is 0
 -------------------------------
 Packet type MULTICAST
 Size of frame is 3
 Payload is  df 40 f7
 -------------------------------
   

space.gif

   

space.gif

   

space.gif

   

space.gif

space2.gif

space2.gif

space2.gif

space2.gif

space2.gif

  

Copyright © 1998-2014

Deepak Kumar Tala - All rights reserved

Do you have any Comment? mail me at:deepak@asic-world.com