打包pixel 8b—>64b
template <int NPC, int WORDWIDTH, int PIXELDEPTH> //NPC=NPC8,WORDWIDTH=XF_64UW,PIXELDEPTH=XF_8UP
void xfPackPixels(
XF_PTNAME(PIXELDEPTH) * tmp_buf, //XF_PTNAME(PIXELDEPTH)=ap_uint<8>
XF_SNAME(WORDWIDTH) & val, //XF_SNAME(WORDWIDTH)=ap_uint<64>
uint16_t pos, //0
int16_t loopIter, //npc =8
uint16_t& shift //0
){
#pragma HLS INLINE
ap_uint<8> STEP = XF_PIXELDEPTH(PIXELDEPTH); //XF_PIXELDEPTH(PIXELDEPTH)=8
for (ap_int<9> i = 0; i < loopIter; i++) {
#pragma HLS unroll
XF_PTUNAME(PIXELDEPTH) tmp = tmp_buf[pos]; // XF_PTUNAME(PIXELDEPTH)=ap_uint<8>
val = val | (((XF_SNAME(WORDWIDTH))tmp) << (shift * STEP));
pos++;
shift++;
}
}
/**
* Extract Pixels from a packed word into an array from the index pos.
* The number of pixels to be extracted is determined by the NPC.
*/
template <int NPC, int WORDWIDTH, int PIXELDEPTH>
void xfExtractPixels(XF_PTNAME(PIXELDEPTH) * tmp_buf, XF_SNAME(WORDWIDTH) & val1, int pos) {
#pragma HLS inline off
XF_SNAME(WORDWIDTH) v = val1;//XF_SNAME(WORDWIDTH)=ap_uint<64>
int shift = 0;
int STEP = XF_PIXELDEPTH(PIXELDEPTH);XF_PIXELDEPTH(PIXELDEPTH)=8
Extract_pixels_loop:
for (int i = 0; i < (1 << (XF_BITSHIFT(NPC))); i++) {//XF_BITSHIFT(XF_NPPC8)=3
#pragma HLS UNROLL
tmp_buf[pos + i] = v.range(shift + STEP - 1, shift);
shift = shift + STEP;
}
}