1. 程式人生 > 其它 >HLS Lesson7-複合資料型別

HLS Lesson7-複合資料型別

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