Listing 2
1: #define WIDTH 16
2:
3: bdd_setvarnum( WIDTH*2 ) ;
4: bvec a_vec = bvec_var( WIDTH, 0, 1 ) ;
5: bvec b_vec = bvec_var( WIDTH, WIDTH, 1 ) ;
6: bdd eq_1 = ( a_vec >= b_vec ) & ( a_vec <= b_vec ) ;
7: bdd eq_2 = bddtrue ; // initilize eq_2 to be a constant 1
8: for ( unsigned bit = 0 ; bit < WIDTH ; bit++ )
9: eq_2 &= !( a_vec[ bit ] ^ b_vec[ bit ] ) ;
10: bdd eq_wrong = ( a_vec >= b_vec ) & ( a_vec < b_vec ) ;
11: // Check if the two implementations are equivalent:
12: // Output: eq_1 and eq_2 are equivalent
13: cout << "eq_1 and eq_2 are" << ( ( eq_1 != eq_2 ) ?
14: " not " : " " ) << "equivalent" << endl ;
15: // Check again but with the wrong implementation:
16: // Output: eq_1 and eq_wrong are not equivalent
17: cout << "eq_1 and eq_wrong are" << ( ( eq_1 != eq_wrong ) ?
18: " not " : " " ) << "equivalent" << endl ;