xf_utility.hpp

打包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;
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值