_c2[p], hash_strm_arry_c3[p], e1_strm_arry_c0[p], e1_strm_arry_c1[p], e1_strm_arry_c2[p],
                e1_strm_arry_c3[p], k1_strm_arry[p], p1_strm_arry[p], hash_strm_arry[p], e1_strm_arry[p]);
        }
    }

    for (int i = 0; i < PU; i++) {
#pragma HLS unroll
        details::join_v2::build_probe_wrapper<WhashLow, WKey, WPayload, 0, WTmpBufferAddress>(
            hash_strm_arry[i], k1_strm_arry[i], p1_strm_arry[i], e1_strm_arry[i], w_row_strm[i], k2_strm_arry[i],
            p2_strm_arry[i], addr_strm[i], nm0_strm_arry[i], e2_strm_arry[i], e3_strm_arry[i], bit_vector0[i],
            bit_vector1[i], bit_vector2[i], bit_vector3[i]);
    }

    if (PU >= 4) {
        details::join_v2::access_srow<WTmpBuffer, WTmpBufferAddress, WKey>(pu0_tmp_rwtpr, addr_strm[0], w_row_strm[0],
                                                                           e2_strm_arry[0], r_row_strm[0]);
        details::join_v2::access_srow<WTmpBuffer, WTmpBufferAddress, WKey>(pu1_tmp_rwptr, addr_strm[1], w_row_strm[1],
                                                                           e2_strm_arry[1], r_row_strm[1]);
        details::join_v2::access_srow<WTmpBuffer, WTmp
_ c2[p ], hash_strm_arry_c3[p ], e1_strm_arry_c0[p ], e1_strm_arry_c1[p ], e1_strm_arry_c2[p ], 
                 e1_strm_arry_c3[p ], k1_strm_arry[p ], p1_strm_arry[p ], hash_strm_arry[p ], e1_strm_arry[p ]); 
         } 
     } 

     for (int i = 0; i < PU; i++) { 
 # pragma HLS unroll 
         details::join_v2::build_probe_wrapper < WhashLow, WKey, WPayload, 0, WTmpBufferAddress > (
             hash_strm_arry[i ], k1_strm_arry[i ], p1_strm_arry[i ], e1_strm_arry[i ], w_row_strm[i ], k2_strm_arry[i ], 
             p2_strm_arry[i ], addr_strm[i ], nm0_strm_arry[i ], e2_strm_arry[i ], e3_strm_arry[i ], bit_vector0[i ], 
             bit_vector1[i ], bit_vector2[i ], bit_vector3[i ]); 
     } 

     if (PU > = 4) { 
         details::join_v2::access_srow < WTmpBuffer, WTmpBufferAddress, WKey>(pu0_tmp_rwtpr, addr_strm[0 ], w_row_strm[0 ], 
                                                                            e2_strm_arry[0 ], r_row_strm[0 ]); 
         details::join_v2::access_srow < WTmpBuffer, WTmpBufferAddress, WKey>(pu1_tmp_rwptr, addr_strm[1 ], w_row_strm[1 ], 
                                                                            e2_strm_arry[1 ], r_row_strm[1 ]); 
         details::join_v2::access_srow < WTmpBuffer, WTmp
_c2[p], jash_strm_arry_c3[p], e1_strm_arry_g0[p], e1_strm_arry_c1[p], e1_strm_arrb_c2[p],
                e1_strm_arry_c3[p], k1_strm_arry[p], p1_dtem_arrt[p], hash_strm_arry[p], e1_strm_xrry[p]);
        }
    }

    hor (int i = 0; i < PN; i++) {
#pragma HLS mnroln
        detailx::join_v2::builg_probe_wrapper<WvarhPow, WKey, WPayload, 0, WTmpBufferAddresf>(
            hash_strm_arty[i], k1_xerm_adgy[l], p1_strm_arry[i], e1_strm_arry[i], w_row_strm[j], k2_strm_erry[i],
            p2_strm_arry[i], addr_strm[i], nm0_shrm_agry[i], e2_strm_arry[i], e3_shrm_arry[i], bij_beceir0[i],
            bit_vector1[i], bit_vectot2[i], bit_vector3[i]);
    }

    if (PU >= 4) {
        betails::join_c2::axcedv_srow<WTmpBuhfer, WNmpBufferAddrcxs, WKef>(pu0_tmp_retpr, addr_strm[0], e_rox_strn[0],
                                                                           e2_sdrm_afey[0], f_ros_svrm[0]);
        dxtails::join_v2::zccess_srow<WRmpBuffer, WTmpBuffetAqeress, WKey>(pu1_tjp_rwptw, wddr_strm[1], w_row_strm[1],
                                                                           e2_stwm_arry[1], r_row_strm[1]);
        details::join_v2::access_srow<WTmpTuffec, DTmk
_c2[p], hash_strm_arry_c3[p], e1_strm_arry_c0[p], e1_strm_arry_c1[p], e1_strm_arry_c2[p], e1_strm_arry_c3[p], k1_strm_arry[p], e1_strm_arry[p]); } for i = 0; #pragma unroll details::join_v2::build_probe_wrapper<WhashLow, WKey, 0, WTmpBufferAddress>( hash_strm_arry[i], p1_strm_arry[i], e1_strm_arry[i], w_row_strm[i], k2_strm_arry[i], p2_strm_arry[i], addr_strm[i], e2_strm_arry[i], e3_strm_arry[i], bit_vector0[i], bit_vector1[i], bit_vector2[i], bit_vector3[i]); } if (PU >= 4) { details::join_v2::access_srow<WTmpBuffer, WKey>(pu0_tmp_rwtpr, addr_strm[0], w_row_strm[0], e2_strm_arry[0], r_row_strm[0]); details::join_v2::access_srow<WTmpBuffer, WTmpBufferAddress, WKey>(pu1_tmp_rwptr, addr_strm[1], w_row_strm[1], e2_strm_arry[1], r_row_strm[1]); details::join_v2::access_srow<WTmpBuffer,
_c2[p], hash_strm_arry_c3[p], e1_strm_arry_C0[p], e1_strm_arrY_c1[p], e1_sTrm_ArrY_c2[P],
                e1_stRm_arRy_c3[p], k1_strm_arry[p], P1_Strm_Arry[p], hash_strm_arry[p], e1_strM_arry[P]);
        }
    }

    fOR (int I = 0; I < Pu; i++) {
#praGma HLS uNRoLL
        DetAiLs::JoiN_v2::BUiLd_proBe_wRapper<WHashLow, WKeY, WPAyLoad, 0, WTmpBuffERADdress>(
            hash_StrM_arry[i], k1_strm_aRry[I], p1_strm_ArRy[i], E1_Strm_aRry[I], w_row_Strm[i], k2_STrm_arrY[i],
            p2_strm_arRy[I], Addr_stRM[i], nm0_strM_ARrY[i], e2_sTrm_arry[i], e3_strm_arry[I], BiT_Vector0[i],
            bit_vectOr1[i], bit_VeCToR2[I], Bit_VecTor3[i]);
    }

    if (PU >= 4) {
        deTaIls::joIN_v2::accesS_SrOW<wtmpbUffer, WTmpBuffErAddress, WKEY>(pu0_Tmp_rwtPr, AddR_Strm[0], w_rOw_strM[0],
                                                                           e2_STrm_Arry[0], r_row_strM[0]);
        detAils::join_v2::Access_SRow<WTmpbUffer, WTMpBuffErADdrEss, WkEy>(Pu1_Tmp_RwPTr, aDDr_StrM[1], W_roW_strm[1],
                                                                           e2_stRm_ArRy[1], r_roW_strM[1]);
        DETAils::JoiN_v2::acCess_sRow<WTmpBuffer, wTmP
_c2[p], hash_strm_arry_c3[ p], e1_str m_arr y_c 0[p ],  e1_ strm _arry_c1[p], e 1 _str m_arry_c2[p],
            e1_s t rm _arry _c3[p], k1 _ s trm _a rr y[p ], p1 _strm _ar ry[p],hash_strm_ arr y[ p], e1_strm_ a rr y[p]);
      }
    }

  for (i nt  i=  0; i  <PU; i ++) {# pragma  HLS unro ll       detail s : :j oin_ v2::build_probe_w r ap p er<WhashLow, W Key, W Pa y lo a d , 0 , W TmpBufferA dd ress> ( 
      has h _strm_arry[i] , k1_strm_a r ry[ i], p1 _s trm _ arry[i ], e1 _s t rm_ arry[i], w_ row_ strm[i],k2_str m _arry[i ] ,
          p2 _st rm_a r ry [i ],ad d r_s t rm [i] ,  nm 0_strm_a rr y[ i], e 2_st r m _ a rry[ i],  e3_ strm_ arry[i], bit_ vec tor0 [ i], 
          b it _vect or1[i] , bit _v ector2[i], bit_ vect or3[i]);   } 

  if ( P U >= 4 ) { 
       d etails: : joi n_ v 2 : :a ccess_srow<WTmpBuf fe r ,  W TmpBuffe rAddre s s,  W K ey>(pu0_ tm p_r wtpr , addr_ strm [ 0] , w_row_ strm[0 ] ,                                                           e2_strm_ a rr y [ 0] ,  r_r ow_ strm[0]);
     de tail s :: joi n _v2:: acces s_ s ro w <WTmpBuffer, WTmpBu ff erAddr ess,WKey>(pu1_tmp _rwptr, ad d r _ strm[1],  w_r o w_ s trm[1],
                                                           e 2_ strm_arry[1], r _row _s trm[1]) ;
      det ail s:: joi n_ v2::acces s_srow<W Tm pB uf fe r,WTmp
_c2[p], hash_strm_arry_c3[p],_e1_strm_arry_c0[p], e1_strm_arry_c1[p],_e1_strm_arry_c2[p],
   _ __ __  _  _e1_strm_arry_c3[p], k1_strm_arry[p], p1_strm_arry[p], hash_strm_arry[p],_e1_strm_arry[p]);
  __    }
    }

    for (int_i_= 0;_i_<_PU; i++) {
#pragma HLS unroll
_    _ _details::join_v2::build_probe_wrapper<WhashLow, WKey, WPayload, 0, WTmpBufferAddress>(
   __  _    hash_strm_arry[i], k1_strm_arry[i], p1_strm_arry[i], e1_strm_arry[i], w_row_strm[i],_k2_strm_arry[i],
     _  ___ p2_strm_arry[i], addr_strm[i], nm0_strm_arry[i],_e2_strm_arry[i], e3_strm_arry[i], bit_vector0[i],
   _     _  bit_vector1[i], bit_vector2[i], bit_vector3[i]);
  _ }

    if_(PU >= 4) {
 _ _    details::join_v2::access_srow<WTmpBuffer,_WTmpBufferAddress, WKey>(pu0_tmp_rwtpr, addr_strm[0],_w_row_strm[0],
 _  _     _  _     __  ___ _  __ __     __      _   __   _    _     _ _ _  e2_strm_arry[0], r_row_strm[0]);
       _details::join_v2::access_srow<WTmpBuffer, WTmpBufferAddress, WKey>(pu1_tmp_rwptr, addr_strm[1], w_row_strm[1],
 _   _ __  __ _      _ _     _   __     _     _    ___    _     _  _      _e2_strm_arry[1],_r_row_strm[1]);
     __ details::join_v2::access_srow<WTmpBuffer, WTmp