#include #include "myproject.h" #include "parameters.h" void myproject( hls::stream &x, hls::stream &layer40_out ) { // hls-fpga-machine-learning insert IO #pragma HLS INTERFACE axis port=x,layer40_out #pragma HLS DATAFLOW // hls-fpga-machine-learning insert load weights #ifndef __SYNTHESIS__ static bool loaded_weights = false; if (!loaded_weights) { nnet::load_weights_from_txt(w2, "w2.txt"); nnet::load_weights_from_txt(b2, "b2.txt"); nnet::load_weights_from_txt(w4, "w4.txt"); nnet::load_weights_from_txt(b4, "b4.txt"); nnet::load_weights_from_txt(w7, "w7.txt"); nnet::load_weights_from_txt(b7, "b7.txt"); nnet::load_weights_from_txt(w9, "w9.txt"); nnet::load_weights_from_txt(b9, "b9.txt"); nnet::load_weights_from_txt(w12, "w12.txt"); nnet::load_weights_from_txt(b12, "b12.txt"); nnet::load_weights_from_txt(w14, "w14.txt"); nnet::load_weights_from_txt(b14, "b14.txt"); nnet::load_weights_from_txt(w17, "w17.txt"); nnet::load_weights_from_txt(b17, "b17.txt"); nnet::load_weights_from_txt(w19, "w19.txt"); nnet::load_weights_from_txt(b19, "b19.txt"); nnet::load_weights_from_txt(w23, "w23.txt"); nnet::load_weights_from_txt(b23, "b23.txt"); nnet::load_weights_from_txt(w25, "w25.txt"); nnet::load_weights_from_txt(b25, "b25.txt"); nnet::load_weights_from_txt(w29, "w29.txt"); nnet::load_weights_from_txt(b29, "b29.txt"); nnet::load_weights_from_txt(w31, "w31.txt"); nnet::load_weights_from_txt(b31, "b31.txt"); nnet::load_weights_from_txt(w35, "w35.txt"); nnet::load_weights_from_txt(b35, "b35.txt"); nnet::load_weights_from_txt(w37, "w37.txt"); nnet::load_weights_from_txt(b37, "b37.txt"); nnet::load_weights_from_txt(w39, "w39.txt"); nnet::load_weights_from_txt(b39, "b39.txt"); loaded_weights = true; } #endif // **************************************** // NETWORK INSTANTIATION // **************************************** // hls-fpga-machine-learning insert layers hls::stream layer44_out("layer44_out"); #pragma HLS STREAM variable=layer44_out depth=4356 hls::stream layer2_out("layer2_out"); #pragma HLS STREAM variable=layer2_out depth=4096 hls::stream layer3_out("layer3_out"); #pragma HLS STREAM variable=layer3_out depth=4096 hls::stream layer45_out("layer45_out"); #pragma HLS STREAM variable=layer45_out depth=4356 hls::stream layer4_out("layer4_out"); #pragma HLS STREAM variable=layer4_out depth=4096 hls::stream layer5_out("layer5_out"); #pragma HLS STREAM variable=layer5_out depth=4096 hls::stream layer41_cpy1("layer41_cpy1"); #pragma HLS STREAM variable=layer41_cpy1 depth=4096 hls::stream layer41_cpy2("layer41_cpy2"); #pragma HLS STREAM variable=layer41_cpy2 depth=4096 hls::stream layer6_out("layer6_out"); #pragma HLS STREAM variable=layer6_out depth=1024 hls::stream layer46_out("layer46_out"); #pragma HLS STREAM variable=layer46_out depth=1156 hls::stream layer7_out("layer7_out"); #pragma HLS STREAM variable=layer7_out depth=1024 hls::stream layer8_out("layer8_out"); #pragma HLS STREAM variable=layer8_out depth=1024 hls::stream layer47_out("layer47_out"); #pragma HLS STREAM variable=layer47_out depth=1156 hls::stream layer9_out("layer9_out"); #pragma HLS STREAM variable=layer9_out depth=1024 hls::stream layer10_out("layer10_out"); #pragma HLS STREAM variable=layer10_out depth=1024 hls::stream layer42_cpy1("layer42_cpy1"); #pragma HLS STREAM variable=layer42_cpy1 depth=1024 hls::stream layer42_cpy2("layer42_cpy2"); #pragma HLS STREAM variable=layer42_cpy2 depth=1024 hls::stream layer11_out("layer11_out"); #pragma HLS STREAM variable=layer11_out depth=256 hls::stream layer48_out("layer48_out"); #pragma HLS STREAM variable=layer48_out depth=324 hls::stream layer12_out("layer12_out"); #pragma HLS STREAM variable=layer12_out depth=256 hls::stream layer13_out("layer13_out"); #pragma HLS STREAM variable=layer13_out depth=256 hls::stream layer49_out("layer49_out"); #pragma HLS STREAM variable=layer49_out depth=324 hls::stream layer14_out("layer14_out"); #pragma HLS STREAM variable=layer14_out depth=256 hls::stream layer15_out("layer15_out"); #pragma HLS STREAM variable=layer15_out depth=256 hls::stream layer43_cpy1("layer43_cpy1"); #pragma HLS STREAM variable=layer43_cpy1 depth=256 hls::stream layer43_cpy2("layer43_cpy2"); #pragma HLS STREAM variable=layer43_cpy2 depth=256 hls::stream layer16_out("layer16_out"); #pragma HLS STREAM variable=layer16_out depth=64 hls::stream layer50_out("layer50_out"); #pragma HLS STREAM variable=layer50_out depth=100 hls::stream layer17_out("layer17_out"); #pragma HLS STREAM variable=layer17_out depth=64 hls::stream layer18_out("layer18_out"); #pragma HLS STREAM variable=layer18_out depth=64 hls::stream layer51_out("layer51_out"); #pragma HLS STREAM variable=layer51_out depth=100 hls::stream layer19_out("layer19_out"); #pragma HLS STREAM variable=layer19_out depth=64 hls::stream layer20_out("layer20_out"); #pragma HLS STREAM variable=layer20_out depth=64 hls::stream layer21_out("layer21_out"); #pragma HLS STREAM variable=layer21_out depth=256 hls::stream layer22_out("layer22_out"); #pragma HLS STREAM variable=layer22_out depth=256 hls::stream layer52_out("layer52_out"); #pragma HLS STREAM variable=layer52_out depth=324 hls::stream layer23_out("layer23_out"); #pragma HLS STREAM variable=layer23_out depth=256 hls::stream layer24_out("layer24_out"); #pragma HLS STREAM variable=layer24_out depth=256 hls::stream layer53_out("layer53_out"); #pragma HLS STREAM variable=layer53_out depth=324 hls::stream layer25_out("layer25_out"); #pragma HLS STREAM variable=layer25_out depth=256 hls::stream layer26_out("layer26_out"); #pragma HLS STREAM variable=layer26_out depth=256 hls::stream layer27_out("layer27_out"); #pragma HLS STREAM variable=layer27_out depth=1024 hls::stream layer28_out("layer28_out"); #pragma HLS STREAM variable=layer28_out depth=1024 hls::stream layer54_out("layer54_out"); #pragma HLS STREAM variable=layer54_out depth=1156 hls::stream layer29_out("layer29_out"); #pragma HLS STREAM variable=layer29_out depth=1024 hls::stream layer30_out("layer30_out"); #pragma HLS STREAM variable=layer30_out depth=1024 hls::stream layer55_out("layer55_out"); #pragma HLS STREAM variable=layer55_out depth=1156 hls::stream layer31_out("layer31_out"); #pragma HLS STREAM variable=layer31_out depth=1024 hls::stream layer32_out("layer32_out"); #pragma HLS STREAM variable=layer32_out depth=1024 hls::stream layer33_out("layer33_out"); #pragma HLS STREAM variable=layer33_out depth=4096 hls::stream layer34_out("layer34_out"); #pragma HLS STREAM variable=layer34_out depth=4096 hls::stream layer56_out("layer56_out"); #pragma HLS STREAM variable=layer56_out depth=4356 hls::stream layer35_out("layer35_out"); #pragma HLS STREAM variable=layer35_out depth=4096 hls::stream layer36_out("layer36_out"); #pragma HLS STREAM variable=layer36_out depth=4096 hls::stream layer57_out("layer57_out"); #pragma HLS STREAM variable=layer57_out depth=4356 hls::stream layer37_out("layer37_out"); #pragma HLS STREAM variable=layer37_out depth=4096 hls::stream layer38_out("layer38_out"); #pragma HLS STREAM variable=layer38_out depth=4096 hls::stream layer39_out("layer39_out"); #pragma HLS STREAM variable=layer39_out depth=4096 nnet::zeropad2d_cl(x, layer44_out); // zp2d_conv1_0 nnet::conv_2d_cl(layer44_out, layer2_out, w2, b2); // conv1_0 nnet::relu(layer2_out, layer3_out); // conv1_1 nnet::zeropad2d_cl(layer3_out, layer45_out); // zp2d_conv1_2 nnet::conv_2d_cl(layer45_out, layer4_out, w4, b4); // conv1_2 nnet::relu(layer4_out, layer5_out); // conv1_3 nnet::clone_stream(layer5_out, layer41_cpy1, layer41_cpy2); // clone_conv1_3 nnet::pooling2d_cl(layer41_cpy1, layer6_out); // pool1 nnet::zeropad2d_cl(layer6_out, layer46_out); // zp2d_conv2_0 nnet::conv_2d_cl(layer46_out, layer7_out, w7, b7); // conv2_0 nnet::relu(layer7_out, layer8_out); // conv2_1 nnet::zeropad2d_cl(layer8_out, layer47_out); // zp2d_conv2_2 nnet::conv_2d_cl(layer47_out, layer9_out, w9, b9); // conv2_2 nnet::relu(layer9_out, layer10_out); // conv2_3 nnet::clone_stream(layer10_out, layer42_cpy1, layer42_cpy2); // clone_conv2_3 nnet::pooling2d_cl(layer42_cpy1, layer11_out); // pool2 nnet::zeropad2d_cl(layer11_out, layer48_out); // zp2d_conv3_0 nnet::conv_2d_cl(layer48_out, layer12_out, w12, b12); // conv3_0 nnet::relu(layer12_out, layer13_out); // conv3_1 nnet::zeropad2d_cl(layer13_out, layer49_out); // zp2d_conv3_2 nnet::conv_2d_cl(layer49_out, layer14_out, w14, b14); // conv3_2 nnet::relu(layer14_out, layer15_out); // conv3_3 nnet::clone_stream(layer15_out, layer43_cpy1, layer43_cpy2); // clone_conv3_3 nnet::pooling2d_cl(layer43_cpy1, layer16_out); // pool3 nnet::zeropad2d_cl(layer16_out, layer50_out); // zp2d_conv4_0 nnet::conv_2d_cl(layer50_out, layer17_out, w17, b17); // conv4_0 nnet::relu(layer17_out, layer18_out); // conv4_1 nnet::zeropad2d_cl(layer18_out, layer51_out); // zp2d_conv4_2 nnet::conv_2d_cl(layer51_out, layer19_out, w19, b19); // conv4_2 nnet::relu(layer19_out, layer20_out); // conv4_3 nnet::resize_nearest(layer20_out, layer21_out); // up3 nnet::concatenate3d(layer21_out, layer43_cpy2, layer22_out); // cat nnet::zeropad2d_cl(layer22_out, layer52_out); // zp2d_deconv3_0 nnet::conv_2d_cl(layer52_out, layer23_out, w23, b23); // deconv3_0 nnet::relu(layer23_out, layer24_out); // deconv3_1 nnet::zeropad2d_cl(layer24_out, layer53_out); // zp2d_deconv3_2 nnet::conv_2d_cl(layer53_out, layer25_out, w25, b25); // deconv3_2 nnet::relu(layer25_out, layer26_out); // deconv3_3 nnet::resize_nearest(layer26_out, layer27_out); // up2 nnet::concatenate3d(layer27_out, layer42_cpy2, layer28_out); // cat_1 nnet::zeropad2d_cl(layer28_out, layer54_out); // zp2d_deconv2_0 nnet::conv_2d_cl(layer54_out, layer29_out, w29, b29); // deconv2_0 nnet::relu(layer29_out, layer30_out); // deconv2_1 nnet::zeropad2d_cl(layer30_out, layer55_out); // zp2d_deconv2_2 nnet::conv_2d_cl(layer55_out, layer31_out, w31, b31); // deconv2_2 nnet::relu(layer31_out, layer32_out); // deconv2_3 nnet::resize_nearest(layer32_out, layer33_out); // up1 nnet::concatenate3d(layer33_out, layer41_cpy2, layer34_out); // cat_2 nnet::zeropad2d_cl(layer34_out, layer56_out); // zp2d_deconv1_0 nnet::conv_2d_cl(layer56_out, layer35_out, w35, b35); // deconv1_0 nnet::relu(layer35_out, layer36_out); // deconv1_1 nnet::zeropad2d_cl(layer36_out, layer57_out); // zp2d_deconv1_2 nnet::conv_2d_cl(layer57_out, layer37_out, w37, b37); // deconv1_2 nnet::relu(layer37_out, layer38_out); // deconv1_3 nnet::pointwise_conv_2d_cl(layer38_out, layer39_out, w39, b39); // final_conv nnet::sigmoid(layer39_out, layer40_out); // sigmoid }