Array Reduction methods
Table of Contents
SystemVerilog Array Reduction methods operate on an unpacked array to reduce the array to a single value.
builtin array reduction methods are,
Method  Description 

sum()  returns the sum of all the array elements 
product()  returns the product of all the array elements 
and()  returns the bitwise AND ( & ) of all the array elements 
or()  returns the bitwise OR (  ) of all the array elements 
xor()  returns the logical XOR ( ^ ) of all the array elements 
‘with’ clause is allowed for sort and rsort methods.
About ‘with’:
expression specified in “with” clause will be evaluated for each array element and performs the operation on an array.
Array reduction methods SUM and PRODUCT
On calling sum() method sum of array_1 elements (1,2,3,4) will be returned to variable t_sum.
On calling product() method product of array_1 elements (1,2,3,4) will be returned to variable t_product.
module fixedsize_array; //declaration of array’s int array_1[4]; int t_sum,t_product; initial begin //array initialization array_1 = '{1,2,3,4}; t_sum = array_1.sum(); //t_sum = 1+2+3+4 $display("Sum of array_1 is \t%0d",t_sum); t_product = array_1.product(); //t_product = 1*2*3*4 $display("product of array_1 is \t%0d",t_product); end endmodule
Simulator Output
Sum of array_1 is 10 product of array_1 is 24
Array reduction method AND
On calling and() method, bitwise and (&) will be performed on all the array elements and returned.
Let’s consider an example of an array with 2, 3 and 4 elements.
Before looking into examples, see to the Truth table for AND.
A  B  Y = A & B 
0  0  0 
0  1  0 
1  0  0 
1  1  1 
1. Array with 2 elements.
Consider A=2 and B=3.
Y = A & B;
Binary  Decimal  
A  0010  2 
B  0011  3 
Y = A & B  0010  2 
Consider A=2 and B=1.
Y = A & B;
Binary  Decimal  
A  0010  2 
B  0001  1 
Y = A & B  0000  0 
2. Array with 3 elements.
Consider A=10, B=9, and C=8.
AND operation of 3 elements performed in 2 steps, In first step A & B, will be performed. In the second step result of the first step & C will be done. Considering X as the first step result.
X = A & B;
Y = X & C;
Binary  Decimal  
A  1010  10 
B  1001  9 
X = A & B  1000  8 
C  1000  8 
Y = X & C  1000  8 
2. Array with 4 elements.
Consider A=3, B=5, C=7, and D=9.
Consider X and Y as intermediate results.
X = A & B;
Y = X & C;
Z = Y & D;
Binary  Decimal  
A  0011  3 
B  0101  5 
X = A & B  0001  8 
C  0111  7 
Y = X & C  0001  8 
D  1001  9 
Z = Y & D  0001  1 
Complete code with above examples.
module fixedsize_array; //declaration of array’s int array_1[2]; int array_2[2]; int array_3[3]; int array_4[4]; int b_and; initial begin //array initialization array_1 = '{2,3}; array_2 = '{2,1}; array_3 = '{10,9,8}; array_4 = '{3,5,7,9}; b_and = array_1.and(); $display("Bitwise AND of array_1 is \t%0d",b_and); b_and = array_2.and(); $display("Bitwise AND of array_2 is \t%0d",b_and); b_and = array_3.and(); $display("Bitwise AND of array_3 is \t%0d",b_and); b_and = array_4.and(); $display("Bitwise AND of array_4 is \t%0d",b_and); end endmodule
Simulator Output
Bitwise AND of array_1 is 2 Bitwise AND of array_2 is 0 Bitwise AND of array_3 is 8 Bitwise AND of array_4 is 1
Array reduction method OR
On calling or() method, bitwise or () will be performed on all the array elements and returned.
Let’s consider an example of an array with 2, 3 and 4 elements.
Before looking into examples, see to the Truth table for OR.
A

B

Y = A  B

0  0  0 
0  1  1 
1  0  1 
1  1  1 
1. Array with 2 elements.
Consider A=2 and B=3.
Y = A  B;
Binary

Decimal


A

0010

2

B

0011

3

Y = A  B

0011

3

Consider A=2 and B=1.
Y = A  B;
Binary

Decimal


A

0010

2

B

0001

1

Y = A  B

0011

3

2. Array with 3 elements.
Consider A=10, B=9, and C=8.
OR operation of 3 elements performed in 2 steps, In first step A  B will be performed. In the second step result of the first step  C will be done. Considering X as the first step result.
X = A  B;
Y = X  C;
Binary

Decimal


A

1010

10

B

1001

9

X = A  B

1011

11

C  1000  8 
Y = X  C  1011  11 
2. Array with 4 elements.
Consider A=3, B=5, C=7, and D=9.
Consider X and Y as intermediate results.
X = A  B;
Y = X  C;
Z = Y  D;
Binary

Decimal


A

0011

3

B

0101

5

X = A  B

0111

7

C  0111  7 
Y = X  C  0111  7 
D  1001  9 
Z = Y  D  1111  15 
Complete code with above examples.
module fixedsize_array; //declaration of array’s int array_1[2]; int array_2[2]; int array_3[3]; int array_4[4]; int b_or; initial begin //array initialization array_1 = '{2,3}; array_2 = '{2,1}; array_3 = '{10,9,8}; array_4 = '{3,5,7,9}; b_or = array_1.or(); $display("bitwise OR of array_1 is \t%0d",b_or); b_or = array_2.or(); $display("bitwise OR of array_2 is \t%0d",b_or); b_or = array_3.or(); $display("bitwise OR of array_3 is \t%0d",b_or); b_or = array_4.or(); $display("bitwise OR of array_4 is \t%0d",b_or); end endmodule
Simulator Output
bitwise OR of array_1 is 3 bitwise OR of array_2 is 3 bitwise OR of array_3 is 11 bitwise OR of array_4 is 15