# Pattern Generation

**URL:** <https://verificationacademy.com/forums/t/pattern-generation/34173>\
**Category:** SystemVerilog\
**Tags:** SystemVerilog, constraint-randomization\
**Created:** [March 9, 2018, 11:54am UTC](https://verificationacademy.com/forums/t/pattern-generation/34173 "2018-03-09T11:54:45Z")\
**Posts on this page:** 13\
**Page:** 1

<div class="post-metadata">

**Author:** ![nishitk](https://verificationacademy.com/forums/letter_avatar_proxy/v4/letter/n/35a633/32.png) [@nishitk](https://verificationacademy.com/forums/u/nishitk)\
**Post date:** [March 9, 2018, 11:54am UTC](https://verificationacademy.com/forums/t/pattern-generation/34173/1 "2018-03-09T11:54:45Z")

</div>

I have a 50 bit variable, I want to generate a pattern as shown in example under. How do I write a constraint for it.

For Example  
rand bit[10:0] var; (Taking an example of 10 bit variable actual pattern needed is for a 50 bit variable)

Pattern  
1000000000  
1100000000  
1110000000  
1111000000  
1111100000  
1111110000  
1111111000  
1111111100  
1111111110  
1111111111

---

<div class="post-metadata">

**Author:** ![user49](https://verificationacademy.com/forums/user_avatar/verificationacademy.com/user49/32/1084_2.png) [@user49](https://verificationacademy.com/forums/u/user49)\
**Post date:** [March 9, 2018, 5:29pm UTC](https://verificationacademy.com/forums/t/pattern-generation/34173/2 "2018-03-09T17:29:49Z")

</div>

Is there really a need to use constraints for something that can easily be done with a function call? Also, if you can write constraints, what should the randomize function do when all bits are ones?  
Ben

---

<div class="post-metadata">

**Author:** ![dave\_59](https://verificationacademy.com/forums/user_avatar/verificationacademy.com/dave_59/32/4499_2.png) [@dave\_59](https://verificationacademy.com/forums/u/dave_59)\
**Post date:** [March 9, 2018, 6:56pm UTC](https://verificationacademy.com/forums/t/pattern-generation/34173/3 "2018-03-09T18:56:55Z")

</div>

_In reply to [nishitk](https://verificationacademy.com/forums/t/pattern-generation/34173/2):_

```verilog
rand bit[10:0] varb = 11'b10000000000;
constraint pattern { varb == const'( {1'b1, varb[10:1]} ); }

```

---

<div class="post-metadata">

**Author:** ![user49](https://verificationacademy.com/forums/user_avatar/verificationacademy.com/user49/32/1084_2.png) [@user49](https://verificationacademy.com/forums/u/user49)\
**Post date:** [March 9, 2018, 8:27pm UTC](https://verificationacademy.com/forums/t/pattern-generation/34173/4 "2018-03-09T20:27:01Z")

</div>

_In reply to [dave\_59](https://verificationacademy.com/forums/t/pattern-generation/34173/3):_

Why the need for the const?

---

<div class="post-metadata">

**Author:** ![dave\_59](https://verificationacademy.com/forums/user_avatar/verificationacademy.com/dave_59/32/4499_2.png) [@dave\_59](https://verificationacademy.com/forums/u/dave_59)\
**Post date:** [March 9, 2018, 9:19pm UTC](https://verificationacademy.com/forums/t/pattern-generation/34173/5 "2018-03-09T21:19:23Z")

</div>

_In reply to [ben@SystemVerilog.us](https://verificationacademy.com/forums/t/pattern-generation/34173/4):_  
A const cast means treat the expression as a constant value (I.e. non-random) value. The expression gets evaluated before randomization and is treated like a state variable.

---

<div class="post-metadata">

**Author:** ![nishitk](https://verificationacademy.com/forums/letter_avatar_proxy/v4/letter/n/35a633/32.png) [@nishitk](https://verificationacademy.com/forums/u/nishitk)\
**Post date:** [March 12, 2018, 3:45am UTC](https://verificationacademy.com/forums/t/pattern-generation/34173/6 "2018-03-12T03:45:21Z")

</div>

_In reply to [dave\_59](https://verificationacademy.com/forums/t/pattern-generation/34173/5):_

It helps. Thanks Dave !

---

<div class="post-metadata">

**Author:** ![Rohi\_417](https://verificationacademy.com/forums/user_avatar/verificationacademy.com/rohi_417/32/3724_2.png) [@Rohi\_417](https://verificationacademy.com/forums/u/Rohi_417)\
**Post date:** [March 13, 2018, 10:40am UTC](https://verificationacademy.com/forums/t/pattern-generation/34173/7 "2018-03-13T10:40:59Z")

</div>

_In reply to [dave\_59](https://verificationacademy.com/forums/t/pattern-generation/34173/6):_

> _In reply to [nishitk](https://verificationacademy.com/forums/t/pattern-generation/34173/6):_

```verilog
rand bit[10:0] varb = 11'b10000000000;
constraint pattern { varb == const'( {1'b1, varb[10:1]} ); }

```

i am getting this error plz help me OUT  
// code here  
class packet;  
rand bit[10:0] varb = 11’b10000000000;  
constraint pattern { varb == const’( {1’b1, varb[10:1]} ); }  
endclass

module constr\_blocks;  
initial begin  
packet pkt;  
pkt = new();  
repeat(10) begin  
pkt.randomize();  
$display(“\t value = %0d”,pkt.varb);  
end  
end  
endmodule

output:ERROR VCP7501 “Undeclared type: const.” “testbench.sv” 5 59

---

<div class="post-metadata">

**Author:** ![dave\_59](https://verificationacademy.com/forums/user_avatar/verificationacademy.com/dave_59/32/4499_2.png) [@dave\_59](https://verificationacademy.com/forums/u/dave_59)\
**Post date:** [March 13, 2018, 10:46pm UTC](https://verificationacademy.com/forums/t/pattern-generation/34173/8 "2018-03-13T22:46:20Z")

</div>

_In reply to [Rohi\_417](https://verificationacademy.com/forums/t/pattern-generation/34173/7):_

It looks like your tool has not implemented a const cast. Maybe you have an older version. Please contact your vendor for support.

---

<div class="post-metadata">

**Author:** ![rabh](https://verificationacademy.com/forums/letter_avatar_proxy/v4/letter/r/e68b1a/32.png) [@rabh](https://verificationacademy.com/forums/u/rabh)\
**Post date:** [July 7, 2024, 9:52am UTC](https://verificationacademy.com/forums/t/pattern-generation/34173/9 "2024-07-07T09:52:15Z")

</div>

> [@dave\_59](#):
>
> ```auto
> rand bit[10:0] varb = 11'b10000000000;
> constraint pattern { varb == const'( {1'b1, varb[10:1]} ); }
> 
> ```

if I have some thing like this `rand bit [4:0] variable[];` size of variable is 5, and i want to generate pattern like `variable[0] = 10000; variable[1] = 11000, variable[2] = 11100, variable [3] = 11110, variable[4] = 11111;` Why does the following constraint misbehave/not working?

```auto
class problem9;
	
	rand bit [4:0] variable[];
	
	bit [4:0] variable_1[5];

	constraint on_variable {
		foreach(variable[i]) {
			if(i !=0) { 
			variable[i] == (variable[i-1]) | (1<<(4-i));
			}
			else {
			variable[0] == 1 << 4 ;
			}
			}
		
		}
	constraint size{
		variable.size()==5;
	} 
endclass

module check;
	problem9 p9;

	initial
		begin
			p9 = new();
			p9.randomize();
			foreach(p9.variable[i]) begin
			$display("i = %0d, variable = %0b",i, p9.variable[i]);
			end
			foreach(p9.variable_1[i]) begin
				if(i != 0) begin
				p9.variable_1[i] = p9.variable_1[i-1] | 1 << (4-i);
				end
				else 
				p9.variable_1[0] = 1 << 4;
				$display("p9.variable_1 here = %0b", p9.variable_1[i]);
			end
		end
endmodule

```

I am getting the output for variable\_1 where constraint/randomization is not involved. but for variable I get an output as:  
i = 0, variable = 10000  
i = 1, variable = 10110  
i = 2, variable = 10000  
i = 3, variable = 10010  
i = 4, variable = 11000

---

<div class="post-metadata">

**Author:** ![dave\_59](https://verificationacademy.com/forums/user_avatar/verificationacademy.com/dave_59/32/4499_2.png) [@dave\_59](https://verificationacademy.com/forums/u/dave_59)\
**Post date:** [July 7, 2024, 6:01pm UTC](https://verificationacademy.com/forums/t/pattern-generation/34173/10 "2024-07-07T18:01:55Z")

</div>

You have a problem with operator precedence in your constraint. Check the precedence of bitwise ‘or’ (`|`).

---

<div class="post-metadata">

**Author:** ![RajratnaChauhan](https://verificationacademy.com/forums/letter_avatar_proxy/v4/letter/r/5f9b8f/32.png) [@RajratnaChauhan](https://verificationacademy.com/forums/u/RajratnaChauhan)\
**Post date:** [July 8, 2024, 9:57am UTC](https://verificationacademy.com/forums/t/pattern-generation/34173/11 "2024-07-08T09:57:39Z")

</div>

Here’s one way to do this.

```auto
package learning; 
     import uvm_pkg::*;  
     `include "uvm_macros.svh"

     class packet extends uvm_object;
         `uvm_object_utils(packet)

         function new(string name = "packet");
             super.new(name);
         endfunction

         static int count = 1; 
         rand bit [10:0] pattern;
         bit [10:0] p = ~0;

         constraint default_c {
             pattern == (p << ($bits(pattern) - count));
         }

         function void post_randomize();
             if ($bits(pattern) == count) count = 1; else count++;
         endfunction

         virtual function void printInfo();
             `uvm_info(get_type_name, $sformatf("pattern = %b", pattern), UVM_LOW)
         endfunction

     endclass

     class test extends uvm_test;
         `uvm_component_utils(test)

         rand packet pkt;

         function new(string name="test", uvm_component parent);
              super.new(name, parent);
         endfunction

         task run_phase(uvm_phase phase);
             super.run_phase(phase); 
             repeat (50) begin
                 pkt = packet::type_id::create("pkt");
                 assert(pkt.randomize());
                 pkt.printInfo();
             end
         endtask

     endclass

endpackage

module top();
    `include "uvm_macros.svh"
    import uvm_pkg::*;
    import learning::*;

    initial begin
        run_test("test");
    end
endmodule

```

---

<div class="post-metadata">

**Author:** ![rabh](https://verificationacademy.com/forums/letter_avatar_proxy/v4/letter/r/e68b1a/32.png) [@rabh](https://verificationacademy.com/forums/u/rabh)\
**Post date:** [July 10, 2024, 2:56am UTC](https://verificationacademy.com/forums/t/pattern-generation/34173/12 "2024-07-10T02:56:36Z")

</div>

ya got it, thanks Dave.

---

<div class="post-metadata">

**Author:** ![Lalita1701](https://verificationacademy.com/forums/letter_avatar_proxy/v4/letter/l/bcef8e/32.png) [@Lalita1701](https://verificationacademy.com/forums/u/Lalita1701)\
**Post date:** [October 27, 2024, 12:50pm UTC](https://verificationacademy.com/forums/t/pattern-generation/34173/13 "2024-10-27T12:50:07Z")

</div>

```auto
class abc;
  rand bit[9:0] a,b;
  static bit[9:0] count;
  constraint a_c{
    a == 10'b1111_1111_11<< count;
  }
  
  function void post_randomize();
    count++;
    foreach(a[i]) begin 
      b[i] = a[9-i];
    end
    b = ~b;
    $display("count =%0p a =%b", count, b);
  endfunction
  
endclass
  
  module tb;
   abc abc_inst;
  initial begin 
    abc_inst = new();
    repeat(10)
    abc_inst.randomize();

  end
endmodule
      
  

```
