Array reduction method XOR
Table of Contents
On calling xor() method, logical xor (^) will be performed on all the array elements and returned.
Let’s consider an example of an array with 2, 3 and 4 elements.
sim
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
|
0
|
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
|
0001 | 1 |
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 the 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
|
0011 | 3 |
|
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
|
0110 | 6 |
|
C
|
0111
|
7
|
|
Y = X ^ C
|
0001
|
1
|
|
D
|
1001
|
9
|
|
Z = Y ^ D
|
1000
|
8
|
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 l_xor;
initial begin
//array initialization
array_1 = '{2,3};
array_2 = '{2,1};
array_3 = '{10,9,8};
array_4 = '{3,5,7,9};
l_xor = array_1.xor();
$display("Logical XOR of array_1 is \t%0d",l_xor);
l_xor = array_2.xor();
$display("Logical XOR of array_2 is \t%0d",l_xor);
l_xor = array_3.xor();
$display("Logical XOR of array_3 is \t%0d",l_xor);
l_xor = array_4.xor();
$display("Logical XOR of array_4 is \t%0d",l_xor);
end
endmodule
Simulator Output
Logical XOR of array_1 is 1 Logical XOR of array_2 is 3 Logical XOR of array_3 is 11 Logical XOR of array_4 is 8
Array reduction methods SUM, PRODUCT using ‘with’ clause
Condition or expression specified within the with clause will be applied to all the array elements during array reduction methods.
array_1 = '{1,2,3,4};
array_1.sum with (item * 2);
the item indicates the array element.
each array element will be multiplied by 2 and then the sum method will be performed.
Intermediate array elements after multiplication with 2 is ‘{2,4,6,12};
sum method will be performed on new array elements. sum = 2+4+6+12;
Below is an example of sum and product methods using with clause.
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 with (item * 2);
//t_sum = (1*2)+(2*2)+(3*2)+(4*2) = 2+4+6+8
$display("Sum of array_1 is \t%0d",t_sum);
t_product = array_1.product with (item + 2);
//t_product = (1+2)*(2+2)*(3+2)*(4+2) = 3*4*5*6
$display("product of array_1 is \t%0d",t_product);
end
endmodule
Simulator Output
Sum of array_1 is 20 product of array_1 is 360
Array reduction methods AND, OR and XOR using ‘with’ clause
The operation of these methods is the same as the above example.
module fixedsize_array;
//declaration of array’s
int array_1[2];
int array_2[2];
int array_3[2];
int b_and,b_or,l_xor;
initial begin
//array initialization
array_1 = '{2,3};
array_2 = '{2,1};
array_3 = '{1,3};
b_and = array_1.and with (item * 2);
$display("Bit-wise AND of array_1 is \t%0d",b_and);
b_or = array_2.or with (item + 3);
$display("Bit-wise OR of array_2 is \t%0d",b_or);
l_xor = array_3.xor with (item * 3);
$display("Logical XOR of array_3 is \t%0d",l_xor);
end
endmodule
Simulator Output
Bit-wise AND of array_1 is 4 Bit-wise OR of array_2 is 5 Logical XOR of array_3 is 10
Array reduction methods on Dynamic and Associative arrays
Examples seen before are on fixed size array, below example is on a dynamic and associative array.
module dyn_asoc_array;
//declaration of array’s
int dyn_array[];
int asoc_array[*];
int t_sum,t_product;
initial begin
dyn_array = new[4];
//array initialization
dyn_array = '{1,2,3,4};
asoc_array[3] = 8;
asoc_array[5] = 2;
asoc_array[7] = 6;
asoc_array[9] = 1;
t_sum = dyn_array.sum(); //t_sum = 1+2+3+4
$display("Sum of dyn_array is \t\t%0d",t_sum);
t_product = dyn_array.product(); //t_product = 1*2*3*4
$display("product of dyn_array is \t%0d",t_product);
t_sum = asoc_array.sum(); //t_sum = 8+2+6+1
$display("Sum of asoc_array is \t\t%0d",t_sum);
t_product = asoc_array.product(); //t_product = 8*2*6*1
$display("product of asoc_array is \t%0d",t_product);
end
endmodule
Simulator Output
Sum of dyn_array is 10 product of dyn_array is 24 Sum of asoc_array is 17 product of asoc_array is 96
