日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

HLS中数据的合并与拆分

發布時間:2023/12/19 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 HLS中数据的合并与拆分 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

HLS中數據的合并與拆分

在用HLS生成IP的過程中,由于需要充分使用接口的帶寬,所以一般我們在輸入端將高位寬的數據拆分后作為輸入使用在輸出端對數據進行合并后再進行輸出。這是我們在設計IP中經常出現的問題,本文總結一下自己在最近的工作中進行數據拆分和合并的經驗。

數據拆分

1、拆分后的數據類型與原數據類型一致

//輸入的數據數量為IMAGE_SIZE,輸出的數據數量為(IMAGE_SIZE<<5) void data_split(ap_uint<512> *data_in,ap_uint<16> *data_out){int m,n;int start_addr = 0;ap_uint<16> data_out_temp;ap_uint<512> data_in_temp;for(m = 0;m < IMAGE_SIZE; m++){memcpy(&data_in_temp, &data_in[start_addr], 32 * sizeof(ap_uint<16>));for(n = 0; n < 32; n++){data_out_temp = data_in_temp(((n+1)<<4)-1,(n<<4));data_out[(m<<5)+n] = data_out_temp;}start_addr = start_addr + 1;}}

2、拆分后的數據類型與原數據類型不一致

//輸入的數據數量為IMAGE_SIZE,輸出的數據數量為(IMAGE_SIZE<<5) void data_split(ap_uint<512> *data_in,ap_ufixed<16, 1, AP_TRN, AP_WRAP> *data_out){int m,n;int start_addr = 0;ap_uint<16> data_mid_temp;ap_ufixed<16, 1, AP_TRN, AP_WRAP> data_out_temp;ap_uint<512> data_in_temp;for(m = 0;m < IMAGE_SIZE; m++){memcpy(&data_in_temp, &data_in[start_addr], 32 * sizeof(ap_uint<16>));for(n = 0; n < 32; n++){data_mid_temp = data_in_temp(((n+1)<<4)-1,(n<<4));data_out_temp(15,0) = data_mid_temp(15,0);data_out[(m<<5)+n] = data_out_temp;}start_addr = start_addr + 1;}}

注意數據類型不一致的時候需要再加一個中間變量data_out_temp。

數據合并

1、合并后的數據類型與原數據類型一致

//輸入的數據數量為IMAGE_SIZE,輸出的數據數量為(IMAGE_SIZE>>5) void data_merge(ap_uint<16> *data_in,ap_uint<512> *data_out){int i ,j;ap_uint<16> data_in_temp;ap_uint<512> data_out_temp;for(i = 0;i < (IMAGE_SIZE>>5); i++){for(j = 0; j < 32 ; j++){data_in_temp = data_in[(i<<5)+j];data_out_temp(((j+1)<<4)-1,(j<<4)) = data_in_temp(15,0);}data_out[i] = data_out_temp;}}

2、合并后的數據類型與原數據類型不一致

//輸入的數據數量為IMAGE_SIZE,輸出的數據數量為(IMAGE_SIZE>>5) void data_merge(ap_ufixed<16, 1, AP_TRN, AP_WRAP> *data_in,ap_uint<512> *data_out){int i ,j ,k;ap_ufixed<16, 1, AP_TRN, AP_WRAP> data_in_temp;ap_uint<16> data_mid_temp;ap_uint<512> data_out_temp;ap_uint<1> bool_temp;for(i = 0;i < (IMAGE_SIZE>>5); i++){for(j = 0; j < 32 ; j++){data_in_temp = data_in[(i<<5)+j];for(k = 0; k < 16; k++){bool_temp = data_in_temp(k,k);data_mid_temp(k,k) = bool_temp;}data_out_temp(((j+1)<<4)-1,(j<<4)) = data_mid_temp(15,0);}data_out[i] = data_out_temp;}}

經驗之談

自己總結的經驗就是在做數據間位寬和類型的轉換時,必須要保持其中的一項屬性與原數據相同;數據合并也是同理。

總結

以上是生活随笔為你收集整理的HLS中数据的合并与拆分的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。