Repository navigation
Expand file tree
/
Copy pathpacket_types.hpp
More file actions
82 lines (66 loc) · 2.1 KB
/
Copy pathpacket_types.hpp
File metadata and controls
82 lines (66 loc) · 2.1 KB
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
#pragma once
#include <ap_axi_sdata.h>
#include <ap_int.h>
#include <hls_stream.h>
#include <cstdint>
#include "./src/tuple_tc_common.h"
template <int W>
using axis_pkt_t = ap_axiu<W, 0, 0, 0>;
static constexpr int STREAM520 = STREAM_LENGTH;
template <int W>
inline axis_pkt_t<W> make_axis_pkt(ap_uint<W> data, bool last = false) {
axis_pkt_t<W> v{};
v.data = data;
v.keep = -1;
v.strb = 0;
v.last = last ? 1 : 0;
return v;
}
inline axis_pkt_t<STREAM520> make_tc_pkt(ap_uint<512> payload, ap_uint<8> ctrl, bool last = false) {
axis_pkt_t<STREAM520> v{};
v.data = 0;
v.data.range(511, 0) = payload;
v.data.range(519, 512) = ctrl;
v.keep = -1;
v.strb = 0;
v.last = last ? 1 : 0;
return v;
}
inline ap_uint<8> make_ctrl(ap_uint<4> inst, ap_uint<3> encoded_parallelism = 0) {
ap_uint<8> ctrl = 0;
ctrl.range(6, 3) = inst;
ctrl.range(2, 0) = encoded_parallelism;
return ctrl;
}
inline ap_uint<64> pack_req(ap_uint<32> offset, ap_uint<32> length) {
ap_uint<64> v = 0;
v.range(31, 0) = offset;
v.range(63, 32) = length;
return v;
}
inline ap_uint<32> req_offset(ap_uint<64> v) {
return v.range(31, 0);
}
inline ap_uint<32> req_length(ap_uint<64> v) {
return v.range(63, 32);
}
inline ap_uint<128> pack_range(ap_uint<32> sA, ap_uint<32> nA, ap_uint<32> sB, ap_uint<32> nB) {
ap_uint<128> v = 0;
v.range(31, 0) = sA;
v.range(63, 32) = nA;
v.range(95, 64) = sB;
v.range(127, 96) = nB;
return v;
}
inline ap_uint<32> range_sA(ap_uint<128> v) { return v.range(31, 0); }
inline ap_uint<32> range_nA(ap_uint<128> v) { return v.range(63, 32); }
inline ap_uint<32> range_sB(ap_uint<128> v) { return v.range(95, 64); }
inline ap_uint<32> range_nB(ap_uint<128> v) { return v.range(127, 96); }
inline ap_uint<64> pack_merge_meta(ap_uint<32> number_a, bool forward_flag) {
ap_uint<64> v = 0;
v.range(31, 0) = number_a;
v.range(32, 32) = forward_flag ? 1 : 0;
return v;
}
inline ap_uint<32> merge_number_a(ap_uint<64> v) { return v.range(31, 0); }
inline bool merge_forward_flag(ap_uint<64> v) { return v[32] != 0; }