HLS Lesson7-複合資料型別
阿新 • • 發佈:2022-04-28
1. 結構體
優化方式有兩種:field_level和struct_level
#define W 4 #define N 4 typedef ap_int<W> A_t; typedef ap_uint<N> B_t; typedef struct{ A_t A; B_t B[N]; }data_t; data_t structport(data_t i_val); data_t structport(data_t i_val) { data_t o_val; int i; o_val.A = i_val.A + 2; for (i = 0; i < N; i++) { o_val.B[i] = i_val.B[i] + 2; } return o_val; }
field_level必須是以8的整數倍為邊界,整個struct佔用40bit
struct_level對資料的原有位寬依然保留,但是封裝後的資料位寬還是要以8的整數倍作為邊界,整個struct佔據20bit,最接近24,所以為24bit
並且兩者所佔用的latency,interval以及相應的資源利用率都是差不多的
2. 列舉:把一個數值定義為一個符號常量
#include<ap_int.h> #define W 4 typedef ap_int<W> a_t; typedef enum { M_INIT, M_ADD, M_SUB, M_HOLD, }mymode_t; a_t enumapp(a_t A,mymode_t mode); #include"enum_type.h" a_t enumapp(a_t A,mymode_t mode) { static a_t res; switch(mode) { case M_INIT:res = A;break; case M_ADD:res = res + A;break; case M_SUB:res = res - A;break; case M_HOLD:break; } return res; }
自動推斷mode型別的寬度為2