-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathgalapagos_packet.h
99 lines (77 loc) · 2.34 KB
/
galapagos_packet.h
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
#ifndef GALAPAGOS_PACKET_H
#define GALAPAGOS_PACKET_H
#include "hls_stream.h"
#include "ap_int.h"
#include "packet_size.h"
#if(PACKET_DATA_LENGTH == 64)
#define KEEP_ALL 0xff
#elif(PACKET_DATA_LENGTH == 512)
#define KEEP_ALL 0xffffffffffffffff
#endif
#ifdef CPU
namespace galapagos{
template <typename T>
struct stream_packet {
T data;
#ifdef PACKET_DEST_LENGTH
ap_uint <PACKET_DEST_LENGTH> dest;
#endif
#ifdef PACKET_LAST
ap_uint <1> last;
#endif
#ifdef PACKET_DEST_LENGTH
ap_uint <PACKET_DEST_LENGTH> id;
#endif
#ifdef PACKET_USER_LENGTH
ap_uint <PACKET_USER_LENGTH> user;
#endif
#ifdef PACKET_KEEP_LENGTH
ap_uint <PACKET_KEEP_LENGTH> keep;
#endif
};
}
typedef galapagos::stream_packet <ap_uint<PACKET_DATA_LENGTH> > galapagos_packet;
#define BYTESPERCYCLE 8
#define ID_LENGTH 8
#define DEST_LENGTH 8
#define MAX_SIZE 4096
#define MAX_LENGTH_BITS 16
#else //CPU
namespace galapagos{
template <typename T>
struct stream_packet {
T data;
#ifdef PACKET_DEST_LENGTH
ap_uint <PACKET_DEST_LENGTH> dest;
#endif
#ifdef PACKET_LAST
ap_uint <1> last;
#endif
#ifdef PACKET_DEST_LENGTH
ap_uint <PACKET_DEST_LENGTH> id;
#endif
#ifdef PACKET_USER_LENGTH
ap_uint <PACKET_USER_LENGTH> user;
#endif
#ifdef PACKET_KEEP_LENGTH
ap_uint <PACKET_KEEP_LENGTH> keep;
#endif
stream_packet() {}
};
template<typename T>
using interface = hls::stream<galapagos::stream_packet<T> >;
}
typedef galapagos::stream_packet<ap_uint<PACKET_DATA_LENGTH> > galapagos_packet;
typedef hls::stream<galapagos_packet> galapagos_interface;
inline ap_uint<PACKET_DATA_LENGTH> get_header(ap_uint<PACKET_DEST_LENGTH> _id, ap_uint<PACKET_DEST_LENGTH> _dest, ap_uint<PACKET_USER_LENGTH> _size){
#pragma HLS INLINE
ap_uint<PACKET_DATA_LENGTH> retVal;
retVal.range(PACKET_DATA_LENGTH - 1,PACKET_DEST_LENGTH+PACKET_DEST_LENGTH+PACKET_USER_LENGTH) = 0; //unused
retVal.range(PACKET_DEST_LENGTH+PACKET_DEST_LENGTH+PACKET_USER_LENGTH-1, PACKET_DEST_LENGTH+PACKET_USER_LENGTH) = _dest; //unused
retVal.range(PACKET_DEST_LENGTH+PACKET_USER_LENGTH-1, PACKET_USER_LENGTH) = _id;
//retVal.range(PACKET_USER_LENGTH - 1, 0) = _size << 3; //length in bytes
retVal.range(PACKET_USER_LENGTH - 1, 0) = _size; //length in bytes
return retVal;
}
#endif // if not CPU
#endif //GUARD