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");}
}
Пример #2
0
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);
}
Пример #3
0
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;
}
Пример #4
0
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;
}