// mnist_conv_nn10_hlss.h
// 2018/05/18 by marsee
//
#ifndef __MNIST_CONV_NN10_HLSS_H__
#define __MNIST_CONV_NN10_HLSS_H__
#include <ap_fixed.h>
template<int U, int TI, int TD>
struct float2_axis{
struct data {
float data0;
float data1;
} data;
ap_uint<1> keep;
ap_uint<1> strb;
ap_uint<U> user;
ap_uint<1> last;
ap_uint<TI> id;
ap_uint<TD> dest;
};
template<int U, int TI, int TD>
struct float1_axis{
struct data {
float data0;
} data;
ap_uint<1> keep;
ap_uint<1> strb;
ap_uint<U> user;
ap_uint<1> last;
ap_uint<TI> id;
ap_uint<TD> dest;
};
#define NUMBER_OF_OUTPUT_LAYER 10
typedef ap_uint<4> output_type;
typedef ap_fixed<12,7,AP_TRN,AP_WRAP> out_affine_type;
#endif
// mnist_conv_nn10_hlss.cpp
// 2018/05/18 by marsee
//
#include <ap_int.h>
#include <hls_stream.h>
#include <ap_axi_sdata.h>
#include <hls_video.h>
#include "layer_general.h"
#include "mnist_conv_nn10_hlss.h"
int input_layer(hls::stream<ap_axiu<8,1,1,1> >&ins,
hls::stream<ap_fixed_axis<9,1,1,1> >&outs);
int conv_layer1(hls::stream<ap_fixed_axis<9,1,1,1> >& ins,
hls::stream<ap_fixed_axis<10,3,10,1> >& outs);
int relu_conv1(hls::stream<ap_fixed_axis<10,3,10,1> >& ins,
hls::stream<ap_fixed_axis<10,3,10,1> >& outs);
int max_pooling(hls::stream<ap_fixed_axis<10,3,10,1> >& ins,
hls::stream<ap_fixed_axis<10,3,10,1> >& outs);
int affine_layer1(hls::stream<ap_fixed_axis<10,3,10,1> >& ins,
hls::stream<ap_fixed_axis<13,7,1,1> >& outs);
int relu_affine1(hls::stream<ap_fixed_axis<13,7,1,1> >& ins,
hls::stream<ap_fixed_axis<13,7,1,1> >& outs);
int affine_layer2(hls::stream<ap_fixed_axis<13,7,1,1> >& ins,
hls::stream<ap_fixed_axis<12,7,1,1> >& outs);
int output_layer(hls::stream<ap_fixed_axis<12,7,1,1> >& ins, output_type& output,
out_affine_type dot2[NUMBER_OF_OUTPUT_LAYER]);
int all_layers(hls::stream<ap_axiu<8,1,1,1> >& ins, output_type& output,
out_affine_type dot2[NUMBER_OF_OUTPUT_LAYER]){
#pragma HLS INTERFACE s_axilite port=output
#pragma HLS INTERFACE s_axilite port=dot2
#pragma HLS ARRAY_PARTITION variable=dot2 complete dim=1
#pragma HLS DATAFLOW
#pragma HLS INTERFACE s_axilite port=return
#pragma HLS INTERFACE axis register both port=ins
hls::stream<ap_fixed_axis<9,1,1,1> > outs_input_layer;
// #pragma HLS STREAM variable=outs_input_layer depth=560 dim=1
hls::stream<ap_fixed_axis<10,3,10,1> > outs_conv_layer;
// #pragma HLS STREAM variable=outs_conv_layer depth=312 dim=1
hls::stream<ap_fixed_axis<10,3,10,1> > outs_relu_conv1;
// #pragma HLS STREAM variable=outs_relu depth=312 dim=1
hls::stream<ap_fixed_axis<10,3,10,1> > outs_max_pooling;
// #pragma HLS STREAM variable=outs_max_pooling depth=78 dim=1
hls::stream<ap_fixed_axis<13,7,1,1> > outs_affine_layer1;
// #pragma HLS STREAM variable=outs_affine_layer1 depth=100 dim=1
hls::stream<ap_fixed_axis<13,7,1,1> > outs_relu_affine1;
// #pragma HLS STREAM variable=outs_relu_affine1 depth=100 dim=1
hls::stream<ap_fixed_axis<12,7,1,1> > outs_affine_layer2;
// #pragma HLS STREAM variable=outs_affine_layer2 depth=3 dim=1
input_layer(ins, outs_input_layer);
conv_layer1(outs_input_layer, outs_conv_layer);
relu_conv1(outs_conv_layer, outs_relu_conv1);
max_pooling(outs_relu_conv1, outs_max_pooling);
affine_layer1(outs_max_pooling, outs_affine_layer1);
relu_affine1(outs_affine_layer1, outs_relu_affine1);
affine_layer2(outs_relu_affine1, outs_affine_layer2);
output_layer(outs_affine_layer2, output, dot2);
return(0);
}
日 | 月 | 火 | 水 | 木 | 金 | 土 |
---|---|---|---|---|---|---|
- | - | - | - | - | 1 | 2 |
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
31 | - | - | - | - | - | - |