2 #define BUFFER_SIZE 1024
5 static bool check_data64( ulong data_i, ulong expect );
7 static void check_data( __global ulong8 *pStatus, uint size );
9 static void read_input(__global ulong8 *in, uint size);
11 pipe ulong8 pipe_input __attribute__((xcl_reqd_pipe_depth(512)));
15 __attribute__ ((reqd_work_group_size(1,1,1)))
16 void check_read_input(
21 read_input(src, size);
26 __attribute__ ((reqd_work_group_size(1,1,1)))
28 __global uint16 *pStatus,
32 check_data( pStatus, size );
37 //__attribute__ ((reqd_work_group_size(1,1,1)))
38 //__attribute__ ((xcl_dataflow))
40 // __global ulong8 *src,
41 // __global uint16 *pStatus,
42 // const ulong8 expect,
47 // read_input(src, size);
48 // check_data( pStatus, expect, size );
53 void read_input(__global ulong8 *in, uint size)
55 __attribute__((xcl_pipeline_loop))
56 for (int ii = 0 ; ii < size ; ii++)
58 write_pipe_block( pipe_input, &in[ii] );
63 //__attribute__ ((xcl_dataflow))
64 static void check_data( __global ulong8 *pStatus, uint size )
90 //__global ulong8 *pStatusUlong = (ulong8*)pStatus;
92 checkStatus = pStatus[0];
95 addConst = pStatus[2];
97 blockRd = checkStatus.s0 >> 32;
98 blockOk = checkStatus.s1 & 0xFFFFFFFF;
99 blockError = checkStatus.s1 >> 32;
100 //printf( "krnl - %.4x %d %d %d \n", checkStatus.s0, blockRd, blockOk, blockError );
104 // printf( "krnl: input0=%p\n", input0 );
105 // printf( "krnl: pStatus=%p\n", pStatus);
106 // printf( "krnl: size=%d\n", size);
108 // //for( int ii=0; ii<8; ii++ )
109 // printf( "krnl: expect(%X)= %lX\n", 0, temp1.s0 );
110 // printf( "krnl: expect(%X)= %lX\n", 1, temp1.s1 );
111 // printf( "krnl: expect(%X)= %lX\n", 2, temp1.s2 );
112 // printf( "krnl: expect(%X)= %lX\n", 3, temp1.s3 );
113 // printf( "krnl: expect(%X)= %lX\n", 4, temp1.s4 );
114 // printf( "krnl: expect(%X)= %lX\n", 5, temp1.s5 );
115 // printf( "krnl: expect(%X)= %lX\n", 6, temp1.s6 );
116 // printf( "krnl: expect(%X)= %lX\n", 7, temp1.s7 );
119 __attribute__((xcl_pipeline_loop))
120 for ( int ii=0; ii<size; ii++)
124 read_pipe_block( pipe_input, &temp0 );
127 flag0 |= check_data64( temp0.s0, temp1.s0 );
128 flag1 |= check_data64( temp0.s1, temp1.s1 );
129 flag2 |= check_data64( temp0.s2, temp1.s2 );
130 flag3 |= check_data64( temp0.s3, temp1.s3 );
131 flag4 |= check_data64( temp0.s4, temp1.s4 );
132 flag5 |= check_data64( temp0.s5, temp1.s5 );
133 flag6 |= check_data64( temp0.s6, temp1.s6 );
134 flag7 |= check_data64( temp0.s7, temp1.s7 );
137 // if( flag0 || flag1 || flag2 || flag3 || flag4 || flag5 || flag6 || flag7 )
146 // if( word_error && cnt_error<4 )
148 // printf( "0: %.4X %.4X %.4X %.4X %.4X %.4X %.4X %.4X ii=%d\n",
160 // printf( "1: %.4X %.4X %.4X %.4X %.4X %.4X %.4X %.4X %d\n\n",
174 temp1.s0 +=addConst.s0;
175 temp1.s1 +=addConst.s1;
176 temp1.s2 +=addConst.s2;
177 temp1.s3 +=addConst.s3;
178 temp1.s4 +=addConst.s4;
179 temp1.s5 +=addConst.s5;
180 temp1.s6 +=addConst.s6;
181 temp1.s7 +=addConst.s7;
185 if( flag0 || flag1 || flag2 || flag3 || flag4 || flag5 || flag6 || flag7 )
197 checkStatus.s0 = ((ulong)blockRd)<<32 | 0xAA55;
198 checkStatus.s1 = ((ulong)blockError)<<32 | blockOk;
200 pStatus[0] = checkStatus;
203 //printf( "krnl - %.4x %d %d %d - Ok\n", checkStatus.s0, blockRd, blockOk, blockError );
207 __attribute__((xcl_pipeline_loop))
208 static bool check_data64( ulong data_i, ulong expect )