void acc_vadd_hls ( volatile int *cmd, volatile int *resp, int a[4096], int b[4096], int result[4096] ) {_ssdm_SpecArrayDimSize(result,4096);_ssdm_SpecArrayDimSize(b,4096);_ssdm_SpecArrayDimSize(a,4096); _ssdm_op_SpecInterface(0, "ap_ctrl_none", 0, 0, 0, 0, "", "", ""); _ssdm_op_SpecInterface(cmd, "axis", 0, 0, 0, 16, "", "", ""); _ssdm_op_SpecInterface(resp, "axis", 0, 0, 0, 16, "", "", ""); _ssdm_op_SpecInterface(a, "bram", 0, 0, 0, 1024, "", "", ""); _ssdm_op_SpecInterface(b, "bram", 0, 0, 0, 1024, "", "", ""); _ssdm_op_SpecInterface(result, "bram", 0, 0, 0, 1024, "", "", ""); _ssdm_op_SpecResource(a, "", "RAM_1P_BRAM", "", "", "", ""); _ssdm_op_SpecResource(b, "", "RAM_1P_BRAM", "", "", "", ""); _ssdm_op_SpecResource(result, "", "RAM_1P_BRAM", "", "", "", ""); int i,op, start,end; // Accumulate each channel op = *cmd; //get the start command end = *cmd; start = *cmd; if (op == 1) add_Loop: for (i = start; i < end; i++) {_ssdm_op_SpecLoopName("add_Loop");_ssdm_RegionBegin("add_Loop"); result[i]= a[i] + b[i]; if (i == end-1) { *resp= 1; //means I am done. } _ssdm_RegionEnd("add_Loop");} else if (op == 2) sub_Loop: for (i = start; i < end; i++) {_ssdm_op_SpecLoopName("sub_Loop");_ssdm_RegionBegin("sub_Loop"); result[i]= b[i] + a[i]; if (i == end-1) { *resp= 1; //means I am done. } _ssdm_RegionEnd("sub_Loop");} }
void top(int out[1], int w[1000*1], int b[1000*1], int x[1000]) {_ssdm_SpecArrayDimSize(b,1000*1);_ssdm_SpecArrayDimSize(w,1000*1);_ssdm_SpecArrayDimSize(x,1000);_ssdm_SpecArrayDimSize(out,1); _ssdm_op_SpecInterface(out, "ap_memory", 0, 0, 0, 0, "", "", ""); _ssdm_op_SpecInterface(w, "ap_memory", 0, 0, 0, 0, "", "", ""); _ssdm_op_SpecInterface(b, "ap_memory", 0, 0, 0, 0, "", "", ""); _ssdm_op_SpecInterface(x, "ap_memory", 0, 0, 0, 0, "", "", ""); _ssdm_op_SpecResource(out, "", "RAM_1P", "", -1, "", "", ""); _ssdm_op_SpecResource(w, "", "RAM_1P", "", -1, "", "", ""); _ssdm_op_SpecResource(b, "", "RAM_1P", "", -1, "", "", ""); _ssdm_op_SpecResource(x, "", "RAM_1P", "", -1, "", "", ""); fully_connected_layer(out, w, b, x, 1000, 1); }
void reset_axi(int *in_reset, bool *reset_out) { _ssdm_op_SpecResource(in_reset, "", "AXI4LiteS", "", "", "", ""); _ssdm_op_SpecWire(in_reset, "ap_none", 0, 0, 0, 0, "", "", ""); if(*in_reset > 0) *reset_out = false; else *reset_out = true; }
void fir ( data_t *y, coef_t c[11], data_t x ) {_ssdm_SpecArrayDimSize(c,11); _ssdm_op_SpecResource(c, "", "RAM_1P_BRAM", "", -1, "", "", ""); # 52 "fir.c" _ssdm_op_SpecInterface(y, "ap_vld", 0, 0, 0, 0, "", "", ""); _ssdm_op_SpecInterface(x, "ap_vld", 0, 0, 0, 0, "", "", ""); static data_t shift_reg[11]; _ssdm_SpecArrayPartition( shift_reg, 1, "COMPLETE", 0, ""); # 59 "fir.c" acc_t acc; data_t data; int i; acc=0; Shift_Accum_Loop: for (i=11 -1;i>=0;i--) { _ssdm_Unroll(0,0,0, ""); # 65 "fir.c" if (i==0) { shift_reg[0]=x; data = x; } else { shift_reg[i]=shift_reg[i-1]; data = shift_reg[i]; } acc+=data*c[i];; } *y=acc; }