If you have a 32 bit value, write a constraint which constrains the number of transitions. Example,10001 has 2 transitions as you parse it. 11010011 has 3 transitions. Can we use the .sum() method and ‘with’ construct to solve this problem
You can use the sum()
method, but that only iterates over an unpacked array. You can create a dummy array just to use as an iterator.
rand bit [31:0] value;
bit itr[$bits(value)-1];
constraint c {
itr.sum() with (int'(value[itr.index] != value[itr.index+1])) == 3;
}
Dave,
I believe there is a typo as well as missing int’ cast
constraint c { itr.sum() with( int'(value[item.index] != value[item.index+1]) ) == 3; }
For the highest item.index i.e 31 , shouldn’t there be an out of bound error/message as it tries to access index 32 which essentially doesn’t exist ?
EDIT: As Dave pointed below
bit itr[$bits(value)-1] ; // Same as bit itr[31] where Indexes iterate from 0 to 30
Thanks for catching me get caught by one of my own gotcha’s. Fixed.
Since I use [$bits(value)-1]
, the highest itr.index
value is 30.